/// <summary>
        /// Data for the Partner got loaded and we can determine the Partners' 'Primary E-Mail Address'.
        /// If the Partner has got one we will ask the the E-Mail program to open a new E-Mail with
        /// the Partner's E-Mail address as the recipient of the E-Mail.
        /// </summary>
        /// <param name="Sender">Our instance of <see cref="TUC_PartnerInfo"/>.</param>
        /// <param name="e">Ignored.</param>
        private void PartnerInfoUC_DataLoaded(object Sender, Types.TPartnerKeyData e)
        {
            String PrimaryEmailAddress;

            if (Calculations.GetPrimaryEmailAddress(
                    ((TUC_PartnerInfo)Sender).GetPartnerAttributeData(), out PrimaryEmailAddress))
            {
//            MessageBox.Show(PrimaryEmailAddress.ToString());

                TRtbHyperlinks.DisplayHelper Launcher = new TRtbHyperlinks.DisplayHelper(new TRtbHyperlinks());

                Launcher.LaunchHyperLink(PrimaryEmailAddress, THyperLinkHandling.HYPERLINK_PREFIX_EMAILLINK);
            }
            else
            {
                MessageBox.Show(MPartnerResourcestrings.StrNoPrimaryEmailAvailableToSendEmailTo,
                    MPartnerResourcestrings.StrNoPrimaryEmailAvailableToSendEmailToTitle,
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            // We don't want to get any further notifications (until the 'SendEmailToPartner' Method hooks myself up again!)
            ((TUC_PartnerInfo)Sender).DataLoaded -= PartnerInfoUC_DataLoaded;
        }
        private void LaunchHyperlinkFromValue(object sender, EventArgs e)
        {
            TRtbHyperlinks TempHyperlinkCtrl = new TRtbHyperlinks();
            string LinkType = String.Empty;

            // Don't attempt to launch an 'empty' link
            if (txtValue.Text == String.Empty)
            {
                return;
            }

            // TODO Replace this 'quick solution' when the txtValue Control is replaced with the proper rtbValue Control!
            TRtbHyperlinks.DisplayHelper Launcher = new TRtbHyperlinks.DisplayHelper(TempHyperlinkCtrl);

            switch (FValueKind)
            {
                case TPartnerAttributeTypeValueKind.CONTACTDETAIL_HYPERLINK:
                    LinkType = THyperLinkHandling.HYPERLINK_PREFIX_URLLINK;
                    break;

                case TPartnerAttributeTypeValueKind.CONTACTDETAIL_HYPERLINK_WITHVALUE:
                    TempHyperlinkCtrl.BuildLinkWithValue = BuildLinkWithValue;
                    LinkType = THyperLinkHandling.HYPERLINK_PREFIX_URLWITHVALUELINK;
                    break;

                case TPartnerAttributeTypeValueKind.CONTACTDETAIL_EMAILADDRESS:
                    LinkType = THyperLinkHandling.HYPERLINK_PREFIX_EMAILLINK;
                    break;

                case TPartnerAttributeTypeValueKind.CONTACTDETAIL_SKYPEID:
                    LinkType = THyperLinkHandling.HYPERLINK_PREFIX_SKYPELINK;
                    break;
            }

            Launcher.LaunchHyperLink(txtValue.Text, LinkType);
        }
        private void LaunchHyperlinkEMailWithinOrg(object sender, EventArgs e)
        {
            // TODO Replace this 'quick solution' when the txtValue Control is replaced with the proper rtbValue Control!
            TRtbHyperlinks.DisplayHelper Launcher = new TRtbHyperlinks.DisplayHelper(new TRtbHyperlinks());

            string EmailAddress = cmbEMailWithinTheOrganisation.GetSelectedString();

            // Don't attempt to launch an 'empty' link
            if (EmailAddress == String.Empty)
            {
                return;
            }

            Launcher.LaunchHyperLink(EmailAddress, "||email||");
        }
        private void FileSendEmail(System.Object sender, System.EventArgs e)
        {
            string PrimaryEmailAddress;

            if (Calculations.GetPrimaryEmailAddress(
                    FMainDS.PPartnerAttribute, out PrimaryEmailAddress))
            {
                TRtbHyperlinks.DisplayHelper Launcher = new TRtbHyperlinks.DisplayHelper(new TRtbHyperlinks());

                Launcher.LaunchHyperLink(PrimaryEmailAddress, THyperLinkHandling.HYPERLINK_PREFIX_EMAILLINK);
            }
            else
            {
                MessageBox.Show(MPartnerResourcestrings.StrNoPrimaryEmailAvailableToSendEmailTo,
                    MPartnerResourcestrings.StrNoPrimaryEmailAvailableToSendEmailToTitle,
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        private void rtbContactDetails_LinkClicked(string ALinkText, string ALinkType, int ALinkEnd)
        {
            var DisplayHelper = new TRtbHyperlinks.DisplayHelper(rtbContactDetails);

            DisplayHelper.LaunchHyperLink(ALinkText, ALinkType, ALinkEnd);
        }
        /// <summary>
        /// Update Contact Details Hyperlink-RichTextBox
        /// </summary>
        private void UpdateControlsContactDetailsData()
        {
            const string LABEL_VALUE_SEPARATOR = ": ";
            string PrimarySuffix = Catalog.GetString("  (Primary)");
            var DisplayHelper = new TRtbHyperlinks.DisplayHelper(rtbContactDetails);
            PartnerInfoTDSPPartnerAttributeRow AttributeDR;
            PPartnerAttributeTypeRow ContactTypeDR;
            DataView ContactDetailsDV;
            TPartnerAttributeTypeValueKind ValueKind;
            int LinkEnd;
            string Filter = String.Format(
                "{0}='{1}' AND {2}='{3}'",
                PartnerEditTDSPPartnerAttributeTable.GetPartnerContactDetailDBName(), true,
                PPartnerAttributeTable.GetCurrentDBName(), true);
            string Sort = "Parent_Parent_CategoryIndex ASC, Parent_AttributeIndex ASC, " +
                          PPartnerAttributeTable.GetIndexDBName() + " ASC";

            rtbContactDetails.Text = String.Empty;

            Calculations.DeterminePartnerContactDetailAttributes(FPartnerInfoDS.PPartnerAttribute);

            Calculations.CreateCustomDataColumnsForAttributeTable(FPartnerInfoDS.PPartnerAttribute,
                FPartnerInfoDS.PPartnerAttributeType);

            ContactDetailsDV = new DataView(FPartnerInfoDS.PPartnerAttribute,
                Filter, Sort, DataViewRowState.CurrentRows);

            for (int Counter = 0; Counter < ContactDetailsDV.Count; Counter++)
            {
                AttributeDR = (PartnerInfoTDSPPartnerAttributeRow)ContactDetailsDV[Counter].Row;

                ContactTypeDR = (PPartnerAttributeTypeRow)FPartnerInfoDS.PPartnerAttributeType.Rows.Find(
                    AttributeDR.AttributeType);

                if (!Enum.TryParse <TPartnerAttributeTypeValueKind>(ContactTypeDR.AttributeTypeValueKind, out ValueKind))
                {
                    // Fallback!
                    ValueKind = TPartnerAttributeTypeValueKind.CONTACTDETAIL_GENERAL;
                }

                switch (ValueKind)
                {
                    case TPartnerAttributeTypeValueKind.CONTACTDETAIL_GENERAL:
                        DisplayHelper.DisplayPlainText(AttributeDR[Calculations.CALCCOLUMNNAME_CONTACTTYPE] + LABEL_VALUE_SEPARATOR, true, false);
                        DisplayHelper.DisplayPlainText(AttributeDR.Value + (AttributeDR.Primary ? PrimarySuffix : String.Empty), true);
                        break;

                    case TPartnerAttributeTypeValueKind.CONTACTDETAIL_HYPERLINK:
                        DisplayHelper.DisplayPlainText(AttributeDR[Calculations.CALCCOLUMNNAME_CONTACTTYPE] + LABEL_VALUE_SEPARATOR, true, false);
                        DisplayHelper.DisplayURL(AttributeDR.Value, false, true);
                        break;

                    case TPartnerAttributeTypeValueKind.CONTACTDETAIL_HYPERLINK_WITHVALUE:
                        DisplayHelper.DisplayPlainText(AttributeDR[Calculations.CALCCOLUMNNAME_CONTACTTYPE] + LABEL_VALUE_SEPARATOR, true, false);
                        LinkEnd = DisplayHelper.DisplayURL(AttributeDR.Value, true, true);

//                        MessageBox.Show(String.Format("Contact Type: {0}; AttributeDR.Value: {1}; LinkEnd: {2}",
//                            AttributeDR[Calculations.CALCCOLUMNNAME_CONTACTTYPE],AttributeDR.Value, LinkEnd));
                        HyperlinkWithValueArguments.Add(AttributeDR.Value + "[[" + LinkEnd + "]]",
                        new Tuple <TPartnerAttributeTypeValueKind, string>(ValueKind, ContactTypeDR.HyperlinkFormat));
                        break;

                    case TPartnerAttributeTypeValueKind.CONTACTDETAIL_EMAILADDRESS:
                        DisplayHelper.DisplayPlainText(AttributeDR[Calculations.CALCCOLUMNNAME_CONTACTTYPE] + LABEL_VALUE_SEPARATOR, true, false);
                        DisplayHelper.DisplayEmailAddress(AttributeDR.Value, true);

                        if (AttributeDR.Primary)
                        {
                            DisplayHelper.DisplayPlainText(PrimarySuffix, true);
                        }

                        break;

                    case TPartnerAttributeTypeValueKind.CONTACTDETAIL_SKYPEID:
                        DisplayHelper.DisplayPlainText(AttributeDR[Calculations.CALCCOLUMNNAME_CONTACTTYPE] + LABEL_VALUE_SEPARATOR, true, false);
                        DisplayHelper.DisplaySkypeID(AttributeDR.Value, true);
                        break;

                    default:
                        throw new Exception("Invalid value for TPartnerAttributeTypeValueKind");
                }
            }
        }