So richtig:
// Version 1.3
newOL = new (function () {
/* Konfiguration */
// Hier werden die einzelnen Gruppen für die Onlineliste angegeben
// Die Syntax ist:
// ["ID", "NAME", "CSS-STYLE", [USERLISTE]],
// ID = Hier musst du eine ID für die Gruppe angeben. Diese muss einzigartig sein und darf insgesamt nur einmal vorkommen!
// NAME = Hier kommt der Gruppenname hin, also die Überschrift der Gruppe. HTML darf benutzt werden!
// CSS-STYLE = Hier kannst du beliebig viele CSS-Befehle auflisten. Diese ändern den Style (z.B. Farbe) der User in dieser Gruppe. Übersicht der CSS-Befehle findest du z.B. hier:
http://www.html-seminar.de/css-definiti ... rsicht.htm
// [USERLISTE] = Hier werden die User aufgezählt, die auf jeden Fall in diese Gruppe müssen. Syntax: ["USER1", "USER2", "USER3", "USER4"]
// Die Reihenfolge der Gruppen kann beliebig geändert werden. Sie erscheinen in der Onlineliste in genau der gleichen Reihenfolge wie hier angegeben,
// BEACHTE: Nach der letzten Gruppe darf KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!
this.olBlocks = [
["team", "Team-Liste", "color: #ff0000;", []],
["bots", "Bot-Liste", "font-weight: bold; color: #0000FF; font-family: Times New Roman;", ["wkQB", "TeeneBot", "chatbot"]],
["user", "User-Liste", "", []],
["guest", "Gäste-Liste", "", []],
["away", "Away-Liste", "color: #FF0000;", []]
];
// Hier können Bilder vor oder nach den Nicks angefügt werden
// this.olPicsBefore fügt Bilder VOR den Nicks ein und this.olPicsBefore NACH den Nicks
// Die Syntax ist:
// URL-ZUM-BILD = Hier muss die URL zum Bild angegeben werden
// USER = Hier können die User angegeben werden, die das Bild erhalten sollen. Es können beliebig viele User angegeben werden, diese müssen nur immer durch ein Komma abgetrennt werden und in Anführungszeichen gesetzt werden. Nach dem letzten User kommt kein Komma!
// Es können beliebig viele Gruppen (Bilder mit ihren Usern) angegeben werden.
// BEACHTE: Nach der letzten Gruppe darf wie immer KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!
this.olPicsBefore = [
["server4.webkicks.de/hauptchat/replacer/admin.gif", "lieblich", "USER2"],
["server4.webkicks.de/hauptchat/replacer/bot.gif", "TeeneBot", "USER4", "USER5", "USER6"],
["server4.webkicks.de/hauptchat/replacer/stern.gif", "BigMac", "USER2"]
];
this.olPicsAfter = [
];
// Hier kann man Usern einen bestimmten CSS-Sytle einrichten, der den jeweiligen Gruppenstyle "überschreibt"
// Die Syntax ist:
// ["USER", "CSS-STYLE"],
// USER = Hier kommt der Username des Nicks hinein, der einen eigenen CSS-Style bekommen soll
// CSS-Style = Hier kannst du beliebig viele CSS-Befehle auflisten. Diese ändern den Style (z.B. Farbe) des Users. Übersicht der CSS-Befehle findest du z.B. hier:
http://www.html-seminar.de/css-definiti ... rsicht.htm
// Es können beliebig viele User einen eigenen CSS-Style bekommen
// BEACHTE: Nach der letzten Gruppe darf wie immer KEIN Komma stehen, aber die vorherigen Gruppen benötigen unbedingt eins danach!
this.userStyle = [
];
// Hier wird eingestellt, ob die einzelnen User in den Gruppen alphabetisch sortiert werden sollen
// 1 = Aktiviert; 0 = Deaktiviert
this.olSortActivated = 1;
/* Ende der Konfiguration */
/* Ab hier bitte nichts mehr ändern! */
var that = this;
// user - speichert in einem Array alle User im Chatraum
// Pro User ein Array mit 6 Strings
// 1. String: Name; 2. String: Profil; 3. String: Rang; 4. String: Away; 5. String: Raum; 6. String: Awaygrund
this.user = [];
// createBlocks - erstellt die Gruppen in der OL und startet das Script
this.createBlocks = function () {
if (olIsLoad()) {
var prFd = parent.rightFrame.document;
var vOL = (!myBrowser.IE || navigator.userAgent.match(/MSIE ((\d\d)|9)\.[0-9]+/)) ? ((prFd.getElementsByTagName("body")[0].childNodes[2].nodeName == "TABLE") ? true : false) : false;
// Die 2. Überprüfung verhindert unsichtbare OL
if (!prFd.getElementById("newOL") || vOL) {
prFd.getElementById("bd:").style.display = "none";
that.overwriteAdds();
that.delNewOL();
var newTD = document.createElement("td");
newTD.id = "newOL";
prFd.getElementsByTagName("tr")[0].appendChild(newTD);
for (var i = 0; i < that.olBlocks.length; i++) {
var olBid = that.olBlocks
[0];
var newOLBlock = document.createElement("div");
with (newOLBlock) {
id = olBid + "wrapper";
innerHTML = "<div id='" + olBid + "headline' style='margin-top:10px; margin-bottom:1px;'><a id='" + olBid + "link' onclick=\"parent.mainframe.newOL.switchStatus('" + olBid + "')\">-</a> " + that.olBlocks[1] + "</div>";
innerHTML += "<ul id='" + olBid + "list' style='list-style-type:none; margin-top:5px; margin-bottom:1px;" + that.olBlocks[2] + "'></ul>";
}
prFd.getElementById("newOL").appendChild(newOLBlock);
}
getXML("GET", "/"+chatData[1]+"/api/get_onlinelist?" + new Date().getTime(), 0, that.getUser);
}
} else {
window.setTimeout("parent.mainframe.newOL.createBlocks()", 50);
}
}
// delNewOl - löscht die neue Onlineliste
this.delNewOL = function () {
var delOL;
if (delOL = parent.rightFrame.document.getElementById("newOL")) {
delOL.parentNode.removeChild(delOL);
}
}
// switchStatus - blendet einen Block ein und aus
// id: ID des Blocks
this.switchStatus = function (id) {
var prFd = parent.rightFrame.document;
if (prFd.getElementById(id + "link").innerHTML == "-") {
prFd.getElementById(id + "link").innerHTML = "+";
prFd.getElementById(id + "list").style.display = "none";
} else {
prFd.getElementById(id + "link").innerHTML = "-";
prFd.getElementById(id + "list").style.display = "block";
}
}
// getOnlineUser - füllt das Array user
// r: auszuwertendes Request
this.getUser = function (r) {
if (r.readyState == 4) {
// Wenn Status 200 ist, ist alles korrekt gelaufen
if (r.status != 200) {
console.log(r);
} else {
var c = r.responseXML.documentElement;
that.user = [];
for (var i = 0; i < c.getElementsByTagName("onlineuser").length; i++) {
var u = c.getElementsByTagName("onlineuser");
that.user = [];
with (that.user) {
push(u.getElementsByTagName("name")[0].firstChild.data);
push(u.getElementsByTagName("profil")[0].firstChild.data);
push(u.getElementsByTagName("rang")[0].firstChild.data);
push(u.getElementsByTagName("away")[0].firstChild.data);
push(u.getElementsByTagName("channel")[0].firstChild.data);
}
if (u.getElementsByTagName("awayreason")[0].firstChild) {
that.user.push(u.getElementsByTagName("awayreason")[0].firstChild.data);
}
}
that.firstAdds();
}
}
}
// firstAdds - schreibt die User in die Onlineliste, die schon online sind und per getUser geladen wurden
this.firstAdds = function () {
for (var j = 0; j < that.user.length; j++) {
if (that.user[j][0] == myNick) {
break;
}
}
for (var i = 0; i < that.user.length; i++) {
if (that.user[j][4] == that.user[4]) {
var away = (that.user[3] == "0") ? 0 : 1;
var awayr = (that.user[5] == "undefined") ? "" : that.user[i][5];
var server = (that.user[i][1] == 1) ? "server" + chatData[0] : "";
var chat = (that.user[i][1] == 1) ? chatData[1] : "";
var rank = that.getRankException(that.user[i][0]);
rank = (rank == 0) ? that.user[i][2] : rank;
if (rank.match(/list$/) == null) {
switch (rank) {
case "gast":
rank = "guestlist";
break;
case "admin":
rank = "teamlist";
break;
case "mod":
rank = "teamlist";
break;
default:
rank = "userlist";
break;
}
}
that.add(that.user[i][0], away, awayr, server, chat, rank);
}
}
}
// getRankException - durchsucht alle Elemente in olBlocks nach Usern und gibt den jeweiligen Blocknamen zurück
// chatter: User, nach dem gesucht werden soll
this.getRankException = function (chatter) {
for (var i = 0; i < that.olBlocks.length; i++) {
var list = that.olBlocks[i][3];
var t = typeof list;
if (t != undefined && ((t == "object" && list.inArray(chatter)) || (t == "string" && list == chatter))) {
return that.olBlocks[i][0] + "list";
}
}
return 0;
}
// getBlock - checkt die Loginnachricht findet heraus, in welchen Block der User muss
// user: User; profil: hat der User ein Profil (1 oder 0)
this.getBlock = function (user, profil) {
var tds = parent.mainframe.document.getElementsByTagName("td");
var rank = that.getRankException(user);
if (rank == 0) {
var howlong = (tds.length > 5) ? 5 : tds.length;
var clD;
for (var i = 1; i <= howlong; i++) {
clD = lineData(tds[tds.length - i]);
if (clD != null && clD[2] == user && clD[4] == 0) {
rank = "guestlist";
break;
}
}
if (rank == 0) {
howlong = (chatTeam[0].length > chatTeam[1].length) ? chatTeam[0].length : chatTeam[1].length;
howlong = (1 > howlong) ? 1 : howlong;
for (var i = 0; i < howlong; i++) {
if (chatTeam[0][i] == user || chatTeam[1][i] == user || chatTeam[2] == user) {
rank = "teamlist";
break;
}
}
}
if (rank == 0) {
rank = "userlist";
}
}
for (var i = 0; i < that.user.length; i++) {
if (that.user[i][0] == user) {
return rank;
}
}
var j = that.user.length;
that.user[j] = [];
with (that.user[j]) {
push(user);
push(profil);
push(rank);
push("0");
push(getRoom());
}
return rank;
}
// olSort - sortiert die einzelnen User alphabetisch
// chatter: User, der in der Liste alphabetisch sortiert werden soll; block: Liste, in der sich der User befindet
this.olSort = function (chatter, block) {
var prFd = parent.rightFrame.document;
var b = prFd.getElementById(block);
var s = b.getElementsByTagName("span");
if (s.length != 0) {
for (var i = 0; i < s.length; i++) {
var c = chatter.toLowerCase();
var span = s[i].innerHTML.replace(/\s$/, "");
var sortArray = [span.toLowerCase(), c].sort();
if (sortArray[0] == c && sortArray[1] != c) {
b.insertBefore(prFd.getElementById("new" + chatter), prFd.getElementById("new" + span));
break;
}
}
} else {
return;
}
}
// addPics - fügt dem User ein Bild vor oder nach dem Nick ein Bild ein
// chatter: User, dem das Bild angehängt werden soll, loc: Ort (0 = vor dem Nick; 1 = nach dem Nick); profil: Besitzt der User ein Profil (0 oder 1)
this.addPics = function (chatter, loc, profil) {
picloc = (loc) ? that.olPicsAfter : that.olPicsBefore;
for (var i = 0; i < picloc.length; i++) {
if (picloc[i].inArray(chatter)) {
return ((loc && profil) ? " " : "") + "<img src='" + picloc[i][0] + "' />" + ((!loc) ? " " : "");
}
}
return "";
}
// getUserStyle - durchsucht userStyle und gibt bei Erfolg den Style des Users zurück
// chatter: User, dessen Style gesucht wird
this.getUserStyle = function (chatter) {
for (var i = 0; i < that.userStyle.length; i++) {
var s = that.userStyle[i];
if (s[0] == chatter) {
return s[1];
}
}
return "";
}
// add - fügt den User in die Onlineliste ein
// chatter: User, der eingefügt werden soll; away: Abwesend (0 oder 1); reason: Abwesendheitsgrund; server: Falls Profil - "server" + Nummer; chat: Falls Profil - Chatname; rank: Falls angegeben - in welche Liste er kommt
this.add = function (chatter, away, reason, server, chat, rank) {
var prFd = parent.rightFrame.document;
that.del(chatter, 1);
if (!prFd.getElementById("new" + chatter)) {
var ownsprofil = (server && chat) ? 1 : 0;
var block = (away) ? "awaylist" : ((rank) ? rank : that.getBlock(chatter, ownsprofil));
var newChatter = document.createElement("li");
with (newChatter) {
id = "new" + chatter;
title = (away) ? chatter + " ist abwesend" + ((reason) ? ": " + reason : "") : chatter;
innerHTML = that.addPics(chatter, 0) + "<span style='" + that.getUserStyle(chatter) + "' onclick=\"fluester('" + chatter + "');\">" + chatter + " </span>";
innerHTML += (ownsprofil) ? "<a id='profil" + chatter + "' title='Profil von " + chatter + "' href=\"Javascript:wopen(\'http://" + server + ".webkicks.de/" + chat + "/pv/" + chatter + "/open\',510,600)\;\">(P)</a>" : "";
innerHTML += that.addPics(chatter, 1, ownsprofil);
}
prFd.getElementById(block).appendChild(newChatter);
if (that.olSortActivated) {
that.olSort(chatter, block);
}
}
}
// del - löscht einen User aus der Onlineliste und von this.user
// id: Nickname; fromadd: Kommt die Anfrage von add (0 oder 1)
this.del = function (id, fromadd) {
var prFd = parent.rightFrame.document;
var delUser;
if (delUser = prFd.getElementById("new" + id)) {
delUser.parentNode.removeChild(delUser);
}
if (!fromadd) {
for (var i = 0; i < that.user.length; i++) {
if (that.user[i][0] == id) {
that.user.splice(i, 1);
break;
}
}
}
}
// overwriteAdds - überschreibt die add- und del-Funktionen der alten Onlineliste
this.overwriteAdds = function () {
var rf = parent.rightFrame;
rf.add = function (chatter, away, reason) {
rf.del(chatter);
that.add(chatter, away, reason);
if (rf.document.getElementById(chatter) == null) {
var y3 = document.createElement("div");
y3.id = chatter;
y3.innerHTML += ((away) ? "<i>" : "") + "<span title=" + ((away && reason) ? chatter + "ist abwesend: " + reason : chatter) + "><span onClick=\"fluester('" + chatter + "')\">" + chatter + " </span></span>" + ((away) ? "</i>" : "");
rf.document.getElementById("bd:").appendChild(y3);
}
}
rf.addp = function (chatter, server, chat, away, reason) {
rf.del(chatter);
that.add(chatter, away, reason, server, chat);
if (rf.document.getElementById(chatter) == null) {
var y3 = document.createElement("div");
y3.id = chatter;
y3.innerHTML = ((away) ? "<i>" : "") + "<span title=" + ((away && reason) ? chatter + "ist abwesend: " + reason : chatter) + "><span onClick=\"fluester('" + chatter + "')\">" + chatter + " </span></span>" + ((away) ? "</i>" : "");
y3.innerHTML += "<font title=\"Profil von " + chatter + "\"><a href=\"Javascript:wopen(\'http://" + server + ".webkicks.de/" + chat + "/pv/" + chatter + "/open\',510,600)\;\">(P)</a></font>";
rf.document.getElementById("bd:").appendChild(y3);
}
}
rf.del = function (user) {
that.del(user, 0);
var xy = rf.document.getElementById(user);
if(xy != null) {
rf.document.getElementById("bd:").removeChild(xy);
}
}
}
});
newOLint = window.setInterval('newOL.createBlocks();', 1000);