private static void ClearOldReminders()
        {
            var reminders = ScheduledActionService.GetActions <Reminder>().ToArray();

            //delete reminders
            if (reminders.Length > 0)
            {
                foreach (var reminder in reminders)
                {
                    if (ScheduledActionService.Find(reminder.Name) != null)
                    {
                        ScheduledActionService.Remove(reminder.Name);
                    }

                    var friend = BirthdayUtility.GetFriendDetailsById(Convert.ToInt32(reminder.Name));

                    if (friend == null)
                    {
                        continue;
                    }

                    friend.IsReminderCreated = false;
                    BirthdayUtility.UpdateFriendDetails(friend);

                    //AppLog.writeToLog(DateTime.Now, reminder.Name + friend.UniqueId + friend.IsReminderCreated.ToString(), LogLevel.Error);
                }
            }
        }
        private int UpdateFriend()
        {
            //gather friend details
            var friendDetails = DataContext as FriendEntity;

            if (friendDetails == null)
            {
                return(0);
            }

            friendDetails.Email                   = EmailTextBox.Text;
            friendDetails.PhoneNumber             = ContactTextBox.Text;
            friendDetails.SendAutoEmailOnBirthday = AutoEmailToggle.IsChecked != null && AutoEmailToggle.IsChecked.Value;
            friendDetails.Name     = NameTextBox.Text;
            friendDetails.Birthday = (BirthdayPicker.Value.HasValue) ? BirthdayPicker.Value.Value : new DateTime?();

            //write updated details to file
            BirthdayUtility.UpdateFriendDetails(friendDetails);

            return(friendDetails.UniqueId);
        }
        /// <summary>
        /// Delete old calendar entries and add new ones
        /// </summary>
        public static void UpdateCalendarEntries()
        {
            try
            {
                ClearOldReminders();

                //add a dummy reminder to test in debug mode
//#if DEBUG

//                if (ScheduledActionService.Find("DummyReminder") != null)
//                {
//                    ScheduledActionService.Remove("DummyReminder");
//                }
//                Reminder dummyReminder = new Reminder("DummyReminder");
//                dummyReminder.BeginTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute + 1, 0);
//                dummyReminder.Title = AppResources.BirthdayLabel;
//                dummyReminder.Content = "Shahzad " + AppResources.BirthdayReminderMessage;
//                ScheduledActionService.Add(dummyReminder);

//#endif



                //create new reminders
                var allBirthdays = BirthdayUtility.GetBirthdays().AllBirthdays;

                if (allBirthdays == null || !allBirthdays.Any())
                {
                    return;
                }

                var orderedBirthdayList = allBirthdays.Where(b => b.DaysAhead.HasValue && b.DaysAhead > 0)
                                          .OrderBy(b => b.DaysAhead)
                                          .ToList();

                foreach (var birthday in orderedBirthdayList)
                {
                    //check to see if the reminder aleady exists and the birthday has a value
                    if (ScheduledActionService.Find(birthday.Id.ToString()) != null || !birthday.Birthday.HasValue)
                    {
                        continue;
                    }

                    //add a reminder
                    var birthdayValue = birthday.Birthday.Value;
                    var reminder      = new Reminder(birthday.Id.ToString())
                    {
                        BeginTime     = GetBeginTime(birthdayValue),
                        Content       = birthday.Name + " " + AppResources.BirthdayReminderMessage,
                        NavigationUri = new Uri("/FriendDetails.xaml?" + UriParameter.FriendId + "=" + birthday.Id, UriKind.Relative),
                        Title         = AppResources.BirthdayLabel
                    };

                    ScheduledActionService.Add(reminder);

                    //update friend details to reflect reminder created
                    var friend = BirthdayUtility.GetFriendDetailsById(birthday.Id);

                    if (friend == null)
                    {
                        continue;
                    }

                    friend.IsReminderCreated = true;
                    BirthdayUtility.UpdateFriendDetails(friend);
                }
            }
            catch (InvalidOperationException ex)
            {
                if (!ex.Message.Contains("The maximum number of ScheduledActions of this type have already been added"))
                {
                    throw;
                }
            }
        }
        /// <summary>
        /// Retrieves list of recent birthdays
        /// </summary>
        /// <returns>List of friend</returns>
        private void GetRecentBirthdays()
        {
            try
            {
                var friendList      = BirthdayUtility.GetFriendList();
                var recentBirthdays = new List <FriendEntity>();
                var todayBirthday   = new List <FriendEntity>();
                var weekBirthday    = new List <FriendEntity>();
                Settings = SettingsUtility.GetUserPreferences();
                LoadLocalizedRes();
                var notificationCount = 0;
                var isReminderExpired = false;
                foreach (var friend in friendList)
                {
                    if (!friend.Birthday.HasValue || (friend.IsHidden.HasValue && friend.IsHidden.Value))
                    {
                        continue;
                    }

                    var daysAhead = DateTimeUtility.GetTimeToEvent(friend.Birthday.Value);

                    //if the birthday is today, add recent birthdays to list
                    if (daysAhead == 0)
                    {
                        //if the birthday is today, raise a toast notification
                        recentBirthdays.Add(friend);
                        todayBirthday.Add(friend);
                        notificationCount++;

                        if (friend.LastToastRaisedYear < DateTime.Now.Year)
                        {
                            if (!Settings.ReminderNotification.LocalNotifications.HasValue || Settings.ReminderNotification.LocalNotifications.Value)
                            {
                                RaiseToast(friend.Name + " " + Resources.BdayTodayMsg, Resources.BdayTileLabel, new Uri("/FriendDetails.xaml?" + UriParameter.FriendId + "=" + friend.UniqueId, UriKind.Relative));
                            }

                            //update the last notification raised year
                            friend.LastToastRaisedYear = DateTime.Now.Year;
                            BirthdayUtility.UpdateFriendDetails(friend);
                        }
                    }

                    //if birthday is tomorrow
                    if (daysAhead == 1)
                    {
                        recentBirthdays.Add(friend);
                        notificationCount++;
                    }

                    //check if reminder for upcoming birthdays exist
                    if (daysAhead > 0 && daysAhead < 7)
                    {
                        if (!friend.IsReminderCreated)
                        {
                            isReminderExpired = true;
                            notificationCount++;
                        }
                        weekBirthday.Add(friend);
                    }
                }

                //raise a toast notification if reminders have to be created
                if (isReminderExpired)
                {
                    RaiseToast(Resources.UpdateBdayReminder, Resources.BdayTileLabel, new Uri("/StartChecks.xaml?" + UriParameter.Action + "=Toast", UriKind.Relative));
                }

                //update shell tile
                UpdateTile(notificationCount, weekBirthday);

                BirthdayUtility.DownloadProfileImages("No");

                //send an email - [[to be implemented later]]
                //if (settings.ReminderNotification.SendEmailReminders && !string.IsNullOrEmpty(settings.UserDetails.Email))
                //{
                //    String emailText = getReminderEmailContent(todayBirthday);
                //    sendEmail(settings.UserDetails.Email,emailText);
                //}

                ////wish via email
                //if (todayBirthday!=null && todayBirthday.Count>0)
                //{
                //    wishViaEmail(todayBirthday);
                //}
            }
            catch (Exception ex)
            {
                AppLog.WriteToLog(DateTime.Now, ex.Message + ". " + ex.StackTrace, LogLevel.Error);
                throw;
            }
        }