/// <summary>
        /// Common method to get a list of titles from the IMDb app interface (JSON)
        /// </summary>
        /// <param name="session"></param>
        /// <param name="chart">name of the chart</param>
        /// <returns>a collection of titles</returns>
        internal static List<TitleReference> GetChart(Session session, string chart)
        {
            List<TitleReference> titles = new List<TitleReference>();

            string data = GetResponseFromEndpoint(session, chart);
            IMDbResponse<IMDbSingleList<IMDbList<IMDbTitle>>> response = JsonConvert.DeserializeObject<IMDbResponse<IMDbSingleList<IMDbList<IMDbTitle>>>>(data);
            foreach (IMDbTitle item in response.Data.List.Items)
            {
                TitleReference title = new TitleReference();
                title.session = session;
                title.FillFrom(item);

                titles.Add(title);
            }

            return titles;
        }
        /// <summary>
        /// Common method to get a list of titles from an IMDb trailer JSON feed
        /// </summary>
        /// <param name="session"></param>
        /// <param name="path">path to JSON feed</param>
        /// <returns>a collection of titles</returns>
        internal static List<TitleReference> GetTrailers(Session session, string uri, int token)
        {
            string url = (token > 0) ? uri + "&token=" + token : uri;
            
            List<TitleReference> titles = new List<TitleReference>();
            string response = session.MakeRequest(url);
            //JObject parsedResults = JObject.Parse(response);

            
            var imdbResponse = JsonConvert.DeserializeObject<OnlineVideos.Sites.apondman.IMDb.DTO.IMDbResponse>(response);

            HashSet<string> duplicateFilter = new HashSet<string>();
            foreach (var item in imdbResponse.model.items)
            {
                var titleId = item.display.titleId;
                if (duplicateFilter.Contains(titleId))
                {
                    continue;
                }

                duplicateFilter.Add(titleId);
                
                TitleReference title = new TitleReference();
                title.session = session;
                title.FillFrom(item);

                titles.Add(title);
            }

            return titles;
        }
        /// <summary>
        /// Common method to get a list of titles from an IMDb mobile JSON feed
        /// </summary>
        /// <param name="session"></param>
        /// <param name="path">path to JSON feed</param>
        /// <returns>a collection of titles</returns>
        internal static List<TitleReference> GetList(Session session, string path)
        {
            List<TitleReference> titles = new List<TitleReference>();

            string data = GetResponseFromEndpoint(session, path);

            IMDbMobileResponse<List<IMDbTitleMobile>> response = JsonConvert.DeserializeObject<IMDbMobileResponse<List<IMDbTitleMobile>>>(data);

            DateTime releaseDateHeader = DateTime.MinValue;
            foreach (IMDbTitleMobile item in response.Data)
            {
                if (item.URL == null)
                {
                    if (item.ReleaseDate > DateTime.MinValue)
                    {
                        releaseDateHeader = item.ReleaseDate;
                    }
                    continue;
                }
                TitleReference title = new TitleReference();
                title.session = session;
                title.FillFrom(item);
                title.ReleaseDate = releaseDateHeader;

                titles.Add(title);
            }

            return titles;
        }