protected function column_col3()
    {
        // get translation module
        $layoutkit = $this->layoutkit;
        $words = $layoutkit->getWords();
        $model = $this->getModel();
        $members = $this->group->getMembers();
        $newmembers = $this->group->getMembers('WantToBeIn');
        ?>
    <div id="groups">
    <div class="subcolumns">
        <h3><?php 
        echo $words->get('GroupsAdministrateMembers');
        ?>
</h3>
        <div class="c50l">
            <div class="subcl">
        <h4>Current Members</h4>
        <table id='current_members'>
            <tr>
              <th colspan="2">Username</th>
              <th>Action</th>
            </tr>
        <?php 
        foreach ($members as $member) {
            ?>
            <tr>
                <td><?php 
            echo MOD_layoutbits::linkWithPicture($member->Username);
            ?>
</td>
                <td><a href="#" class="username"><?php 
            echo $member->Username;
            ?>
</a></td>
                <td><?php 
            echo $this->member->getPKValue() == $member->getPKValue() ? '' : "<a class='ban' href='groups/{$this->group->getPKValue()}/banmember/{$member->getPKValue()}'>Ban?</a> / <a class='kick' href='groups/{$this->group->getPKValue()}/kickmember/{$member->getPKValue()}'>Kick?</a>";
            ?>
</td>
            </tr>
        <?php 
        }
        ?>
        </table>
        <script type='text/javascript'>
        var memberlinks = $('current_members').getElementsByTagName('a');
        for (var i=0; i<memberlinks.length; i++)
        {
            $(memberlinks[i]).observe('click', function(e){
                if (!confirm('Are you sure you want to ban this member?'))
                {
                    Event.stop(e);
                }
            });
        }
        </script>
            </div> <!-- subcl -->
        </div> <!-- c62l -->

<?php 
        if ($this->group->Type != 'Public') {
            ?>
        <div class="c50r">
            <div class="subcl">
        <h4>Prospective Members</h4>
        <table id='possible_members'>
            <tr>
              <th colspan="2">Username</th>
              <th>Action</th>
            </tr>
        <?php 
            foreach ($newmembers as $member) {
                ?>
            <tr>
                <td><?php 
                echo MOD_layoutbits::linkWithPicture($member->Username);
                ?>
</td>
                <td><a href="#" class="username"><?php 
                echo $member->Username;
                ?>
</a></td>
                <td><?php 
                echo $this->member->getPKValue() == $member->getPKValue() ? '' : "<a class='accept' href='groups/{$this->group->getPKValue()}/acceptmember/{$member->getPKValue()}'>Accept?</a>";
                ?>
</td>
            </tr>
        <?php 
            }
            ?>
        </table>

            </div> <!-- subcl -->
        </div> <!-- c50r -->
<?php 
        }
        ?>
    </div> <!-- subcolums -->

    </div>
    <?php 
    }
 /**
  *
  * Runs a members search with passed restrictions and returns
  * a list of matches
  *
  * @param	array	 $vars: input variables to be passed back (passed by reference)
  * @param    string   $tablelist: list of tables to query
  * @param    string   $where: WHERE condition
  * @param    string   $orderBy: ORDER BY for query
  * @param    string   $start: first match to show (from pagination)
  * @param    string   $limit: ORDER BY for query
  *
  * @return   array    list of matches (member records)
  *
  * @TODO: Optimise queries (jsfan)
  */
 private function doSearch(&$vars, $tablelist, $where, $orderBy, $start = 0, $limit = 100)
 {
     $TMember = array();
     // This query only fetch indexes (because SQL_CALC_FOUND_ROWS can be a pain)
     $str = 'SELECT SQL_CALC_FOUND_ROWS DISTINCT
                 members.id AS IdMember,
                 Username,
                 geonames_cache.name AS CityName,
                 geonames_countries.name AS CountryName,
                 IF(members.ProfileSummary != 0, 1, 0) AS HasSummary,
                 IF(DATEDIFF(NOW(), members.LastLogin) < 300, 1, 0) AS HasLoggedIn
             FROM
                 (' . $tablelist . ')
             ' . $where . '
             ' . $orderBy . '
             LIMIT ' . $start . ',' . $limit;
     $qry = $this->dao->query($str);
     $result = $this->dao->query("SELECT FOUND_ROWS() as cnt");
     $row = $result->fetch(PDB::FETCH_OBJ);
     $rCount = $row->cnt;
     $vars['rCount'] = $rCount;
     while ($rr = $qry->fetch(PDB::FETCH_OBJ)) {
         $sData = 'SELECT
                       m.created,
                       m.BirthDate,
                       m.HideBirthDate,
                       m.Accomodation,
                       m.ProfileSummary,
                       m.Gender,
                       m.HideGender,
                       date_format(m.LastLogin,\'%Y-%m-%d\') AS LastLogin,
                       gc.latitude AS Latitude,
                       gc.longitude AS Longitude
                   FROM
                       members AS m,
                       geonames_cache AS gc,
                       addresses AS a
                   WHERE
                       a.IdCity = gc.geonameid
                       AND m.id = ' . $rr->IdMember . '
                       AND m.id = a.IdMember';
         $qryData = $this->dao->query($sData);
         $rData = $qryData->fetch(PDB::FETCH_OBJ);
         $rr->created = $rData->created;
         $rr->BirthDate = $rData->BirthDate;
         $rr->HideBirthDate = $rData->HideBirthDate;
         $rr->Accomodation = $rData->Accomodation;
         $rr->ProfileSummary = $this->ellipsis($this->FindTrad($rData->ProfileSummary, true), 200);
         $rr->Gender = $rData->Gender;
         $rr->HideGender = $rData->HideGender;
         $rr->LastLogin = $rData->LastLogin;
         $rr->Latitude = $rData->Latitude;
         $rr->Longitude = $rData->Longitude;
         $sData = "\n            SELECT\n                COUNT(*) as NbComment\n            FROM\n                comments,\n                members\n            WHERE\n                comments.IdToMember =" . $rr->IdMember . "\n                AND\n                members.id = comments.IdFromMember\n                AND\n                members.status IN ('Active')\n            ";
         $qryData = $this->dao->query($sData);
         $rData = $qryData->fetch(PDB::FETCH_OBJ);
         $rr->NbComment = $rData->NbComment;
         $query = $this->dao->query('SELECT SQL_CACHE * FROM  membersphotos WHERE IdMember=". $rr->IdMember . " AND SortOrder=0');
         $photo = $query->fetch(PDB::FETCH_OBJ);
         if (isset($photo->FilePath)) {
             $rr->photo = $photo->FilePath;
         } else {
             $rr->photo = $this->DummyPict($rr->Gender, $rr->HideGender);
         }
         $rr->photo = MOD_layoutbits::linkWithPicture($rr->Username, $rr->photo, 'map_style');
         if ($rr->HideBirthDate == "No") {
             $rr->Age = floor($this->fage_value($rr->BirthDate));
         } else {
             $rr->Age = "Hidden";
         }
         // push found record to list of members to be output
         array_push($TMember, $rr);
     }
     return $TMember;
 }
    protected function column_col3()
    {
        // get translation module
        $layoutkit = $this->layoutkit;
        $words = $layoutkit->getWords();
        $model = $this->getModel();
        $members = $this->group->getMembers();
        $need_approval = $this->group->getMembers('WantToBeIn');
        $invited = $this->group->getMembers('Invited');
        ?>
    <div id="groups">
    <div class="subcolumns">
        <h3><?php 
        echo $words->get('GroupsAdministrateMembers');
        ?>
</h3>
        <div class="c50l">
            <div class="subcl">
        <h4><?php 
        echo $words->get('GroupsCurrentMembers');
        ?>
</h4>
        <?php 
        $this->pager_widget->render();
        ?>
        <table id='current_members'>
            <tr>
              <th colspan="2"><?php 
        echo $words->get('Username');
        ?>
</th>
              <th><?php 
        echo $words->get('Action');
        ?>
</th>
            </tr>
        <?php 
        $purifier = MOD_htmlpure::getBasicHtmlPurifier();
        $count = 0;
        foreach ($this->pager_widget->getActiveSubset($this->group->getMembers('In', $this->pager_widget->getActiveStart(), $this->pager_widget->getActiveLength())) as $member) {
            ?>
                <tr>
                    <td><?php 
            echo MOD_layoutbits::linkWithPicture($member->Username);
            ?>
</td>
                    <td><a href="members/<?php 
            echo $member->Username;
            ?>
" class="username"><?php 
            echo $member->Username;
            ?>
</a></td>
                    <td>
                        <?php 
            $groupid = $this->group->getPKValue();
            $memberid = $member->getPKValue();
            $BWAdmin = $this->isBWAdmin;
            if ($this->member->getPKValue() == $memberid && !$BWAdmin) {
                echo "<a class='resignAdmin' href='groups/{$groupid}/resignAdmin'>{$words->getSilent('resignAsAdmin')}</a>";
            } elseif ($this->member->getPKValue() == $memberid && $BWAdmin) {
                echo "SuperAdminPower!";
            } else {
                if ($this->group->isGroupOwner($member) && !$BWAdmin) {
                    echo $words->getSilent('MemberIsAdmin');
                } elseif ($this->group->isGroupOwner($member) && $BWAdmin) {
                    echo $words->getSilent('MemberIsAdmin');
                    echo " / <a class='ban' href='groups/{$groupid}/banmember/{$memberid}'>{$words->getSilent('GroupsBanMember')}</a>";
                    echo " / <a class='kick' href='groups/{$groupid}/kickmember/{$memberid}'>{$words->getSilent('GroupsKickMember')}</a>";
                } else {
                    echo "<a class='addAdmin' href='groups/{$groupid}/addAdmin/{$memberid}'>{$words->getSilent('GroupsAddAdmin')}</a>";
                    echo " / <a class='ban' href='groups/{$groupid}/banmember/{$memberid}'>{$words->getSilent('GroupsBanMember')}</a>";
                    echo " / <a class='kick' href='groups/{$groupid}/kickmember/{$memberid}'>{$words->getSilent('GroupsKickMember')}</a>";
                }
            }
            ?>
                    </td>
                </tr>
                <?php 
            $count++;
        }
        echo "</table>";
        $this->pager_widget->render();
        ?>
        <script type='text/javascript'>
        var memberban = $('current_members').getElementsBySelector('a.ban');
        var memberkick = $('current_members').getElementsBySelector('a.kick');
        var memberasadmin = $('current_members').getElementsBySelector('a.addAdmin');
        var resignasadmin = $('current_members').getElementsBySelector('a.resignAdmin');
        memberban.each(function(elem){
            elem.observe('click', function(e){
                if (!confirm('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsConfirmMemberBan'));
        ?>
'))
                {
                    Event.stop(e);
                }
            })
        });
        memberkick.each(function(elem){
            elem.observe('click', function(e){
                if (!confirm('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsConfirmMemberKick'));
        ?>
'))
                {
                    Event.stop(e);
                }
            })
        });
        memberasadmin.each(function(elem){
            elem.observe('click', function(e){
                if (!confirm('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsConfirmMemberAsAdmin'));
        ?>
'))
                {
                    Event.stop(e);
                }
            })
        });
        resignasadmin.each(function(elem){
            elem.observe('click', function(e){
                if (!confirm('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsConfirmResignAsAdmin'));
        ?>
'))
                {
                    Event.stop(e);
                }
            })
        });
        </script>
        <?php 
        echo $words->flushBuffer();
        ?>
            </div> <!-- subcl -->
        </div> <!-- c62l -->

        <div class="c50r">
<?php 
        if ($this->group->Type != 'Public') {
            ?>
            <div class="subcl">
                <h4><?php 
            echo $words->get('GroupsProspectiveMembers');
            ?>
</h4>
                <table id='possible_members'>
                    <tr>
                      <th colspan="2"><?php 
            echo $words->get('Username');
            ?>
</th>
                      <th><?php 
            echo $words->get('Action');
            ?>
</th>
                    </tr>
                <?php 
            foreach ($need_approval as $member) {
                ?>
                    <tr>
                        <td><?php 
                echo MOD_layoutbits::linkWithPicture($member->Username);
                ?>
</td>
                        <td><a href="members/<?php 
                echo $member->Username;
                ?>
" class="username"><?php 
                echo $member->Username;
                ?>
</a></td>
                        <td><?php 
                echo $this->member->getPKValue() == $member->getPKValue() ? '' : "<a class='accept' href='groups/{$this->group->getPKValue()}/acceptmember/{$member->getPKValue()}'>" . $words->get('GroupsAcceptMember') . "</a><br>\n                                  <a class='kick' href='groups/{$this->group->getPKValue()}/declinemember/{$member->getPKValue()}'>" . $words->get('GroupsDeclineMember') . "</a><br>\n                                  <a class='ban' href='groups/{$this->group->getPKValue()}/banmember/{$member->getPKValue()}'>" . $words->get('GroupsBanMember') . "</a>";
                ?>
                        </td>
                    </tr>
                <?php 
            }
            ?>
                </table>

            </div> <!-- subcl -->
<?php 
        }
        ?>
            <div class='subcl'>
                <h4><?php 
        echo $words->get('GroupsInvitedMembers');
        ?>
</h4>
                <table id='invited_members'>
                    <tr>
                      <th colspan="2"><?php 
        echo $words->get('Username');
        ?>
</th>
                    </tr>
<?php 
        if ($invited) {
            ?>
    <?php 
            foreach ($invited as $member) {
                ?>
                    <tr>
                        <td><?php 
                echo MOD_layoutbits::linkWithPicture($member->Username);
                ?>
</td>
                        <td><a href="members/<?php 
                echo $member->Username;
                ?>
" class="username"><?php 
                echo $member->Username;
                ?>
</a></td>
                    </tr>
    <?php 
            }
        }
        ?>
                </table>
            </div>
            <div class='subcl'>
                <h4><?php 
        echo $words->get('GroupsInviteMember');
        ?>
</h4>
                <div id='search_result' style='display: none;padding: 3px; margin-bottom: 3px'></div>
                <form method='get' action='groups/<?php 
        echo $this->group->getPKValue();
        ?>
/invitemembers/search' id='invite_form'>
                    <input type='text' value='<?php 
        echo $words->getSilent('GroupsEnterUsername');
        ?>
' name='username' id='search_username'/><input type='submit' value='<?php 
        echo $words->getSilent('Search');
        ?>
' id='search_username_submit'/>
                </form>
                <?php 
        echo $words->flushBuffer();
        ?>
            </div>
            <script type='text/javascript'>
                var possiblemembers = $('possible_members');
                if (possiblemembers) {
                    var newmemberban = $('possible_members').getElementsBySelector('a.ban');
                    var newmemberkick = $('possible_members').getElementsBySelector('a.kick');
                    newmemberban.each(function (elem) {
                        elem.observe('click', function (e) {
                            if (!confirm('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsConfirmMemberBan'));
        ?>
')) {
                                Event.stop(e);
                            }
                        })
                    });
                    newmemberkick.each(function (elem) {
                        elem.observe('click', function (e) {
                            if (!confirm('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsConfirmMemberDecline'));
        ?>
')) {
                                Event.stop(e);
                            }
                        })
                    });
                }

                var search_handler = {
                    display_result: function(member_object){
                        var search_div = $('search_result');
                        search_div.innerHTML = '';
                        search_div.style.border = '1px solid black';
                        search_div.style.display = 'block';
                        search_div.style.backgroundColor = '#ffffff';
                        var counter = 0;
                        for (var m in member_object)
                        {
                            var a = document.createElement('a');
                            a.href = '';
                            a.id = 'invite_member_' + member_object[m];
                            a.title = '<?php 
        echo $this->javascript_escape($words->get('GroupsClickToSendInvite'));
        ?>
' + m;
                            a.appendChild(document.createTextNode('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsInvite'));
        ?>
' + m));
                            $(a).observe('click',function(e){
                                e = e || window.event;
                                search_handler.add_invite(e);
                                Event.stop(e);
                            });
                            search_div.appendChild(a);
                            search_div.appendChild(document.createElement('br'));
                            counter++;
                        }
                        if (counter == 0)
                        {
                            search_div.appendChild(document.createTextNode('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsCouldNotFindMembers'));
        ?>
'));
                        }
                    },
                    add_invite: function(e){
                        var it = e.target || e.srcElement;
                        var id = it.id.substr(14);
                        var ajax = new Ajax.Request('groups/<?php 
        echo $this->group->getPKValue();
        ?>
/invitememberajax/' + id, {
                            method: 'get',
                            onSuccess: function(transport){
                                if (transport.responseText == 'success')
                                {
                                    search_handler.add_invite_callback(it);
                                }
                                else
                                {
                                    alert('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsCouldNotInvite'));
        ?>
');
                                }
                            },
                            onFailure: function(transport){
                                alert('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsInviteFailedTechError'));
        ?>
');
                            }
                        });
                    },
                    add_invite_callback: function(it){
                        var invited = it.firstChild.data.substr(7);
                        var tr = document.createElement('tr');
                        var td = document.createElement('td');
                        td.appendChild(document.createTextNode(invited + '<?php 
        echo $this->javascript_escape($words->getSilent('GroupsHasBeenInvited'));
        ?>
'));
                        td.setAttribute('colspan', 2);
                        tr.appendChild(td);
                        $('invited_members').tBodies[0].appendChild(tr);
                        $(it).remove();
                    }

                };
                $('search_username').observe('focus', function(e){
                    if ($('search_username').value == '<?php 
        echo $this->javascript_escape($words->getSilent('GroupsEnterUsername'));
        ?>
')
                    {
                        $('search_username').value = '';
                    }
                });
                $('invite_form').observe('submit', function(e){
                    e = e || window.event;
                    var ajax = new Ajax.Request('groups/<?php 
        echo $this->group->getPKValue();
        ?>
/membersearchajax/' + $('search_username').value, {
                        method: 'get',
                        onSuccess: function(transport){
                            var result = ((transport.responseText != '[]') ? transport.responseText.evalJSON() : {});
                            search_handler.display_result(result);
                        },
                        onFailure: function(transport){
                            alert('<?php 
        echo $this->javascript_escape($words->getSilent('GroupsInviteFailedTechError'));
        ?>
');
                        }
                    });
                    Event.stop(e)
                });
            </script>
            <?php 
        echo $words->flushBuffer();
        ?>
        </div> <!-- c50r -->
    </div> <!-- subcolums -->
</div>
    <?php 
    }