function friendlist_unignore()
{
    global $session;
    $ac = httpget('ac');
    $ignored = rexplode(get_module_pref('ignored', 'friendlist', $ac));
    $iveignored = rexplode(get_module_pref('iveignored'));
    if (in_array($ac, $iveignored)) {
        $sql = "SELECT name FROM " . db_prefix("accounts") . " WHERE acctid={$ac} AND locked=0";
        $result = db_query($sql);
        if (db_num_rows($result) > 0) {
            $row = db_fetch_assoc($result);
            $info = sprintf_translate("%s`Q has been removed from your list.", $row['name']);
            require_once "lib/systemmail.php";
            $t = array("`\$Ignore List Removal");
            $mailmessage = array("%s`0`@ has removed you from %s ignore list.", $session['user']['name'], $session['user']['sex'] ? translate_inline("her") : translate_inline("his"));
            systemmail($ac, $t, $mailmessage);
        } else {
            $info = translate_inline("That user no longer exists...");
        }
    }
    $ignored = array_diff($ignored, array($session['user']['acctid']));
    $ignored = rimplode($ignored);
    set_module_pref('ignored', $ignored, 'friendlist', $ac);
    if (in_array($ac, $iveignored)) {
        $iveignored = array_diff($iveignored, array($ac));
        $iveignored = rimplode($iveignored);
        set_module_pref('iveignored', $iveignored);
    }
    output_notl($info);
}
function friendlist_search()
{
    global $session;
    $n = httppost("n");
    rawoutput("<form action='runmodule.php?module=friendlist&op=search' method='POST'>");
    addnav("", "runmodule.php?module=friendlist&op=search");
    if ($n != "") {
        $string = "%";
        for ($x = 0; $x < strlen($n); $x++) {
            $string .= substr($n, $x, 1) . "%";
        }
        $sql = "SELECT name,dragonkills,acctid FROM " . db_prefix("accounts") . " WHERE name LIKE '%{$string}%' AND acctid<>" . $session['user']['acctid'] . " AND locked=0 ORDER BY level,dragonkills";
        $result = db_query($sql);
        if (db_num_rows($result) > 0) {
            $ignored = rexplode(get_module_pref('ignored'));
            $friends = rexplode(get_module_pref('friends'));
            $request = rexplode(get_module_pref('request'));
            $iveignored = rexplode(get_module_pref('iveignored'));
            output("`@These users were found:`n");
            rawoutput("<table style='width:60%;text-align:center;' cellpadding='3' cellspacing='0' border='0'>");
            rawoutput("<tr class='trhead'><td>" . translate_inline("Name") . "</td><td>" . translate_inline("Operations") . "</td></tr>");
            for ($i = 0; $i < db_num_rows($result); $i++) {
                $row = db_fetch_assoc($result);
                rawoutput("<tr class='" . ($i % 2 ? "trlight" : "trdark") . "'><td>");
                output_notl($row['name']);
                rawoutput("</td><td>");
                if (in_array($row['acctid'], $ignored)) {
                    $info = translate_inline("This user has ignored you.");
                    $info .= " [<a href='runmodule.php?module=friendlist&op=ignore&ac=" . $row['acctid'] . "' class='colDkGreen'>" . translate_inline("Ignore") . "</a>]";
                    addnav("", "runmodule.php?module=friendlist&op=ignore&ac=" . $row['acctid']);
                } elseif (in_array($row['acctid'], $friends)) {
                    $info = translate_inline("This user is already in your list.");
                } elseif (in_array($row['acctid'], $request)) {
                    $info = translate_inline("This user has already requested to you.");
                } else {
                    if (in_array($row['acctid'], $iveignored)) {
                        $info = "[<a href='runmodule.php?module=friendlist&op=unignore&ac=" . $row['acctid'] . "' class='colLtRed'>" . translate_inline("Unignore") . "</a>]";
                        addnav("", "runmodule.php?module=friendlist&op=unignore&ac=" . $row['acctid']);
                    } else {
                        $info = "[<a href='runmodule.php?module=friendlist&op=ignore&ac=" . $row['acctid'] . "' class='colDkGreen'>" . translate_inline("Ignore") . "</a>]";
                        addnav("", "runmodule.php?module=friendlist&op=ignore&ac=" . $row['acctid']);
                        $info .= " - [<a href='runmodule.php?module=friendlist&op=request&ac=" . $row['acctid'] . "' class='colDkGreen'>" . translate_inline("Request") . "</a>]";
                        addnav("", "runmodule.php?module=friendlist&op=request&ac=" . $row['acctid']);
                    }
                }
                rawoutput("{$info}</td></tr>");
            }
            rawoutput("</table>");
        } else {
            output("`c`@`bA user was not found with that name.`b`c");
        }
        output_notl("`n");
    }
    output("`^`b`cFriend Search...`c`b");
    output("`n`nWho do you want to search for?");
    output("`n`nName of user: "******"<input name='n' maxlength='50' value=\"" . htmlentities(stripslashes(httppost('n'))) . "\">");
    $apply = translate_inline("Search");
    rawoutput("<input type='submit' class='button' value='{$apply}'></form>");
}
function friendlist_ignore()
{
    global $session;
    $iveignored = rexplode(get_module_pref('iveignored'));
    $friends = rexplode(get_module_pref('friends'));
    $request = rexplode(get_module_pref('request'));
    $ac = httpget('ac');
    $sql = "SELECT name FROM " . db_prefix("accounts") . " WHERE acctid={$ac} AND locked=0";
    $result = db_query($sql);
    if (db_num_rows($result) > 0 && in_array($ac, $friends)) {
        $row = db_fetch_assoc($result);
        require_once "lib/systemmail.php";
        $t = "`\$Friend List Ignore";
        $mailmessage = array("%s`0`@ has added you to %s ignore list.", $session['user']['name'], $session['user']['sex'] ? translate_inline("her") : translate_inline("his"));
        systemmail($ac, $t, $mailmessage);
        $friends = array_diff($friends, array($ac));
        invalidatedatacache("friendliststat-" . $session['user']['acctid']);
        invalidatedatacache("friendliststat-" . $ac);
    }
    $friends = rimplode($friends);
    set_module_pref('friends', $friends);
    $ignored = rexplode(get_module_pref('ignored', 'friendlist', $ac));
    $ignored[] = $session['user']['acctid'];
    $ignored = rimplode($ignored);
    set_module_pref('ignored', $ignored, 'friendlist', $ac);
    $act = $session['user']['acctid'];
    $friends = rexplode(get_module_pref('friends', 'friendlist', $ac));
    $friends = array_diff($friends, array($act));
    $friends = rimplode($friends);
    set_module_pref('friends', $friends, 'friendlist', $ac);
    if (in_array($ac, $request)) {
        $request = array_diff($request, array($ac));
        $request = rimplode($request);
        set_module_pref('request', $request);
    }
    $iveignored[] = $ac;
    $iveignored = rimplode($iveignored);
    set_module_pref('iveignored', $iveignored);
    output("You have ignored that user, they can no longer YoM you");
}
function friendlist_deny()
{
    global $session;
    $ignored = rexplode(get_module_pref('ignored'));
    $friends = rexplode(get_module_pref('friends'));
    $request = rexplode(get_module_pref('request'));
    $ac = httpget('ac');
    $sql = "SELECT name FROM " . db_prefix("accounts") . " WHERE acctid={$ac} AND locked=0";
    $result = db_query($sql);
    if (in_array($ac, $friends)) {
        $info = translate_inline("That user has been removed.");
        require_once "lib/systemmail.php";
        $t = "`\$Friend List Removal";
        $mailmessage = array("%s`0`@ has deleted you from %s Friend List.", $session['user']['name'], $session['user']['sex'] ? translate_inline("her") : translate_inline("his"));
        $friends = array_diff($friends, array($ac));
        $friends = rimplode($friends);
        set_module_pref('friends', $friends);
        $act = $session['user']['acctid'];
        $friends = rexplode(get_module_pref('friends', 'friendlist', $ac));
        $friends = array_diff($friends, array($act));
        $friends = rimplode($friends);
        set_module_pref('friends', $friends, 'friendlist', $ac);
        invalidatedatacache("friendliststat-" . $session['user']['acctid']);
        invalidatedatacache("friendliststat-" . $ac);
    } else {
        $info = translate_inline("That user has been denied.");
        require_once "lib/systemmail.php";
        $t = "`\$Friend Request Denied";
        $mailmessage = array("%s`0`@ has denied you your Friend Request.", $session['user']['name']);
        $request = array_diff($request, array($ac));
        $request = rimplode($request);
        set_module_pref('request', $request);
    }
    if (db_num_rows($result) > 0) {
        systemmail($ac, $t, $mailmessage);
        $row = db_fetch_assoc($result);
        $info = sprintf_translate("%s has been removed", $row['name']);
    }
    output_notl($info);
}
function friendlist_accept()
{
    global $session;
    $ignored = rexplode(get_module_pref('ignored'));
    $request = rexplode(get_module_pref('request'));
    $friends = rexplode(get_module_pref('friends'));
    $ac = httpget('ac');
    if (in_array($ac, $ignored)) {
        $info = translate_inline("This user has ignored you.");
    } elseif (in_array($ac, $friends)) {
        $info = translate_inline("This user is already in your list.");
    } elseif (in_array($ac, $request)) {
        $sql = "SELECT name FROM " . db_prefix("accounts") . " WHERE acctid={$ac} AND locked=0";
        $result = db_query($sql);
        if (db_num_rows($result) > 0) {
            $row = db_fetch_assoc($result);
            invalidatedatacache("friendliststat-" . $session['user']['acctid']);
            invalidatedatacache("friendliststat-" . $ac);
            $friends[] = $ac;
            $info = sprintf_translate("%s`Q has been added to your list.", $row['name']);
            require_once "lib/systemmail.php";
            $t = "`\$Friend Request Accepted";
            $mailmessage = array("%s`0`@ has accepted your Friend Request.", $session['user']['name']);
            systemmail($ac, $t, $mailmessage);
            $friends = rimplode($friends);
            set_module_pref('friends', $friends);
            $friends = rexplode(get_module_pref('friends', 'friendlist', $ac));
            $friends[] = $session['user']['acctid'];
            $friends = rimplode($friends);
            set_module_pref('friends', $friends, 'friendlist', $ac);
            $request = array_diff($request, array($ac));
            $request = rimplode($request);
            set_module_pref('request', $request);
        } else {
            $info = translate_inline("That user no longer exists...");
        }
    }
    output_notl($info);
}
function friendlist_request()
{
    global $session;
    $ac = httpget('ac');
    $sql = "SELECT name FROM " . db_prefix("accounts") . " WHERE acctid={$ac} AND locked=0";
    $result = db_query($sql);
    if (db_num_rows($result) > 0) {
        $row = db_fetch_assoc($result);
        $info = translate_inline("You have successfully sent your request to %s`Q.");
        $info = str_replace('%s', $row['name'], $info);
        require_once "lib/systemmail.php";
        $t = array("`\$Friend Request Sent");
        $mailmessage = array("%s`0`@ has sent you a Friend Request.`nIf this user has been spamming you with this, ignore them from your search function.", $session['user']['name']);
        systemmail($ac, $t, $mailmessage);
    } else {
        $info = translate_inline("That user no longer exists...");
    }
    $request = get_module_pref('request', 'friendlist', $ac);
    $request = rexplode($request);
    $request[] = $session['user']['acctid'];
    $request = rimplode($request);
    set_module_pref('request', $request, 'friendlist', $ac);
    output_notl($info);
}
function friendlist_list()
{
    global $session;
    $friends = rexplode(get_module_pref('friends'));
    $request = rexplode(get_module_pref('request'));
    $ignored = rexplode(get_module_pref('ignored'));
    $iveignored = rexplode(get_module_pref('iveignored'));
    output("`b`@Friends:`b`n");
    rawoutput("<table style='width:60%;text-align:center;' cellpadding='3' cellspacing='0' border='0'>");
    rawoutput("<tr class='trhead'><td>" . translate_inline("Name") . "</td><td>" . translate_inline("Logged In") . "</td><td>" . translate_inline("Location") . "</td><td>" . translate_inline("Alive") . "</td><td>" . translate_inline("Operations") . "</td></tr>");
    $last = date("Y-m-d H:i:s", strtotime("-" . getsetting("LOGINTIMEOUT", 900) . " sec"));
    $x = 0;
    if (implode(",", $friends) != '') {
        $sql = "SELECT name,acctid,login,laston,alive,loggedin,location FROM " . db_prefix("accounts") . " WHERE acctid IN (" . implode(',', $friends) . ") AND locked=0 ORDER BY login";
        $result = db_query($sql);
        while ($row = db_fetch_assoc($result)) {
            $ac = $row['acctid'];
            $x++;
            rawoutput("<tr class='" . ($x % 2 ? "trlight" : "trdark") . "'>");
            rawoutput("<td><a href='mail.php?op=write&to=" . rawurlencode($row['login']) . "'>" . appoencode("`&" . $row['name'], false) . "</a></td>");
            addnav("", "mail.php?op=write&to=" . rawurlencode($row['login']));
            $loggedin = $row['loggedin'];
            if ($row['laston'] < $last) {
                $loggedin = false;
            }
            $loggedin = translate_inline($loggedin ? "`^Yes`0" : "`%No`0");
            rawoutput("<td>" . appoencode($loggedin, false) . "</td>");
            rawoutput("<td><span class='colLtYellow'>" . htmlentities($row['location']) . "</span></td>");
            $alive = translate_inline($row['alive'] ? "`@Yes`0" : "`\$No`0");
            rawoutput("<td>" . appoencode($alive, false) . "</td>");
            $ops = "[<a href='runmodule.php?module=friendlist&op=deny&ac={$ac}' class='colDkGreen'>" . translate_inline("Remove") . "</a>] - [<a href='runmodule.php?module=friendlist&op=ignore&ac={$ac}' class='colDkGreen'>" . translate_inline("Ignore") . "</a>]";
            addnav("", "runmodule.php?module=friendlist&op=deny&ac={$ac}");
            addnav("", "runmodule.php?module=friendlist&op=ignore&ac={$ac}");
            rawoutput("<td>{$ops}</td></tr>");
        }
    }
    if ($x == 0) {
        rawoutput("<tr class='trlight'><td colspan='5'>");
        output("`^You have no friends");
        rawoutput("</td></tr>");
    }
    rawoutput("</table>");
    $friends = rimplode($friends);
    set_module_pref('friends', $friends);
    output("`n`b`@Friend Requests:`b`n");
    rawoutput("<table style='width:60%;text-align:center;' cellpadding='3' cellspacing='0' border='0'>");
    rawoutput("<tr class='trhead'><td>" . translate_inline("Name") . "</td><td>" . translate_inline("Operations") . "</td></tr>");
    $x = 0;
    $request = array_unique($request);
    if (implode(",", $request) != '') {
        $sql = "SELECT name,acctid,login,laston,alive,loggedin,location FROM " . db_prefix("accounts") . " WHERE acctid IN (" . implode(',', $request) . ") AND locked=0 ORDER BY login";
        $result = db_query($sql);
        while ($row = db_fetch_assoc($result)) {
            $ac = $row['acctid'];
            $x++;
            rawoutput("<tr class='" . ($x % 2 ? "trlight" : "trdark") . "'>");
            rawoutput("<td>" . appoencode($row['name'], false) . "</td>");
            $ops = "[<a href='runmodule.php?module=friendlist&op=accept&ac={$ac}' class='colDkGreen'>" . translate_inline("Accept") . "</a>] - [<a href='runmodule.php?module=friendlist&op=deny&ac={$ac}' class='colDkGreen'>" . translate_inline("Deny") . "</a>] - [<a href='runmodule.php?module=friendlist&op=ignore&ac={$ac}' class='colDkGreen'>" . translate_inline("Ignore") . "</a>]";
            addnav("", "runmodule.php?module=friendlist&op=accept&ac={$ac}");
            addnav("", "runmodule.php?module=friendlist&op=deny&ac={$ac}");
            addnav("", "runmodule.php?module=friendlist&op=ignore&ac={$ac}");
            rawoutput("<td>{$ops}</td></tr>");
        }
    }
    if ($x == 0) {
        rawoutput("<tr class='trlight'><td colspan='2'>");
        output("`^You have no requests");
        rawoutput("</td></tr>");
    }
    rawoutput("</table>");
    $request = rimplode($request);
    set_module_pref('request', $request);
    output("`n`b`@Ignored You:`b`n");
    rawoutput("<table style='width:60%;text-align:center;' cellpadding='3' cellspacing='0' border='0'>");
    rawoutput("<tr class='trhead'><td>" . translate_inline("Name") . "</td><td>" . translate_inline("Operations") . "</td></tr>");
    $x = 0;
    $ignored = array_unique($ignored);
    if (implode(",", $ignored) != '') {
        $sql = "SELECT name,acctid,login,laston,alive,loggedin,location FROM " . db_prefix("accounts") . " WHERE acctid IN (" . implode(',', $ignored) . ") AND locked=0 ORDER BY login";
        $result = db_query($sql);
        while ($row = db_fetch_assoc($result)) {
            $x++;
            $ac = $row['acctid'];
            rawoutput("<tr class='" . ($x % 2 ? "trlight" : "trdark") . "'>");
            rawoutput("<td>" . appoencode($row['name'], false) . "</td>");
            if (!in_array($ac, $iveignored)) {
                $ops = "[<a href='runmodule.php?module=friendlist&op=ignore&ac={$ac}' class='colDkGreen'>" . translate_inline("Ignore") . "</a>]";
                addnav("", "runmodule.php?module=friendlist&op=ignore&ac={$ac}");
            } else {
                $ops = appoencode("`i[" . translate_inline("Nothing") . "]`i", false);
            }
            rawoutput("<td>{$ops}</td></tr>");
        }
    }
    if ($x == 0) {
        rawoutput("<tr class='trlight'><td colspan='2'>");
        output("`^No one has ignored you");
        rawoutput("</td></tr>");
    }
    rawoutput("</table>");
    $ignored = rimplode($ignored);
    set_module_pref('ignored', $ignored);
    output("`n`b`@You've Ignored:`b`n");
    rawoutput("<table style='width:60%;text-align:center;' cellpadding='3' cellspacing='0' border='0'>");
    rawoutput("<tr class='trhead'><td>" . translate_inline("Name") . "</td><td>" . translate_inline("Operations") . "</td></tr>");
    $x = 0;
    $iveignored = array_unique($iveignored);
    if (implode(",", $iveignored) != '') {
        $sql = "SELECT name,acctid,login,laston,alive,loggedin,location FROM " . db_prefix("accounts") . " WHERE acctid IN (" . implode(',', $iveignored) . ") AND locked=0 ORDER BY login";
        $result = db_query($sql);
        while ($row = db_fetch_assoc($result)) {
            $x++;
            $ac = $row['acctid'];
            rawoutput("<tr class='" . ($x % 2 ? "trlight" : "trdark") . "'>");
            rawoutput("<td>" . appoencode($row['name'], false) . "</td>");
            $ops = "[<a href='runmodule.php?module=friendlist&op=unignore&ac={$ac}' class='colLtRed'>" . translate_inline("Unignore") . "</a>]";
            addnav("", "runmodule.php?module=friendlist&op=unignore&ac={$ac}");
            rawoutput("<td>{$ops}</td></tr>");
        }
    }
    if ($x == 0) {
        rawoutput("<tr class='trlight'><td colspan='2'>");
        output("`^You've haven't ignored anyone");
        rawoutput("</td></tr>");
    }
    rawoutput("</table>");
    $iveignored = rimplode($iveignored);
    set_module_pref('iveignored', $iveignored);
}
function friendlist_dohook($hookname, $args)
{
    global $session, $SCRIPT_NAME, $battle;
    switch ($hookname) {
        case "checkuserpref":
            $args['allow'] = false;
            if (get_module_setting('allowStat') && $args['name'] == "check_show") {
                $args['allow'] = true;
            } elseif (get_module_Setting('showType') && get_module_pref('check_show')) {
                if ($args['name'] == "check_login" && get_module_setting('allowType') == 0 || $args['name'] == "check_names" && get_module_setting('allowType') == 1 || $args['name'] == "check_head") {
                    $args['allow'] = true;
                }
            }
            break;
        case "faq-toc":
            $t = translate_inline("`@Frequently Asked Questions on Friend Lists`0");
            output_notl("&#149;<a href='runmodule.php?module=friendlist&op=faq'>{$t}</a><br/>", true);
            addnav("", "runmodule.php?module=friendlist&op=faq");
            break;
        case "mailfunctions":
            output_notl("`c`^[`@");
            $t = translate_inline("Friend List");
            rawoutput("<a href='runmodule.php?module=friendlist&op=list'>{$t}</a>");
            addnav('', 'runmodule.php?module=friendlist&op=list');
            output_notl("`^]`c`n");
            if (httpget('op') == 'send' && !($session['user']['superuser'] & SU_GIVES_YOM_WARNING)) {
                $sql = "SELECT acctid,name FROM " . db_prefix("accounts") . " WHERE login='******'to') . "'";
                $result = db_query($sql);
                if (db_num_rows($result) > 0) {
                    $row = db_fetch_assoc($result);
                    if (in_array($row['acctid'], explode('|', get_module_pref('ignored')))) {
                        popup_header("Ye Olde Poste Office");
                        output_notl("`c`^[`%");
                        $t = translate_inline("Back to your Mail");
                        rawoutput("<a href='mail.php'>{$t}</a>");
                        output_notl("`^]`c`Q`n");
                        $info = translate_inline("%s`Q has ignored you, so you cannot send %s`Q Ye Olde Mail.");
                        $info = str_replace('%s', $row['name'], $info);
                        output_notl($info);
                        popup_footer();
                        die;
                    }
                }
            }
            break;
        case "charstats":
            if (get_module_setting('allowStat') && get_module_pref('check_show')) {
                // I could so other 'if' checks here, but if admin have it turned off, it'd increase load, when it isn't needed anyway
                $friends = rexplode(get_module_pref('friends'));
                $x = 0;
                $last = date("Y-m-d H:i:s", strtotime("-" . getsetting("LOGINTIMEOUT", 900) . " sec"));
                $addon = "";
                if (get_module_setting("allowType") == 0 && get_module_pref("check_login") == 1 || get_module_setting("allowType") == 1 && get_module_pref("check_names") == 1) {
                    $addon = ",login";
                } elseif (get_module_setting("allowType") == 1 && get_module_pref("check_names") == 2) {
                    $addon = ",name";
                }
                $onlinelist = "";
                $bl = false;
                if ($battle === false || !isset($battle) || empty($battle)) {
                    if (httpget('module') == '' && $session['user']['specialinc'] == '' && $session['user']['specialmisc'] == '') {
                        $bl = true;
                    }
                }
                if (implode(",", $friends) != '') {
                    $sql = "SELECT loggedin,laston{$addon} FROM " . db_prefix("accounts") . " WHERE acctid IN (" . implode(",", $friends) . ") AND locked=0";
                    $result = db_query_cached($sql, "friendliststat-" . $session['user']['acctid'], 60);
                    while ($row = db_fetch_assoc($result)) {
                        $loggedin = $row['loggedin'];
                        if ($row['laston'] < $last) {
                            $loggedin = false;
                        }
                        if ($loggedin) {
                            $x++;
                            if ($addon != "") {
                                if ($onlinelist != "") {
                                    $onlinelist .= ", ";
                                }
                                if (get_module_setting('linkType') == 1) {
                                    $onlinelist .= "<a href='mail.php?op=write&to={$row['login']}' class='colLtGreen' target='_blank' onClick=\"" . popup("mail.php?op=write&to={$row['login']}") . ";return false;\">";
                                } elseif (get_module_setting('linkType') == 2 && $bl) {
                                    $link = "bio.php?char=" . rawurlencode($row['login']) . "&ret=" . URLEncode($_SERVER['REQUEST_URI']);
                                    $onlinelist .= "<a href='{$link}' class='colLtGreen'>";
                                    addnav($link, "");
                                }
                                if ($addon == ",login") {
                                    $onlinelist .= sanitize($row['login']);
                                } else {
                                    $onlinelist .= sanitize($row['name']);
                                }
                                if (get_module_setting('linkType') == 1 || get_module_setting('linkType') == 2 && $bl) {
                                    $onlinelist .= "</a>";
                                }
                            }
                        }
                    }
                }
                $onlinelist .= ".";
                if ($x > 0) {
                    $words = sprintf_translate("`^You have `%%s`^ logged-in friends.", $x);
                } else {
                    $words = translate_inline("`@None of your friends are logged-in.");
                }
                setcharstat(translate_inline(get_module_pref('check_head')), translate_inline("Friend Count"), $words);
                if ($onlinelist != ".") {
                    setcharstat(translate_inline(get_module_pref('check_head')), translate_inline("Friend List"), $onlinelist);
                }
            }
            break;
    }
    return $args;
}