/// <summary>
        /// Refresh the list and return it.
        /// </summary>
        /// <returns></returns>
        public string RefreshAndGetListOfAvailableElections()
        {
            const string template = "<option value=\"{0}\">{1} {2}</option>";

            var activeElectionGuids = new ComputerCacher().ElectionGuidsOfActiveComputers;

            if (activeElectionGuids.Count == 0)
            {
                return(template.FilledWith(0, "(No elections are active right now.)", ""));
            }

            //TODO - does this hit the DB every time??
            var elections = Db.Election
                            .Where(e => activeElectionGuids.Contains(e.ElectionGuid) &&
                                   e.ListForPublic.HasValue &&
                                   e.ListForPublic.Value &&
                                   e.ElectionPasscode != null)
                            .Select(e => new { e.Name, e.ElectionGuid, e.Convenor })
                            .ToList();

            return(elections
                   .OrderBy(e => e.Name)
                   .Select(e => template.FilledWith(e.ElectionGuid, e.Name, e.Convenor.SurroundContentWith("(", ")")))
                   .JoinedAsString());
        }
        //public void UpdateThisElectionInList()
        //{
        //  var election = UserSession.CurrentElection;
        //  if (election == null)
        //  {
        //    return;
        //  }
        //  CheckElection(election);
        //}

        //private void CheckElection(Election election)
        //{
        //  var canBeAvailable = election.CanBeAvailableForGuestTellers;
        //  var electionId = election.C_RowId;

        //  var isAvailable = ElectionsCurrentlyOpenToGuestTellers.ContainsKey(electionId);
        //  if (!canBeAvailable)
        //  {
        //    new MainHub(). DisconnectGuests();
        //  }

        //  if (canBeAvailable == isAvailable)
        //  {
        //    return;
        //  }

        //  // something changed!
        //  if (!canBeAvailable)
        //  {
        //    PublicElectionInfo removedName;
        //    var wasRemoved = ElectionsCurrentlyOpenToGuestTellers.TryRemove(electionId, out removedName);
        //  }
        //  else
        //  {
        //    ElectionsCurrentlyOpenToGuestTellers[electionId] = new PublicElectionInfo
        //    {
        //      Name = election.Name + election.Convenor.SurroundContentWith(" (", ")"),
        //      Passcode = election.ElectionPasscode
        //    };
        //  }

        //  // the public listing changed
        //  new PublicHub().TellPublicAboutVisibleElections();
        //}

        /// <summary>
        /// Is this election Id in the list of publically visible ids?
        /// </summary>
        /// <param name="electionGuid"></param>
        /// <returns></returns>
        public string GetPasscodeIfAvailable(Guid electionGuid)
        {
            var activeElectionGuids = new ComputerCacher().ElectionGuidsOfActiveComputers.Where(g => g == electionGuid).ToList();

            if (activeElectionGuids.Count == 0)
            {
                return(null);
            }

            var election = Db.Election
                           .FirstOrDefault(e => e.ElectionGuid == electionGuid &&
                                           e.ListForPublic.HasValue &&
                                           e.ListForPublic.Value);

            return(election == null ? null : election.ElectionPasscode);
        }