void loadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            try
            {
                using (var reader = new StreamReader(e.Result))
                {
                    String       json     = reader.ReadToEnd();
                    JObject      o        = JObject.Parse(json);
                    Menu.Venue[] tempVens = new Menu.Venue[30];
                    int          i        = 0;

                    String pass = (String)o["PASSOVER"];
                    if (pass.Equals("true"))
                    {
                        (App.Current as App).passover = true;
                    }
                    else
                    {
                        (App.Current as App).passover = false;
                    }

                    if (o[meal.Text.ToUpper()] != null && o[meal.Text.ToUpper()].HasValues)
                    {
                        foreach (JToken venue in o[meal.Text.ToUpper()].Children())
                        {
                            //TODO allocate smarter
                            Menu.Venue.Dish[] tempDishes = new Menu.Venue.Dish[60];
                            String            temp       = venue.ToString().Substring(1, 40);
                            String            venName    = temp.Remove(temp.IndexOf("\""));
                            int j = 0;
                            foreach (JToken dish in venue.Children().Children())
                            {
                                bool ovolacto, vegan, halal, passover, hasNutrition, gf;

                                String name = (String)dish["name"];

                                String ovo = (String)dish["ovolacto"];
                                if (ovo.Equals("true"))
                                {
                                    ovolacto = true;
                                }
                                else
                                {
                                    ovolacto = false;
                                }

                                String veg = (String)dish["vegan"];
                                if (veg.Equals("true"))
                                {
                                    vegan = true;
                                }
                                else
                                {
                                    vegan = false;
                                }

                                if ((App.Current as App).passover)
                                {
                                    String passO = (String)dish["passover"];
                                    if (passO.Equals("true"))
                                    {
                                        passover = true;
                                    }
                                    else
                                    {
                                        passover = false;
                                    }
                                }
                                else
                                {
                                    passover = false;
                                }

                                String hal = (String)dish["halal"];
                                if (hal.Equals("true"))
                                {
                                    halal = true;
                                }
                                else
                                {
                                    halal = false;
                                }

                                String glutenF = (String)dish["gluten_free"];
                                if (glutenF.Equals("true"))
                                {
                                    gf = true;
                                }
                                else
                                {
                                    gf = false;
                                }

                                Newtonsoft.Json.Linq.JValue dummy = new Newtonsoft.Json.Linq.JValue(false);
                                if (dummy.GetType().FullName.Equals(dish["nutrition"].GetType().FullName))
                                {
                                    hasNutrition    = false;
                                    tempDishes[j++] = new Menu.Venue.Dish(name, hasNutrition, ovolacto, vegan, passover, halal, gf);
                                }
                                else
                                {
                                    hasNutrition = true;
                                    float[] nutrition = new float[20];
                                    int     k         = 0;
                                    foreach (JToken child in dish["nutrition"])
                                    {
                                        nutrition[k++] = (float)child;
                                    }
                                    tempDishes[j++] = new Menu.Venue.Dish(name, hasNutrition, ovolacto, vegan, passover, halal, gf, nutrition);
                                }
                            }
                            tempVens[i++] = new Menu.Venue(venName, tempDishes);
                        }
                    }
                    else
                    {
                        listBox.Items.Add(new Menu.Venue("No menu available \nfor selected meal.", null));
                        return;
                    }
                    menu = new Menu(tempVens);
                }

                bool pFlag, oFlag, vFlag, gfFlag, compositeBool;
                if ((App.Current as App).passover && (App.Current as App).passoverFilter)
                {
                    pFlag = true;
                }
                else
                {
                    pFlag = false;
                }
                if ((App.Current as App).ovoFilter)
                {
                    oFlag = true;
                }
                else
                {
                    oFlag = false;
                }
                if ((App.Current as App).veganFilter)
                {
                    vFlag = true;
                }
                else
                {
                    vFlag = false;
                }
                if ((App.Current as App).gfFilter)
                {
                    gfFlag = true;
                }
                else
                {
                    gfFlag = false;
                }

                foreach (Menu.Venue ven in menu.venues)
                {
                    if (ven != null)
                    {
                        bool added = false;
                        listBox.Items.Add(ven);
                        foreach (Menu.Venue.Dish dish in ven.dishes)
                        {
                            if (dish != null)
                            {
                                if (pFlag)
                                {
                                    if (gfFlag && oFlag)
                                    {
                                        compositeBool = (dish.passover && (dish.vegan || dish.ovolacto) && dish.gf);
                                    }
                                    else if (gfFlag && vFlag)
                                    {
                                        compositeBool = (dish.passover && dish.vegan && dish.gf);
                                    }
                                    else if (oFlag)
                                    {
                                        compositeBool = (dish.passover && (dish.vegan || dish.ovolacto));
                                    }
                                    else if (vFlag)
                                    {
                                        compositeBool = (dish.passover && dish.vegan);
                                    }
                                    else if (gfFlag)
                                    {
                                        compositeBool = (dish.passover && dish.gf);
                                    }
                                    else
                                    {
                                        compositeBool = dish.passover;
                                    }
                                }
                                else
                                if (gfFlag && oFlag)
                                {
                                    compositeBool = ((dish.vegan || dish.ovolacto) && dish.gf);
                                }
                                else if (gfFlag && vFlag)
                                {
                                    compositeBool = (dish.vegan && dish.gf);
                                }
                                else if (oFlag)
                                {
                                    compositeBool = (dish.vegan || dish.ovolacto);
                                }
                                else if (vFlag)
                                {
                                    compositeBool = dish.vegan;
                                }
                                else if (gfFlag)
                                {
                                    compositeBool = dish.gf;
                                }
                                else
                                {
                                    compositeBool = true;
                                }

                                if (compositeBool)
                                {
                                    listBox.Items.Add(dish);
                                    added = true;
                                }
                            }
                        }
                        if (!added)
                        {
                            listBox.Items.Remove(ven);
                        }
                        else
                        {
                            listBox.Items.Add(new Menu.Venue("\t", null));
                        }
                    }
                }
                textBlock1.Visibility = Visibility.Collapsed;
            }
            catch (Exception except)
            {
                textBlock1.Visibility = Visibility.Collapsed;
                listBox.Items.Add(new Menu.Venue("No menu available \nfor selected meal", null));
                Console.WriteLine("Parsing exception: {0}", except);
            }
        }
        void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            try
            {
                using (var reader = new StreamReader(e.Result))
                {
                    String json = reader.ReadToEnd();
                    JObject o = JObject.Parse(json);
                    Menu.Venue[] tempVens = new Menu.Venue[30];
                    int i = 0;

                    if (o[meal.Text.ToUpper()] != null && o[meal.Text.ToUpper()].HasValues)
                        foreach (JToken venue in o[meal.Text.ToUpper()].Children())
                        {
                            Menu.Venue.Dish[] tempDishes = new Menu.Venue.Dish[60];
                            String temp = venue.ToString().Substring(1, 40);
                            String venName = temp.Remove(temp.IndexOf("\""));
                            int j = 0;
                            foreach (JToken dish in venue.Children().Children())
                            {
                                bool ovolacto, vegan, halal, passover, hasNutrition;

                                String name = (String)dish["name"];

                                String ovo = (String)dish["ovolacto"];
                                if (ovo.Equals("true"))
                                    ovolacto = true;
                                else
                                    ovolacto = false;

                                String veg = (String)dish["vegan"];
                                if (veg.Equals("true"))
                                    vegan = true;
                                else
                                    vegan = false;

                                String passO = (String)dish["passover"];
                                if (passO.Equals("true"))
                                    passover = true;
                                else
                                    passover = false;

                                String hal = (String)dish["halal"];
                                if (hal.Equals("true"))
                                    halal = true;
                                else
                                    halal = false;

                                Newtonsoft.Json.Linq.JValue dummy = new Newtonsoft.Json.Linq.JValue(false);
                                if (dummy.GetType().FullName.Equals(dish["nutrition"].GetType().FullName))
                                {
                                    hasNutrition = false;
                                    tempDishes[j++] = new Menu.Venue.Dish(name, hasNutrition, ovolacto, vegan, passover, halal);
                                }
                                else
                                {
                                    hasNutrition = true;
                                    float[] nutrition = new float[20];
                                    int k = 0;
                                    foreach (JToken child in dish["nutrition"])
                                        nutrition[k++] = (float)child;
                                    tempDishes[j++] = new Menu.Venue.Dish(name, hasNutrition, ovolacto, vegan, passover, halal, nutrition);
                                }

                            }
                            tempVens[i++] = new Menu.Venue(venName, tempDishes); ;
                        }
                    else
                        listBox.Items.Add(new Menu.Venue("No menu available \nfor selected meal", null));
                    menu = new Menu(tempVens);
                }
                textBlock1.Visibility = Visibility.Collapsed;
                if ((App.Current as App).ovoFilter)
                {
                    foreach (Menu.Venue ven in menu.venues)
                        if (ven != null)
                        {
                            bool added = false;
                            listBox.Items.Add(ven);
                            foreach (Menu.Venue.Dish dish in ven.dishes)
                                if (dish != null && (dish.ovolacto || dish.vegan))
                                {
                                    listBox.Items.Add(dish);
                                    added = true;
                                }
                            if (!added)
                                listBox.Items.Remove(ven);
                            else
                                listBox.Items.Add(new Menu.Venue("\t", null));
                        }
                }
                else if ((App.Current as App).veganFilter)
                {
                    foreach (Menu.Venue ven in menu.venues)
                        if (ven != null)
                        {
                            bool added = false;
                            listBox.Items.Add(ven);
                            foreach (Menu.Venue.Dish dish in ven.dishes)
                                if (dish != null && (dish.vegan))
                                {
                                    listBox.Items.Add(dish);
                                    added = true;
                                }
                            if (!added)
                                listBox.Items.Remove(ven);
                            else
                                listBox.Items.Add(new Menu.Venue("\t", null));
                        }
                }
                else
                    foreach (Menu.Venue ven in menu.venues)
                        if (ven != null)
                        {
                            listBox.Items.Add(ven);
                            foreach (Menu.Venue.Dish dish in ven.dishes)
                                if (dish != null)
                                    listBox.Items.Add(dish);
                            listBox.Items.Add(new Menu.Venue("\t", null));
                        }
            }
            catch (Exception execpt)
            {
                textBlock1.Visibility = Visibility.Collapsed;
                listBox.Items.Add(new Menu.Venue("No menu available \nfor selected meal", null));
            }
        }