public WeatherData GetWeatherData(string locId, bool force)
        {
            var result = new WeatherData();

            if (String.IsNullOrEmpty(locId))
            {
                return(null);
            }
            try
            {
                if (!LoadWeatherData(locId, force, false))
                {
                    return(null);
                }
                var data = new XmlDocument();
                data.Load(_cacheDir + "/" + locId + ".xml");
                result.TempUnit     = data.SelectSingleNode("//weather/head/ut").InnerText;
                result.LocationName = data.SelectSingleNode("//weather/loc/dnam").InnerText;
                result.Today        = new WeatherCurrentDetail
                {
                    Temperature = data.SelectSingleNode("//weather/cc/tmp").InnerText,
                    Icon        = data.SelectSingleNode("//weather/cc/icon").InnerText
                };

                result.PromoLinks.Clear();
                var elements = data.SelectNodes("//weather/lnks/link");
                if (elements != null)
                {
                    foreach (XmlElement element in elements)
                    {
                        var temp = new WeatherLink
                        {
                            Url  = new Uri(element.SelectSingleNode("l").InnerText),
                            Name = element.SelectSingleNode("t").InnerText
                        };
                        result.PromoLinks.Add(temp);
                    }
                }


                result.Forecast.Clear();
                return(result);
            }
            catch (XmlException) { }
            catch (XPathException) { }
            catch (IOException) { }
            catch (NullReferenceException) { }
            return(null);
        }
        public WeatherData GetForecastWeatherData(string locId, bool force)
        {
            var result = new WeatherData();
            if (String.IsNullOrEmpty(locId))
                return null;
            try
            {
                if (!LoadWeatherData(locId, force, true))
                    return null;
                var data = new XmlDocument();
                data.Load(_cacheDir + "/" + locId + ".forecast.xml");
                result.TempUnit = data.SelectSingleNode("//weather/head/ut").InnerText;
                result.LocationName = data.SelectSingleNode("//weather/loc/dnam").InnerText;
                result.Today = new WeatherCurrentDetail
                {
                    Temperature = data.SelectSingleNode("//weather/cc/tmp").InnerText,
                    Icon = data.SelectSingleNode("//weather/cc/icon").InnerText
                };

                result.PromoLinks.Clear();
                var elements = data.SelectNodes("//weather/lnks/link");
                if (elements != null)
                    foreach (XmlElement element in elements)
                    {
                        var temp = new WeatherLink
                        {
                            Url = new Uri(element.SelectSingleNode("l").InnerText),
                            Name = element.SelectSingleNode("t").InnerText
                        };
                        result.PromoLinks.Add(temp);
                    }

                result.Forecast.Clear();
                elements = data.SelectNodes("//weather/dayf/day");
                if (elements != null)
                    foreach (XmlElement element in elements)
                    {
                        var temp = new WeatherForecastDetail
                        {
                            DayDiff = Convert.ToInt32("0" + element.GetAttribute("d"),CultureInfo.InvariantCulture),
                            DayName = element.GetAttribute("t"),
                            DayDate = element.GetAttribute("dt"),
                            DayIcon = element.SelectSingleNode("part[@p='d']").SelectSingleNode("icon").InnerText,
                            NightIcon = element.SelectSingleNode("part[@p='n']").SelectSingleNode("icon").InnerText,
                            MaxTemp = element.SelectSingleNode("hi").InnerText,
                            LowTemp = element.SelectSingleNode("low").InnerText
                        };
                        result.Forecast.Add(temp);
                    }
                return result;
            }
            catch (XmlException) { }
            catch (XPathException) { }
            catch (IOException) { }
            catch (NullReferenceException) { }
            return null;
        }
        public WeatherData GetWeatherData(string locId, bool force)
        {
            var result = new WeatherData();
            if (String.IsNullOrEmpty(locId))
                return null;
            try
            {
                if (!LoadWeatherData(locId,force,false))
                    return null;
                var data = new XmlDocument();
                data.Load(_cacheDir + "/" + locId + ".xml");
                result.TempUnit = data.SelectSingleNode("//weather/head/ut").InnerText;
                result.LocationName = data.SelectSingleNode("//weather/loc/dnam").InnerText;
                result.Today = new WeatherCurrentDetail
                {
                    Temperature = data.SelectSingleNode("//weather/cc/tmp").InnerText,
                    Icon = data.SelectSingleNode("//weather/cc/icon").InnerText
                };

                result.PromoLinks.Clear();
                var elements = data.SelectNodes("//weather/lnks/link");
                if (elements != null)
                    foreach (XmlElement element in elements)
                    {
                        var temp = new WeatherLink
                                        {
                                            Url = new Uri(element.SelectSingleNode("l").InnerText),
                                            Name = element.SelectSingleNode("t").InnerText
                                        };
                        result.PromoLinks.Add(temp);
                    }
                

                result.Forecast.Clear();
                return result;
            }
            catch (XmlException) { }
            catch (XPathException) { }
            catch (IOException) { }
            catch (NullReferenceException) { }
            return null;
        }
        public WeatherData GetForecastWeatherData(string locId, bool force)
        {
            var result = new WeatherData();

            if (String.IsNullOrEmpty(locId))
            {
                return(null);
            }
            try
            {
                if (!LoadWeatherData(locId, force, true))
                {
                    return(null);
                }
                var data = new XmlDocument();
                data.Load(_cacheDir + "/" + locId + ".forecast.xml");
                result.TempUnit     = data.SelectSingleNode("//weather/head/ut").InnerText;
                result.LocationName = data.SelectSingleNode("//weather/loc/dnam").InnerText;
                result.Today        = new WeatherCurrentDetail
                {
                    Temperature = data.SelectSingleNode("//weather/cc/tmp").InnerText,
                    Icon        = data.SelectSingleNode("//weather/cc/icon").InnerText
                };

                result.PromoLinks.Clear();
                var elements = data.SelectNodes("//weather/lnks/link");
                if (elements != null)
                {
                    foreach (XmlElement element in elements)
                    {
                        var temp = new WeatherLink
                        {
                            Url  = new Uri(element.SelectSingleNode("l").InnerText),
                            Name = element.SelectSingleNode("t").InnerText
                        };
                        result.PromoLinks.Add(temp);
                    }
                }

                result.Forecast.Clear();
                elements = data.SelectNodes("//weather/dayf/day");
                if (elements != null)
                {
                    foreach (XmlElement element in elements)
                    {
                        var temp = new WeatherForecastDetail
                        {
                            DayDiff   = Convert.ToInt32("0" + element.GetAttribute("d"), CultureInfo.InvariantCulture),
                            DayName   = element.GetAttribute("t"),
                            DayDate   = element.GetAttribute("dt"),
                            DayIcon   = element.SelectSingleNode("part[@p='d']").SelectSingleNode("icon").InnerText,
                            NightIcon = element.SelectSingleNode("part[@p='n']").SelectSingleNode("icon").InnerText,
                            MaxTemp   = element.SelectSingleNode("hi").InnerText,
                            LowTemp   = element.SelectSingleNode("low").InnerText
                        };
                        result.Forecast.Add(temp);
                    }
                }
                return(result);
            }
            catch (XmlException) { }
            catch (XPathException) { }
            catch (IOException) { }
            catch (NullReferenceException) { }
            return(null);
        }