/// <summary>
        /// Handles the Click event of the searchButton control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
        private void SearchButtonOnClick(object sender, RoutedEventArgs e)
        {
            if (!_loaded || _sidx == database.SelectedIndex)
            {
                return;
            }

            database.IsEnabled = language.IsEnabled = searchButton.IsEnabled = saveButton.IsEnabled = cancelButton.IsEnabled = nameTextBox.IsEnabled = false;

            Guide guide;

            switch (database.SelectedIndex)
            {
            case 1:
                guide = new TVRage();
                break;

            case 2:
                guide = new TVDB();
                break;

            case 3:
                guide = new TMDb();
                break;

            case 4:
                guide = new Freebase();
                break;

            case 5:
                guide = new TVcom();
                break;

            case 6:
                guide = new EPisodeWorld();
                break;

            case 7:
                guide = new IMDb();
                break;

            case 8:
                guide = new AniDB();
                break;

            case 9:
                guide = new AnimeNewsNetwork();
                break;

            case 11:
                guide = new EPGuides();
                break;

            case 12:
                guide = new EPGuides();
                break;

            default:
                database.IsEnabled = language.IsEnabled = searchButton.IsEnabled = saveButton.IsEnabled = cancelButton.IsEnabled = nameTextBox.IsEnabled = true;
                return;
            }

            new ShowGuideTaskDialog().Search(guide, nameTextBox.Text, (language.SelectedItem as StackPanel).Tag as string, (id, title, lang) =>
            {
                if (id == null)
                {
                    Dispatcher.Invoke((Action)(() =>
                    {
                        switch (Database.TVShows[_id].Source)
                        {
                        case "TVRage":
                            database.SelectedIndex = 1;
                            break;

                        case "TVDB":
                            database.SelectedIndex = 2;
                            break;

                        case "TMDb":
                            database.SelectedIndex = 3;
                            break;

                        case "Freebase":
                            database.SelectedIndex = 4;
                            break;

                        case "TVcom":
                            database.SelectedIndex = 5;
                            break;

                        case "EPisodeWorld":
                            database.SelectedIndex = 6;
                            break;

                        case "IMDb":
                            database.SelectedIndex = 7;
                            break;

                        case "AniDB":
                            database.SelectedIndex = 8;
                            break;

                        case "AnimeNewsNetwork":
                            database.SelectedIndex = 9;
                            break;

                        case "EPGuides":
                            database.SelectedIndex = 12;
                            break;
                        }

                        database.IsEnabled = language.IsEnabled = searchButton.IsEnabled = saveButton.IsEnabled = cancelButton.IsEnabled = nameTextBox.IsEnabled = true;
                    }));

                    TaskDialog.Show(new TaskDialogOptions
                    {
                        MainIcon        = VistaTaskDialogIcon.Error,
                        Title           = "Not found",
                        MainInstruction = _show,
                        Content         = "The currently set show title was not found on the selected guide.\r\nYour selection will be reverted. Try editing the official title.",
                        CustomButtons   = new[] { "OK" }
                    });
                }
                else
                {
                    _newSource = guide.GetType().Name;
                    _newSID    = id;
                    _newLang   = lang;

                    _change = _upReq = true;

                    Dispatcher.Invoke((Action)(() =>
                    {
                        nameTextBox.Text = title;
                        _sidx = database.SelectedIndex;

                        database.IsEnabled = language.IsEnabled = saveButton.IsEnabled = cancelButton.IsEnabled = nameTextBox.IsEnabled = true;
                    }));

                    TaskDialog.Show(new TaskDialogOptions
                    {
                        MainIcon        = VistaTaskDialogIcon.Information,
                        Title           = "Modified",
                        MainInstruction = _show,
                        Content         = "The guide was successfully changed!\r\nAn update will be initiated to this TV show after you click Save.",
                        CustomButtons   = new[] { "OK" }
                    });
                }
            });
        }
        /// <summary>
        /// Handles the OnSelectionChanged event of the database control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
        private void DatabaseOnSelectionChanged(object sender, RoutedEventArgs e)
        {
            if (!_loaded || _sidx == database.SelectedIndex)
            {
                return;
            }

            Guide guide;
            switch (database.SelectedIndex)
            {
                case 1:
                    guide = new TVRage();
                    break;

                case 2:
                    guide = new TVDB();
                    break;

                case 3:
                    guide = new TVcom();
                    break;

                case 4:
                    guide = new EPisodeWorld();
                    break;

                case 5:
                    guide = new IMDb();
                    break;

                case 6:
                    guide = new AniDB();
                    break;

                case 7:
                    guide = new AnimeNewsNetwork();
                    break;

                case 9:
                    guide = new EPGuides();
                    break;

                case 10:
                    guide = new EPGuides();
                    break;

                default:
                    return;
            }

            new ShowGuideTaskDialog().Search(guide, nameTextBox.Text, (language.SelectedItem as StackPanel).Tag as string, (id, title, lang) =>
                {
                    if (id == null)
                    {
                        Dispatcher.Invoke((Action)(() =>
                            {
                                switch (Database.TVShows[_id].Source)
                                {
                                    case "TVRage":
                                        database.SelectedIndex = 1;
                                        break;

                                    case "TVDB":
                                        database.SelectedIndex = 2;
                                        break;

                                    case "TVcom":
                                        database.SelectedIndex = 3;
                                        break;

                                    case "EPisodeWorld":
                                        database.SelectedIndex = 4;
                                        break;

                                    case "IMDb":
                                        database.SelectedIndex = 5;
                                        break;

                                    case "AniDB":
                                        database.SelectedIndex = 6;
                                        break;

                                    case "AnimeNewsNetwork":
                                        database.SelectedIndex = 7;
                                        break;

                                    case "EPGuides":
                                        database.SelectedIndex = 10;
                                        break;
                                }
                            }));
                    }
                    else
                    {
                        Database.TVShows[_id].Source   = guide.GetType().Name;
                        Database.TVShows[_id].SourceID = id;
                        Database.TVShows[_id].Title    = title;
                        Database.TVShows[_id].Language = lang;

                        _upReq = true;

                        Dispatcher.Invoke((Action)(() =>
                                                       {
                                                           nameTextBox.Text = title;
                                                           _sidx = database.SelectedIndex;
                                                       }));
                    }
                });
        }