public BeatPortTrackDataSearch(BeatportTrackDataSource source, Uri searchUri)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (searchUri == null)
            {
                throw new ArgumentNullException("searchUri");
            }

            this.Source         = source;
            this.HasMoreResults = false; //sets HasMoreResults to false initaly
            this._query         = searchUri.AbsoluteUri;


            //Beatport.com URL regex
            System.Text.RegularExpressions.Regex trackURIRegex   = new System.Text.RegularExpressions.Regex(@"^http://www.beatport.com/track/(.*)/(\d*)$");
            System.Text.RegularExpressions.Regex releaseURIRegex = new System.Text.RegularExpressions.Regex(@"^http://www.beatport.com/release/(.*)/(\d*)$");


            //attempts to match URL
            var trackMatch   = trackURIRegex.Match(searchUri.AbsoluteUri);
            var releaseMatch = releaseURIRegex.Match(searchUri.AbsoluteUri);


            if (trackMatch.Success)
            {
                int trackId = System.Convert.ToInt32(trackMatch.Groups[2].Value);

                var trackResults = GetTrackData(trackId);

                var track = GetTrack(trackId, this.Source.Host);

                _trackData = new List <TrackData>();
                _trackData.Add(track);
            }
            else if (releaseMatch.Success)
            {
                int releaseId = System.Convert.ToInt32(releaseMatch.Groups[2].Value);

                var releaseResults = GetReleaseData(releaseId);


                _trackData = new List <TrackData>();

                var releaseData = releaseResults["results"]["release"];

                foreach (Dictionary <string, dynamic> trackData in releaseResults["results"]["tracks"])
                {
                    var newTrack = ParseResponse(trackData, releaseData, this.Source.Host);

                    _trackData.Add(newTrack);
                }
            }
            else
            {
                throw new ArgumentException("Invalid Beatport track URL format", "searchUri");
            }
        }
        public BeatPortTrackDataSearch(BeatportTrackDataSource source, string query, int trackPerPage)
        {
            HasMoreResults = true;
            _query         = query;
            _trackPerPage  = trackPerPage;
            _currentPage   = 1;
            _trackData     = new List <TrackData>();

            Source = source;



            LoadMoreResults();
        }