public ForecastViewModel(Forecast forecast)
        {   
            Forecast = forecast;
            Date = forecast.Date;
            Weather = forecast.Weather;
            Title = string.Format(forecast.Date.ToString("dddd d{0} MMMM"), Date.DaySuffix());
            IssuedBy = string.Format("Issued by The Met Office on {0} at {1}",
                string.Format(forecast.Date.ToString("d{0} MMM"), Date.DaySuffix()),
                string.Format(forecast.Date.ToString("hh:ss")));

            if (forecast.WeatherPPN != null && forecast.WeatherPPN.WxPeriods != null)
            {
                int code = forecast.WeatherPPN.WxPeriods
                    .Where(x => x.No > 2 && x.No < 7)
                    .Select(x => x.Weather)
                    .Mode();

                var weatherCode = WeatherCodes.Instance.FirstOrDefault(x => x.Code == code);

                if (weatherCode != null && !string.IsNullOrEmpty(weatherCode.Icon))
                    Icon = weatherCode.Icon;

                WeatherPeriods = forecast.WeatherPPN.WxPeriods
                    .Select(period => new WeatherPeriodViewModel(period))
                    .ToList();
            }
        } 
        private Forecast ParseForecast(JToken token, DateTime datetime)
        {
            var forecast = new Forecast
            {
                Date = datetime,
                Weather = (string)token["Weather"],
                Visibility = (string)token["Visibility"],
                HillFog = (string)token["HillFog"],
                MaxWindLevel = (string)token["MaxWindLevel"],
                MaxWind = (string)token["MaxWind"],
                TempLowLevel = (string)token["TempLowLevel"],
                TempHighLevel = (string)token["TempHighLevel"],
                FreezingLevel = (string)token["FreezingLevel"]                             
            };

            if (token["WeatherPPN"] != null)
            {
                var wxPeriod = token["WeatherPPN"]["WxPeriod"];

                forecast.WeatherPPN = new WeatherPPN
                { 
                    WxPeriods = wxPeriod.Select(period =>
                            new WxPeriod
                        {
                            No = (short)period["period"],
                            Period = (string)period["Period"],
                            Weather = (int)period["Weather"],
                            Probability = (string)period["Probability"],
                            PpnType = (string)period["Ppn_type"]
                            }).ToArray()
                }; 
            }

            return forecast;
        }