protected void UpdateOrgsFromJavascriptChanges()
    {
        string    referrerIDs     = hiddenReferrerIDsList.Value; // comma seperated
        Hashtable referrerIDsHash = new Hashtable();

        if (referrerIDs.Length > 0)
        {
            foreach (string referrerID in referrerIDs.Split(','))
            {
                referrerIDsHash[Convert.ToInt32(referrerID)] = 1;
            }
        }


        DataTable referrers = RegisterReferrerDB.GetDataTable(0, -1, true);

        RegisterReferrer[] regRefs = new RegisterReferrer[referrers.Rows.Count];
        for (int i = 0; i < referrers.Rows.Count; i++)
        {
            regRefs[i] = RegisterReferrerDB.LoadAll(referrers.Rows[i]);
        }


        ArrayList referrersAdded = new ArrayList();

        lstReferrers.Items.Clear();
        for (int i = 0; i < regRefs.Length; i++)
        {
            if (referrerIDsHash[regRefs[i].RegisterReferrerID] != null)
            {
                string text = regRefs[i].Referrer.Person.FullnameWithoutMiddlename + " [" + regRefs[i].Organisation.Name + "]";
                lstReferrers.Items.Add(new ListItem(text, regRefs[i].RegisterReferrerID.ToString()));

                referrersAdded.Add(regRefs[i]);
            }
        }

        int hasBothMobileEmail    = 0;
        int hasMobileNoEmail      = 0;
        int hasEmailNoMobile      = 0;
        int hasNeitherMobileEmail = 0;

        RegisterReferrerDB.GetCountsByEmailMobile(
            (RegisterReferrer[])referrersAdded.ToArray(typeof(RegisterReferrer)),
            ref hasBothMobileEmail,
            ref hasMobileNoEmail,
            ref hasEmailNoMobile,
            ref hasNeitherMobileEmail);

        lblReferrersWithMobileAndEmailTotal.Text       = hasBothMobileEmail.ToString();
        lblReferrersWithMobileNoEmailTotal.Text        = hasMobileNoEmail.ToString();
        lblReferrersWithEmailNoMobileTotal.Text        = hasEmailNoMobile.ToString();
        lblReferrersWithNeitherMobileOrEmailTotal.Text = hasNeitherMobileEmail.ToString();
        lblReferrerCount.Text = lstReferrers.Items.Count.ToString();
    }
    protected void AddAllReferrers()
    {
        // clear and re-set all (in alphabetical order)

        ArrayList newList   = new ArrayList();
        DataTable referrers = RegisterReferrerDB.GetDataTable();

        for (int i = 0; i < referrers.Rows.Count; i++)
        {
            newList.Add(RegisterReferrerDB.LoadAll(referrers.Rows[i]));
        }

        RegisterReferrer[] allReferrers = (RegisterReferrer[])newList.ToArray(typeof(RegisterReferrer));

        lstReferrers.Items.Clear();
        string items = string.Empty;

        for (int i = 0; i < allReferrers.Length; i++)
        {
            string text = allReferrers[i].Referrer.Person.FullnameWithoutMiddlename + " [" + allReferrers[i].Organisation.Name + "]";
            lstReferrers.Items.Add(new ListItem(text, allReferrers[i].RegisterReferrerID.ToString()));

            // add to hidden list
            items += (items.Length == 0 ? "" : ",") + allReferrers[i].RegisterReferrerID.ToString();
        }


        int hasBothMobileEmail    = 0;
        int hasMobileNoEmail      = 0;
        int hasEmailNoMobile      = 0;
        int hasNeitherMobileEmail = 0;

        RegisterReferrerDB.GetCountsByEmailMobile(
            allReferrers,
            ref hasBothMobileEmail,
            ref hasMobileNoEmail,
            ref hasEmailNoMobile,
            ref hasNeitherMobileEmail);

        lblReferrersWithMobileAndEmailTotal.Text       = hasBothMobileEmail.ToString();
        lblReferrersWithMobileNoEmailTotal.Text        = hasMobileNoEmail.ToString();
        lblReferrersWithEmailNoMobileTotal.Text        = hasEmailNoMobile.ToString();
        lblReferrersWithNeitherMobileOrEmailTotal.Text = hasNeitherMobileEmail.ToString();
        lblReferrerCount.Text = lstReferrers.Items.Count.ToString();

        hiddenReferrerIDsList.Value = items;
    }
    protected void btnUpdateReferrersFromClinic_Click(object sender, EventArgs e)
    {
        int          orgID = Convert.ToInt32(hiddenUpdateReferrersFromClinic_OrgID.Value);
        Organisation org   = OrganisationDB.GetByID(orgID);

        if (org != null)
        {
            string    referrerIDs     = hiddenReferrerIDsList.Value; // comma seperated
            Hashtable referrerIDsHash = new Hashtable();
            if (referrerIDs.Length > 0)
            {
                foreach (string referrerID in referrerIDs.Split(','))
                {
                    referrerIDsHash[Convert.ToInt32(referrerID)] = 1;
                }
            }


            // add all new ones (not including those already in there)
            RegisterReferrer[] refs = RegisterReferrerDB.GetAllActiveRegRefByPatientsOfInternalOrg(orgID);
            for (int i = 0; i < refs.Length; i++)
            {
                if (referrerIDsHash[refs[i].RegisterReferrerID] == null)
                {
                    hiddenReferrerIDsList.Value += (hiddenReferrerIDsList.Value.Length == 0 ? "" : ",") + refs[i].RegisterReferrerID; // add to hiddenfield list of id's
                    referrerIDsHash[refs[i].RegisterReferrerID] = 1;                                                                  // add to hash
                }
            }


            // clear and re-set all (in alphabetical order)

            ArrayList newList   = new ArrayList();
            DataTable referrers = RegisterReferrerDB.GetDataTable();
            for (int i = 0; i < referrers.Rows.Count; i++)
            {
                newList.Add(RegisterReferrerDB.LoadAll(referrers.Rows[i]));
            }

            RegisterReferrer[] allReferrers = (RegisterReferrer[])newList.ToArray(typeof(RegisterReferrer));

            ArrayList referrersAdded = new ArrayList();
            lstReferrers.Items.Clear();
            for (int i = 0; i < allReferrers.Length; i++)
            {
                if (referrerIDsHash[allReferrers[i].RegisterReferrerID] != null)
                {
                    string text = allReferrers[i].Referrer.Person.FullnameWithoutMiddlename + " [" + allReferrers[i].Organisation.Name + "]";
                    lstReferrers.Items.Add(new ListItem(text, allReferrers[i].RegisterReferrerID.ToString()));

                    referrersAdded.Add(allReferrers[i]);
                }
            }


            int hasBothMobileEmail    = 0;
            int hasMobileNoEmail      = 0;
            int hasEmailNoMobile      = 0;
            int hasNeitherMobileEmail = 0;
            RegisterReferrerDB.GetCountsByEmailMobile(
                (RegisterReferrer[])referrersAdded.ToArray(typeof(RegisterReferrer)),
                ref hasBothMobileEmail,
                ref hasMobileNoEmail,
                ref hasEmailNoMobile,
                ref hasNeitherMobileEmail);

            lblReferrersWithMobileAndEmailTotal.Text       = hasBothMobileEmail.ToString();
            lblReferrersWithMobileNoEmailTotal.Text        = hasMobileNoEmail.ToString();
            lblReferrersWithEmailNoMobileTotal.Text        = hasEmailNoMobile.ToString();
            lblReferrersWithNeitherMobileOrEmailTotal.Text = hasNeitherMobileEmail.ToString();
            lblReferrerCount.Text = lstReferrers.Items.Count.ToString();

            // -----------------------------------------------
        }

        hiddenUpdateReferrersFromClinic_OrgID.Value = string.Empty;
    }