public void QuickSearch(JobSearchCriteria criteria, Action<JobSearchMainInfo> success, Action<string> error)
        {
            JobSearchMainInfo jobSearchMainResults = new JobSearchMainInfo();

            string resource = string.Format("/jobSearch?DeveloperKey={0}", AppResources.CareerBuilderDeveloperKey);
            //Add Search Parameters
            if (criteria != null)
            {
                resource = String.Format("{0}&Keywords={1}", resource, criteria.Keywords);
                resource = String.Format("{0}&PageNumber={1}", resource, (criteria.PageNumber <= 0 ? "1" : criteria.PageNumber.ToString()));
                resource = String.Format("{0}&PerPage={1}", resource, 25);
                resource = String.Format("{0}&OrderBy={1}", resource, (String.IsNullOrWhiteSpace(criteria.OrderBy) ? "Date" : criteria.OrderBy));
                if (!String.IsNullOrWhiteSpace(criteria.OrderDirection))
                {
                    resource = String.Format("{0}&OrderDirection={1}", resource, criteria.OrderDirection);
                }                
            }

            _restRequest.Resource = resource;

            _restClient.ExecuteAsync<JobSearchResultDTO>(_restRequest, (args) =>
            {
                if (args.StatusCode == HttpStatusCode.OK)
                {
                    if (args.Data != null)
                    {
                        //Set paging values
                        jobSearchMainResults.TotalPages = args.Data.TotalPages;
                        jobSearchMainResults.TotalCount = args.Data.TotalCount;
                        jobSearchMainResults.FirstItemIndex = args.Data.FirstItemIndex;
                        jobSearchMainResults.LastItemIndex = args.Data.LastItemIndex;

                        if (args.Data.Results != null)
                        {
                            foreach (var result in args.Data.Results)
                            {
                                jobSearchMainResults.ResultInfo.Add(new JobSearchResultInfo(result));
                            }
                            success(jobSearchMainResults);
                        }
                        else
                        {
                            if (args.Data.Errors != null && args.Data.Errors.Count > 0)
                            {
                                error(String.Format("Quick Search Error - {0}", args.Data.Errors[0].Value));
                            }
                            else
                            {
                                error("Quick Search Error - args.Data.Results is null");
                            }
                        }
                    }
                    else
                    {
                        error("Quick Search Error - args.Data is null");
                    }
                }
                else
                {
                    error(args.ErrorMessage);
                }
            });
        }
        public void JobSearch(JobSearchCriteria criteria, Action<JobSearchMainInfo> success, Action<string> error)
        {
            JobSearchMainInfo jobSearchMainResults = new JobSearchMainInfo();

            string resource = string.Format("/jobSearch?DeveloperKey={0}", AppResources.CareerBuilderDeveloperKey);

            //Add Search Parameters
            if (criteria != null)
            {
                resource = String.Format("{0}&Keywords={1}", resource, criteria.Keywords);
                resource = String.Format("{0}&CompanyName={1}", resource, criteria.CompanyName);
                resource = String.Format("{0}&PageNumber={1}", resource, (criteria.PageNumber <= 0 ? "1" : criteria.PageNumber.ToString()));
                resource = String.Format("{0}&PerPage={1}", resource, 25);
                resource = String.Format("{0}&OrderBy={1}", resource, (String.IsNullOrWhiteSpace(criteria.OrderBy) ? "Date" : criteria.OrderBy));

                if (criteria.Latitude != 0 && criteria.Longitude != 0)
                {
                    resource = String.Format("{0}&Location={1}", resource, String.Format("{0}::{1}", criteria.Latitude, criteria.Longitude));
                }
                else
                {
                    if (!String.IsNullOrWhiteSpace(criteria.FriendlyLocation))
                    {
                        resource = String.Format("{0}&Location={1}", resource, criteria.FriendlyLocation);
                    }
                }

                if (criteria.Radius != null && criteria.Radius.Code != null)
                {
                    resource = String.Format("{0}&Radius={1}", resource, criteria.Radius.Code);
                }
                if (criteria.Category != null && criteria.Category.Code != null)
                {
                    if (!criteria.Category.Code.Equals("-1"))
                    {
                        resource = String.Format("{0}&Category={1}", resource, criteria.Category.Code);
                    }
                }
                if (criteria.EducationCode != null && criteria.EducationCode.Code != null)
                {
                    if (!criteria.EducationCode.Code.Equals("-1"))
                    {
                        resource = String.Format("{0}&EducationCode={1}", resource, criteria.EducationCode.Code);
                    }
                }
                if (criteria.SpecificEducation.HasValue)
                {
                    bool val = !criteria.SpecificEducation.Value;
                    resource = String.Format("{0}&SpecificEducation={1}", resource, val.ToString());
                }
                if (criteria.LastPosted != null && criteria.LastPosted.Code != null)
                {
                    resource = String.Format("{0}&PostedWithin={1}", resource, criteria.LastPosted.Code);
                }
                if (criteria.EmployeeType != null && criteria.EmployeeType.Code != null)
                {
                    if (!criteria.EmployeeType.Code.Equals("-1"))
                    {
                        resource = String.Format("{0}&EmpType={1}", resource, criteria.EmployeeType.Code);
                    }
                }
                if (criteria.PayLow != null && criteria.PayLow.Code != null)
                {
                    resource = String.Format("{0}&PayLow={1}", resource, criteria.PayLow.Code);
                }
                if (criteria.PayHigh != null && criteria.PayHigh.Code != null)
                {
                    resource = String.Format("{0}&PayHigh={1}", resource, criteria.PayHigh.Code);
                }
            }

            _restRequest.Resource = resource;

            _restClient.ExecuteAsync<JobSearchResultDTO>(_restRequest, (args) =>
            {
                if (args.StatusCode == HttpStatusCode.OK)
                {
                    if (args.Data != null)
                    {
                        //Set paging values
                        jobSearchMainResults.TotalPages = args.Data.TotalPages;
                        jobSearchMainResults.TotalCount = args.Data.TotalCount;
                        jobSearchMainResults.FirstItemIndex = args.Data.FirstItemIndex;
                        jobSearchMainResults.LastItemIndex = args.Data.LastItemIndex;

                        if (args.Data.Results != null)
                        {
                            foreach (var result in args.Data.Results)
                            {
                                jobSearchMainResults.ResultInfo.Add(new JobSearchResultInfo(result));
                            }
                            success(jobSearchMainResults);
                        }
                        else
                        {
                            if (args.Data.Errors != null && args.Data.Errors.Count > 0)
                            {
                                error(String.Format("Job Search Error - {0}", args.Data.Errors[0].Value));
                            }
                            else
                            {
                                error("Job Search Error - args.Data.Results is null");
                            }
                        }
                    }
                    else
                    {
                        error("Job Search Error - args.Data is null");
                    }
                }
                else
                {
                    error(args.ErrorMessage);
                }
            });
        }
        public void PreviewSearch(JobSearchCriteria criteria, Action<int> success, Action<string> error)
        {
            string resource = string.Format("/jobSearch?DeveloperKey={0}", AppResources.CareerBuilderDeveloperKey);

            //Add Search Parameters
            if (criteria != null)
            {
                resource = String.Format("{0}&Keywords={1}", resource, criteria.Keywords);
                //_restRequest.AddUrlSegment("CompanyName", criteria.CompanyName);
                //resource = String.Format("{0}&PageNumber={1}", resource, (criteria.PageNumber <= 0 ? "1" : criteria.PageNumber.ToString()));
                resource = String.Format("{0}&OrderBy={1}", resource, (String.IsNullOrWhiteSpace(criteria.OrderBy) ? "Date" : criteria.OrderBy));

                if (criteria.Latitude != 0 && criteria.Longitude != 0)
                {
                    resource = String.Format("{0}&Location={1}", resource, String.Format("{0}::{1}", criteria.Latitude, criteria.Longitude));
                }
                else
                {
                    if (!String.IsNullOrWhiteSpace(criteria.FriendlyLocation))
                    {
                        resource = String.Format("{0}&Location={1}", resource, criteria.FriendlyLocation);
                    }
                }

                if (criteria.Radius != null)
                {
                    resource = String.Format("{0}&Radius={1}", resource, criteria.Radius.Code);
                }
                if (criteria.Category != null)
                {
                    if (!criteria.Category.Code.Equals("-1"))
                    {
                        resource = String.Format("{0}&Category={1}", resource, criteria.Category.Code);
                    }
                }
                if (criteria.EducationCode != null)
                {
                    if (!criteria.EducationCode.Code.Equals("-1"))
                    {
                        resource = String.Format("{0}&EducationCode={1}", resource, criteria.EducationCode.Code);
                    }
                }
                if (criteria.SpecificEducation.HasValue)
                {
                    bool val = !criteria.SpecificEducation.Value;
                    resource = String.Format("{0}&SpecificEducation={1}", resource, val.ToString());
                }
                if (criteria.LastPosted != null)
                {
                    resource = String.Format("{0}&PostedWithin={1}", resource, criteria.LastPosted.Code);
                }
                if (criteria.EmployeeType != null)
                {
                    if (!criteria.EmployeeType.Code.Equals("-1"))
                    {
                        resource = String.Format("{0}&EmpType={1}", resource, criteria.EmployeeType.Code);
                    }
                }
                if (criteria.PayLow != null)
                {
                    resource = String.Format("{0}&PayLow={1}", resource, criteria.PayLow.Code);
                }
                if (criteria.PayHigh != null)
                {
                    resource = String.Format("{0}&PayHigh={1}", resource, criteria.PayHigh.Code);
                }
            }

            _restRequest.Resource = resource;

            _restClient.ExecuteAsync<JobSearchResultDTO>(_restRequest, (args) =>
            {
                if (args.StatusCode == HttpStatusCode.OK)
                {
                    if (args.Data != null)
                    {
                        if (args.Data.Results != null)
                        {
                            success(args.Data.TotalCount);
                        }
                        else
                        {
                            if (args.Data.Errors != null && args.Data.Errors.Count > 0)
                            {
                                error(String.Format("Job Search Error - {0}", args.Data.Errors[0].Value));
                            }
                            else
                            {
                                error("Job Search Error - args.Data.Results is null");
                            }
                        }
                    }
                    else
                    {
                        error("Job Search Error - args.Data is null");
                    }
                }
                else
                {
                    error(args.ErrorMessage);
                }
            });
        }
        private bool IsSearchInSavedSearches(JobSearchCriteria searchItem)
        {
            foreach (var search in SavedSearches)
            {
                //if so, raise message, if not, save alert
                if (searchItem.Keywords == search.Keywords
                    && searchItem.FriendlyLocation == search.FriendlyLocation)
                {
                    return true;
                }
            }

            return false;
        }
        /// <summary>
        /// Performs the quick search.
        /// </summary>
        /// <param name="criteria">The criteria.</param>
        private void PerformQuickSearch(JobSearchCriteria criteria)
        {
            if (!IsNetworkAvailable())
                return;

            IsBusy = true;
            int ranking = 1;
            cbSvc.QuickSearch(criteria,
                (response) =>
                {
                    if (response != null)
                    {
                        SearchMainInfo = response;
                        if (SearchMainInfo.ResultInfo != null)
                        {
                            DispatcherHelper.CheckBeginInvokeOnUI(() =>
                            {
                                if (!IsLoadMore)
                                {
                                    JobSearchResults.Clear();
                                }

                                if (IsLoadMore)
                                {
                                    ranking = JobSearchResults.Count + ranking;
                                }

                                foreach (var job in SearchMainInfo.ResultInfo)
                                {
                                    job.Ranking = ranking++;
                                    JobSearchResults.Add(job);
                                }

                                NotifyPropertyChanged("JobSearchResults");

                                if (JobSearchResults.Count > 0)
                                {
                                    LoadMapPins(JobSearchResults);
                                }

                                if (IsLoadMore)
                                {
                                    Messenger.Default.Send<bool>(true, "LoadMoreCompleteRequest");
                                }
                            });
                        }
                    }
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        IsBusy = false;
                    });
                },
                (error) =>
                {
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        IsBusy = false;
                        ShowErrorMessage();
                    });
                });
        }
 private void RemoveSavedSearch(JobSearchCriteria savedSearch)
 {
     if (IsSearchInSavedSearches(savedSearch))
     {
         if (SavedSearches.Remove(savedSearch))
         {
             persistentStore.Backup(IsolatedStorageKeys.SAVED_SEARCHES, SavedSearches);
         }
     }
     else
     {
         MessageBox.Show("This saved search no longer exists.  If this is incorrect, please try again or contact us.");
         return;
     }
     //MessageBox.Show("Your search(es) have been removed.");
 }
        /// <summary>
        /// Performs the save search.
        /// </summary>
        /// <param name="criteria">The criteria.</param>
        private void PerformSaveSearch(JobSearchCriteria criteria)
        {
            //get watch list
            GetSavedSearches(null);

            if (SavedSearches.Count <= 0)
            {
                //insert immediately
                SavedSearches.Add(criteria);
                persistentStore.Backup(IsolatedStorageKeys.SAVED_SEARCHES, SavedSearches);
                MessageBox.Show("Your search has been saved.");
            }
            else
            {
                //make sure current alert doesn't already exists
                //if so, raise message, if not, save alert
                if (IsSearchInSavedSearches(criteria))
                {
                    MessageBox.Show("A similar job search already exists in your saved searches");
                    return;
                }

                SavedSearches.Add(criteria);
                persistentStore.Backup(IsolatedStorageKeys.SAVED_SEARCHES, SavedSearches);
                MessageBox.Show("Your search has been saved.");
            }
        }
 /// <summary>
 /// Performs the reset search criteria.
 /// </summary>
 /// <param name="criteria">The criteria.</param>
 private void PerformResetSearchCriteria()
 {
     Criteria = new JobSearchCriteria();
     ClearDropDowns();
     Criteria.SpecificEducation = true;
     ThreadPool.QueueUserWorkItem(new WaitCallback(LoadDropDowns));
     Messenger.Default.Send<bool>(true, "ResetSearchCompleteRequest");
 }
        /// <summary>
        /// Performs advanced search.
        /// </summary>
        /// <param name="criteria">The criteria.</param>
        private void PerformAdvancedSearch(JobSearchCriteria criteria)
        {
            if (!IsNetworkAvailable())
                return;

            IsBusy = true;
            int ranking = 1;
            cbSvc.JobSearch(criteria,
                (response) =>
                {
                    if (response != null)
                    {
                        SearchMainInfo = response;
                        if (SearchMainInfo.ResultInfo != null)
                        {
                            DispatcherHelper.CheckBeginInvokeOnUI(() =>
                                {
                                    if (!IsLoadMore)
                                    {
                                        JobSearchResults.Clear();
                                    }

                                    if (IsLoadMore)
                                    {
                                        ranking = JobSearchResults.Count + ranking;
                                    }

                                    foreach (var job in SearchMainInfo.ResultInfo)
                                    {
                                        job.Ranking = ranking++;
                                        JobSearchResults.Add(job);
                                    }

                                    if (JobSearchResults.Count > 0)
                                    {
                                        LoadMapPins(JobSearchResults);
                                    }

                                    if (IsLoadMore)
                                    {
                                        Messenger.Default.Send<bool>(true, "LoadMoreCompleteRequest");
                                    }

                                    SendNavigationRequestMessage(new Uri(String.Format("/SearchResultsPage/{0}/{1}", string.Empty, false.ToString()), UriKind.Relative), "AdvancedSearchComplete");
                                });
                        }
                    }
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        IsBusy = false;
                    });
                },
                (error) =>
                {
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        IsBusy = false;
                        ShowErrorMessage();
                    });
                });
        }
        /// <summary>
        /// Performs the preview search.
        /// </summary>
        /// <param name="criteria">The criteria.</param>
        private void PerformPreviewSearch(JobSearchCriteria criteria)
        {
            if (!IsNetworkAvailable())
                return;

            IsBusy = true;
            cbSvc.PreviewSearch(criteria,
                (response) =>
                {
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        NumOfPreviewResults = response;
                        Messenger.Default.Send<int>(NumOfPreviewResults, "PreviewSearchCompleteRequest");
                    });
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        IsBusy = false;
                    });
                },
                (error) =>
                {
                    DispatcherHelper.CheckBeginInvokeOnUI(() =>
                    {
                        IsBusy = false;
                        ShowErrorMessage();
                    });
                });
        }