/* Banana-Chat - The first Open Source Knuddels Emulator
 * Copyright (C) 2011 - 2012 Flav <http://banana-coding.com>
 * 
 * Diese Dateien unterliegen dem Coprytight von Banana-Coding und
 * darf verändert, aber weder in andere Projekte eingefügt noch
 * reproduziert werden.
 * 
 * Der Emulator dient - sofern der Client nicht aus Eigenproduktion
 * stammt - nur zu Lernzwecken, das Hosten des originalen Knuddels Clients
 * ist auf eigene Gefahr und verstößt möglicherweise gegen Schutzrechte
 * der Knuddels.de GmbH & Co KG
 * 
 * Autoren: Flav (Grundversion), Localhost (Erweiterte Version), Kokos-Ice (Erweiterte Version)
 */



package netchat;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import tools.ProfileTools;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import tools.HexTool;
import tools.KCodeParser;
import tools.PacketCreator;
import tools.Source;
import tools.Zodiac;
import tools.database.ConnectionPool;
import tools.database.PoolConnection;
import tools.popup.Button;
import tools.popup.Label;
import tools.popup.Panel;
import tools.popup.Popup;
import tools.popup.TextField;

public class FunctionParser {
    private static NumberFormat nf;
    private static String[] dmNoWin = {"Leider kein Gewinn!", "Das war wohl nichts! Versuch es gleich nochmal...", "Nichts! Das Pech verfolgt dich...", "Du hast einen stinkenden Socken gewonnen, jedoch keine Knuddels!", "Leider nichts! Kopf hoch, das nächste Mal wird besser!"};
    private static String[] dmWin = {"%s Knuddels gehen auf dein Konto!", "Du darfst dich freuen, denn du erhälst %s Knuddels!", "Voll ins Schwarze getroffen! %s Knuddels!"};
    
	static {
        nf = NumberFormat.getInstance(Locale.GERMAN);
	}
	
	public static int countWords(String text, String word){
		int count=0;
		for(Matcher m=Pattern.compile(Pattern.quote(word)).matcher(text); m.find(); count++);
		return count;
	}
	
	public static String encode(String input) {
        StringBuilder resultStr = new StringBuilder();
        for (char ch : input.toCharArray()) {
            if (isUnsafe(ch)) {
                resultStr.append('%');
                resultStr.append(toHex(ch / 16));
                resultStr.append(toHex(ch % 16));
            } else {
                resultStr.append(ch);
            }
        }
        return resultStr.toString();
    }

    private static char toHex(int ch) {
        return (char) (ch < 10 ? '0' + ch : 'A' + ch - 10);
    }

    private static boolean isUnsafe(char ch) {
        if (ch > 128 || ch < 0)
            return true;
        return " %$&+,/:;=?@<>#%".indexOf(ch) >= 0;
    }
	
	public static boolean URLExist(String link){
	    URL url = null;
	    
	    try {
	        url = new URL(link);
	        url.openStream().close();

	        return true;
	    } catch (Exception e) {
	    	return false;
	    } 
	}
	
	public static void parse(String message, Client client, Channel channel) {
        String command = KCodeParser.escape(message.substring(1).split(" ")[0]);
        String cmd = command.toLowerCase();
        String arg = "";
        Random zufall = new Random();
        Long time = System.currentTimeMillis()/1000; 
        
        if (message.length() > cmd.length() + 1) {
            arg = message.substring(message.indexOf(' ') + 1);
        }
        
        int Anzahlspe = Server.countChars(arg, '°');
        
        if (Anzahlspe == 1) {
        	String[] argus = arg.split("°", 2);
        	arg = argus[0];
        }
        
        if(cmd.equals("auth")) {
        	if(!client.hasPermission("cmd.auth")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
            String oldPw = KCodeParser.escape(arg).split(":", 2)[0].trim();
            String msg = "";
            String info = "Bitte die Funktion folgendermaßen benutzen:#/auth Alter Sicherheitscode:Neuer Sicherheitscode";
            
            if (arg.length() > oldPw.length()) {
                msg = arg.substring(arg.indexOf(':') + 1);
            }
            
            if(oldPw.isEmpty()) {
            	client.sendButlerMessage(channel.getName(), info);
            	return;
            }
            
            if(oldPw.equals("+")) {
            	client.sendButlerMessage(channel.getName(), "Die Sicherheitsabfrage wurde _aktiviert_.");
            	client.setAuthActive((byte)1);
            	return;
            }
            
            if(oldPw.equals("-")) {
            	client.sendButlerMessage(channel.getName(), "Die Sicherheitsabfrage wurde _deaktiviert_.");
            	client.setAuthActive((byte)0);
            	return;
            }

            if(msg.isEmpty()) {
            	client.sendButlerMessage(channel.getName(), info);
            	return;
            }
            
            if(!HexTool.hash("SHA1", oldPw).equals(client.getAuthPassword())) {
            	client.sendButlerMessage(channel.getName(), "Dein aktueller Sicherheitscode Password ist falsch.");
            	return;
            }
            
        	client.sendButlerMessage(channel.getName(), "Dein Sicherheitscode wurde _geändert_.");
        	client.setAuthPassword(HexTool.hash("SHA1", msg));
        } else if(cmd.equals("chatlogs")) {
            if(!client.hasPermission("cmd.chatlogs")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	arg = KCodeParser.noKCode(arg);
        	
        	if(arg.isEmpty()) {
        		StringBuilder cl = new StringBuilder();
        		
        		File dir = new File("chatlogs");
        		File[] fileList = dir.listFiles();
        		
        		for(File f : fileList) {
        		    cl.append("#°>_h").append(f.getName()).append("|/chatlogs \"<°");
        		}
        		
        		String title = String.format("ChatLogs (%s)", fileList.length);
        		client.send(Popup.create(title, title, cl.toString(), 350, 400));
        		
        		return;
        	}
        	
        	try {
        		StringBuilder file = new StringBuilder();
        		BufferedReader in = new BufferedReader(new FileReader(String.format("chatlogs/%s", arg)));
        		String zeile = null;
        		
        		while ((zeile = in.readLine()) != null) {
        			file.append("#").append(zeile);
        		}

        		client.send(Popup.create(arg, arg, file.toString(), 600, 450));
        		in.close();
        	} catch (IOException e) {
        		client.sendButlerMessage(channel.getName(), String.format("Die Datei _%s existiert nicht_.", arg));
        	}
        } else if(cmd.equals("bugs")) {
        	if(!client.hasPermission("cmd.bugs")) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
        	}
        	
            arg = KCodeParser.escape(arg);
            String[] split = arg.split(":");
            String one = "";
            String two = "";
            
            try {
            	one = split[0].trim();
            	two = split[1].trim();
            } catch(Exception ex) {
            }
            
            /*if(typ.equalsIgnoreCase("mail")) {
            	if(msg.isEmpty() || msg.length() < 20) {
            		client.sendButlerMessage(channel.getName(), "Bitte gib eine detaillierte Beschreibung des Bugs mit mind. 20 Zeichen wieder.");
            		return;
            	}
            	
            	client.sendButlerMessage(channel.getName(), "Deine Beschreibung zu einem Bug wurde _an das Team Bugs weitergeleitet_, welches sich schnellstmöglich darum kümmert. Vielen Dank! °>1.gif<°");
            	
            	PoolConnection pcon = ConnectionPool.getConnection();
                Statement ps = null;

                try {
                    Connection con = pcon.connect();
                    ps = con.createStatement();
                    ResultSet rs = ps.executeQuery("SELECT `name`,`teams` FROM `accounts` WHERE `teams` != ''");
                    
                    while(rs.next()) {
                    	String name = rs.getString("name");
                    	String teams = rs.getString("teams");
                    	
                    	if(teams.contains("|Bugs~")) {
                    		Server.get().newMessage(Server.get().getButler(), name, "Bug gemeldet", String.format("Soeben wurde _ein Bug von °>_h%s|/serverpp \"|/w \"<°_ (%s, %s, %s) _gemeldet_.##_Beschreibung_:#%s##Bitte trage den Fall wenn möglich in unser _°BB>BugTrackingSystem|%s/bts/<r°_ ein.", client.getName().replace("<", "\\<"), client.getGender() == 1 ? "männl.":"weibl.", client.getAge(), client.getRankLabel(client.getRank()), msg, Server.get().getURL()), time);
                    	}
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    if (ps != null) {
                        try {
                            ps.close();
                        } catch (SQLException e) {
                        }
                    }

                    pcon.close();
                }
                
            	return;
            }
            */
            
            if(one.isEmpty()) {
            	return;
            }
            
            if(one.equals("?")) {
            	StringBuilder bugs = new StringBuilder();
            	
            	bugs.append("Bitte die Funktion folgendermaßen benutzen:#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs ? - Diese Hilfe öffnen°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs ticket:ID, /bugs #ID - Ein bestimmtes Ticket aufrufen°%00°#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs bts - Die BTS-Startseite aufrufen°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs verify - Tickets anzeigen, die aktuell zu verifizieren sind°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs myBugs - offene, einem selbst zugewiesene Tickets anzeigen (für Entwickler nützlich)°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs find:TEXT, /bugs search:TEXT - Das BTS nach TEXT durchsuchen°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs new - Einen euen Bug eintragen°%00°#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs appletversion:NICK - Appletversion eines beliebigen Users anzeigen (muss online sein)°%00°#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs experimente:NICK - zeigt die aktiven Experimente bei NICK in einer Liste mit Erklärung an°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs moreInfo - Tickets anzeigen, die aktuell weitere Informationen benötigen°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/fa bugs - Online-Teamler ansehen°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs flags:[NICK] - User-Flags abfragen°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs flags:[NICK]=[+flag1 -flag2 ...] - User-Flags setzen°%00°#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs clearMessageHistory - Eigene interne Message History löschen (für bestimmte Tests erforderlich)°%00°#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs clearMessageHistory:[NICK] - Interne Message History von NICK löschen (für bestimmte Tests erforderlich)°%00°");
            	bugs.append("##SmileyProject#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs clearcodes - Löscht die eigenen Codes°%00°#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs smileyfeatures - Zeige die Übersicht aller Features°%00°#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs generateCodes - Listet Befehle zum generieren neuer Codes für alle verfügbaren Serien.°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs generateCodes:SERIE - Generiert EINEN unregistrierten Code der SERIE und gibt ihn aus.°%00°#SERIE kann sein: Serien-Name, Teil des Namen (wenn eindeutig), Serien-Id (wie bei \"/bugs generateCodes\").°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs generateCodes:SERIE:ANZAHL - Generiert ANZAHL unregistrierte Codes der SERIE und gibt sie aus.°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs receive - Du empfängst sofort EIN Geschenk, das für dich hinterlegt wurde.°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs receive:<nick> - <nick> empfängt sofort EIN Geschenk, das für ihn hinterlegt wurde (sogar wenn er offline ist).°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs receiveAll - Du empfängst sofort ALLE Geschenke, die für dich hinterlegt wurden.°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs receiveAll:<nick> - <nick> empfängt sofort ALLE Geschenk, die für ihn hinterlegt wurden (sogar wenn er offline ist).°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs receiveChannel - Jeder User im Channel empfängt sofort EIN Geschenk, das für ihn hinterlegt wurde.°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs receiveAllChannel - Jeder User im Channel empfängt sofort ALLE Geschenke, die für ihn hinterlegt wurden.°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/code <code> - Einen Code aktivieren.°%00°#");
            	//bugs.append("°>cc/bullet_blue_outlined.png<%05°/code serie[:<seriesName>] = /code series = /code serien - Zeigt die Übersicht aller Serien oder sucht nach Serien die <seriesName> enthalten.°%00°#");
            	bugs.append("#Heart#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs settrash - trash heart°%00°#");
            	bugs.append("°>cc/bullet_blue_outlined.png<%05°/bugs renivetrash - trash heart°%00°");
            	
            	client.sendButlerMessage(channel.getName(), bugs.toString());
            	return;
            }
            
            if(one.equalsIgnoreCase("clearMessageHistory")) {
            	Client target = two.isEmpty() ? client : Server.get().getClient(two);
            	boolean online = true;
            	
            	if(target == null) {
            		online = false;
            		target = new Client(null);
            		target.loadStats(two);
            		
            		if(target.getName() == null) {
            			client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(two));
            			return;
            		}
            	}
            	
            	if(!online) {
            		client.sendButlerMessage(channel.getName(), CommandParser.userIsOffline(target));
            		return;
            	}
            	
            	client.sendButlerMessage(channel.getName(), String.format("Die interne MessageHistory von %s wurde _gelöscht_.", target.getName()));
            	return;
            }
            
            if(one.equalsIgnoreCase("generateCodes")) {
            	StringBuilder gc = new StringBuilder("Funktionen zum Generieren neuer Codes:#");
            	
            	//gc.append("°>cc/bullet_blue_outlined.png<%05°/bugs generateCodes:SERIE - Generiert EINEN unregistrierten Code der SERIE und gibt ihn aus.°%00°#SERIE kann sein: Serien-Name, Teil des Namen (wenn eindeutig), Serien-Id (wie bei \"/bugs generateCodes\").°%00°#");
            	//gc.append("°>cc/bullet_blue_outlined.png<%05°/bugs generateCodes:SERIE:ANZAHL - Generiert ANZAHL unregistrierte Codes der SERIE und gibt sie aus.°%00°#");
            	gc.append("Noch keine! :D");
            	client.sendButlerMessage(channel.getName(), gc.toString());
            	return;
            }
            
            if(one.equalsIgnoreCase("smileyfeatures")) {
            	ArrayList<String> groupEntries = new ArrayList<String>();
            	StringBuilder features = new StringBuilder();
            	String title = "Vorhandene Smiley-Features";
            	
            	for(String[] infos : Server.smileys.values()) {
            		String feature = infos[5];
            		
            		if(!feature.isEmpty() && !groupEntries.contains(feature)) {
            			groupEntries.add(feature);
            		}
            	}
            	
            	for(String feature : groupEntries) {
            		features.append("°>cc/bullet_blue_outlined.png<%05°").append(feature).append("°%00°##");
            	}
            	
            	client.send(Popup.create(title, title, features.toString(), 400, 250));
            	return;
            }
            
            if(one.equalsIgnoreCase("clearcodes")) {
                Client target = two.isEmpty() ? client : Server.get().getClient(two);
            	boolean online = true;
                
                
                if(target == null) {
            		online = false;
            		target = new Client(null);
            		target.loadStats(two);
            		
            		if(target.getName() == null) {
            			client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(two));
            			return;
            		}
            	
            	}
     
            	client.sendButlerMessage(channel.getName(), "Die Codes wurden _gelöscht_.");
            	target.setSmileys("");
            	target.setErhalten(0);
            	return;
            }
            
            if(one.equalsIgnoreCase("bts")) {
            	client.send(PacketCreator.openURL("http://31.17.109.157/", "_blank"));
            	return;
            }
            
            if(one.equalsIgnoreCase("settrash")) {
        		if(client.hasPermission("feature.trashheart")) {
            		client.sendButlerMessage(channel.getName(), "Du hast dir bereits das Feature _trashheart_ gesetzt.");
            		return;
            	}
            		
            	client.sendButlerMessage(channel.getName(), "Du hast dir das Feature _trashheart_ gesetzt.");
            	String bez = Server.permissions.get("feature.trashheart");
            	Server.permissions.put("feature.trashheart", String.format("%s|N%s|", bez, client.getName()));
            	Server.get().query(String.format("UPDATE `permissions` SET `rights`='%s' WHERE `permission` = 'feature.trashheart'", String.format("%s|N%s|", bez, client.getName())));
            }
            
            if(one.equalsIgnoreCase("renivetrash")) {
            	if(!client.hasPermission("feature.trashheart")) {
                	client.sendButlerMessage(channel.getName(), "Du besitzt das Feature _trashheart_ nicht.");
            		return;
            	}

            	client.sendButlerMessage(channel.getName(), "Du hast dir das Feature _trashheart_ entzogen.");
            	String bez = Server.permissions.get("feature.trashheart");
            	Server.permissions.put("feature.trashheart", bez.replace(String.format("|N%s|", client.getName()), ""));
            	Server.get().query(String.format("UPDATE `permissions` SET `rights`='%s' WHERE `permission` = 'feature.trashheart'", bez.replace(String.format("|N%s|", client.getName()), "")));
            	return;
            }
            
            if(two.isEmpty()) {
            	return;
            }
            
            if(one.equalsIgnoreCase("notfall")) {
            	if(two.isEmpty()) {
            		client.sendButlerMessage(channel.getName(), "Bitte gib den Text der SMS an.");
            		return;
            	}
            	
            	try {
            		String[] handynummern = {"00491734459606", "00491633527236", "004369911087378"};
            	
            		for(String handynummer : handynummern) {
            			String test = URLEncoder.encode(String.format("%s meldet folgenden Vorfall: %s", client.getName(), two), "UTF-8");
            			String site = String.format("http://www.innosend.de/gateway/sms.php?id=EddieDU&pw=bipdebop7505&text=%s&type=4&absender=CuddlyChat&empfaenger=%s", test, handynummer);
            			URL url = new URL(site);
                        URLConnection connection = url.openConnection();
                        InputStream is = connection.getInputStream();  
                        Scanner scanner = new Scanner(is);
                        System.out.println( "SMS: "+scanner.useDelimiter( "\\Z" ).next() );
                        is.close();
                        scanner.close();
            		}
            	
            		client.sendButlerMessage(channel.getName(), String.format("Die SMS wurde an %s Empfänger versendet.", handynummern.length));
            	} catch(Exception ex) {
            		client.sendButlerMessage(channel.getName(), "Die SMS konnten nicht gesendet werden!");
            	}
            	
            	return;
            }
            
            if(one.equalsIgnoreCase("appletversion")) {
            	Client target = Server.get().getClient(two);
            	boolean online = true;
            	
            	if(target == null) {
            		online = false;
            		target = new Client(null);
            		target.loadStats(two);
            		
            		if(target.getName() == null) {
            			client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(two));
            			return;
            		}
            	}
            	
            	if(!online) {
            		client.sendButlerMessage(channel.getName(), CommandParser.userIsOffline(target));
            		return;
            	}
            	
            	client.sendButlerMessage(channel.getName(), String.format("%s ist über die _Appletversion %s_ im Chat eingeloggt.", target.getName(), target.getAppletVersion()));
            	return;
            }
            
            if(one.equalsIgnoreCase("experimente")) {
            	Client target = Server.get().getClient(two);
            	
            	if(target == null) {
            		target = new Client(null);
            		target.loadStats(two);
            		
            		if(target.getName() == null) {
            			client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(two));
            			return;
            		}
            	}
            	
            	client.sendButlerMessage(channel.getName(), String.format("%s wirkt momentan bei keinen Experimenten mit.", target.getName()));
            	return;
            }
        } else if(cmd.equals("tut")) {
        	if(!client.hasPermission("cmd.tut")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	if (arg.equals("-")) {
        		/*  23 */       if (client.getTutAktiv() == 1) {
        		/*  24 */         client.sendButlerMessage(channel.getName(), String.format("Das automatische ''\"Tipps und Tricks\"''-System ist nun _abgeschaltet_. Du kannst es mit °BB°_°>_h/tut +|/tut +<°_§ wieder einschalten.", new Object[0]));
        		/*  25 */         client.setTutAktiv((byte)0);
        		/*     */       } else {
        		/*  27 */         client.sendButlerMessage(channel.getName(), String.format("Das ''\"Tipps und Tricks\"''-System ist _bereits ausgeschaltet_. Noch mehr ausschalten geht nicht.", new Object[0]));
        		/*     */       }
        		/*  29 */       return;
        		/*     */     }
        		/*  31 */     if (arg.equals("+")) {
        		/*  32 */       if (client.getTutAktiv() == 0) {
        		/*  33 */         client.sendButlerMessage(channel.getName(), String.format("Das automatische ''\"Tipps und Tricks\"''-System ist nun _aktiv_.", new Object[0]));
        		/*  34 */         client.setTutAktiv((byte)1);
        		/*     */       } else {
        		/*  36 */         client.sendButlerMessage(channel.getName(), String.format("Das ''\"Tipps und Tricks\"''-System ist _bereits eingeschaltet_.", new Object[0]));
        		/*     */       }
        		/*  38 */       return;
        		/*     */     }
        		/*     */ 
        		/*  41 */     if (arg.equals("++")) {
        		/*  42 */       String aktuheader = "";
        		/*  47 */       String nextheader = "";
        		/*  48 */       int tutmins = 0;
        		/*  49 */       int tutrang = 0;
        						for(int tutorial : Server.tutorials.keySet()) {
        							String[] more = Server.tutorials.get(tutorial);
        							
        							if(tutorial == client.getAktuTut()) {
        								aktuheader = more[0];
        								break;
        							} else if(tutorial == client.getAktuTut()+1) {
        								nextheader = more[0];
        								tutmins = Integer.parseInt(more[6]);
        								tutrang = Integer.parseInt(more[5]);
        								break;
        							}
        						}

        		/*  54 */       if ((client.getTutOpen() == 1) || (nextheader.isEmpty()) || (tutmins > client.getOnlineTime() / 60) || (tutrang > client.getRank())) {
        		/*  55 */         client.sendButlerMessage(channel.getName(), String.format("Du hast die aktuelle Lektion schon erfolgreich abgeschlossen. Die nächste Lektion ist noch nicht für dich verfügbar. Bitte gedulde dich noch ein bisschen.", new Object[0]));
        		/*     */       } else {
        		/*  57 */         client.sendButlerMessage(channel.getName(), String.format("Du hast soeben erfolgreich die TuT-Lektion ''" + aktuheader + "'' abgeschlossen. Als nächstes erwartet dich die Lektion ''" + nextheader + "''.", new Object[0]));
        		/*  58 */         int lala = client.getAktuTut() + 1;
        		/*  59 */         client.setAktuTut((byte)lala);
        		/*  60 */         client.setTutOpen((byte)1);
        		/*     */       }
        		/*  62 */       return;
        		/*     */     }
        		/*     */ 
        		/*  65 */     if ((!arg.isEmpty()) && (!arg.equals("index")) && (
        		/*  66 */       (arg.equals("-0")) || (arg.equals("0")) || (!Server.get().isInteger(arg)) || (Integer.parseInt(arg) < 0) || (client.getAktuTut() < Integer.parseInt(arg)))) {
        		/*  67 */       client.sendButlerMessage(channel.getName(), String.format("Diese Lektion ist noch nicht für dich freigegeben.", new Object[0]));
        		/*  68 */       return;
        		/*     */     }
        		/*  70 */     int lol = client.getAktuTut();
        		/*  71 */     if ((!arg.isEmpty()) && (!arg.equals("index"))) {
        		/*  72 */       lol = Integer.parseInt(arg);
        		/*     */     }
        		/*     */ 
        		/*  75 */     String index = "";
        		/*     */ 
        		/*  77 */     PoolConnection pcon99 = ConnectionPool.getConnection();
        		/*  78 */     PreparedStatement ps99 = null;
        		/*     */     try
        		/*     */     {
        		/*  81 */       Connection con99 = pcon99.connect();
        		/*  82 */       ps99 = con99.prepareStatement("SELECT * FROM tutorials where tutid <= '" + client.getAktuTut() + "'");
        		/*     */ 
        		/*  84 */       ResultSet rs99 = ps99.executeQuery();
        		/*  85 */       while (rs99.next())
        		/*  86 */         index = index + "°+0020°°11°  °r°" + rs99.getString("tutid") + ". °+0075BB>_r" + rs99.getString("titel") + "|/tut " + rs99.getString("tutid") + "<%00°°°#";
        		/*     */     }
        		/*     */     catch (SQLException e)
        		/*     */     {
        		/*  90 */       e.printStackTrace();
        		/*     */     } finally {
        		/*  92 */       if (ps99 != null)
        		/*     */         try {
        		/*  94 */           ps99.close();
        		/*     */         }
        		/*     */         catch (SQLException e)
        		/*     */         {
        		/*     */         }
        		/*  99 */       pcon99.close();
        		/*     */     }
        		/*     */ 
        		/* 104 */     String text = "";
        		/* 105 */     String titel = "";
        		/* 106 */     int summe = 0;
        		/* 107 */     int tutid = 0;
        		/* 108 */     if (arg.equals("index")) {
        		/* 109 */       titel = "Alle Lektionen";
        		/* 110 */       text = "°>{switchtab}0<°°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°11>RIGHT<° °+6005° #°+9007°°20>LEFT<+0010°_Alle Lektionen_°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/boxb_bl-f.png<>layout/boxb_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_br-f.png<°°>{endtable}<>LEFT<°#°+8004°°+9005°_°BB12>{table|w7|w4<>layout/line_l.png<°°>layout/line_c...w_0.xrepeat.png<° °+6010>{tc}<>RIGHT<>{noxrep}<°°>layout/tab_a_l...w_8.mx_-1.png<>layout/tab_a_c...w_0.xrepeat.png<>_hAlle Lektionen|/tp-showtab 0<>{noxrep}<>layout/tab_a_r.png<°°>layout/line_r.png<+6010>{endtable}<>LEFT<°_°°# # #°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°16>LEFT<+0010°_Alle Lektionen_°%007°#  §°>{endtable}<>LEFT<°#°1° # °+8003°°1>{table|0|w1|w1<>{tc}<>layout/boxb-h_l.gif<>layout/boxb-h_c...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb-h_r.gif<°°>{endtable}<>LEFT<°#°+8002°°>{table|4|w1,bgimg;layout/box_cl.gif;layout/box_cc.gif;layout/box_cr.gif|4<>{tc}<°°14+0010° #";
        		/* 111 */       text = text + index;
        		/* 112 */       text = text + "#°+9000°#°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/box_bl-f.png<>layout/box_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/box_br-f.png<°°>{endtable}<>LEFT<°#°>{showtab}0<°";
        		/*     */     }
        		/*     */     else
        		/*     */     {
        		/* 116 */       String header = "";
        		/* 117 */       String erklarung = "";
        		/* 118 */       String hintergrund = "";
        		/* 119 */       String merke = "";
        		/*     */ 
        		/* 122 */       PoolConnection pcon = ConnectionPool.getConnection();
        		/* 123 */       PreparedStatement ps = null;
        		/*     */       try
        		/*     */       {
        		/* 126 */         Connection con = pcon.connect();
        		/* 127 */         ps = con.prepareStatement("SELECT * FROM tutorials where tutid='" + lol + "'");
        		/* 128 */         ResultSet rs = ps.executeQuery();
        		/*     */ 
        		/* 131 */         while (rs.next()) {
        		/* 132 */           titel = rs.getString("titel");
        		/* 133 */           header = rs.getString("header");
        		/* 134 */           erklarung = rs.getString("erklarung");
        		/* 135 */           hintergrund = rs.getString("hintergrund");
        		/* 136 */           merke = rs.getString("merke");
        		/* 137 */           tutid = rs.getInt("tutid");
        		/*     */ 
        		/* 139 */           merke = merke.replace("[MAINURL]", Server.get().getURL());
        		/* 140 */           hintergrund = hintergrund.replace("[MAINURL]", Server.get().getURL());
        		/* 141 */           erklarung = erklarung.replace("[MAINURL]", Server.get().getURL());
        		/*     */         }
        		/*     */       } catch (SQLException e) {
        		/* 144 */         e.printStackTrace();
        		/*     */       } finally {
        		/* 146 */         if (ps != null)
        		/*     */           try {
        		/* 148 */             ps.close();
        		/*     */           }
        		/*     */           catch (SQLException e)
        		/*     */           {
        		/*     */           }
        		/* 153 */         pcon.close();
        		/*     */       }
        		/*     */ 
        		/* 158 */       PoolConnection pcon3 = ConnectionPool.getConnection();
        		/* 159 */       PreparedStatement ps3 = null;
        		/*     */       try {
        		/* 161 */         Connection con = pcon3.connect();
        		/* 162 */         ps3 = con.prepareStatement("SELECT COUNT(id) AS summe FROM `tutorials`");
        		/* 163 */         ResultSet rs3 = ps3.executeQuery();
        		/* 164 */         while (rs3.next())
        		/* 165 */           summe = rs3.getInt("summe");
        		/*     */       }
        		/*     */       catch (SQLException e) {
        		/* 168 */         e.printStackTrace();
        		/*     */       } finally {
        		/* 170 */         if (ps3 != null)
        		/*     */           try {
        		/* 172 */             ps3.close();
        		/*     */           }
        		/*     */           catch (SQLException e)
        		/*     */           {
        		/*     */           }
        		/* 177 */         pcon3.close();
        		/*     */       }
        		/*     */ 
        		/* 180 */       text = "°>{switchtab}0<°°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°11>RIGHT<°Lektion _";
        		/* 181 */       text = text + tutid + "/" + summe;
        		/* 182 */       text = text + "_°+6005° #°+9007°°20>LEFT<+0010°";
        		/* 183 */       text = text + "_" + titel + "_";
        		/* 184 */       text = text + "°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/boxb_bl-f.png<>layout/boxb_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_br-f.png<°°>{endtable}<>LEFT<°#°+8004°°+9005°_°BB12>{table|w7|w4<>layout/line_l.png<°°>layout/tab_a_l...w_8.mx_-1.png<>layout/tab_a_c...w_0.xrepeat.png<>_hErklärung|/tp-showtab 0<>{noxrep}<°";
        		/* 185 */       if (!hintergrund.isEmpty()) {
        		/* 186 */         text = text + "°>layout/tab_a_r.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hHintergrund|/tp-showtab 2<>{noxrep}<°";
        		/*     */       }
        		/* 188 */       String zwei = "i";
        		/* 189 */       if ((hintergrund.isEmpty()) && (!merke.isEmpty())) {
        		/* 190 */         zwei = "a";
        		/*     */       }
        		/* 192 */       if (!merke.isEmpty()) {
        		/* 193 */         text = text + "°>layout/tab_" + zwei + "_r.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hMerke|/tp-showtab 3<>{noxrep}<°";
        		/*     */       }
        		/* 195 */       String last = "i";
        		/* 196 */       if ((merke.isEmpty()) && (hintergrund.isEmpty())) {
        		/* 197 */         last = "a";
        		/*     */       }
        		/* 199 */       text = text + "°>layout/tab_" + last + "_r.png<°°>layout/line_c...w_0.xrepeat.png<° °+6010>{tc}<>RIGHT<>{noxrep}<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hAlle Lektionen|/tp-showtab 1<>{noxrep}<>layout/tab_i_r.png<°°>layout/line_r.png<+6010>{endtable}<>LEFT<°_°°# # #°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°16>LEFT<+0010°_";
        		/* 200 */       text = text + header;
        		/* 201 */       text = text + "_°%007°#  §°>{endtable}<>LEFT<°#°1° # °+8003°°1>{table|0|w1|w1<>{tc}<>layout/boxb-h_l.gif<>layout/boxb-h_c...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb-h_r.gif<°°>{endtable}<>LEFT<°#°+8002°°>{table|4|w1,bgimg;layout/box_cl.gif;layout/box_cc.gif;layout/box_cr.gif|4<>{tc}<°°14+0010° #######################°+8022°°14°°>JUSTIFY<°";
        		/* 202 */       text = text + erklarung;
        		/* 203 */       text = text + "#°+9000°#°+9000°#°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/box_bl-f.png<>layout/box_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/box_br-f.png<°°>{endtable}<>LEFT<°#§°>°";
        		/*     */ 
        		/* 209 */       text = text + "°>{switchtab}2<°°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°11>RIGHT<°Lektion _";
        		/* 210 */       text = text + tutid + "/" + summe;
        		/* 211 */       text = text + "_°+6005° #°+9007°°20>LEFT<+0010°";
        		/* 212 */       text = text + "_" + titel + "_";
        		/* 213 */       text = text + "°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/boxb_bl-f.png<>layout/boxb_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_br-f.png<°°>{endtable}<>LEFT<°#°+8004°°+9005°_°BB12>{table|w7|w4<>layout/line_l.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hErklärung|/tp-showtab 0<>{noxrep}<°";
        		/*     */ 
        		/* 215 */       text = text + "°>layout/tab_i_r.png<°°>layout/tab_a_l...w_8.mx_-1.png<>layout/tab_a_c...w_0.xrepeat.png<>_hHintergrund|/tp-showtab 2<>{noxrep}<°";
        		/*     */ 
        		/* 218 */       if (!merke.isEmpty()) {
        		/* 219 */         text = text + "°>layout/tab_a_r.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hMerke|/tp-showtab 3<>{noxrep}<°";
        		/*     */       }
        		/*     */ 
        		/* 222 */       text = text + "°>layout/tab_i_r.png<°°>layout/line_c...w_0.xrepeat.png<° °+6010>{tc}<>RIGHT<>{noxrep}<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hAlle Lektionen|/tp-showtab 1<>{noxrep}<>layout/tab_i_r.png<°°>layout/line_r.png<+6010>{endtable}<>LEFT<°_°°# # #°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°16>LEFT<+0010°_";
        		/* 223 */       text = text + header;
        		/* 224 */       text = text + "_°%007°#  §°>{endtable}<>LEFT<°#°1° # °+8003°°1>{table|0|w1|w1<>{tc}<>layout/boxb-h_l.gif<>layout/boxb-h_c...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb-h_r.gif<°°>{endtable}<>LEFT<°#°+8002°°>{table|4|w1,bgimg;layout/box_cl.gif;layout/box_cc.gif;layout/box_cr.gif|4<>{tc}<°°14+0010° #######################°+8022°°14°°>JUSTIFY<°";
        		/* 225 */       text = text + hintergrund;
        		/* 226 */       text = text + "#°+9000°#°+9000°#°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/box_bl-f.png<>layout/box_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/box_br-f.png<°°>{endtable}<>LEFT<°#§°>°";
        		/*     */ 
        		/* 230 */       text = text + "°>{switchtab}3<°°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°11>RIGHT<°Lektion _";
        		/* 231 */       text = text + tutid + "/" + summe;
        		/* 232 */       text = text + "_°+6005° #°+9007°°20>LEFT<+0010°";
        		/* 233 */       text = text + "_" + titel + "_";
        		/* 234 */       text = text + "°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/boxb_bl-f.png<>layout/boxb_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_br-f.png<°°>{endtable}<>LEFT<°#°+8004°°+9005°_°BB12>{table|w7|w4<>layout/line_l.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hErklärung|/tp-showtab 0<>{noxrep}<°";
        		/* 235 */       if (!hintergrund.isEmpty()) {
        		/* 236 */         text = text + "°>layout/tab_i_r.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hHintergrund|/tp-showtab 2<>{noxrep}<°";
        		/*     */       }
        		/*     */ 
        		/* 240 */       text = text + "°>layout/tab_i_r.png<°°>layout/tab_a_l...w_8.mx_-1.png<>layout/tab_a_c...w_0.xrepeat.png<>_hMerke|/tp-showtab 3<>{noxrep}<°";
        		/*     */ 
        		/* 242 */       text = text + "°>layout/tab_a_r.png<°°>layout/line_c...w_0.xrepeat.png<° °+6010>{tc}<>RIGHT<>{noxrep}<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hAlle Lektionen|/tp-showtab 1<>{noxrep}<>layout/tab_i_r.png<°°>layout/line_r.png<+6010>{endtable}<>LEFT<°_°°# # #°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°16>LEFT<+0010°_";
        		/* 243 */       text = text + header;
        		/* 244 */       text = text + "_°%007°#  §°>{endtable}<>LEFT<°#°1° # °+8003°°1>{table|0|w1|w1<>{tc}<>layout/boxb-h_l.gif<>layout/boxb-h_c...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb-h_r.gif<°°>{endtable}<>LEFT<°#°+8002°°>{table|4|w1,bgimg;layout/box_cl.gif;layout/box_cc.gif;layout/box_cr.gif|4<>{tc}<°°14+0010° #######################°+8022°°14°°>JUSTIFY<°";
        		/* 245 */       text = text + merke;
        		/* 246 */       text = text + "#°+9000°#°+9000°#°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/box_bl-f.png<>layout/box_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/box_br-f.png<°°>{endtable}<>LEFT<°#§°>°";
        		/*     */ 
        		/* 251 */       text = text + "°>{switchtab}1<°°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°11>RIGHT<°Lektion _";
        		/* 252 */       text = text + tutid + "/" + summe;
        		/* 253 */       text = text + "_°+6005° #°+9007°°20>LEFT<+0010°";
        		/* 254 */       text = text + "_" + titel + "_";
        		/* 255 */       text = text + "°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/boxb_bl-f.png<>layout/boxb_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_br-f.png<°°>{endtable}<>LEFT<°#°+8004°°+9005°_°BB12>{table|w7|w4<>layout/line_l.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hErklärung|/tp-showtab 0<>{noxrep}<°";
        		/* 256 */       if (!hintergrund.isEmpty()) {
        		/* 257 */         text = text + "°>layout/tab_i_r.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hHintergrund|/tp-showtab 2<>{noxrep}<°";
        		/*     */       }
        		/* 259 */       if (!merke.isEmpty()) {
        		/* 260 */         text = text + "°>layout/tab_i_r.png<°°>layout/tab_i_l...w_8.mx_-1.png<>layout/tab_i_c...w_0.xrepeat.png<>_hMerke|/tp-showtab 3<>{noxrep}<°";
        		/*     */       }
        		/*     */ 
        		/* 263 */       text = text + "°>layout/tab_i_r.png<°°>layout/line_c...w_0.xrepeat.png<° °+6010>{tc}<>RIGHT<>{noxrep}<°°>layout/tab_a_l...w_8.mx_-1.png<>layout/tab_a_c...w_0.xrepeat.png<>_hAlle Lektionen|/tp-showtab 1<>{noxrep}<>layout/tab_a_r.png<°°>layout/line_r.png<+6010>{endtable}<>LEFT<°_°°# # #°1>{table|0|w1|w1<>{tc}<>layout/boxb_tl.png<>layout/boxb_tc...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb_tr.png<°°>{endtable}<>LEFT<°#°+8003°°>{table|4|w1,bgimg;layout/boxb_cl.gif;layout/boxb_cc.gif;layout/boxb_cr.gif|4<>{tc}<°°16>LEFT<+0010°_";
        		/* 264 */       text = text + "Alle Lektionen";
        		/* 265 */       text = text + "_°%007°#  §°>{endtable}<>LEFT<°#°1° # °+8003°°1>{table|0|w1|w1<>{tc}<>layout/boxb-h_l.gif<>layout/boxb-h_c...w_0.xrepeat.gif<° °>{tc}<>RIGHT<>{noxrep}<>layout/boxb-h_r.gif<°°>{endtable}<>LEFT<°#°+8002°°>{table|4|w1,bgimg;layout/box_cl.gif;layout/box_cc.gif;layout/box_cr.gif|4<>{tc}<°°14+0010° #######################°+8022°°14°°>JUSTIFY<°";
        		/* 266 */       text = text + index;
        		/* 267 */       text = text + "#°+9000°#°+9000°#°%00° §°>{endtable}<>LEFT<°#°+8002°°1>{table|0|w1|w1<>{tc}<>layout/box_bl-f.png<>layout/box_bc-f...w_0.xrepeat.png<° °>{tc}<>RIGHT<>{noxrep}<>layout/box_br-f.png<°°>{endtable}<>LEFT<°";
        		/*     */ 
        		/* 271 */       text = text + "#°+8002°°>LEFT<°#°>{showtab}0<°";
        		/*     */     }
        		/*     */ 
        		/* 274 */     Popup popup2 = new Popup("TuT: " + titel,null, text, 450, 600);
        		/* 275 */     Panel panel = new Panel();
        		/* 276 */     Button button2 = new Button("    <    ");
        		/* 277 */     button2.setStyled(true);
        		/* 278 */     if ((tutid == 1) || (arg.equals("index")))
        		/* 279 */       button2.disableClose();
        		/*     */     else {
        		/* 281 */       button2.setCommand(String.format("/tut %s", new Object[] { Integer.valueOf(tutid - 1) }));
        		/*     */     }
        		/* 283 */     panel.addComponent(button2);
        		/* 284 */     Button button = new Button("        OK        ");
        		/* 285 */     button.setStyled(true);
        		/* 286 */     panel.addComponent(button);
        		/* 287 */     Button button3 = new Button("    >    ");
        		/* 288 */     button3.setStyled(true);
        		/* 289 */     if ((tutid == summe) || (arg.equals("index")) || (client.getAktuTut() < tutid + 1))
        		/* 290 */       button3.disableClose();
        		/*     */     else {
        		/* 292 */       button3.setCommand(String.format("/tut %s", new Object[] { Integer.valueOf(tutid + 1) }));
        		/*     */     }
        		/* 294 */     panel.addComponent(button3);
        		/* 295 */     popup2.addPanel(panel);
        		/*     */ 
        		/* 297 */     client.send(popup2.toString());
        
        } else 
        if(cmd.equals("stat")) {
        	if(!client.hasPermission("cmd.stat")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	String title = "Statistiken zu CuddlyChat";
        	StringBuilder stat = new StringBuilder();
        	PoolConnection pcon = ConnectionPool.getConnection();
            Statement ps = null;

            try {
                Connection con = pcon.connect();
                ps = con.createStatement();
                ResultSet rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts`");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _User insgesamt_:°%40°").append(nf.format(rs.getInt("a")));
                }

                rs.close();
                rs = ps.executeQuery("SELECT `id` FROM `accounts` ORDER BY `id` DESC");
                
                if(rs.next()) {
                	stat.append(" [").append(rs.getInt("id")).append("]°%00°#");
                }
                
                rs.close();
                rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts` WHERE `sperre` != 0");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _Gesperrte User_:°%40°").append(rs.getInt("a")).append("°%00°#");
                }
                
                stat.append("°>cc/bullet_blue_outlined.png<° _Butler_:°%40>_h").append(Server.get().getButler().getName()).append("|/serverpp \"|/w \"<° (").append(Server.get().getButler().getAge()).append(")°>").append(Server.get().getButler().getGender() == 1 ? "male":"female").append(".png<%00°#");

                rs.close();
                rs = ps.executeQuery("SELECT `name`, `registerIP`, `gender`, `age` FROM `accounts` ORDER BY `id` DESC");
                
                if(rs.next()) {
                	byte gender = rs.getByte("gender");
                	
                	stat.append("°>cc/bullet_blue_outlined.png<° _Neuster User_:°%40>_h").append(rs.getString("name")).append("|/serverpp \"|/w \"<° (").append(rs.getInt("age")).append("°>").append(gender == 1 ? "male":"female").append(".png<°, IP: °>_h").append(rs.getString("registerIP")).append("|/checkip \"<°)°%00°#");
                }
                rs.close();
                rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts` WHERE `rank` = 0");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _User_:°%40°").append(rs.getInt("a")).append("°%00°#");
                }
                rs.close();
                rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts` WHERE `rank` = 1");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _Familymitglieder_:°%40°").append(rs.getInt("a")).append("°%00°#");
                }
                rs.close();
                rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts` WHERE `rank` = 2");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _Stammis_:°%40°").append(rs.getInt("a")).append("°%00°#");
                }
                rs.close();
                rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts` WHERE `rank` = 3");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _Ehrenmitglieder_:°%40°").append(rs.getInt("a")).append(" (1 Bot)°%00°#");
                }
                rs.close();
                rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts` WHERE `rank` = 5");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _inoffizielle Admins_:°%40°").append(rs.getInt("a")).append("°%00°#");
                }
                rs.close();
                rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts` WHERE `rank` > 5 AND `rank` < 8");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _Admins_:°%40°").append(rs.getInt("a")).append("°%00°#");
                }
                rs.close();
                rs = ps.executeQuery("SELECT COUNT(`id`) AS `a` FROM `accounts` WHERE `rank` > 7");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _Sysadmins_:°%40°").append(rs.getInt("a")).append(" (1 Bot)°%00°#");
                }
                if(Settings.getStammi() != null) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _Stammi des Monats_:°%40°").append(Settings.getStammi()).append("°%00°#");
                }
                rs.close();
                stat.append("#°>cc/bullet_blue_outlined.png<° _Knuddels im Umlauf_:°%40°").append(nf.format(Server.get().getAllKnuddels()+Server.get().getAllKontoKnuddels())).append(" (").append(nf.format(Server.get().getAllKontoKnuddels())).append(" auf Schweizer Knuddelskonten)°%00°#");
            	
                rs = ps.executeQuery("SELECT SUM(`roses`) AS `a` FROM `accounts`");
                
                if(rs.next()) {
                	stat.append("°>cc/bullet_blue_outlined.png<° _Rosen im Umlauf_:°%40°").append(rs.getInt("a")).append("°%00°#");
                }
                
                stat.append("°>cc/bullet_blue_outlined.png<° _High or Low Jackpot_:°%40°").append(Settings.getHoljackpot()).append(" (°>_h").append(Settings.getHolnick()).append("|/serverpp \"|/w \"<° mit Runde ").append(Settings.getHolrunde()).append(")°%00°");
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (ps != null) {
                    try {
                        ps.close();
                    } catch (SQLException e) {
                    }
                }

                pcon.close();
            }
        	
        	
    		client.send(Popup.create(title, title, stat.toString(), 500, 300));
        } else if(cmd.equals("cm")) {
        	if(!client.hasPermission("cmd.cm")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung");
        		return;
        	}
        	
        	if(arg.equalsIgnoreCase("stat")) {
        		StringBuilder stat = new StringBuilder();
        		String title = "Bla";
        		
        		for(String wahl : Server.elections.keySet()) {
        			String[] more = Server.elections.get(wahl);
        			int active = Integer.parseInt(more[0]);
        			
        			if(active == 1) {
        				String voted = "Blubb";
        				//TODO
        				stat.append("_").append(wahl).append("_#");
        				stat.append(voted);
            			stat.append("#");
        			}
        		}
        		
        		client.send(Popup.create(title, title, stat.toString(), 400, 250));
        		return;
        	}
        } else if(cmd.equals("uptime")) {
       	 	if(!client.hasPermission("cmd.uptime")) {
       	 		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
       	 		return;
       	 	}
    	 
       	 	StringBuilder uptime = new StringBuilder();
       	 	uptime.append("#Uptimes und Revisionen einzelner Server:#");
    	 
       	 	uptime.append("#Chatserver (CuddlyChat)#Uptime: ").append(Server.get().timeStampToDate(Server.serverOnline)).append(" ").append(Server.get().timeStampToTime(Server.serverOnline)).append("#Revision: ").append(Settings.revision/2);
    	 
       	 	uptime.append("##--------------------##OnlineUser (Max Today): ").append(Server.get().getClients().size());
       	 	uptime.append(" (").append(Server.onlineUsers.size()).append(")#Aktuell keine akuten Bugs bekannt.");
    	 
       	 	client.sendButlerMessage(channel.getName(), uptime.toString());
        }else if(cmd.equals("img")) {
        	if(!client.hasPermission("cmd.img")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	if(arg.isEmpty()) {
        		client.sendButlerMessage(channel.getName(), "Bitte diese Funktion folgendermaßen benutzen:#/img URL#(Externes Bild der URL anzeigen)");
        		return;
        	}
        	
        	if(!arg.startsWith("http://") && !arg.startsWith("https://")) {
        		arg = String.format("%s%s%s", Server.get().getURL(), arg.startsWith("pics/")?"":"pics/", arg);
        	}
        	
        	String argLow = arg.toLowerCase();
        	
        	if(!argLow.endsWith(".jpg") && !argLow.endsWith(".png") && !argLow.endsWith(".jpeg") && !arg.endsWith(".gif") || !URLExist(arg)) {
        		client.sendButlerMessage(channel.getName(), String.format("Das Bild _%s ist ungültig_.", KCodeParser.escape(arg)));
        		return;
        	}

        	channel.broadcastAction(">", String.format("%s sendet folgendes Bild:#°>pic.php?url=%s<°", client.getName(), arg));
        } else if(cmd.equals("rights")) {
        	if(!client.hasPermission("cmd.rights")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	String typ = KCodeParser.escape(arg).split(":", 2)[0].trim();
            String msg = "";
            
            if (arg.length() > typ.length()) {
                msg = arg.substring(arg.indexOf(':') + 1);
            }
        	
        	if(arg.equals("editor")) {
        		StringBuilder per = new StringBuilder("_Recht°%50°Bezeichnung°%00°_#");
        		String title = "Rights-Editor - Übersicht";
        		List<String> sortedList = new ArrayList<String>();
        		sortedList.addAll(Server.permissions.keySet());
        		Collections.sort(sortedList);
        		 
        		Iterator<String> iter = sortedList.iterator();
        		
        		while (iter.hasNext()) {
        			String permission = iter.next();
        			String rights = Server.permissions.get(permission);
        			
        			per.append("_°B>").append(permission).append("|/rights edit:\"<r°_");
        			
        			if(!rights.isEmpty()) {
        				per.append("°%50°").append(rights).append("°%00°");
        			}
        			
        			per.append("#");
        			
        		}
        		
        		client.send(Popup.create(title, title, per.toString(), 500, 300));
        		return;
        	}
        	
        	if(arg.equals("smiley-overview")) {
        		StringBuilder per = new StringBuilder();
        		String title = "Rechte-Editor - Smiley-Übersicht";
        		
        		for(int smiley : Server.smileys.keySet()) {
        			per.append("_").append(smiley).append("_°%30>s/").append(smiley).append(".gif<%00°#");
        		}
        		
        		client.send(Popup.create(title, title, per.toString(), 400, 250));
        		return;
        	}
        	
        	if(arg.equals("status-overview")) {
        		client.send(Popup.create("Rechte-Editor - Status-Übersicht", "Rechte-Editor - Status-Übersicht", "_0_°%30°Mitglied°%00B°#_1_°%30°Familymitglied°%00E°#_2_°%30°Stammi°%00°#_3_°%30°Ehrenmitglied°%00°#_4_°%30°Status 4°%00°#_5_°%30°inoffizieller Admin°%00R°#_6_°%30°Admin°%00°#_7_°%30°Admin Status 7°%00°#_8_°%30°Sysadmin Status 8°%00°#_9_°%30°Sysadmin Status 9°%00°#_10_°%30°Sysadmin Status 10°%00°#_11_°%30°Sysadmin Status 11°%00°", 400, 250));
        		return;
        	}
        	
        	if(typ.equals("edit")) {
        		if(!Server.permissions.containsKey(msg)) {
        			client.sendButlerMessage(channel.getName(), String.format("Das Recht _%s existiert nicht_.", msg));
        			return;
        		}
        	
        		client.send(PacketCreator.createRightsEditorWindow(msg, Server.permissions.get(msg)));
        		return;
        	}
        	
        	Client target = typ.isEmpty() ? client : Server.get().getClient(typ);
        	
        	if(target == null) {
        		target = new Client(null);
        		target.loadStats(typ);
        		
        		if(target.getName() == null) {
        			client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(typ));
        			return;
        		}
        	}
        	
        	if(!msg.isEmpty()) {
        		boolean remove = false;
        		
        		if(msg.startsWith("!")) {
        			remove = true;
        			msg = msg.substring(1);
        		}
        		
        		if(!Server.permissions.containsKey(msg)) {
        			client.sendButlerMessage(channel.getName(), String.format("Das Recht _%s existiert nicht_.", msg));
        			return;
        		}
        		
        		String bez = Server.permissions.get(msg);
        		
        		if(remove) {
            		if(!target.hasPermission(msg)) {
            			client.sendButlerMessage(channel.getName(), String.format("%s besitzt das Recht _%s_ nicht.", target.getName(), msg));
            			return;
            		}
            		
            		client.sendButlerMessage(channel.getName(), String.format("%s wurde das Recht _%s entzogen_.", target.getName(), msg));
            		Server.permissions.put(msg, bez.replace(String.format("|N%s|", target.getName()), ""));
            		Server.get().query(String.format("UPDATE `permissions` SET `rights`='%s' WHERE `permission` = '%s'", bez.replace(String.format("|N%s|", target.getName()), ""), msg));
        		} else {
        			if(target.hasPermission(msg)) {
            			client.sendButlerMessage(channel.getName(), String.format("%s besitzt das Recht _%s_ bereits.", target.getName(), msg));
            			return;
            		}
            		
            		client.sendButlerMessage(channel.getName(), String.format("%s wurde das Recht _%s hinzugefügt_.", target.getName(), msg));
            		Server.permissions.put(msg, String.format("%s|N%s|", bez, target.getName()));
            		Server.get().query(String.format("UPDATE `permissions` SET `rights`='%s' WHERE `permission` = '%s'", String.format("%s|N%s|", bez, target.getName()), msg));
        		}
        		
        		return;
        	}
        	
        	StringBuilder per = new StringBuilder("_");
    		String title = String.format("Rechte von %s", target.getName());
    		List<String> sortedList = new ArrayList<String>();
    		sortedList.addAll(Server.permissions.keySet());
    		Collections.sort(sortedList);
    		 
    		Iterator<String> iter = sortedList.iterator();
    		
    		while (iter.hasNext()) {
    			String permission = iter.next();
    			String key = Server.permissions.get(permission);
    			
    			if(target.hasPermission(permission)) {
    				per.append(permission);
    				
    				if(key.contains(String.format("|N%s|", target.getName()))) {
    					per.append(" °%70>finger.b.gif<° °BB>Entziehen|/rights ").append(target.getName()).append(":!").append(permission).append("<r%00°");
    				}
    				
    				per.append("#");
    			}
    		}
    		
    		client.send(Popup.create(title, title, per.toString(), 400, 250));
    		
        } else if(cmd.equals("syslog")) {
        	if(!client.hasPermission("cmd.syslog")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	String title = "Sysadmin-Log";
        	StringBuilder log = new StringBuilder("_Zeitpunkt°%30°Nickname°%50°Information°%00°_#");
        	List<String> sortedList = new ArrayList<String>();
    		sortedList.addAll(Server.syslog.keySet());
    		Collections.sort(sortedList);
    		 
    		Iterator<String> iter = sortedList.iterator();
    		
    		while (iter.hasNext()) {
    			long timeStamp = Long.parseLong(iter.next());
        		String timeString = String.format("%s %s", Server.get().timeStampToDate(timeStamp), Server.get().timeStampToTime(timeStamp));
        		String[] infos = Server.syslog.get(String.valueOf(timeStamp));
        		String nick = infos[0];
        		String text = infos[1];
        		
        		log.append(timeString).append("°%30>_h").append(nick).append("|/serverpp \"|/w \"<%50°").append(text).append("°%00°#");
    		}
        	
        	client.send(Popup.create(title, title, log.toString(), 800, 400));
        } else if(cmd.equals("server")) {
        	if(!client.hasPermission("cmd.stat") && !client.hasPermission("cmd.update") && !client.hasPermission("cmd.server.werbung") && !client.hasPermission("cmd.server.umfragen") && !client.hasPermission("cmd.register") && !client.hasPermission("cmd.shutdown") && !client.hasPermission("cmd.wm") && !client.hasPermission("cmd.server.badwords") && !client.hasPermission("cmd.server.butler") && !client.hasPermission("cmd.server.functions") && !client.hasPermission("cmd.server.help") && !client.hasPermission("cmd.server.macros") && !client.hasPermission("cmd.server.rights") && !client.hasPermission("cmd.server.teams") && !client.hasPermission("cmd.server.todo") && !client.hasPermission("cmd.server.toplists") && !client.hasPermission("cmd.server.elections") && !client.hasPermission("cmd.server.wordmix")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	String module = "";
        	String type = "";
            String more = "";
        	String[] split = arg.split(":", 3);
        	String[] modules = new String[] {"BadWords","Butler", "Funktionen", "Hilfe", "Makros", "Rechte", "Teams", "ToDo", "Toplisten", "Umfragen", "Wahlen", "Werbung", "WordMix"};
            
            try {
            	module = split[0].trim();
            	type = split[1].trim();
            	more = split[2].trim();
            } catch(Exception ex) {
            }
            
            if(module.isEmpty()) {
                StringBuilder server = new StringBuilder();
                server.append("Der Server läuft seit _").append(Server.get().getButler().getLoginTime()).append("_.##");
                
                for(int i=0;i<modules.length;i++) {
                	if(client.hasPermission(String.format("cmd.server.%s", modules[i].toLowerCase().replace("funktionen", "functions").replace("hilfe", "help").replace("makros", "macros").replace("rechte", "rights").replace("toplisten", "toplists").replace("wahlen", "elections")))) {
                		if(i%2 == 1) {
                			server.append("°%60°");
                		}

                		server.append("°>cc/bullet_blue_outlined.png<° _°B>").append(modules[i]).append("|/server ").append(modules[i]).append(":overview<r°_");
                
                		if(i%2 == 1) {
                			server.append("°%00°#");
                		}
                	}
                }
                
                server.append("##°-°");
                
                if(client.hasPermission("cmd.stat")) {
                	server.append("#°>cc/bullet_blue_outlined.png<° _°B>Chat-Statistiken anzeigen|/stat<r°_");
                }
                
                if(client.hasPermission("cmd.shutdown")) {
                	server.append("#°>cc/bullet_blue_outlined.png<° _°B>Chatserver ausschalten|/shutdown<r°_");
                }
                
                if(client.hasPermission("cmd.update")) {
                	server.append("#°>cc/bullet_blue_outlined.png<° _°B>Chatserver updaten|/update<r°_");
                }
                
                if(client.hasPermission("cmd.register")) {
                	server.append("#°>cc/bullet_blue_outlined.png<° _°B>Registration ").append(Settings.getRegistration() == 1 ? "aus":"ein").append("schalten|/register ").append(Settings.getRegistration() == 1 ? "off":"on").append("<r°_");
                }
                
                if(client.hasPermission("cmd.wm")) {
                	server.append("#°>cc/bullet_blue_outlined.png<° _°B>Wartungsmodus ").append(Settings.getMaintenance() == 1 ? "aus":"ein").append("schalten|/wm ").append(Settings.getMaintenance() == 1 ? "off":"on").append("<r°_");
                }
                
                client.send(Popup.create("Server - Übersicht", "Server - Übersicht", server.toString(), 350, 330));
                return;
            }
            
            if(!module.equalsIgnoreCase("wordmix") && !module.equalsIgnoreCase("umfragen") && !module.equalsIgnoreCase("werbung") && !module.equalsIgnoreCase("wahlen") && !module.equalsIgnoreCase("todo") && !module.equalsIgnoreCase("teams") && !module.equalsIgnoreCase("toplisten") && !module.equalsIgnoreCase("makros") && !module.equalsIgnoreCase("hilfe") && !module.equalsIgnoreCase("funktionen") && !module.equalsIgnoreCase("badwords") && !module.equalsIgnoreCase("rechte") && !module.equalsIgnoreCase("butler")) {
            	client.sendButlerMessage(channel.getName(), "Modules: BadWords, Butler, Funktionen, Hilfe, Makros, Rechte, Teams, ToDo, Toplisten, Wahlen, Werbung, WordMix");
            	return;
            }

            if(type.equalsIgnoreCase("overview")) {
            	if(!client.hasPermission(String.format("cmd.server.%s", module.toLowerCase().replace("funktionen", "functions").replace("hilfe", "help").replace("makros", "macros").replace("rechte", "rights").replace("toplisten", "toplists").replace("wahlen", "elections")))) {
            		return;
            	}
            	
                StringBuilder server = new StringBuilder();
                server.append("_Modul_:°%30°").append(module).append("°%00°#_Einträge_:°%30°");
                
                int entries = 0;
                
                if(module.equalsIgnoreCase("wahlen")) {
                	entries = Server.elections.size();
                } else if(module.equalsIgnoreCase("werbung")) {
                	entries = Server.werbung.size();
                } else if(module.equalsIgnoreCase("toplisten")) {
                	entries = Server.toplisten.size();
                } else if(module.equalsIgnoreCase("todo")) {
                	entries = Server.todo.size();
                } else if(module.equalsIgnoreCase("wordmix")) {
                	entries = Server.wordmix.size();
                } else if(module.equalsIgnoreCase("rechte")) {
                	entries = Server.permissions.size();
                } else if(module.equalsIgnoreCase("badwords")) {
                	entries = Server.badwords.size();
                } else if(module.equalsIgnoreCase("funktionen")) {
                	entries = Server.functions.size();
                } else if(module.equalsIgnoreCase("hilfe")) {
                	entries = Server.help.size();
                } else if(module.equalsIgnoreCase("teams")) {
                	entries = CommandParser.countChars(Settings.getTeams(), '|')/2;
                } else if(module.equalsIgnoreCase("butler")) {
                	entries = Server.james.size();
                } else if(module.equalsIgnoreCase("makros")) { 
                	entries = Server.macros.size();
                } else if(module.equalsIgnoreCase("umfragen")) { 
                	entries = Server.umfragen.size();
                }
                
                server.append(nf.format(entries)).append("°%00°#");

                server.append("#°>cc/bullet_blue_outlined.png<° _°B>Neuer Eintrage|/server ").append(module).append("<r°_");
                server.append("#°>cc/bullet_blue_outlined.png<° _°B>Vorhandene Eintrage|/server ").append(module).append(":entries<r°_");
            	
                String title = String.format("Server - %s - Übersicht", module);
                
                client.send(Popup.create(title, title, server.toString(), 400, 250));
                	
                return;
            }
            
            if(type.equalsIgnoreCase("edit")) {
            	if(more.isEmpty()) {
            		return;
            	}
            	
            	if(!client.hasPermission(String.format("cmd.server.%s", module.toLowerCase().replace("funktionen", "functions").replace("hilfe", "help").replace("makros", "macros").replace("rechte", "rights").replace("toplisten", "toplists").replace("wahlen", "elections")))) {
            		return;
            	}

            	if(module.equalsIgnoreCase("wordmix")) {
            		if(Server.wordmix.contains(more)) {
                    	client.send(PacketCreator.createServerPopup(true, module, new String[] { more }));
            		}
                } else if(module.equalsIgnoreCase("werbung")) {
            		if(Server.werbung.contains(more)) {
                    	client.send(PacketCreator.createServerPopup(true, module, new String[] { more }));
            		}
                } else if(module.equalsIgnoreCase("toplisten")) {
            		if(Server.toplisten.containsKey(more)) {
            			String[] info = Server.toplisten.get(more);
            		
                    	client.send(PacketCreator.createServerPopup(true, module, new String[] { more, info[0], info[1] }));
            		}
                } else if(module.equalsIgnoreCase("rechte")) {
            		if(Server.permissions.containsKey(more)) {
            			String info = Server.permissions.get(more);
            		
                    	client.send(PacketCreator.createServerPopup(true, module, new String[] { more, info }));
            		}
                } else if(module.equalsIgnoreCase("makros")) {
            		if(Server.macros.containsKey(more)) {
            			String info = Server.macros.get(more);
            		
                    	client.send(PacketCreator.createServerPopup(true, module, new String[] { more, info }));
            		}
                } else if(module.equalsIgnoreCase("funktionen")) {
            		if(Server.functions.containsKey(more)) {
            			String[] info = Server.functions.get(more);
            		
                    	client.send(PacketCreator.createServerPopup(true, module, new String[] { more, info[0], info[1] }));
            		}
                } else if(module.equalsIgnoreCase("butler")) {
            		if(Server.james.containsKey(more)) {
            			String info = Server.james.get(more);
            		
                    	client.send(PacketCreator.createServerPopup(true, module, new String[] { more, info }));
            		}
                } else if(module.equalsIgnoreCase("hilfe")) {
            		if(Server.help.containsKey(more)) {
            			String[] help = Server.help.get(more);
            		
                    	client.send(PacketCreator.createServerPopup(true, module, new String[] { more, help[0], help[1] }));
            		}
                } else if(module.equalsIgnoreCase("badwords")) {
                	if(Server.badwords.containsKey(more)) {
                		int juschu = Server.badwords.get(more);
            		
                		client.send(PacketCreator.createServerPopup(true, module, new String[] { more, String.valueOf(juschu) }));
                	}
                } else if(module.equalsIgnoreCase("todo")) {
                	if(Server.todo.containsKey(more)) {
                		client.send(PacketCreator.createServerPopup(true, module, new String[] { more }));
                	}
                } else if(module.equalsIgnoreCase("teams")) {
                	if(Settings.getTeams().contains(String.format("|%s|", more))) {
                		client.send(PacketCreator.createServerPopup(true, module, new String[] { more }));
                	}
                } else if(module.equalsIgnoreCase("wahlen")) {
                	if(Server.elections.containsKey(more)) {
                		String[] infos = Server.elections.get(more);
            		
                		client.send(PacketCreator.createServerPopup(true, module, new String[] { more, infos[0], infos[1], infos[2], infos[3] }));
                	}
                } else if(module.equalsIgnoreCase("umfragen")) {
                	if(Server.umfragen.containsKey(more)) {
                		String infos = Server.umfragen.get(more);
            		
                		client.send(PacketCreator.createServerPopup(true, module, new String[] { more, infos }));
                	}
                }
            	
            	return;
            }
            
            if(type.equalsIgnoreCase("entries")) {
            	if(!client.hasPermission(String.format("cmd.server.%s", module.toLowerCase().replace("funktionen", "functions").replace("hilfe", "help").replace("makros", "macros").replace("rechte", "rights").replace("toplisten", "toplists").replace("wahlen", "elections")))) {
            		return;
            	}
            	
                StringBuilder server = new StringBuilder();
                
                if(module.equalsIgnoreCase("toplisten")) {
                	for(String name : Server.toplisten.keySet()) {
                		server.append(name).append("°%90°°>edit.gif<>|/server Toplisten:edit:").append(name).append("<° °>del.gif<>|/server Toplisten:delete:").append(name).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("werbung")) {
                	for(String name : Server.werbung) {
                		server.append(name).append("°%90°°>edit.gif<>|/server Werbung:edit:").append(name).append("<° °>del.gif<>|/server Werbung:delete:").append(name).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("wahlen")) {
                	for(String wahlname : Server.elections.keySet()) {
                		server.append(wahlname).append("°%90°°>edit.gif<>|/server Wahlen:edit:").append(wahlname).append("<° °>del.gif<>|/server Wahlen:delete:").append(wahlname).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("wordmix")) {
                	for(String sentence : Server.wordmix) {
                		server.append(sentence).append("°%90°°>edit.gif<>|/server WordMix:edit:").append(sentence).append("<° °>del.gif<>|/server WordMix:delete:").append(sentence).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("rechte")) {
                	for(String permission : Server.permissions.keySet()) {
                		server.append(permission).append("°%90°°>edit.gif<>|/server Rechte:edit:").append(permission).append("<° °>del.gif<>|/server Rechte:delete:").append(permission).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("teams")) {
                	for(String team : Settings.getTeams().split("\\|")) {
                		if(!team.isEmpty()) {
                    		server.append(team).append("°%90°°>edit.gif<>|/server Teams:edit:").append(team).append("<° °>del.gif<>|/server Teams:delete:").append(team).append("<°°%00°#");
                		}
                	}
                } else if(module.equalsIgnoreCase("todo")) {
                	for(String todo : Server.todo.keySet()) {
                		server.append(todo).append("°%90°°>edit.gif<>|/server ToDo:edit:").append(todo).append("<° °>del.gif<>|/server ToDo:delete:").append(todo).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("badwords")) {
                	for(String badword : Server.badwords.keySet()) {
                		server.append(badword).append("°%90°°>edit.gif<>|/server BadWords:edit:").append(badword).append("<° °>del.gif<>|/server BadWords:delete:").append(badword).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("funktionen")) {
                	for(String function : Server.functions.keySet()) {
                		server.append(function).append("°%90°°>edit.gif<>|/server Funktionen:edit:").append(function).append("<° °>del.gif<>|/server Funktionen:delete:").append(function).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("hilfe")) {
                	for(String help : Server.help.keySet()) {
                		server.append(help).append("°%90°°>edit.gif<>|/server Hilfe:edit:").append(help).append("<° °>del.gif<>|/server Hilfe:delete:").append(help).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("butler")) {
                	for(String word : Server.james.keySet()) {
                		server.append(word).append("°%90°°>edit.gif<>|/server Butler:edit:").append(word).append("<° °>del.gif<>|/server Butler:delete:").append(word).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("makros")) {
                	for(String macro : Server.macros.keySet()) {
                		server.append(macro).append("°%90°°>edit.gif<>|/server Makros:edit:").append(macro).append("<° °>del.gif<>|/server Makros:delete:").append(macro).append("<°°%00°#");
                	}
                } else if(module.equalsIgnoreCase("umfragen")) {
                	for(String macro : Server.umfragen.keySet()) {
                		server.append(macro).append("°%90°°>edit.gif<>|/server Umfragen:edit:").append(macro).append("<° °>del.gif<>|/server Umfragen:delete:").append(macro).append("<°°%00°#");
                	}
                }
                
                String title = String.format("Server - %s - Vorhandene Einträge", module);
                
                client.send(Popup.create(title, title, server.toString(), 500, 350));
                return;
            }
            
            if(type.equalsIgnoreCase("delete")) {
            	if(!client.hasPermission(String.format("cmd.server.%s", module.toLowerCase().replace("funktionen", "functions").replace("hilfe", "help").replace("makros", "macros").replace("rechte", "rights").replace("toplisten", "toplists").replace("wahlen", "elections")))) {
            		return;
            	}
            	
            	if(module.equalsIgnoreCase("rechte")) {
            		if(Server.permissions.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.permissions.remove(more);
            			Server.get().query(String.format("DELETE FROM `permissions` WHERE `permission` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("werbung")) {
            		if(Server.werbung.contains(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.werbung.remove(more);
            			Server.get().query(String.format("DELETE FROM `werbung` WHERE `text` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("toplisten")) {
            		if(Server.toplisten.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.toplisten.remove(more);
            			Server.get().query(String.format("DELETE FROM `toplisten` WHERE `word` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("hilfe")) {
            		if(Server.help.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.help.remove(more);
            			Server.get().query(String.format("DELETE FROM `help` WHERE `word` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("badwords")) {
            		if(Server.badwords.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.badwords.remove(more);
            			Server.get().query(String.format("DELETE FROM `badword` WHERE `text` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("teams")) {
            		if(Settings.getTeams().contains(String.format("|%s|", more))) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Settings.removeTeam(more);
            		}
            	} else if(module.equalsIgnoreCase("todo")) {
            		if(Server.todo.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.todo.remove(more);
            			Server.get().query(String.format("DELETE FROM `todo` WHERE `text` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("wahlen")) {
            		if(Server.elections.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.elections.remove(more);
            			Server.get().query(String.format("DELETE FROM `wahlen` WHERE `name` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("funktionen")) {
            		if(Server.functions.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.functions.remove(more);
            			Server.get().query(String.format("DELETE FROM `functions` WHERE `function` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("wordmix")) {
            		if(Server.wordmix.contains(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.wordmix.remove(more);
            			Server.get().query(String.format("DELETE FROM `wordmix` WHERE `SENTENCE` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("makros")) {
            		if(Server.macros.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.macros.remove(more);
            			Server.get().query(String.format("DELETE FROM `macros` WHERE `macro` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("butler")) {
            		if(Server.james.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.james.remove(more);
            			Server.get().query(String.format("DELETE FROM `butler` WHERE `word` = '%s'", more));
            		}
            	} else if(module.equalsIgnoreCase("umfragen")) {
            		if(Server.umfragen.containsKey(more)) {
            			String title = String.format("Server - %s - Eintrag gelöscht", module, more);
            			client.send(Popup.create(title, title, String.format("Der Eintrag %s wurde gelöscht.", more), 400, 250));
            			Server.umfragen.remove(more);
            			Server.get().query(String.format("DELETE FROM `umfragen` WHERE `frage` = '%s'", more));
            		}
            	}
            	
            	return;
            }

        	if(!client.hasPermission(String.format("cmd.server.%s", module.toLowerCase().replace("funktionen", "functions").replace("hilfe", "help").replace("makros", "macros").replace("rechte", "rights").replace("toplisten", "toplists").replace("wahlen", "elections")))) {
        		return;
        	}
        	
            client.send(PacketCreator.createServerPopup(false, module, new String[] { "", "", "", "", "", "", "", "" }));
        } else if(cmd.equals("clearcomments")) {
        	if(!client.hasPermission("cmd.clearcomments")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	arg = KCodeParser.escape(arg);
        	
        	if(arg.isEmpty()) {
        		client.sendButlerMessage(channel.getName(), "Bitte die Funktion folgendermaßen benutzen:#/clearcomments NICK#(Alle Adminkommentare von NICK löschen.)");
        		return;
        	}
        	
        	Client target = Server.get().getClient(arg);
        	boolean online = true;
        	
        	if(target == null) {
        		online = false;
        		target = new Client(null);
        		target.loadStats(arg);
        		
        		if(target.getName() == null) {
        			client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(arg));
        			return;
        		}
        	}
        	
        	if(target.getComments().isEmpty()) {
        		client.sendButlerMessage(channel.getName(), String.format("%s verfügt über keinerlei Adminkommentare.", target.getName()));
        		return;
        	}
        	
        	client.sendButlerMessage(channel.getName(), String.format("Alle Adminkommentare von %s wurden gelöscht.", target.getName()));
        	
        	if(online) {
        		target.setComments("");
        	} else {
        		Server.get().query(String.format("UPDATE `accounts` SET `comments` = '' WHERE `name` = '%s'", target.getName()));
        	}
        	
        	Server.get().newSysLogEntry(client.getName(), String.format("Admininfo von %s gelöscht", target.getName()));
        } else if(cmd.equals("clearcmcomments")) {
        	if(!client.hasPermission("cmd.clearcmcomments")) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	arg = KCodeParser.escape(arg);
        	
        	if(arg.isEmpty()) {
        		client.sendButlerMessage(channel.getName(), "Bitte die Funktion folgendermaßen benutzen:#/clearcmcomments NICK#(Alle CM-Comments von NICK löschen.)");
        		return;
        	}
        	
        	Client target = Server.get().getClient(arg);
        	boolean online = true;
        	
        	if(target == null) {
        		online = false;
        		target = new Client(null);
        		target.loadStats(arg);
        		
        		if(target.getName() == null) {
        			client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(arg));
        			return;
        		}
        	}
        	
        	if(target.getCmcomments().isEmpty()) {
        		client.sendButlerMessage(channel.getName(), String.format("%s verfügt über keinerlei CM-Comments.", target.getName()));
        		return;
        	}
        	
        	client.sendButlerMessage(channel.getName(), String.format("Alle CM-Comments von %s wurden gelöscht.", target.getName()));
        	
        	if(online) {
        		target.setCmcomments("");
        	} else {
        		Server.get().query(String.format("UPDATE `accounts` SET `cmcomments` = '' WHERE `name` = '%s'", target.getName()));
        	}
        	
        	Server.get().newSysLogEntry(client.getName(), String.format("Channelmoderatorinfo von %s gelöscht", target.getName()));
        } else if (cmd.equals("w") || cmd.equals("whois") || cmd.equals("ww")) {
        	if(!client.hasPermission(String.format("cmd.%s", cmd))) {
        		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        		return;
        	}
        	
        	String nickname = KCodeParser.escape(arg);
            Client target;
            boolean online = true;
            boolean ent = false;
            
            if (!nickname.isEmpty() && arg.startsWith("+") && client.hasPermission("cmd.w.plus")) {
            	ent = true;
                nickname = nickname.substring(1).trim();
            }
            
            if (nickname.isEmpty() || nickname.equalsIgnoreCase(client.getName())) {
                target = client;
            } else {
                target = Server.get().getClient(nickname);

                if (target == null) {
                    online = false;
                    target = new Client(null);
                    target.loadStats(nickname);

                    if (target.getName() == null) {
                        client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(nickname));
                        return;
                    }
                }
            }

            if(target.checkIgnored(client.getName())) {
                client.sendButlerMessage(channel.getName(), String.format("Du wirst von %s ignoriert und kannst deshalb die Whois nicht einsehen.", target.getName()));
                return;
            }

        	String nick = target.getName();
        	String charNick = nick.replace("<", "\\<");
        	String title = String.format("Who is %s ?", nick);
        	StringBuilder whois = new StringBuilder("#");
        	int eE = 1, dp = 1, spaces=0;
            StringBuilder cls = new StringBuilder();
            StringBuilder mutes = new StringBuilder();
            StringBuilder beschwerden = new StringBuilder();
            String photo = target.getPhoto();
            int knuddels = (int) target.getKnuddels();
            int luftlinie = 0;
            
            if(channel.checkCm(client.getName()) || channel.checkHz(client.getName()) || client.getRank() > 2 || client.getTeams().contains("~1|") || client.checkTeam("Spiele") || client.checkTeam("Jugendschutz")) {
                for(Channel s : Server.get().getChannels()) {
                	if(target.checkCl(s)) {
                		cls.append("#- _°>_h").append(s.getName()).append("|/go \"|/go +\"<°_ von °>_h").append("").append("|/serverpp \"|/w \"<°");
                	}
                	
                	if(Server.get().checkCcm(target.getName(), s, 2)) {
                		mutes.append("#- _°>_h").append(s.getName()).append("|/go \"|/go +\"<°_").append(" (Color) von °>_h").append("").append("|/serverpp \"|/w \"<°");
                	}
                	
                	if(Server.get().checkCcm(target.getName(), s, 3)) {
                		mutes.append("#- _°>_h").append(s.getName()).append("|/go \"|/go +\"<°_").append(" von °>_h").append("").append("|/serverpp \"|/w \"<°");
                	}
                }
                
                if(target.getDisable() != 0)
                    if(client.getRank() > 7) {
            		whois.append("°R°_Nick ist derzeit deaktiviert_##");
            	}
                
                
                 if(target.getDeletenick() != 0)
                    if(client.getRank() > 3) {
            		whois.append("°R°_Nick ist zur Löschung freigegeben!_##");
            	}
            	
            	if(target.getSpielsperre() != 0) {
            		whois.append("°R°_Momentan für alle Spiele GESPERRT_##");
            	}
            	
                
              
            	if(target.getWahlsperre() != 0) {
            		whois.append("°R°_Bis zum ").append(Server.get().timeStampToDate(target.getWahlsperre())).append(" für alle Wahlen GESPERRT_##");
            	}
            	
            	if(target.getSperre() != 0) {
                    whois.append("°R°_").append(target.getName());
                                whois.append("°R° ist von ").append(target.getSperrevon()).append(" gesperrt_");
            		
            		if(client.getRank() > 2) {
                            whois.append("#_Begründung:#").append(target.getSperreinfo()).append("_");
            		
            			
            		}
            		
            		whois.append("##");
            	}
            	
            	if(!cls.toString().isEmpty()) {
            		whois.append("°B°_Channellocks_:").append(cls.toString()).append("##");
            	}
            
            	if(!mutes.toString().isEmpty()) {
            		whois.append("°B°_Gemutet_:").append(mutes.toString()).append("##");
            	}
            	
            	whois.append("°r°");
            }
        	
        	if(target == client) {
            	whois.append("Du hast Dich");
            } else {
                String grippefarbe = "K";
                
                if(target.getGrippeStatus() == 1) {
                	grippefarbe = "B";
                } else if(target.getGrippeStatus() == 2) {
                	grippefarbe = "R";
                } else if(target.getGrippeStatus() == 3) {
                	grippefarbe = "G";
                }
                
            	whois.append("_°").append(grippefarbe).append(">_h").append(charNick).append("|/m \"<r°_ hat sich");
            }
            
            whois.append(" am _");
            
            if(target==Server.get().getButler()) {
            	whois.append("21.05.1935_ um 11:11:11");
            } else {
            	whois.append(target.getRegistrationDate()).append("_ um ").append(target.getRegistrationTime());
            }
            
            whois.append(" bei Cuddly registriert und seitdem schon _").append(nf.format(target.getOnlineTime()/60)).append("_ Minuten hier verbracht.##");

            if(online) {
        		whois.append("°>py_g.gif<° °%05°");
        		
        		if(client == target) {
            		whois.append("Du bist");
        		} else {
        			whois.append(target.getGenderLabel()).append(" ist");
        		}
        		
        		whois.append(" im Moment im Channel _");
        		
        		if(target.getChannel() == null || !target.getChannel().isVisible()) {
        			whois.append("?");
        		} else {
        			whois.append("°>_h").append(target.getChannel().getName()).append("|/go \"|/go +\"<r°");
        		}
                
                whois.append(" °E°ONLINE_°r°!");
        		
                if(target.isAway()) {
                	if(target.hasPermission("popup.awayaniicon")) {
                		whois.append(" °>icon_away_ani_new.gif<°");
                	}else {
                		whois.append(" °>away.png<°");
                	}
                }
                
                whois.append("°%00°##");
        	} else {
        		if(target.getLastOnlineChannel() == null) {
        			whois.append("°>py_b.gif<° °%05°").append(target.getGenderLabel()).append(" war niemals im Chat online°%00°##");
        		} else {
        			whois.append("°>py_r.gif<° °%05°").append(target.getGenderLabel()).append(" war zuletzt am _").append(target.getLastOnlineDate()).append("_ ").append(target.getLastOnlineTime()).append(" im Channel _");
        			Channel lastchannel = Server.get().getChannel(target.getLastOnlineChannel());
        			
        			if(lastchannel == null || !lastchannel.isVisible()) {
        				whois.append("?");
        			} else {
        				whois.append("°>_h").append(target.getLastOnlineChannel()).append("|/go \"|/go +\"<°");
        			}
        			
        			whois.append("_##");
        		}
        		
                if(!ent) {
                	Server.get().query(String.format("update accounts set missed='%s|%s|' where name='%s'", target.getMissed(), client.getName(), target.getName()));
                }
        	}
            
			int readmeZahl = target.readmes.size();
			
        	String readme = target.getReadme();

        	if(client.getReadmeEffects() == 0 && readme != null) {
        		readme = KCodeParser.noKCode(readme);
        	}
        	
            if(readmeZahl > 1 || readme == null && readmeZahl == 1) {
            	whois.append("°%05°");
            	
                if(readme != null) {
                	whois.append("\\\"").append(readme).append("§\\\" ");
                }
                
                whois.append("°>_h[His]|/readmehis ").append(charNick).append("<°°%00°##");
            } else {
                if(readme!=null) {
                	whois.append("°%05°\\\"").append(readme).append("§\\\"°%00°##");
                }
            }
            
            if(!photo.isEmpty()) {
            	if(target.getPhotoVerify() == 1) {
            		whois.append("°>{table|140|w1}<°°>{tr}<>CENTER<°");
            	}
            	whois.append("_°B>photos/m/").append(photo).append("...center_140.border_3.shadow_4.jpg<>--<>|").append(Server.get().getURL()).append("photos-profile?id=").append(charNick).append("<");
            	if(target.getPhotoVerify() == 1) {
            		whois.append(">w2/fv_checked...w_0.h_0.mx_-25.my_-10.vtop.png<>{endtable}<>LEFT<");
            	}
                whois.append("#26°");
                whois.append("   °>--<>lup...my_5.gif<13>--<>_hVergrößern|").append(Server.get().getURL()).append("photos-profile?id=").append(charNick).append("<r°_");
                whois.append("°##° °+800");
                
                if(target.getPhotoVerify() == 1) {
                	whois.append("7");
                }else{
                	whois.append("4");
                }
                
                whois.append("+9005° °#°");
            }
                    
            if(!photo.isEmpty()) {
                whois.append("°%36°");
                
                if(target == client) {
                	whois.append("Du hast");
                } else {
                	whois.append(nick).append(" hat");
                }
                
                whois.append("...#");
            } else {
                if(target == client) {
                	whois.append("Du hast");
                } else {
                	whois.append(nick).append(" hat");
                }
                
                whois.append("...°%36°");
                
                if(nick.length() > 15 && target != client) {
                	whois.append("#");
                }
            }

            whois.append("°>gt.gif<° _°R°").append(target.getKisses()<1?"Keine":nf.format(target.getKisses())).append("°r°_ Knutschflecken...#");
            
            if(target.getErhalten() > 0) {
                whois.append("°>gt.gif<° ");
                
                if(target == client) {
                	whois.append("_°R>_h").append(nf.format(target.getErhalten())).append(" |/code old<>--<>present.gif|present_ani.gif<>|/shop<>--<>|/code old<r°_");
                } else {
                	whois.append("_°R°").append(nf.format(target.getErhalten())).append("_ °>present.gif|present_ani.gif<>|/shop<>--<r°");
                }
                
                whois.append(" erhalten");
                
            	if(target.getVerschenkt() > 0) {
            		whois.append(",°R°_ ").append(target.getVerschenkt()).append("_ °>present.gif|present_ani.gif<>|/shop<>--<r° verschenkt");
            	}
            	
                whois.append("#");
        		spaces++;
            } else {
            	if(target.getVerschenkt() > 0) {
            		whois.append("°>gt.gif<R°_ ").append(target.getVerschenkt()).append("_ °>present.gif|present_ani.gif<>|/shop<>--<r° verschenkt#");
            		spaces++;
            	}
            }
            
            if(target.getRoses() > 0) {
                whois.append("°>gt.gif<° ");
                
                if(target == client) {
                	whois.append("_°R>_h").append(nf.format(target.getRoses())).append(" |/rose old<>--<>features/colorfulroses/rose_stem_01...h_20.w_98.my_5.png<>--<>|/rose old<>--<>features/colorfulroses/rose_head_01...h_20.w_0.mx_-98.my_5.png<>--<>|/rose old<r°_");
                } else {
                	whois.append("_°R>_h").append(nf.format(target.getRoses())).append(" |/rose colors:").append(charNick).append("<>--<>features/colorfulroses/rose_stem_01...h_20.w_98.my_5.png<>--<>|/rose colors:").append(charNick).append("<>--<>features/colorfulroses/rose_head_01...h_20.w_0.mx_-98.my_5.png<>--<>|/rose colors:").append(charNick).append("<r°_");
                }
                
            	whois.append(" erhalten#");
        		spaces++;
            }

            if(target.getMentorPoints() > 0) {
                whois.append("°>gt.gif<° _°R°").append(nf.format(target.getMentorPoints())).append("°r°_ Mentor Punkte#");
        		spaces++;
            }
            
            /*int fans = Server.count(String.format("select count(id) as a from fans where an ='%s'", nick));
            
            if(fans > 0) {
            	whois.append("°>gt.gif<° _°R>_h").append(fans).append("|").append(Server.get().getURL()).append("photos-fans.html?id=").append(nick).append("<r°_°>--<°°>_h Fans|").append(Server.get().getURL()).append("photos-fans.html?id=").append(nick).append("<° °>icons/thumbup.png<°#");
            	spaces++;
            }*/

            if (target.getWordMixPoints() > 99) {
                whois.append("°>gt.gif<° _°R°").append(nf.format((int)target.getWordMixPoints())).append("°r°_ WordMix Punkte#");
        		spaces++;
            }
            
            if (target.getJumpopunkte() > 99) {
                whois.append("°>gt.gif<° _°R°").append(nf.format(target.getJumpopunkte())).append("°r°_ Jumpo Punkte#");
        		spaces++;
            }
            
            if (target.getHol() > 99) {
                whois.append("°>gt.gif<° _°R°").append(nf.format(target.getHol())).append("°r°_ High or Low Punkte#");
        		spaces++;
            }
            
            if (target.getThiefGame() > 0) {
                whois.append("°>gt.gif<° _°R°").append(nf.format(target.getThiefGame())).append("°r°_ ThiefGame Punkte#");
        		spaces++;
            }
            
            if (target.getKontoKnuddels() > 0) {
            	//int cl = Server.count(String.format("select count(smiley) as a from usersmileys where smiley='53' and name='%s'", client.getName()));
            	//int ta = Server.count(String.format("select count(smiley) as a from usersmileys where smiley='53' and name='%s'", target.getName()));
            	
            	//if(target == client || client.hasPermission("profile.seekontoknuddels") || ta < cl) {
            	if(target == client || client.hasPermission("profile.seekontoknuddels")) {
            		whois.append("°>gt.gif<° _°R°").append(nf.format(target.getKontoKnuddels())).append("°r°_ Knuddels auf dem °>_hKonto|/\"<° °>kroesus...b.my_7.h_22.gif<°#");
            		spaces++;
            	}
            }

            if(target.getForumCon() > 0) {
            	whois.append("°>gt.gif<° °R°_").append(target.getForumCon()).append("°r°_ Beitr");
            	
            	if(target.getForumCon() == 1) {
            		whois.append("ag");
            	} else {
            		whois.append("äge");
            	}
            	
            	whois.append(" im °>_hForum|").append(Server.get().getURL()).append("forum/<° °>linkicons/link-icon_forum.png<#°");
            }
            
            whois.append("°>gt.gif<° und kann");
            
            if(target==client) {
            	whois.append("st");
            }
            
            whois.append(" noch _°R°");
            
            if(knuddels<1) {
            	whois.append("nicht");
            } else {
            	whois.append(nf.format(knuddels)).append("x");
            }
            
            whois.append("°r° knuddeln_!°%00°###");
            
            if(!photo.isEmpty()) {
            	if(spaces < 4) {
            		whois.append("###");
            	}
            }
            
            StringBuilder holdhands = new StringBuilder();
            int h = 1;
            
        	for(String hold : target.getHoldHands().split("\\|")) {
        		if(!hold.isEmpty()){
        			if(h != 1){
        				holdhands.append(", ");
        			}
        			
        			holdhands.append("_°BB>_h").append("|/serverpp \"|/w \"<r°_");
        		}
        	}
        	
            String holdhandsToString = holdhands.toString();
            
            if(!holdhandsToString.isEmpty()) {
            	char gend = 'm';
            	
            	if(target.getGender() == 2){
            		gend = 'f';
            	}
            	
            	whois.append("°>holdhands_").append(gend).append("...b.my_7.h_21.png<° _°R°Händchen gehalten°r°_ mit ").append(holdhandsToString).append("#");
            }
            
            if (!target.getZusammen().isEmpty()) {
                whois.append("°>loveletter_whois...b.my_4.h_20.png<°").append(charNick).append(" ist fest zusammen mit °>_h").append(target.getZusammen().replace("<", "\\<")).append("|/serverpp \"|/w \"<°.#");
            }
            
            if(target.getStarsFrom() != null) {
            	if(target == client) {
            		whois.append("Dir");
            	} else {
            		if(target.getGender() == 1) {
            			whois.append("Ihm");
            		} else {
            			whois.append("Ihr");
            		}
            	}
            	
            	whois.append(" wurden von °>_h").append(target.getStarsFrom().replace("<", "\\<")).append("|/serverpp \"|/w \"<° die Sterne vom Himmel geholt! °>starlite_whois-bg...b.my_18.h_10.mx_-10.w_38.png<>starlite_whois-ani...b.my_18.h_10.mx_-48.w_0.gif<°#");
            }
            
            if(target.getStarsTo() != null) {
            	if(target == client) {
            		whois.append("Du hast ");
            	} else {
            		whois.append(target.getGenderLabel()).append(" hat ");
            	}
            	
            	whois.append("°>_h").append(target.getStarsTo().replace("<", "\\<")).append("|/serverpp \"|/w \"<° die Sterne vom Himmel geholt! °>starlite_whois-bg...b.my_18.h_10.mx_-10.w_38.png<>starlite_whois-ani...b.my_18.h_10.mx_-48.w_0.gif<°#");
            }
            
            if(target.getDream() != null) {
            	if(target == client) {
            		whois.append("Du");
            	} else {
            		whois.append(target.getGenderLabel());
            	}
            	
                whois.append("°>icon_dreamof...b.mx_-3.w_15.my_4.h_21.gif<° träum");
                
                if(target == client) {
                	whois.append("s");
                }
                
                whois.append("t von °>_h").append(target.getDream().replace("<", "\\<")).append("|/serverpp \"|/w \"<°.#");
            }
                
            if(target.getFriends() != null) {
            	if(target == client) {
            		whois.append("Du");
            	} else {
            		whois.append(target.getGenderLabel());
            	}
            	
                whois.append(" und °>_h").append(target.getFriends().replace("<", "\\<")).append("|/serverpp \"|/w \"<° - _Freunde für immer_. °>icon_friendsforever...b.my_6.mx_-4.w_29.h_14.gif<°#");
            }
            
            if(target.getLike() != null) {
            	if(target == client) {
            		whois.append("Du magst");
            	} else {
            		whois.append(target.getGenderLabel()).append(" mag");
            	}
            	
            	whois.append(" °RR°_").append(target.getLike()).append("°r°_ °>icons/like...b.gif<°#");
            }

        	String getheart = target.getHeart();
            
            if(!getheart.isEmpty()) {
            	if(target == client) {
            		whois.append("Du hast dein");
            	} else {
            		whois.append(target.getGenderLabel()).append(" hat ");
            		
            		if(target.getGender() == 1) {
            			whois.append("sein");
            		} else {
            			whois.append("ihr");
            		}
            	}
            	
                whois.append(" °>fullheart.png<° an °>_h").append(getheart.replace("<", "\\<")).append("|/serverpp \"|/w \"<° vergeben.#");
            }
                    
            if(target.receivedHearts.size() > 0) {
                int herzzahl = 1;
                String herz = "";
                StringBuilder herzen = new StringBuilder();
                StringBuilder herznicks = new StringBuilder();
                     
                for(String name : target.receivedHearts) {
                	if(herzzahl != 1) {
                  		herznicks.append(", ");
                  		herz = "die";
                    } else {
                    	herz = "das";
                    }
         
                    herznicks.append("°>_h").append(name.replace("<", "\\<")).append("|/serverpp \"|/w \"<°");
                    herzzahl++;
                }
                
            String hN = herznicks.toString();
            	
            	whois.append("Und ").append(herz);
            	
            	if(hN.contains(getheart.replace("<", "\\<")) && !getheart.isEmpty()) {
            		whois.append(" °>fullheart.png<°");
            		for(int i=1;i<=herzzahl-2;i++) {
            			whois.append(" °>halfheart.png<°");
            		}
            	} else {
            		for(int i=1;i<=herzzahl-1;i++) {
            			whois.append(" °>halfheart.png<°");
            		}
            		whois.append(herzen.toString());
            	}
            	
            	whois.append(" von ");
            	
            	if(hN.contains(getheart.replace("<", "\\<")) && !getheart.isEmpty()) {
            		whois.append("°>_h").append(getheart.replace("<", "\\<")).append("|/serverpp \"|/w \"<°");
            		
            		if(herz.equals("die")) {
            			whois.append(", ").append(hN.replace(String.format("°>_h%s|/serverpp \"|/w \"<°, ", getheart.replace("<", "\\<")), "").replace(String.format(", °>_h%s|/serverpp \"|/w \"<°", getheart.replace("<", "\\<")), ""));
            		}
            	} else {
            		whois.append(hN);
            	}
            	
            	whois.append(" erhalten.#");
            
            }
            
            if(target == Server.get().getButler()) {
                whois.append("der Butler, meistens etwas genervt...#");
            }
            
            if(nick.equals("Localhost")) {
                whois.append("Genau der Typ, welcher in diesen Chat Stunden aufopferungsvoller Programmierarbeit gesteckt hat. ;)#");
            }
            
            if(!target.getProfile().isEmpty()) {
            	for(String out : target.getProfile().split("\\|")) {
            		if(!out.isEmpty()) {
            			String datum = out.split(" ")[0];
            			String text = out.split(" ", 2)[1];
    			
            			whois.append(text).append(" (").append(datum).append(")#");
            		}
            	}
    		}
            
            if(target.getRank() > 0) {
            	if(target.getRank() == 6 || target.getRank() == 7) {
            		whois.append("Offiziell gewählter °G°_Admin§ - hilft gerne bei allen Problemen.#");
            	}
            	
            	if(countWords(target.getCareer(), target.getRankLabel(target.getRank())) > 1) {
            		whois.append("Wieder ");
            	}
            	
                whois.append(target.getRankLabel(target.getRank()).replace("inoffizieller Admin", "Ehrenmitglied")).append(" seit dem ").append(target.getDate() == null ?"?":target.getDate()).append(".#");
            }
            
            if(!target.getCmwhen().isEmpty()) {
            	byte months = (byte) (CommandParser.countChars(target.getCmwhen(), ',')+1);
            	whois.append("_");
            	
            	if(months == 1) {
            		whois.append("Ein Monat");
            	} else {
            		whois.append(months).append(" Monate");
            	}
            	
            	whois.append(" Channelmoderator_: ").append(target.getCmwhen()).append("#");
            }
            
            if(!target.getStammiwhen().isEmpty()) {
            	byte months = (byte) (CommandParser.countChars(target.getStammiwhen(), ',')+1);
            	whois.append("_");
            	
            	if(months == 1) {
            		whois.append("Ein Monat");
            	} else {
            		whois.append(months).append(" Monate");
            	}
            	
            	whois.append(" Stammchatter_: ").append(target.getStammiwhen()).append("#");
            }
            
            if(!target.getTeams().isEmpty()) {
            	whois.append("_Teams_:°%15°");
            	
            	String eingabe = target.getTeams().replace("||", "<").replace("|", "");
                String[] strarr = eingabe.split("<");
                
                Arrays.sort(strarr);
                for (int i = 0; i < strarr.length; i++) {
            		String[] x = strarr[i].split("~");
            		String team = x[0];
            		String extra = x[1];
            		
            		whois.append(dp!=1?", ":"").append("°>_h").append(team);
            		
            		if(extra.equals("1")) {
            			whois.append(" (Teamleiter)");
            		} else if(extra.equals("2")) {
            			whois.append(" (Vorsitz)");
            		} else if(extra.equals("3")) {
            			whois.append(" (Forumsmoderator)");
            		} else if(extra.equals("4")) {
            			whois.append(" (Forumsadmin)");
            		} else if(extra.equals("5")) {
            			whois.append(" (Forums-Sysadmin)");
            		} else if(extra.equals("6")) {
            			whois.append(" (Teamnick)");
            		}
            		
            		whois.append("|/h ").append(team).append("-team<°");
            		dp++;
            	}

            	whois.append("°%00°#");
    		}
            
            StringBuilder hz = new StringBuilder();
            
            for(Channel c : Server.get().getChannels()) {
            	if(c.isVisible()) {
            		if(c.checkHz(target.getName())) {
            			hz.append(eE!=1?", ":"").append("°>_h").append(c.getName()).append("|/go \"|/go +\"<°");
            			eE++;
            		}
            	}
            }
            
            if(!hz.toString().isEmpty()) {
            	whois.append("_").append(target.getRank()>5?"HZA":"HZE").append("_:°%15°").append(hz.toString()).append("°%00°#");
    		}
            
            whois.append("°-°");
            
            int abstand = 30;
            
            if(!target.getLC().isEmpty()) {
                abstand += 5;
            }
            
            if (target.getGender() == 1) {
                whois.append("_Geschlecht_:°%").append(abstand).append("°männl. °>male.png<°°%00°#");
            } else if (target.getGender() == 2) {
                whois.append("_Geschlecht_:°%").append(abstand).append("°weibl. °>female.png<°°%00°#");
            }
            
            if(target.getAge() != 0) {
                whois.append("_Alter_:°%").append(abstand).append("°").append(target.getAge()).append(target.getVerify()==1?" (verifiziert)":"").append("°%00°#");
            }
            
            if(!target.getBirthday().isEmpty()) {
                if(target.getShowBirthday() == 1) {
                    whois.append("_Geburtstag_:°%").append(abstand).append("°").append(target.getBirthday()).append("°%00°#");
                }
            
                if(target.getShowZodiac() == 1) {
                    whois.append("_Sternzeichen_:°%").append(abstand).append("°").append(Zodiac.getZodiacSign(target.getBirthday())).append("°%00°#");
                }
            }
            
            if(!target.getVergeben().isEmpty()) {
                whois.append("_Vergeben_?°%").append(abstand).append("°").append(target.getVergeben()).append("°%00°#");
            }
            
            if(target != client) {
            	if(!client.getPlz().isEmpty() && !target.getPlz().isEmpty()) {
            		for(String plz : Server.luftlinie.keySet()) {
            			if(plz.contains(client.getPlz()) && plz.contains(target.getPlz())) {
            				try {
            					luftlinie = Server.luftlinie.get(String.format("%s~%s", client.getPlz(), target.getPlz()));
            					luftlinie = Server.luftlinie.get(String.format("%s~%s", target.getPlz(), client.getPlz()));
            				} catch(Exception ex) {
            				}
            				
            				continue;
            			}
            		}
            		
            		///// Entfernung START /////
                     
                        /*   
                        whois.append("_Entfernung_:°%").append(abstand).append("°ca. ");
            		
            		
                       if(luftlinie != 0) {
            			whois.append(luftlinie);
            		} else {
            			String url = String.format("http://onlinestreet.de/plz/entfernung-%s-%s.html", client.getPlz(), target.getPlz());
            			String source = Source.get(url);
            			int kim = Integer.parseInt(source.split("gt ca. <strong>")[1].split(",")[0])+1;
                		whois.append(nf.format(kim));
                		Server.luftlinie.put(String.format("%s~%s", client.getPlz(), target.getPlz()), kim);
                		Server.get().query(String.format("INSERT INTO `luftlinie` SET `a` = '%s', `b` = '%s', `number` = '%s'", client.getPlz(), target.getPlz(), kim));
            		}
                        
            		
            		whois.append(" km (Luftlinie)°%00°#");
                        
                        */ 
                        
                        ///// Entfernung ENDE /////
            	
                }     
            }
            
            if(!target.getLC().isEmpty() && target.getRank() > 1) {
            	Channel lc = Server.get().getChannel(target.getLC());
            	
                whois.append("_LieblingsChannel_:°%").append(abstand).append("°").append("°>_h").append(target.getLC()).append("|/go \"|/wc \"<°");
                
                if(lc.checkCm(nick)) {
                	whois.append(" (°>cm.png<°)");
                }
                
                if(client.getLC().equals(target.getLC()) || client.hasPermission("profile.seefavoritechannel")) {
                	whois.append(" (seit ");
                	
                	if(target.getLcmonths() == 0) {
                		whois.append("diesem Monat");
                	} else if(target.getLcmonths() == 1) {
                    	whois.append("einem Monat");
                    } else {
                    	whois.append(target.getLcmonths()).append(" Monaten");
                    }
                	
                	whois.append(")");
                }
                 
                whois.append("°%00°#");
            }
            
            if(!target.getRealName().isEmpty()) {
                String realname = target.getRealName();
                realname = KCodeParser.parse(target, realname, 15, 10, 20);
                realname = Server.get().parseSmileys(target, realname);
                 
                whois.append("_Real Name_:°%").append(abstand).append("°").append(realname.replace("#°!°", "°#°")).append(" §°%00°#");
            }
            
            if(!target.getStadt().isEmpty()) {
                String stadt = target.getStadt();
                stadt = KCodeParser.parse(target, stadt, 15, 10, 20);
                stadt = Server.get().parseSmileys(target, stadt);
                 
                whois.append("_Stadt_:°%").append(abstand).append("°").append(stadt.replace("#°!°", "°#°")).append(" §°%00°#");
            }
            
            if(!target.getLand().isEmpty()) {
                String land = target.getLand();
                land = KCodeParser.parse(target, land, 15, 10, 20);
                land = Server.get().parseSmileys(target, land);
                 
                whois.append("_Land_:°%").append(abstand).append("°").append(land.replace("#°!°", "°#°")).append(" §°%00°#");
            }
            
            if(!target.getHobbys().isEmpty()) {
                String hobbys = target.getHobbys();
                hobbys = KCodeParser.parse(target, hobbys, 15, 10, 20);
                hobbys = Server.get().parseSmileys(target, hobbys);
                
                whois.append("_Hobbys_:°%").append(abstand).append("°").append(hobbys.replace("#°!°", "°#°")).append(" §°%00°#");
            }
            
            if(!target.getJob().isEmpty()) {
                String job = target.getJob();
                job = KCodeParser.parse(target, job, 15, 10, 20);
                job = Server.get().parseSmileys(target, job);
                
                whois.append("_Job_:°%").append(abstand).append("°").append(job.replace("#°!°", "°#°")).append(" §°%00°#");
            }
            
            if(!target.getEmail().isEmpty()) {
            	String email = KCodeParser.escape(target.getEmail());
            	
            	if(target.getShowEmail() == 1) {
            		whois.append("_E-Mail_:°%").append(abstand).append("°").append(email).append(" §°%00°#");
            	} else {
            		whois.append("_E-Mail_:°%").append(abstand).append("°");
            		
            		if(client.hasPermission("profile.seeemail")) {
            			whois.append("[").append(email).append("]");
            		} else {
            			whois.append("(vorhanden)");
            		}
            		
            		whois.append("§°%00°#");
            	}
            }
            
            if(!target.getMotto().isEmpty()) {
                String motto = target.getMotto();
                motto = KCodeParser.parse(target, motto, 15, 10, 20);
                motto = Server.get().parseSmileys(target, motto);
                
                whois.append("_Motto_:#").append(motto.replace("#°!°", "°#°")).append(" §#");
            }

            whois.append("°-°");

        	if (client.getRank() > 2 || client.getTeams().contains("~1|")) {
        		whois.append("°B°_").append(target.getRank() > 7 ? "Sysa":"A").append("dmininfo_:##");
        		
                if(client.getRank() < 7 && target.getRank() > 7) { 
        		}else{
                	whois.append("_Last Host_:°%45°");
                
                	if(client.getRank() > 7) {
                		whois.append("°>_h");
                	}
                
                	whois.append(target.getIPAddress().replace(".", "-"));
                
                	if(client.getRank() > 7) {
                		whois.append("|/checkip \"<°");
                		
                		if(!target.getHost().isEmpty()) {
                			whois.append(" (").append(ProfileTools.getCountry(target.getHost())).append(")");
                		}
                	}
                }
                
                whois.append("°%00°#_User Reg-No._:°%45°").append(nf.format(target.getID())).append("°%00°#_Status_:°%45°").append(target.getRank()).append(" (").append(target.getRankLabel(target.getRank()));
                
                if(target == Server.get().getNRS() || target == Server.get().getButler()) {
                	whois.append(", Bot");
            	}
                
                whois.append(")°%00°");
                
                if(target.getMutes() > 0) {
                    whois.append("#_Mutes_:°%45°").append(target.getMutes()).append("°%00°");
                }
                
                if(target.getCmutes() > 0) {
                    whois.append("#_Colormutes_:°%45°").append(target.getCmutes()).append("°%00°");
                }
                
                if(target.getKicks() > 0) {
                    whois.append("#_Kicks_:°%45°").append(target.getKicks()).append("°%00°");
                }
                
                 if(target.getLocks() > 0) {
                    whois.append("#_Locks_:°%45°").append(target.getLocks()).append("°%00°");
                }
                
                if(target.getCls() > 0) {
                    whois.append("#_Channellocks_:°%45°").append(target.getCls()).append("°%00°");
                }
                
                if(target.getFlames() > 0) {
                    whois.append("#_Flames_:°%45°").append(target.getFlames()).append("°%00°");
                }
                
                StringBuilder nn = new StringBuilder();
                int xl = 1;

                for (Client ob : Server.get().getClients()) {
               	 	if(ob != target && ob.getIPAddress().equals(target.getIPAddress())) {
               	 		nn.append(xl!=1?", ":"").append("°>_h").append(ob.getName().replace("<", "\\<")).append("|/serverpp \"|/w \"<°");
               	 		xl++;
               	 	}
                }
                
                if(!nn.toString().isEmpty()) {
                	whois.append("#_Nicks mit gleicher IP_:°%45°").append(nn.toString()).append("°%00°");
                }
                
                whois.append("#_Notrufe (\\# / Ok / Missbr.)_:°%45°").append(target.getAdmincallFirst()).append(" / ").append(target.getAdmincallSecond()).append(" / ").append(target.getAdmincallThird()).append("°%00°");

                if(target.getNotrufsperre() != 0) {
                	whois.append("#_Notrufsperre bis_:°%45°").append(Server.get().timeStampToDate(target.getNotrufsperre())).append("°%00°");
                }
                
                if(client.getRank() > 7 || client.getName().equals("Toby") || client.getName().equals("Eddie")) {
                	if(target.getRegisterIP() != null) { 
                		whois.append("#_Register-IP_:°%45>_h").append(target.getRegisterIP().replace(".", "-")).append("|/checkip \"<%00°");
                                whois.append("#_E-Mail_:°%45>_h").append(target.getEmail().replace(".", "-")).append("|/checkmail \"<%00°");
                	}
                	
                	if(target.getAgent() != null) {
                		whois.append("#_Betriebssystem_:°%45°").append(ProfileTools.getOS(target.getAgent())).append("°%00°");
                		whois.append("#_Browser_:°%45°").append(ProfileTools.getBrowser(target.getAgent())).append("°%00°");
                	}
                	
                	if(!target.getHost().isEmpty()) {
                		whois.append("#_Host_:°%45°").append(target.getHost()).append("°%00°");
                	}
                
                	whois.append("#_Zeichenzahl_:°%45°").append(nf.format(target.getZeichen())).append("°%00°");

                	if(target.getAppletVersion() != null) {
                		whois.append("#_Appletversion_:°%45°").append(target.getAppletVersion()).append("°%00°");
                		whois.append("#_Javaversion_:°%45°").append(KCodeParser.escape(target.getJavaVersion())).append("°%00°");
                	}
                	
                	whois.append("#_E-Mail-Verify_:°%45°").append(target.getEmailVerify() == 2 ? "Verifiziert":target.getEmailVerify()==1?"Verifizierung läuft...":"Nicht verifiziert").append("°%00°");
                    
                	if(online) {
                		whois.append("#_Online seit_:°%45°").append(target.getLoginTime()).append("°%00°");
                	}
                
                	if(target != Server.get().getButler()) {
                		if(online && !target.getChannel().isVisible()) {
                			whois.append("#_Online in_:°%45>_h").append(target.getChannel().getName()).append("|/go \"|/go +\"<%00°");
                		}
                	}
                	
                	if(!target.getMentor().isEmpty()) {
                		whois.append("#_Mentor_:°%45°").append("°>_h").append(target.getMentor().replace("<", "\\<")).append("|/serverpp \"|/w \"<°°%00°");
                	}
                }
                
                if(!target.getCmcomments().isEmpty()) {
                    whois.append("##_CM-Comments_:#").append(target.getCmcomments());
                }
                
                for(String[] infos : client.admincalls) {
                	String verstoss = infos[0];
            		String id = infos[1];
            		String uhrzeit = infos[2];
                	
                	beschwerden.append("#_").append(verstoss).append(" - *°>_h").append(id).append("|/admincall info:\"<°_ (").append(uhrzeit).append(")");
                }
                
                if(!beschwerden.toString().isEmpty()) {
                    whois.append("##_Beschwerden_:#").append(beschwerden.toString());
                }
            
                if(!target.getComments().isEmpty()) {
                    whois.append("##_Comments_:#");
                    whois.append(target.getComments());
                }
            } else if(channel.checkCm(client.getName()) || client.checkTeam("Spiele") || client.checkTeam("Jugendschutz")) {
            	whois.append("°B°_Channelmoderatorinfo_:##");
            	
            	if(target.getCls() > 0) {
                    whois.append("_Channellocks_:°%45°").append(target.getCls()).append("°%00°#");
                }
                
                if(target.getCmutes() > 0) {
                    whois.append("_Colormutes_:°%45°").append(target.getCmutes()).append("°%00°#");
                }
                
                if(target.getMutes() > 0) {
                    whois.append("_Mutes_:°%45°").append(target.getMutes()).append("°%00°#");
                }
                
                if(!target.getCmcomments().isEmpty()) {
                    whois.append("##_CM-Comments_:#").append(target.getCmcomments());
                }
            }
        	
        	Popup popup = new Popup(title, title, whois.toString(), 460, 350);
        	popup.setButtonFontSize(16);
        	popup.setHeaderFontSize(15);
            Panel panel = new Panel();
            Button buttonMessage3 = new Button("   OK   ");
            buttonMessage3.setStyled(true);
            panel.addComponent(buttonMessage3);
            panel.addComponent(new Label(" "));

            if (target.getRank() > 0) {
                Button buttonMessage = new Button("Career");
                buttonMessage.setStyled(true);
                buttonMessage.setCommand(String.format("/showcareer %s", nick));
                buttonMessage.disableClose();
                panel.addComponent(buttonMessage);
            }
            
            if (target == client || client.getRank() > 10) {
                Button buttonMessage = new Button("Edit");
                buttonMessage.setStyled(true);
                buttonMessage.setCommand(String.format("/edit %s", nick));
                buttonMessage.disableClose();
                panel.addComponent(buttonMessage);
            }
            
            if(client != target && target.getRank() < 5 && target != Server.get().getButler()) {
                if (!client.checkIgnored(nick)) {
                    Button buttonMessage = new Button("Ignore");
                    buttonMessage.setStyled(true);
                    buttonMessage.setCommand(String.format("/ig %s", nick));
                    buttonMessage.disableClose();
                    panel.addComponent(buttonMessage);
                } else {
                    Button buttonMessage = new Button("Unignore");
                    buttonMessage.setStyled(true);
                    buttonMessage.setCommand(String.format("/ig !%s", nick));
                    buttonMessage.disableClose();
                    panel.addComponent(buttonMessage);
                }
            } 

            if (!target.getPhoto().isEmpty()) {
                Button buttonMessage = new Button(" Foto ");
                buttonMessage.setStyled(true);
                buttonMessage.setCommand(String.format("/foto %s", nick));
                buttonMessage.disableClose();
                panel.addComponent(buttonMessage);
            } else {
            	if(target == client) {
            		Button buttonMessage = new Button("Foto hochladen");
                        buttonMessage.setStyled(true);
                	buttonMessage.setCommand("/foto");
                	buttonMessage.disableClose();
                	panel.addComponent(buttonMessage);
            	}
            }
            
            if (target != client) {
                Button buttonMessage = new Button("/m");
                buttonMessage.setStyled(true);
                buttonMessage.setCommand(String.format("/serverpp %s", nick));
                buttonMessage.disableClose();
                panel.addComponent(buttonMessage);
            }
            
            if (target == client && client.getRank() < 5) {
                Button buttonMessage = new Button("Logins");
                buttonMessage.setStyled(true);
                buttonMessage.setCommand("/loginlist");
                buttonMessage.disableClose();
                panel.addComponent(buttonMessage);
            }else if(client.getRank() > 4) {
                Button buttonMessage = new Button("IP Liste");
                buttonMessage.setStyled(true);
                buttonMessage.setCommand(String.format("/iplist %s", nick));
                buttonMessage.disableClose();
                panel.addComponent(buttonMessage);
            }
            
            if (client.hasPermission("cmd.rights")) {
                Button buttonMessage = new Button("Rechte");
                buttonMessage.setStyled(true);
                buttonMessage.setCommand(String.format("/rights %s", nick));
                buttonMessage.disableClose();
                panel.addComponent(buttonMessage);
            }
            
            target.increaseAufrufe();
            popup.addPanel(panel);
            popup.setOpcode(ReceiveOpcode.WHOIS.getValue(), nick);
            client.send(popup.toString());
        } else if (cmd.equals("m")) {
            if(!client.hasPermission("cmd.m")) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
            }
            
            String nickname = KCodeParser.escape(arg).split(":", 2)[0];
            String msg = "";
            
            if (arg.length() > nickname.length()) {
                msg = arg.substring(arg.indexOf(':') + 1);
            }

            if(nickname.equals("-")) {
            	client.send(PacketCreator.createMessageWindow("", "", ""));
                return;
            }

            String n = nickname.toLowerCase();
            
            if(nickname.equals("?")) {
            	client.send(PacketCreator.createSignatureWindow(client));
                return;
            }
            
            if(n.isEmpty() || n.equals("get") || n.equals("+") || n.equals("old") || n.equals("sent")) {
            	StringBuilder messages = new StringBuilder();
            	
            	if(n.equals("old")) {
            		if(client.oldMessages.size() < 1) {
            			client.sendButlerMessage(channel.getName(), "Du hast keine alten Nachrichten in deinem Briefkasten.");
            			return;
            		}
            		
            		for(String[] old : client.oldMessages) {
            			String von = old[1];
            			String betreff = old[2];
            			String text = old[3];
            			long tim = Long.parseLong(old[0]);
            			String uhrzeit = String.format("%s %s", Server.get().timeStampToDate(tim), Server.get().timeStampToTime(tim));
            			Client who = Server.get().getClient(von);
            			boolean online = true;
            			
            			if(who == null) {
            				online = false;
            				who = new Client(null);
            				who.loadStats(von);
            			}
            			
            			String whoChar = who.getName().replace("<", "\\<");
                    	
                        messages.append("#°+9022+0013°#");
                        
                        if(who.getPhoto().isEmpty()) {
                        	messages.append("°>nopic_79x79_").append(who.getGender()==2?"f":"m").append("...bordercol_164,164,255.quadcut_49.border_2.jpg<°");
                        } else {
                        	messages.append("°>photos/l/").append(who.getPhoto()).append("...bordercol_164,164,255.hbordercol_3,0,227.quadcut_49.border_2.jpg<>_h|").append(Server.get().getURL()).append("photo?n=").append(whoChar).append("<°");
                        }
                            
                        messages.append(" #°+0075+8002°°14°").append("#_°>").append(!online?"off":who==Server.get().getButler() || who.isAway()?"ono":"ong").append(".png<° °B>_h").append(whoChar).append("|/serverpp \"|/w \"<K°_#").append(uhrzeit).append("#_").append(betreff.isEmpty()?"°r°_":betreff+"§").append("#°+9515°°+0011r+509°").append(text).append("§");
                          
        				messages.append("##°-°");
            		}
            		
            		
            		client.send(Popup.create("Alte Nachrichten", "Alte Nachrichten", messages.toString(), 575, 325));
            	} else if(n.equals("sent")) {
            		if(client.sentMessages.size() == 0) {
            			client.sendButlerMessage(channel.getName(), "Es sind keine von dir gesendeten Nachrichten gespeichert.");
            			return;
            		}
            		
            		for(String[] old : client.sentMessages) {
            			String an = old[1];
            			String betreff = old[2];
            			String text = old[3];
            			long tim = Long.parseLong(old[0]);
            			String uhrzeit = String.format("%s %s", Server.get().timeStampToDate(tim), Server.get().timeStampToTime(tim));
            			Client who = Server.get().getClient(an);
            			boolean online = true;
            			
            			if(who == null) {
            				online = false;
            				who = new Client(null);
            				who.loadStats(an);
            			}
            			
            			String whoChar = who.getName().replace("<", "\\<");
                    	
                        messages.append("#°+9022+0013°#");
                        
                        if(who.getPhoto().isEmpty()) {
                        	messages.append("°>nopic_79x79_").append(who.getGender()==2?"f":"m").append("...bordercol_164,164,255.quadcut_49.border_2.jpg<°");
                        } else {
                        	messages.append("°>photos/l/").append(who.getPhoto()).append("...bordercol_164,164,255.hbordercol_3,0,227.quadcut_49.border_2.jpg<>_h|").append(Server.get().getURL()).append("photo?n=").append(whoChar).append("<°");
                        }
                            
                        messages.append(" #°+0075+8002°°14°").append("#_°>").append(!online?"off":who==Server.get().getButler() || who.isAway()?"ono":"ong").append(".png<° °B>_h").append(whoChar).append("|/serverpp \"|/w \"<K°_#").append(uhrzeit).append("#_").append(betreff.isEmpty()?"°r°_":betreff+"§").append("#°+9515°°+0011r+509°").append(text).append("§");
                          
        				messages.append("##°-°");
            		}
            		client.send(Popup.create("Gesendete Nachrichten", "Gesendete Nachrichten", messages.toString(), 575, 325));
            	} else {
            		if(client.newMessages.size() == 0) {
            			client.sendButlerMessage(channel.getName(), "Es liegen leider _keine Nachrichten_ für dich vor.");
            			return;
            		}
            		
            		for(String[] old : client.newMessages) {
            			String von = old[1];
            			String betreff = old[2];
            			String text = old[3];
            			long tim = Long.parseLong(old[0]);
            			String uhrzeit = String.format("%s %s", Server.get().timeStampToDate(tim), Server.get().timeStampToTime(tim));
            			Client who = Server.get().getClient(von);
            			boolean online = true;
            			
            			if(who == null) {
            				online = false;
            				who = new Client(null);
            				who.loadStats(von);
            			}
            			
            			String whoChar = who.getName().replace("<", "\\<");
                    	
                        messages.append("#°+9022+0013°#");
                        
                        if(who.getPhoto().isEmpty()) {
                        	messages.append("°>nopic_79x79_").append(who.getGender()==2?"f":"m").append("...bordercol_164,164,255.quadcut_49.border_2.jpg<°");
                        } else {
                        	messages.append("°>photos/l/").append(who.getPhoto()).append("...bordercol_164,164,255.hbordercol_3,0,227.quadcut_49.border_2.jpg<>_h|").append(Server.get().getURL()).append("photo?n=").append(whoChar).append("<°");
                        }
                            
                        messages.append(" #°+0075+8002°°14°").append("#_°>").append(!online?"off":who==Server.get().getButler() || who.isAway()?"ono":"ong").append(".png<° °B>_h").append(whoChar).append("|/serverpp \"|/w \"<K°_#").append(uhrzeit).append("#_").append(betreff.isEmpty()?"°r°_":betreff+"§").append("#°+9515°°+0011r+509°").append(text).append("§");

    					messages.append("##°>CENTER<°#§_°B>Antwort an ").append(von).append("|/m ").append(von).append("<r°#_°>LEFT<°");
    				      //messages.append("#°>CENTER<°#§_°B>Antwort mit Zitat ").append(von).append("|/m ").append("<r°#_°>LEFT<°").append(messages).append(messages).append("<r°#_°>LEFT<°");
    				      //messages.append("#°>CENTER<°#§_°B>Weiterleiten ").append(von).append("|/m ").append("<r°#_°>LEFT<°").append(messages).append(messages).append("<r°#_°>LEFT<°");
    				      
                                        if(!client.oldMessages.contains(old)) {
    						client.oldMessages.add(old);
    					}
        				
    					messages.append("##°-°");
            		}
            		
            		Server.get().query(String.format("UPDATE `messages` SET `gelesen` = '1' WHERE `gelesen` = '0' AND `an` = '%s'", client.getName()));
            		client.send(Popup.create("Dein Briefkasten", "Dein Briefkasten", messages.toString(), 575, 325));
            		client.newMessages.clear();
            	}
            	
                return;
            }
            
            if(nickname.toLowerCase().equals("*cm")) {
            	if(!channel.checkHz(client.getName()) && !channel.checkCm(client.getName())) {
            		client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            		return;
            	}
            	
            	if(msg.isEmpty()) {
            		return;
            	}
            	
            	client.sendButlerMessage(channel.getName(), String.format("Deine Nachricht wurde an alle CMs und HZA/E _gesendet_."));
            	String betreff = String.format("Rundmail von %s an alle CMs / HZA des Channels %s", client.getName(), channel.getName());
            	
            	for(String cm : channel.getCms().split("\\|")) {
            		if(!cm.isEmpty()) {
            			Server.get().newMessage(Server.get().getButler(), cm, betreff, msg, time);
            		}
            	}
            	
            	PoolConnection pcon1 = ConnectionPool.getConnection();
                Statement ps1 = null;

                try {
                    Connection con1 = pcon1.connect();
                    ps1 = con1.createStatement();
                    ResultSet rs1 = ps1.executeQuery("SELECT `name`, `hz` FROM `accounts` WHERE  `hz` != ''");
                    
                    while(rs1.next()) {
                    	String hz = rs1.getString("hz");
                    	String name = rs1.getString("name");
                    	
                    	if(hz.contains(String.format("|%s|", channel.getName()))) {
                			Server.get().newMessage(Server.get().getButler(), name, betreff, msg, time);
                    	}
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    if (ps1 != null) {
                        try {
                            ps1.close();
                        } catch (SQLException e) {
                        }
                    }

                    pcon1.close();
                }
            	
                return;
            }
            
            Client target = Server.get().getClient(nickname);

            if (target == null) {
                target = new Client(null);
                target.loadStats(nickname);

                if(target.getName() == null) {
                    client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(nickname));
                    return;
                }
            }
            
            if(msg.isEmpty()) {
            	client.send(PacketCreator.createMessageWindow(target.getName(), "", ""));
                return;
            }
            
            if(msg.length() > 2000) {
                client.sendButlerMessage(channel.getName(), "Deine Nachricht konnte nicht gesendet werden:##Ihre _Nachricht ist zu lang_, sie darf höchstens 2000 Zeichen lang sein.");
                return;
            }
            
            if(target.checkIgnored(client.getName())) {
                client.sendButlerMessage(channel.getName(), String.format("Sie werden von %s ignoriert.", target.getName()));
                return;
            }
            
            if(target.getSilence() == 1 && client.getRank() < 3) {
            	client.sendButlerMessage(channel.getName(), String.format("%s können derzeit keine Nachrichten hinterlassen werden.", target.getName()));
                return;
            }
            
            if(target == Server.get().getButler()) {
            	client.sendButlerMessage(channel.getName(), String.format("Deine Nachricht konnte nicht gesendet werden:##An %s können keine Nachrichten geschickt werden.", Server.get().getButler().getName()));
            	return;
            }
            
            String betreff = "";
            
            if(msg.contains("§")) {
            	String[] split = msg.split("\\§");
            	
            	msg = split[1]; 
            	betreff = split[0];
            	
            	if(betreff.length() > 50) {
            		client.sendButlerMessage(channel.getName(), "Deine Nachricht konnte nicht gesendet werden:##Der _Betreff Ihrer Nachricht ist zu lang_, dieser darf höchstens 50 Zeichen lang sein.");
            		return;
            	}
            }
            
            betreff = KCodeParser.noKCode(betreff);
            
            if(client.checkIgnored(target.getName())) {
                client.sendButlerMessage(channel.getName(), String.format("_%s steht auf deiner Ignore-Liste_ und wird deshalb nicht antworten können. Mit °BB°_°>/ig !%s|\"<r°_ kannst du %s wieder von der Ignore-Liste löschen.", target.getName(), target.getName(), target.getName()));
            }
            
            if(client != Server.get().getButler()) {
            	client.sendButlerMessage(channel.getName(), CommandParser.messageSent(target.getName()));
            }
            
            Server.get().newMessage(client, target.getName(), betreff, msg, time);
        } else if (cmd.equals("f")) {
            if(!client.hasPermission("cmd.f")) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
            }
            
            String ch = KCodeParser.escape(arg);
            int maxFriends = 40;
            int currentFriends = (int)Server.countChars(client.getFriendlist(), '|')/2;
            
            if(client.getRank() > 2) {
            	maxFriends = 250;
            } else if(client.getRank() == 2) {
            	maxFriends = 60;
            }
            
            if(ch.isEmpty()) {
                if(client.getFriendlist().isEmpty()) {
                	client.sendButlerMessage(channel.getName(), "Du hast niemanden auf deiner Freundesliste stehen! (Mit _/f NICK_ kannst du jemanden hinzufügen)");
                    return;
                }

                StringBuilder f = new StringBuilder();
                StringBuilder on = new StringBuilder();
                StringBuilder off = new StringBuilder();
                String eingabe = client.getFriendlist().replace("||", "~").replace("|", "");
                String[] strarr = eingabe.split("~");
                
                Arrays.sort(strarr);
                for (int i = 0; i < strarr.length; i++) {
                	String nick = strarr[i];
        			Client c = Server.get().getClient(nick);
        			int readmeZahl = 0; ///bug, changen.
                	String charNick = nick.replace("<", "\\<");
        			
        				if(c == null) {
        					c = new Client(null);
        					c.loadStats(nick);
        					
        					if(c.getLastOnlineChannel() == null) {
                                off.append("#°>py_r.gif<°°%06°_°>_h").append(charNick).append("|/serverpp \"|/w \"<r°_ war niemals im Chat online°%00°");   
                            } else {
                                Channel n = Server.get().getChannel(c.getLastOnlineChannel());
                                StringBuilder anzeige = new StringBuilder();
                                
                                long sek = time-c.getLastOnline();
                                long min = sek/60;
                                long std = min/60;
                                long restmin = min-std*60;
                                long days = std/24;
                                long reststd = std-days*24;
                                        
                                if(sek < 60) {
                                	anzeige.append("gerade");
                                } else {
                                	anzeige.append("vor");
                                	
                                	if(days > 0) {
                                		anzeige.append(" ").append(days).append(" Tag");
                                		if(days > 1) {
                                			anzeige.append("en");
                                		}
                                	}
                                	
                                	if(reststd > 0) {
                                		anzeige.append(" ").append(reststd).append(" Stunde");
                                		if(reststd > 1) {
                                			anzeige.append("n");
                                		}
                                	}
                                	
                                	if(restmin > 0) {
                                		anzeige.append(" ").append(restmin).append(" Minute");
                                		if(restmin > 1) {
                                			anzeige.append("n");
                                		}
                                	}
                                }
                                	
                                
                                        
                                off.append("#°>py_r.gif<°°%06°_°>_h").append(charNick).append("|/serverpp \"|/w \"<r°_ war _").append(anzeige).append("_ im Channel _");
                                
                                if(n == null || !n.isVisible()) {
                                	off.append("?");
                                } else {
                                	off.append("°>_h").append(n.getName()).append("|/go \"|/go +\"<°");
                                }
                                
                                off.append("_");
        					
                                if(c.getReadme() != null) {
                                	off.append("#°%06°\"\"").append(Server.get().parseSmileys(c, c.getReadme())).append("§\"\"");
                                	
                                	if(readmeZahl > 1) {
                                		off.append(" °>_h[His]|/readmehis ").append(charNick).append("<°");
                                	}
                                }
        					
                                off.append("°%00°");
                            }
        					
        				} else {
        					on.append("#°>py_g.gif<°°%06°_°>_h").append(charNick).append("|/serverpp \"|/w \"<°_ ist im Channel _");
        					
        					if(c.getChannel().isVisible()) {
        						on.append("°>_h").append(c.getChannel().getName()).append("|/go \"|/go +\"<°");
        					} else {
        						on.append("?");
        					}
        					
        					on.append("°E° ONLINE_°r°!");
        					
                            if(c.isAway()) {
                            	if(c.getRank() > 7) {
                                	on.append(" °>icon_away_ani_new.gif<°");
                            	}else {
                            		on.append(" °>away.png<°");
                            	}
                            }
        					
        					if(c.getReadme() != null) {
        						on.append("#°%06°\"\"").append(Server.get().parseSmileys(c, c.getReadme())).append("§\"\"");
        			           	
                            	if(readmeZahl > 1) {
                            		on.append(" °>_h[His]|/readmehis ").append(charNick).append("<°");
                            	}
                            }
        					
        					on.append("°%00°");
        				}
        			}
                
                f.append(on.toString()).append(on.toString().isEmpty()?"":"#").append(off.toString());
                f.append("##Auf deiner Liste stehen im Moment _").append(currentFriends).append("_ von ").append(maxFriends).append(" möglichen Freunden.");
                client.send(Popup.create("Friendlist", "Friendlist", f.toString(), 575, 325));
            }     
        
            if (!ch.isEmpty() && arg.charAt(0) == '!') {
                ch = ch.substring(1).trim();
            }

            if (ch.isEmpty()) {
                return;
            }

            Client target = Server.get().getClient(ch);
            if(target == null) {
                target = new Client(null);
                target.loadStats(ch);
                
                if(target.getName() == null) {
                    client.sendButlerMessage(channel.getName(), String.format("Wer ist %s?", ch));
                    return;
                }
            }
            
            if(arg.charAt(0) != '!' && target.getName().equals(client.getName())) {
                client.sendButlerMessage(channel.getName(), "Du willst dein eigener Freund sein?!");
                return;
            }
            
        	if(arg.charAt(0) != '!' && target.getName().equals(Server.get().getButler().getName())) {
            	client.sendButlerMessage(channel.getName(), String.format("Du kannst %s nicht auf deine Freundesliste nehmen.", target.getName()));
            	return;
        	}
        	
        	if(arg.charAt(0) != '!' && currentFriends > maxFriends) {
        		client.sendButlerMessage(channel.getName(), String.format("Du kannst nicht mehr als %s Freunde in deine Freundesliste aufnehmen", maxFriends));
            	return;
        	}

            if(client.checkFriend(target.getName())) {
            	if(arg.charAt(0) == '!') {
                	client.sendButlerMessage(channel.getName(), String.format("%s steht nun nicht mehr auf deiner Freundesliste!", target.getName()));
            		client.setFriendlist(client.getFriendlist().replace(String.format("|%s|", target.getName()), ""));
            	} else {
            		client.sendButlerMessage(channel.getName(), String.format("%s steht schon auf deiner Freundesliste!", target.getName()));
                }
            	
            	return;
            }
            
            if(arg.charAt(0) == '!') {
            	client.sendButlerMessage(channel.getName(), String.format("%s steht nicht auf deiner Freundesliste!", target.getName()));
            	return;
            }
            
            if(client.checkIgnored(target.getName())) {
            	client.sendButlerMessage(channel.getName(), String.format("Du kannst %s nicht zu deiner Freundesliste hinzufügen, da du %s ignorierst.", target.getName(), target.getName()));
            	return;
            }
            
            if(currentFriends > maxFriends) {
            	client.sendButlerMessage(channel.getName(), String.format("Du kannst maximal %s Nicks auf deine Friendlist nehmen, mehr ist nicht möglich.", maxFriends));
            	return;
            }
            	
            client.sendButlerMessage(channel.getName(), String.format("%s steht ab jetzt auf deiner Freundesliste.", target.getName()));
            client.setFriendlist(String.format("%s|%s|", client.getFriendlist(), target.getName()));

        	if(target.getName().equals(client.getMentor())) {
        		if(client.getMpFriendlist() == 0) {
        			client.setMpFriendlist((byte)1);
        		}
        	}
        } else if(cmd.equals("dm")) {
        	
        }  else if (cmd.equals("info")) {
            if(!client.hasPermission("cmd.info")) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
            }
            
            arg = KCodeParser.escape(arg);
            Channel target = arg.isEmpty()?channel:Server.get().getChannel(arg);
            
            if(target == null) {
                client.sendButlerMessage(channel.getName(), String.format("Der Channel _%s existiert nicht_.", arg));
                return;
            }
            
            if(!target.isVisible() && target != channel) {
            	client.sendButlerMessage(channel.getName(), "Die Channelinfo kann nur von öffentlichen Channels angezeigt werden.");
                return;
            }
            
            StringBuilder info = new StringBuilder();
            String title = String.format("Channel %s", target.getName());
            info.append("#Der Channel ").append(target.getName()).append(" ");
            
            if(!target.isVisible() && target.getTemp() == 1) {
            	info.append("ist ein _temporärer Channel_ (angelegt von ");
            	Client owner = Server.get().getClient(target.getOwner());
            	boolean blau = false;
            	
            	if(owner != null) {
            		blau = true;
            	}
            	
            	info.append(blau?"_°B":"°").append(">_h").append(target.getOwner()).append("|/serverpp \"|/w \"<").append(blau?"r°_":"°").append(")");
            } else if(!target.getOwner().isEmpty()) {
            	info.append("gehört ");
            	Client owner = Server.get().getClient(target.getOwner());
            	boolean blau = false;
            	
            	if(owner != null) {
            		blau = true;
            	}
            	
            	info.append(blau?"_°B":"°").append(">_h").append(target.getOwner()).append("|/serverpp \"|/w \"<").append(blau?"r°_":"°").append(".");
            } else if(!target.isVisible()) {
            	info.append("ist unsichtbar.");
            } else {
            	info.append("ist ein _Systemchannel_.");
            }
            
            info.append("##");
            
            if(target.getInfo().isEmpty()) {
                info.append("Es gelten _°BB>AGB|/h \"<°§ & _°BB>Knigge|/h \"<°§.");
            } else {
                info.append("Neben _°BB>AGB|/h \"<°§ & _°BB>Knigge|/h \"<°§ gelten folgende _Infos & Regeln_ im Channel ").append(target.getName()).append(":°-°").append(target.getInfo()).append("°-°#");
            }

			info.append("§##_LieblingsChannel von ").append(target.getLcStammis()).append(" Stammis_.##");

            int cm = 1;
            int eE = 1;

            if(target.getCms().isEmpty()) {
                info.append("Keine Channelmoderatoren.");
            } else {
            	info.append("_Channelmoderatoren:_#");
            	
            	for(String x : target.getCms().split("\\|")) {
            		if(!x.isEmpty()) {
            			Client t = Server.get().getClient(x);
            			boolean blau = true;
            			
            			if(t == null) {
            				blau = false;
            			}
            			
            			if(cm != 1) {
            				info.append(", ");
            			}
            			
            			info.append(blau?"_°B":"°").append(">_h").append(x).append("|/serverpp \"|/w \"<").append(blau?"r°_":"°");
            			cm++;
            		}
            	}
            }
            
            if(!target.getHZ().isEmpty()) {
                info.append("##_Hauptzuständige Admins & Ehrenz:_#");

            	for(String x : target.getHZ().split("\\|")) {
            		if(!x.isEmpty()) {
            			Client t = Server.get().getClient(x);
            			boolean blau = true;
            			
            			if(t == null) {
            				blau = false;
            			}
            			
            			if(eE != 1) {
            				info.append(", ");
            			}
            			
            			info.append(blau?"_°B":"°").append(">_h").append(x).append("|/serverpp \"|/w \"<").append(blau?"r°_":"°");
            			eE++;
            		}
            	}
            }
            
        	Popup popup = new Popup(title, title, info.toString(), 575, 400);
            Panel panel2 = new Panel();
            Button button = new Button("   OK   ");
            button.setStyled(true);
            panel2.addComponent(button);
            
            
            if(channel.isVisible()) {
            	Button button2 = new Button("Moderatorenwahl");
                button2.setStyled(true);
            	button2.enableAction();
                button2.disableClose();
            	panel2.addComponent(button2);
            }
        
            popup.addPanel(panel2);
                    
            popup.setOpcode(ReceiveOpcode.INFO.getValue(), target.getName());
            client.send(popup.toString());
        } else if(cmd.equals("lock")) {
            if(!client.hasPermission("cmd.lock")) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
            }
        	
        	if(arg.isEmpty()) {
                if(Server.lockedNicks.size() == 0) {
                	client.sendButlerMessage(channel.getName(), "Momentan ist niemand gesperrt.");
                	return;
                }
                
        		StringBuilder lock = new StringBuilder("_Sperrnick°%30°Sperradmin°%50°Sperrungsdatum°%70°Entsperrungsdatum_°%00°");
        		
        		for(String nick : Server.lockedNicks.keySet()) {
        			String[] split = Server.lockedNicks.get(nick).split("~");
        			String lockedNick = nick.replace("<", "\\<");
        			String sperrAdmin = split[0].replace("<", "\\<");
        			String sperrdatum = split[1];
        			String entsperrdatum = split[2];
        			
        			lock.append("#°>_h").append(lockedNick).append("|/serverpp \"|/w \"<°°%30°°>_h").append(sperrAdmin).append("|/serverpp \"|/w \"<°°%50°").append(sperrdatum).append("°%70°").append(entsperrdatum).append("°%00°");
        		}
        		
        		client.send(Popup.create("Gesperrte Nicks", "Gesperrte Nicks", lock.toString(), 700, 400));
        		return;
                        
        	}
        	
        	String[] pieces = arg.split(":", 4);
        	String nick = "", comment = "", info = "", tage = "";
        	String infor = "Bitte die Funktion folgendermaßen benutzen:#/lock oder !NICK:COMMENT oder NICK:COMMENT:INFO:TAGE#(Zeigt eine Liste aller gesperrten Nicks. !NICK:COMMENT entsperrt NICK wieder und setzt COMMENT als Adminkommentar bei NICK. Letzteres sperrt NICK TAGE Tage für den Chat. Ist keine Angabe bei TAG gemacht worden, wird NICK automatisch für 3 Tage gesperrt. ! als TAG sperrt NICK permanent.)";
        	boolean entsperren = false;
        	
        	try { 
        		nick = pieces[0];
        		comment = pieces[1];
        		info = pieces[2];
        		tage = pieces[3];
        	} catch(Exception ex) {
        	}
        	
        	if(nick.startsWith("!")) {
        		entsperren = true;
        		nick = nick.replace("!", "");
        	}
        	
        	if(nick.isEmpty() || comment.isEmpty()) {
        		client.sendButlerMessage(channel.getName(), infor);
        		return;
        	}
        	
        	Client target = Server.get().getClient(nick);
        	boolean online = true;
        	
        	if(target == null) {
        		online = false;
        		target = new Client(null);
        		target.loadStats(nick);
        		
        		if(target.getName() == null) {
        			client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(nick));
        			return;
        		}
        	}
        	
        	if(comment.length() < 8 || comment.length() > 115) {
        		client.sendButlerMessage(channel.getName(), "Das Comment muss mindestens 8 und darf maximal 115 Zeichen lang sein.");
        		return;
        	}

            comment = KCodeParser.parse(client, comment, 5, 10, 20);
            comment = Server.get().parseSmileys(client, comment);
            
        	if(entsperren) {
        		if(target.getSperre() == 0) {
        			client.sendButlerMessage(channel.getName(), String.format("%s ist nicht gesperrt.", target.getName()));
        			return;
        		}
        		
        		if(client.getRank() < 8) {
        			if(!target.getSperrevon().equals(client.getName())) {
        				client.sendButlerMessage(channel.getName(), String.format("Du kannst %s nicht entsperren, weil du nicht der Sperradmin bist. Dein Comment wurde an den Sperradmin %s geschickt, weil der Nick deiner Meinung nach entsperrt werden sollte.", target.getName(), target.getSperrevon()));
        				Server.get().newMessage(Server.get().getButler(), target.getSperrevon(), "Entsperrung", String.format("%s hat versucht den Nick %s, der von dir gesperrt wurde, zu entsperren.##_Begründung_ von %s:#%s", client.getName(), target.getName(), client.getName(), comment), time);
        				return;
        			}
        		}
        		
        		client.sendButlerMessage(channel.getName(), String.format("°>_h%s|/serverpp \"|/w \"<° wurde _entsperrt_.", target.getName().replace("<", "\\<")));
        		target.setComment(time, null, "Entsperrt!", client.getName(), comment);
        		Server.get().query(String.format("update accounts set sperrewann='', sperre='0', sperrevon='', sperreinfo='' where name='%s'", target.getName()));
        		Server.lockedNicks.remove(target.getName());
        		return;
        	}
        	
        	if(info.isEmpty()) {
        		client.sendButlerMessage(channel.getName(), infor);
        		return;
        	}
        	
        	if(tage.equals("sug")) {
        		if(info.equals("!")) {
        			if(target.getWahlsperre() == 0) {
            			client.sendButlerMessage(channel.getName(), String.format("%s hat keine Wahlsperre.", target.getName()));
        				return;
        			}
        			
        			client.sendButlerMessage(channel.getName(), String.format("%s wurde für alle _Wahlen entsperrt_.", target.getName()));
        			Server.get().newMessage(Server.get().getButler(), target.getName(), "Wahlsperre entfernt", String.format("Du wurdest von %s für alle Wahlen entsperrt.", client.getName()), time);
        			
        			if(online) {
        				target.setWahlsperre(0);
        			} else {
        				Server.get().query(String.format("update accounts set wahlsperre='0' where name='%s'", target.getName()));
        			}
        			
        			target.setComment(time, null, "Für alle Wahlen entsperrt!", client.getName(), comment);
            		return;
        		}

    			if(target.getWahlsperre() != 0) {
        			client.sendButlerMessage(channel.getName(), String.format("%s ist bereits für alle Wahlen gesperrt.", target.getName()));
    				return;
    			}
    			
        		DateFormat formater = DateFormat.getDateInstance();
        		formater.setLenient(false);
            
        		try{
        			formater.parse(info);
        		}catch(ParseException e) {
        			client.sendButlerMessage(channel.getName(), "Du hast ein falsches Datum angegeben (Beispiel: _01.01.2020_).");
        			return;
        		}
        		
        		long diffDays = 0;
        		
        		try {
        			DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
        			Date from = df.parse(Server.get().timeStampToDate(time));
        			Date to = df.parse(info);
        			long diffMillis = to.getTime() - from.getTime();
        			diffDays = Math.round(diffMillis / (1000. * 60. * 60. * 24.));
        		} catch (ParseException ex) {
        			return;
        		}
        		
                if(diffDays < 1) {
                	client.sendButlerMessage(channel.getName(), "Du musst mindestens das Datum von morgen angeben.");
                }

                long when = (int) (time+(diffDays*86400));
                
    			client.sendButlerMessage(channel.getName(), String.format("%s wurde bis zum _%s (%s Tage) für alle Wahlen gesperrt_.", target.getName(), info, diffDays));
    			Server.get().newMessage(Server.get().getButler(), target.getName(), "Wahlsperre", String.format("Du wurdest von %s bis zum %s für alle Wahlen gesperrt.", client.getName(), info), time);
    			
    			if(online) {
            		target.setWahlsperre(when);
            	} else {
            		Server.get().query(String.format("update accounts set wahlsperre='%s' where name='%s'", when, target.getName()));
            	}
            	
    			target.setComment(time, null, String.format("Bis zum %s (°R°%s Tage°B°) für alle Wahlen gesperrt!", info, diffDays), client.getName(), comment);
            	return;
            }
        	
        	if(target.getSperre() != 0) {
        		client.sendButlerMessage(channel.getName(), String.format("%s ist bereits gesperrt.", target.getName()));
        		return;
        	}
        	
        	
        	if(info.length() < 20 || info.length() > 1000) {
        		client.sendButlerMessage(channel.getName(), "Die Info muss mindestens 20 und darf maximal 500 Zeichen lang sein.");
        		return;
        	}
        	
        	if(target == client || target.getRank() > 4 && client.getRank() < 7 || target == Server.get().getButler()) {
        		client.sendButlerMessage(channel.getName(), String.format("%s kann nicht gesperrt werden.", target.getName()));
        		return;
        	}
            
            if(tage.isEmpty()) {
            	tage = "3";
            }
            
            if(tage.equals("!")) {
            	tage = "462";
            }
            
            try {
            	Integer.parseInt(tage);
            } catch(Exception ex) {
            	client.sendButlerMessage(channel.getName(), "Du musst eine Zahl angeben.");
            	return;
            }
            
            int days = Integer.parseInt(tage);
            long when = (int) (time+(days*86400));
            
            if(days < 1) {
            	client.sendButlerMessage(channel.getName(), "Du musst eine Zahl >= 1 angeben.");
            }

            info = KCodeParser.parse(client, info, 15, 10, 20);
            info = Server.get().parseSmileys(client, info);
        	String sperrewann = Server.get().timeStampToDate(time);
        	String entsperrdatum = Server.get().timeStampToDate(when);
        	
        	client.sendButlerMessage(channel.getName(), String.format("°>_h%s|/serverpp \"|/w \"<° wurde %s _gesperrt_.%s", target.getName().replace("<", "\\<"), tage.equals("462")?"_permanent_":String.format("für _%s Tage_", days), target.getRank() == 1 && days > 30 && days != 462?" Außerdem wurde automatisch eine Wahlsperre von _180 Tagen_ gesetzt.":""));
        	if(online) {
                    target.setLocks(target.getLocks()+1);
        		String title = "Chat-Knigge - die Benimmregeln für den Chat";
                        target.send(Popup.create(title, title, "_Chat-Knigge, Benimmregeln für den Chat_##Damit dir, deinen Freunden und allen anderen Menschen CuddlyChat immer Spaß macht, ist es wichtig, dass alle Mitglieder Grundregeln einhalten. Diese Grundregeln sorgen dafür, dass selbst bei Tausenden von Mitgliedern alle aufeinander Rücksicht nehmen und sich respektvoll begegnen. Du kannst von anderen erwarten, dass sie auf dich Rücksicht nehmen, dir freundlich begegnen solange du anderen Mitgliedern immer mit Respekt begegnest.##Der Knigge besteht aus den zehn wichtigsten Grundregeln, an die du dich stets halten solltest, da diese Regeln ein respektvolles und tolerantes Klima im Umgang miteinander schaffen.#Akzeptierst du diese Grundregeln nicht, wirst du innerhalb unserer Gemeinschaft keine Akzeptanz finden. Menschen, die Streit und Ärger suchen, sind bei NetChat fehl am Platz. Deshalb kann ein deutlicher Verstoß gegen die Regeln zu einer permanenten Sperre führen.##1.#Vergiss niemals, dass am anderen Ende, hinter jedem Nicknamen, ein Mensch sitzt. Wie im echten Leben soll man anderen Menschen mit Respekt, Toleranz und Hilfsbereitschaft begegnen und sie auf keinen Fall beleidigen, kränken oder ärgern.##2.#Werbung jeder Art (z.B. für die eigene Homepage, Foto bzw. Wünsche nach Fotokommentaren oder für Mychannel, ...) stört alle Anwesenden und sollte unterlassen werden. Außerdem ist die Wiederholung derselben öffentlichen Nachricht nicht erwünscht.#3.#Ständiges Schreiben in °20°großer§ Schrift, _fett_, in GROSSBUCHSTABEN, _°B°b°R°u°G°n°Y°t_§ und _°E°farbig§, oder mit vielen !!!!! wird im Chat meist als Schreien oder als Aggression interpretiert, vermeide es.##Öffentlich sichtbare Nachrichten sollen immer in Deutsch oder in Ausnahmen auf Englisch verfasst werden, da sonst die Mehrzahl der Anwesenden (inkl. der Administration) deine Nachricht nicht verstehen kann.##Verwende keine nicht lesbaren Schriftfarben, wie z.B. die des Hintergrundes.##Falls bestimmte Textformatierungen oder Sprachen in einem Channel ausdrücklich zugelassen sind, so ist dies in den jeweiligen channeleigenen Regeln (/info)  oder im Channelthema vermerkt.##4.#Rassistische Äußerungen sind, neben allen weiteren Äußerungen, die gegen Verfassung, Recht und die guten Sitten verstoßen, strengstens verboten. Solltest du jemanden beobachten, der gegen diese Regel verstößt, rufe bitte umgehend einen Channelmoderator oder Admin.##5.#Öffentliche und private vulgäre Anmachen stoßen auf Ablehnung. Denke daran, dass auch im Chat primitives, sexorientiertes Verhalten eine Belästigung darstellt. Die Frage nach Cybersexpartnern oder erotischen Camchats via Messenger schließt dies ein.##6.#Vergiss bitte nicht, dass der Channel nicht dir und deinem Gesprächspartner allein gehört. Insbesondere durch öffentlich geführte Gespräche über private/intime Themen (wie bspw. das eigene Liebesleben) oder hitzige Diskussionen, fühlen sich andere Mitglieder oft gestört. In so einem Fall solltet ihr privat weiterreden.##Das permanente, ununterbrochene Fragen nach Gesprächspartnern (z.B. Wer will chatten?) stört das Chatklima und ist meist nicht erwünscht.##7.#Wenn dich etwas nervt oder aufregt, solltest du mit Gelassenheit und Größe ruhig und freundlich reagieren. Menschen, die dich ohne Grund angreifen, verdienen deine Aufmerksamkeit nicht. Ignoriere sie einfach mit der /ig NICK Funktion, das ist die beste Antwort.##8.#Neu angemeldeten Chattern solltest du hilfsbereit und freundlich begegnen. Wer sich gerade neu angemeldet hat, ist meist etwas überfordert mit der Flut an Chatfunktionen und dankbar für jede noch so kleine Hilfe.##9.#Die demokratisch gewählten Channelmoderatoren und Admins machen ihren Job ehrenamtlich. Wenn du dich mit einem Problem oder einer Frage an sie wendest, solltest du dies immer freundlich tun. Du musst Verständnis haben, wenn sie dir manchmal nicht oder erst später helfen können.##10.#Sollte jemand deutlich gegen diese Regeln verstoßen, dann weise ihn einfach freundlich auf seinen Fehler hin. Erkläre mit Nachsicht, dass es gegen den Knigge verstößt.#Sollte dies nicht helfen, wende dich bitte an einen Channelmoderator oder Admin.", 400, 250));
                        target.logout("Ausgeloggt.");
        	}
                
        	
        	Server.get().query(String.format("update accounts set sperrewann='%s', sperre='%s', sperreinfo='%s', sperrevon='%s' where name='%s'", sperrewann, tage.equals("462")?1:when, info.replace("'", "\\'"), client.getName(), target.getName()));
        	target.setComment(time, null, days==462?"°R°\"Permanent\"°B° gesperrt!":String.format("Bis zum %s (°R°%s Tage°B°) gesperrt!", entsperrdatum, days), client.getName(), comment);
        	Server.lockedNicks.put(target.getName(), String.format("%s~%s~%s", client.getName(), sperrewann, days == 462 ? " ":entsperrdatum));
        	
        	if(target.getRank() == 1 && days > 30 && days != 462) {
        		long diffDays = 0;
                long wann = (int) (time+(180*86400));
                
        		try {
        			DateFormat df = new SimpleDateFormat("dd.MM.yyyy");
        			Date from = df.parse(Server.get().timeStampToDate(time));
        			Date to = df.parse(Server.get().timeStampToDate(time+(86400*180)));
        			long diffMillis = to.getTime() - from.getTime();
        			diffDays = Math.round(diffMillis / (1000. * 60. * 60. * 24.));
        		} catch (ParseException ex) {
        			return;
        		}
        		
        		Server.get().newMessage(Server.get().getButler(), target.getName(), "Wahlsperre", String.format("Du wurdest bis zum %s für alle Wahlen gesperrt.", info), time);
    			Server.get().query(String.format("update accounts set wahlsperre='%s' where name='%s'", wann, target.getName()));
            	target.setComment(time, null, String.format("Bis zum %s (°R°%s Tage°B°) für alle Wahlen gesperrt!", Server.get().timeStampToDate(time+(86400*180)), diffDays), Server.get().getButler().getName(), String.format("Automatische Wahlsperre durch Sperrung von %s", client.getName()));
        	}
        	
        	for(Channel c : Server.get().getChannels()) {
        		if(c.isVisible()) {
        			if(c.checkCm(target.getName())) {
        				for(String hz : c.getHZ().split("\\|")) {
        					if(!hz.isEmpty()) {
        						Server.get().newMessage(Server.get().getButler(), hz, "CM gesperrt", String.format("Hallo %s,##der CM °>_h%s|/serverpp \"|/w \"<° aus deinem HZA-Channel %s wurde _von %s %s gesperrt_.##_Begründung_ von %s:##%s", hz, target.getName().replace("<", "\\<"), c.getName(), client.getName(), days == 462 ? "permanent":String.format("für %s Tage", days), client.getName(), info), time);
        					}
        				}
        			}
        		}
        	}
        } else if(cmd.equals("gamelock")) {
            if(!client.hasPermission("cmd.gamelock")) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
            }
        	
            String[] pieces = arg.split(":", 3);
            String nick = "", comment = "", tage = "";
            boolean entsperren = false;
            
            try {
            	nick = pieces[0];
            	comment = pieces[1];
            	tage = pieces[2];
            } catch(Exception ex) {
            }
            
            if(nick.isEmpty() || comment.isEmpty()) {
            	client.sendButlerMessage(channel.getName(), "Bitte die Funktion folgendermaßen benutzen:#/gamelock NICK:COMMENT:TAGE#(Sperrt NICK für TAGE für alle Chatspiele. COMMENT wird als Adminkommentar bei NICK eingetragen. Ist TAGE nicht angegeben, wird NICK für 3 Tage gesperrt. Mit !NICK:COMMENT entsperrt man NICK wieder.)");
            	return;
            }
            if(nick.startsWith("!")) {
            	entsperren = true;
            	nick = nick.replace("!", "");
            }
            
            Client target = Server.get().getClient(nick);
            boolean online = true;
            
            if(target == null) {
            	online = false;
            	target = new Client(null);
            	target.loadStats(nick);
            	
            	if(target.getName() == null) {
            		client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(nick));
            		return;
            	}
            }
            
            comment = KCodeParser.parse(client, comment, 5, 10, 20);
            comment = Server.get().parseSmileys(client, comment);
            
            if(entsperren) {
            	if(target.getSpielsperre() == 0) {
            		client.sendButlerMessage(channel.getName(), String.format("%s hat momentan keinen Gamelock.", target.getName()));
            		return;
            	}
            	
            	client.sendButlerMessage(channel.getName(), String.format("%s wurde für alle Spiele _entsperrt_.", target.getName()));
            	Server.get().newMessage(Server.get().getButler(), target.getName(), "Gamelock aufgehoben", String.format("%s hat deinen Gamelock soeben aufgehoben.", client.getName()), time);
            	
            	if(online) {
            		target.setSpielsperre(0);
            	} else {
            		Server.get().query(String.format("update accounts set spielsperre='0' where name='%s'", target.getName()));
            	}
            	
            	target.setComment(time, null, "Gamelock aufgehoben!", client.getName(), comment);
            	return;
            }
            
            if(target == Server.get().getButler() || target == client || target.getRank() > 4) {
            	client.sendButlerMessage(channel.getName(), String.format("Du kannst %s keinen Gamelock geben.", target.getName()));
            	return;
            }

            if(target.getSpielsperre() != 0) {
            	client.sendButlerMessage(channel.getName(), String.format("%s ist bereits für alle Spiele gesperrt.", target.getName()));
            	return;
            }
            
            if(tage.isEmpty()) {
            	tage = "3";
            }
            
            try {
            	Integer.parseInt(tage);
            } catch(Exception ex) {
            	client.sendButlerMessage(channel.getName(), "Du musst eine Zahl angeben.");
            	return;
            }
            
            int days = Integer.parseInt(tage);
            long when = (int) (time+(days*86400));
            
            if(days < 1) {
            	client.sendButlerMessage(channel.getName(), "Du musst eine Zahl >= 1 angeben.");
            }
            
            client.sendButlerMessage(channel.getName(), String.format("%s wurde soeben für _%s Tage für alle Spiele gesperrt_.", target.getName(), days));
            Server.get().newMessage(Server.get().getButler(), target.getName(), "Gamelock", String.format("%s hat dich bis zum _%s für alle Spiele gesperrt_.", client.getName(), Server.get().timeStampToDate(when)), time);
        	
        	if(online) {
        		target.setSpielsperre(when);
        	} else {
        		Server.get().query(String.format("update accounts set spielsperre='%s' where name='%s'", when, target.getName()));
        	}
        	
        	target.setComment(time, null, String.format("Gamelock (°R°%s Tage°B°)!", days), client.getName(), comment);
        } else if (cmd.equals("cc") || cmd.equals("go")) {
            if(!client.hasPermission(String.format("cmd.%s", cmd))) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
            }
            
        	arg = KCodeParser.escape(arg);
            String ch = arg;
            boolean change = true;

            if (!ch.isEmpty() && arg.charAt(0) == '+') {
                change = false;
                ch = ch.substring(1).trim();
            }

            if (ch.isEmpty()) {
                client.sendButlerMessage(channel.getName(), "Bitte die Funktion folgendermaßen benutzen:#/go CHANNEL oder NICK#(Wechselt falls möglich in diesen CHANNEL, oder wechselt in den Channel dieses Nicks)");
                return;
            }
            
            if(ch.toLowerCase().equals("suche")) {
            	parse("/e", client, channel);
            	return;
            }

            Channel channelTo = Server.get().getChannel(ch);
            
            Client target = Server.get().getClient(ch);
            if(target != null) {
            	channelTo = target.getChannel();
            }
            
            if (channelTo == null) {
            /*	if(ch.startsWith("/") && client.getRank() > 0 || client.getRank() > 4) {
            		if (ch.length() > 20) {
                		client.sendButlerMessage(channel.getName(), String.format("Der Channel %s kann nicht neu angelegt werden, da er aus zu vielen Zeichen besteht. Maximal sind _20 Zeichen_ erlaubt.", new Object[] { arg }));
                		return;
                	}

                	if ((ch.indexOf(">") >= 0) || (ch.indexOf("}") >= 0) || (arg.indexOf("{") >= 0) || (arg.indexOf("[") >= 0) || (arg.indexOf("]") >= 0) || (arg.indexOf("_") >= 0) || (arg.indexOf("`") >= 0) || (arg.indexOf("´") >= 0) || (arg.indexOf("<") >= 0) || (arg.indexOf(";") >= 0) || (arg.indexOf(",") >= 0) || (arg.indexOf(".") >= 0) || (arg.indexOf("?") >= 0) || (arg.indexOf("!") >= 0) || (arg.indexOf("%") >= 0) || (arg.indexOf("°") >= 0) || (arg.indexOf("\"") >= 0) || (arg.indexOf("(") >= 0) || (arg.indexOf(")") >= 0) || (arg.indexOf("=") >= 0) || (arg.indexOf("#") >= 0) || (arg.indexOf("~") >= 0) || (arg.indexOf("'") >= 0 || (arg.indexOf("§") >= 0) || (arg.indexOf("|") >= 0))) {
                		client.sendButlerMessage(channel.getName(), String.format("Der Channel %s kann nicht neu angelegt werden, da er ein ungültiges Zeichen enthielt. Alle _Buchstaben_ und _Zahlen_ sowie folgende Zeichen sind im Channelnamen erlaubt: ##_+, -, @, ß,  , /, *_", new Object[] { arg }));
                		return;
                	}
                	
                	Server.get().createChannel(ch, 1, client.getName(), 1, null, null);
                	channelTo = Server.get().getChannel(ch);

                    client.joinChannel(channelTo);
                    
                    if (change) {
                        channel.leave(client);
                        client.leaveChannel(channel);
                        client.send(PacketCreator.switchChannel(channel.getName(), channelTo.getName()));
                        client.send(PacketCreator.updateChannelSettings(channelTo));
                        client.send(PacketCreator.updateChannelBackground(channelTo));
                    } else {
                        client.send(PacketCreator.channelFrame(channelTo, client.getName()));
                    }

                    channelTo.join(client);   
            	} else {*/
            		client.sendButlerMessage(channel.getName(), String.format("Der Channel _%s existiert nicht_.", ch));
            	//}
            	
            	return;
            }
            

            
            if (channelTo.getClients().contains(client)) {
            	client.sendButlerMessage(channel.getName(), String.format("Du bist doch schon im Channel %s.", channelTo.getName()));
            	return;
           	}
            
            if(client.checkCl(channelTo)) {
           		client.sendButlerMessage(channel.getName(), String.format("Für den Channel %s wurden Sie leider bis morgen früh gesperrt.", channelTo.getName()));
           		return;
           	}
            
            if(client.getRank() < channelTo.getMinRank() && !channelTo.getName().equals("Knuddelsmillionär") && !client.checkTeam("Knuddelsmillionär")) {
            	String minrank = "";
                	
                if(channelTo.getMinRank() == 1) {
                	minrank = "Familymitglieder";
                } else if(channelTo.getMinRank() == 2) {
                	minrank = "Stammis";
                } else if(channelTo.getMinRank() == 3) {
                	minrank = "Ehrenmitglieder";
                } else if(channelTo.getMinRank() > 3 && channelTo.getMinRank() < 8) {
                	minrank = "Admins";
                } else {
                	minrank = "Sysadmins";
                }
                	
                client.sendButlerMessage(channel.getName(), String.format("Nur %s können den Channel %s betreten.", minrank, channelTo.getName()));
            	return;
            }

            if(channelTo.countClients() >= channelTo.getSize()) {
            if (channelTo.getMaxTochter() == 0) {
            	client.sendButlerMessage(channel.getName(), String.format("Dieser Channel ist auf _maximal %s_ Leute beschränkt, bitte wähl einen anderen Channel.", channelTo.getSize()));
            } else  {
            	String hauptchannel = "";
            			 
            	if(channelTo.getTochter().trim().isEmpty()) {
            		hauptchannel = channelTo.getName();
            	} else {
                 	hauptchannel = channelTo.getTochter();
            	}	

            	Channel haupt = Server.get().getChannel(hauptchannel);
                 
                int lastid = 1;
                PoolConnection pcon9 = ConnectionPool.getConnection();
                PreparedStatement ps9 = null;
                
                try {
                	Connection con = pcon9.connect();
                	ps9 = con.prepareStatement("SELECT * FROM channels where name = ? or tochter = ? and tochter != '' order by id desc limit 1");
                	ps9.setString(1, channelTo.getName());
                	ps9.setString(2, channelTo.getTochter());
                	ResultSet rs9 = ps9.executeQuery();
                
                	while (rs9.next()) {
                			String nam = rs9.getString("name");
                			String[] lols = nam.split(" ");
                			
                			if(lols.length > 0) {
                				try {
                					lastid = Integer.parseInt(lols[lols.length-1]);
                				}catch(NumberFormatException ex) {
                				}
                			}
                		}
                } catch (SQLException e) {
                	e.printStackTrace();
                } finally {
                	if (ps9 != null) {
                		try {
                			ps9.close();
                		}catch (SQLException e) {
                		}
                	}
                	
                	pcon9.close();
                }
                 
                int nextid = 0;
                for (int start = 1; start <= lastid; start++) {
                	String name = haupt.getName() + " " + start;
                	name = name.replace(" 1", "");
                	Channel next = Server.get().getChannel(name);
                
                	if ((nextid != 0) || next != null && next.countClients() >= next.getSize()) continue;
                		
                	nextid = start;
                }
                
                if (nextid == 0) {
                	nextid = lastid + 1;
                }
                 
                String nextchannelname = haupt.getName() + " " + nextid;
                nextchannelname = nextchannelname.replace(" 1", "");
                Channel exist = Server.get().getChannel(nextchannelname);
                
                if (nextid > channelTo.getMaxTochter()) {
                	client.sendButlerMessage(channel.getName(), String.format("Dieser Channel ist auf _maximal %s_ Leute beschränkt, bitte wähl einen anderen Channel.", channelTo.getSize()));
                	return;
                }
                
                if (exist == null) {
                	Channel.CopyChannel(haupt.getName(), nextid);
                }
                client.sendButlerMessage(channel.getName(), String.format("Dieser Channel ist auf _maximal %s_ Leute beschränkt, bitte wähl einen anderen Channel. Allerdings wäre im Channel _°>_2" + nextchannelname + "|/go \"|/go +\"<°_ noch ein Platz frei.",channelTo.getSize()));
                return;
            }
            }
            
            if(!client.hasPermission("channeljoin")) {
            	if(channelTo.getMinage() != 0 && client.getAge() > channelTo.getMinage()) {
            		client.sendButlerMessage(channel.getName(), "Du kannst diesen Channel nicht betreten, da er für jüngere Nutzer reserviert ist.");
                    return;
            	}
            	
            	if(channelTo.getMingender() != 0) {
            		if(client.getGender() != channelTo.getMingender()) {
            			client.sendButlerMessage(channel.getName(), String.format("Dieser Channel kann nur von %s Mitgliedern betreten werden.", channel.getMingender() == 1 ? "männlichen":"weiblichen"));
                    	return;
            		}
            	}
            	
            	if(client.getStammiMonths() < channelTo.getMinstammimonths()) {
            		client.sendButlerMessage(channel.getName(), "Du hast nicht genug Stammimonate, um diesen Channel betreten zu können.");
                	return;
            	}
                
                if(client.getHol() < channelTo.getMinholpoints()) {
            		client.sendButlerMessage(channel.getName(), "Du brauchst mindestens 20.000 High or Low Punkte, um diesen Channel betreten zu können.##Oder logge dich im Alternativchannel °>High or Low|/go High or Low<° ein.");
                	return;
            	}
                
                if(client.getJumpopunkte() < channelTo.getMinjumpopoints()) {
            		client.sendButlerMessage(channel.getName(), "Du brauchst mindestens 10.000 Jumpo Punkte, um diesen Channel betreten zu können.##Oder logge dich im Alternativchannel °>Jumpo|/go Jumpo<° ein.");
                	return;
            	}
                
                
               if(client.getKnuddels() < channelTo.getMinknuddels()) {
            		client.sendButlerMessage(channel.getName(), "Du besitzt leider nicht genug Knuddels, um diesen Channel betreten zu können.");
                	return;
            	}
            	
            	if(channelTo.getName().equals("Foto Verified") && client.getPhotoVerify() == 0) {
            		client.sendButlerMessage(channel.getName(), "Du kannst den Channel Foto Verified nur betreten, wenn du ein verifiziertes Foto hast.");
            		return;
            	}
            	
            	if(channelTo.getName().equals("Smileys")) {
            		if(!client.checkCode(47) && !client.checkCode(48) && !client.checkCode(68)) {
            			client.sendButlerMessage(channel.getName(), "Den Channel Smileys können Sie aus geheimnisvollen Gründen nicht betreten.");
            			return;
            		}
            	}
            	
            	if(channelTo.getName().equals("CMs")) {
            		boolean cm = false;

                    for(Channel cha : Server.get().getChannels()) {
                    	if(cha.checkCm(client.getName())) {
                    		cm = true;
                    		continue;
                    	}
                    }
            		
            		if(!cm) {
            			client.sendButlerMessage(channel.getName(), "Um diesen Channel zu betreten, musst du CM oder Admin sein.");
            			return;
            		}
            	}
            	
            	if(!channelTo.getPassword().isEmpty()) {
            		Popup popup = new Popup("Passwort notwendig", "Passwort notwendig", String.format("Für den Channel %s ist ein Passwort notwendig.", channelTo.getName()), 350, 130);
            		Panel panel8 = new Panel();
            		panel8.addComponent(new Label(String.format("Passwort: ")));
            		panel8.addComponent(new TextField(20));
            		popup.addPanel(panel8);
            		Panel panel2 = new Panel();
            		Button button = new Button("OK");
                        button.setStyled(true);
            		panel2.addComponent(new Label("  ")); 
            		button.enableAction();
            		panel2.addComponent(button);
            		Button button2 = new Button ("Abbrechen");
                        button2.setStyled(true);
                        panel2.addComponent(button);
                        
                        
            		popup.addPanel(panel2);

                	String newWindow = "";
                
                	if(change) {
                    	newWindow = "no";
                	}else{
                    	newWindow = "yes";
                	}
                
                	popup.setOpcode(ReceiveOpcode.PASSWORD.getValue(), String.format("%s:%s:%s", channelTo.getName(), channel.getName(), newWindow));
                	client.send(popup.toString());
                	return;
            	}
            }

            if(channel.isVisible()) {
                client.setLastChannel(channel.getName());
                client.setNewChannel(channelTo.getName());
            } else {
                client.setNewChannel(null);
                client.setLastChannel(null);
            }
            
            client.joinChannel(channelTo);

            if (change) {
            	if(channel.getName().equals("Minecraft")) {
            		client.send(PacketCreator.closeBillardList(channel.getName()));
            	}
            	
                channel.leave(client);
                client.leaveChannel(channel);
                client.send(PacketCreator.switchChannel(channel.getName(), channelTo.getName()));
                client.send(PacketCreator.updateChannelSettings(channelTo));
                client.send(PacketCreator.updateChannelBackground(channelTo));
            } else {
                client.send(PacketCreator.channelFrame(channelTo, client.getName()));
            }

            channelTo.join(client);        
        } else if(cmd.equals("code")) {
            if(!client.hasPermission("cmd.code")) {
            	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
            	return;
            }
            
        	if(arg.equals("old")) {
        		StringBuilder presents = new StringBuilder();
                
                PoolConnection pcon = ConnectionPool.getConnection();
                PreparedStatement ps = null;
        
                try {
                    Connection con = pcon.connect();
                    ps = con.prepareStatement("select von, uhrzeit, text from presents where an = ? and erhalten = 1 order by id desc limit 10");
                    ps.setString(1, client.getName());
                    ResultSet rs = ps.executeQuery();
            
                    while (rs.next()) {
                    	String von = rs.getString("von");
                    	String text = rs.getString("text");
                    	long uhrzeit = rs.getLong("uhrzeit");
                    	
                        presents.append("#_Eine °>present.gif<° von °>").append(von.replace("<", "\\<")).append("|/serverpp \"|/w \"<°_:##").append(text).append("§#\"erhalten am ").append(Server.get().timeStampToDate(uhrzeit)).append(" ").append(Server.get().timeStampToTime(uhrzeit)).append("§##°-°");
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    if (ps != null) {
                        try {
                            ps.close();
                        } catch (SQLException e) {
                        }
                    }

                    pcon.close();
                }

                if(presents.toString().isEmpty()) {
                	client.sendButlerMessage(channel.getName(), "Du hast bisher keine Geschenke erhalten.");
            		return;
                }
                
                client.send(Popup.create("Erhaltene Geschenke", "Erhaltene Geschenke", String.format("Folgende Geschenke wurden in letzter Zeit für Dich hinterlegt:#%s", presents.toString()), 400, 250));
                return;
        	}
        	
        	if(arg.equals("swapactions")) {
        		StringBuilder tausch = new StringBuilder();
                PoolConnection pcon = ConnectionPool.getConnection();
                PreparedStatement ps = null;
          
                try {
                    Connection con = pcon.connect();
                    ps = con.prepareStatement(String.format("SELECT `uhrzeit`,`von`,`an`,`vonsmileys`,`ansmileys` FROM `tauschaktionen` where an='%s' or von='%s'", client.getName(), client.getName()));
                    ResultSet rs = ps.executeQuery();
               
                    while(rs.next()) {
                    	Long uhr = rs.getLong("uhrzeit");
                    	String uhrzeit = String.format("%s %s", Server.get().timeStampToDate(uhr), Server.get().timeStampToTime(uhr));
                    	String von = rs.getString("von").replace("<", "\\<");
                    	String an = rs.getString("an").replace("<", "\\<");
                    	String vonsmileys = rs.getString("vonsmileys");
                    	String ansmileys = rs.getString("ansmileys");
                    	int smileysvon = Server.countChars(vonsmileys, '|')/2;
                    	int smileysan = Server.countChars(ansmileys, '|')/2;
                    	
                    	tausch.append("_").append(uhrzeit).append("_:##_°BB>_h").append(von).append("|/serverpp \"|/w \"<r°_ tauschte:#°>layout/bullet...b.png<° _").append(smileysvon).append(" Smiley");
                    	if(smileysvon > 1) {
                    		tausch.append("s");
                    	}
                    	tausch.append("_ (");
                    	
                    	for(String x : vonsmileys.split("\\|")) {
                    		if(!x.isEmpty()) {
                    			tausch.append("°>").append(x).append("<°");
                    		}
                    	}
                    	tausch.append(")##_°BB>_h").append(an).append("|/serverpp \"|/w \"<r°_ tauschte:#°>layout/bullet...b.png<° _").append(smileysan).append(" Smiley");
                    	if(smileysan > 1) {
                    		tausch.append("s");
                    	}
                    	tausch.append("_ (");
                    	
                    	for(String x : ansmileys.split("\\|")) {
                    		if(!x.isEmpty()) {
                    			tausch.append("°>").append(x).append("<°");
                    		}
                    	}
                    	tausch.append(")°-°");
                    	
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    if (ps != null) {
                        try {
                            ps.close();
                        } catch (SQLException e) {
                        }
                    }

                    pcon.close();   
                }
                
                if(tausch.toString().isEmpty()) {
                	client.send(Popup.create("Keine Tausch-Aktionen", "Keine Tausch-Aktionen", "#Es sind keine Tausch-Aktionen von dir gespeichert.", 400, 250));
                	return;
                }
                
                String title = String.format("Letzte Tausch-Aktionen von %s", client.getName());
                client.send(Popup.create(title, title, tausch.toString(), 400, 250));
        		return;
        	}
        	
        	if(arg.equals("?")) {
                if(client.getRank() < 3 && client.getSmileys().isEmpty() && client.getMentorPoints() < 100)  {
                	client.send(Popup.create("Keine Codes vorhanden", "Keine Codes vorhanden", "#Du besitzt aktuell keine Codes.", 400, 250));
                	return;
                }
                
        		StringBuilder code = new StringBuilder("#_°BB>center<°Eigene Smileys§#°>left<°#");
        		
        		//if (client.getMentorPoints() > 99) {
        			for (String cod : Server.mentorsmileys.keySet()) {
        				String[] split = Server.mentorsmileys.get(cod);
        				String id = split[1];
        				int mentorPoints = Integer.parseInt(split[0]);
        				String name = split[2];
        				String description = split[3];
        				
        				if (client.getMentorPoints()  >= mentorPoints|| client.hasPermission("useallmentorsmileys")) {
        					code.append(String.format("#_%s_ (%s/14)#°>%s...b.gif<° = %s#%s##°-°", name, id, id, cod, description));
        				}
        			}
        		//}
        		
        		if (!client.getSmileys().isEmpty()) {
        			for (String sm : client.getSmileys().split("\\|")) {
        				if (!sm.isEmpty()) {
        					int smi = Integer.parseInt(sm.split("~")[0]);

        					for (int smiley : Server.smileys.keySet()) {
        						if (smiley == smi) {
        							String[] split = Server.smileys.get(smiley);
        							String syntax = split[0];
        							String replacement = split[1];
        							String name = split[3];
        							String description = split[4];
        							String feature = "";
        							
        							code.append("#_").append(name).append("_ ").append("Zusatz").append("#°>").append(replacement).append("<° = ").append(syntax).append("#").append(description);
        							
        							if(!feature.isEmpty()) {
        								code.append("##°R°_FEATURE:_°r° ").append(feature).append("#");
        							}
        							
        							code.append("##°-°");
        						}
        					}
        				} 
        			}
        		}

                String title = String.format("Codeübersicht %s", client.getName());
                
                client.send(Popup.create(title, title, code.toString(), 640, 480));
                return;
            }

        	if(arg.equals("+readmeeffects")) {
        		client.sendButlerMessage(channel.getName(), "Readmeeffects _aktiviert_.");
        		client.setReadmeEffects((byte) 1);
        		return;
        	}

        	if(arg.equals("-readmeeffects")) {
        		client.sendButlerMessage(channel.getName(), "Readmeeffects _deaktiviert_.");
        		client.setReadmeEffects((byte) 0);
        		return;
        	}

        	if (arg.equals("+effects")) {
        		for(Client target : channel.getClients()) {
        			if(target.getEffect() == 1) {
        				client.send(PacketCreator.effect(target.getName(), "flame"));
        			} else if(target.getEffect() == 2) {
        				client.send(PacketCreator.effect(target.getName(), "holy"));
        			} else if(target.getEffect() == 3) {
        				client.send(PacketCreator.effect(target.getName(), "god"));
        			} else if(target.getEffect() == 4) {
        				client.send(PacketCreator.effect(target.getName(), "glamour"));
        			} else if(target.getEffect() == 5) {
        				client.send(PacketCreator.effect(target.getName(), "glow"));
                                } else if(target.getEffect() == 6) {
        				client.send(PacketCreator.effect(target.getName(), "devilish"));
                                } else if(target.getEffect() == 7) {
        				client.send(PacketCreator.effect(target.getName(), "monster"));
                                
                                        
        			}
        		}
        		
        		client.sendButlerMessage(channel.getName(), "Effekte in der Nickliste aktiviert.");
        		
        		client.setShowEffects((byte)1);
        		return;
        	}

        	if (arg.equals("-effects")) {
        		for(Client target : channel.getClients()) {
        			if(target.getEffect() == 1) {
        				client.send(PacketCreator.removeEffect(target.getName(), "flame"));
        			} else if(target.getEffect() == 2) {
        				client.send(PacketCreator.removeEffect(target.getName(), "holy"));
        			} else if(target.getEffect() == 3) {
        				client.send(PacketCreator.removeEffect(target.getName(), "god"));
        			} else if(target.getEffect() == 4) {
        				client.send(PacketCreator.removeEffect(target.getName(), "glamour"));
        			} else if(target.getEffect() == 5) {
        				client.send(PacketCreator.removeEffect(target.getName(), "glow"));
                                } else if(target.getEffect() == 6) {
        				client.send(PacketCreator.removeEffect(target.getName(), "devilish"));
                                } else if(target.getEffect() == 7) {
        				client.send(PacketCreator.removeEffect(target.getName(), "monster"));
                                
        			}
        		}
        		
        		client.sendButlerMessage(channel.getName(), "Effekte in der Nickliste deaktiviert.");
        		client.setShowEffects((byte)0);
        		return;
        	}
        	
        	if (arg.equals("+flames")) {
        		if (!client.checkCode(75) && !client.checkCode(76) && !client.hasPermission("cmd.code.flames")) {
        			if(client.getRank() < 8) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                	if(target.getShowEffects() == 1) {
                		target.send(PacketCreator.effect(client.getName(), "flame"));
                		target.send(PacketCreator.removeEffect(client.getName(), "holy"));
                		target.send(PacketCreator.removeEffect(client.getName(), "god"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glamour"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glow"));
                                target.send(PacketCreator.removeEffect(client.getName(), "devilish"));
                                target.send(PacketCreator.removeEffect(client.getName(), "monster"));
                               
                	}
                }
       
                client.setEffect((byte)1);
                return;
            }
                
   
            
            if (arg.equals("+light")) {
            	if (!client.checkCode(56) && !client.checkCode(57) && !client.hasPermission("cmd.code.light")) {
            		if(client.getRank() < 8) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                	if(target.getShowEffects() == 1) {
                		target.send(PacketCreator.effect(client.getName(), "holy"));
                		target.send(PacketCreator.removeEffect(client.getName(), "flame"));
                		target.send(PacketCreator.removeEffect(client.getName(), "god"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glamour"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glow"));
                                target.send(PacketCreator.removeEffect(client.getName(), "devilish"));
                                target.send(PacketCreator.removeEffect(client.getName(), "monster"));
                                
                	}
                }
         
                client.setEffect((byte)2);
                return;    
            }
            
            if (arg.equals("+god")) {
                if (!client.checkCode(382) && !client.hasPermission("cmd.code.god")) {
        		if(client.getRank() < 8) {
        			client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        			return;
        		}
                }
        		
                for (Client target : channel.getClients()) {
                	if(target.getShowEffects() == 1) {
                		target.send(PacketCreator.effect(client.getName(), "god"));
                		target.send(PacketCreator.removeEffect(client.getName(), "flame"));
                		target.send(PacketCreator.removeEffect(client.getName(), "holy"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glamour"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glow"));
                                target.send(PacketCreator.removeEffect(client.getName(), "devilish"));
                                target.send(PacketCreator.removeEffect(client.getName(), "monster"));
                              
                	}
                }
                
                client.setEffect((byte)3);
                return;
     
            }
            
            
            if (arg.equals("+glamour")) {
        		if (!client.checkCode(1111) && !client.hasPermission("cmd.code.glamour")) {
        			if(client.getRank() < 8) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                	if(target.getShowEffects() == 1) {
                		target.send(PacketCreator.effect(client.getName(), "glamour"));
                		target.send(PacketCreator.removeEffect(client.getName(), "flame"));
                		target.send(PacketCreator.removeEffect(client.getName(), "holy"));
                                target.send(PacketCreator.removeEffect(client.getName(), "god"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glow"));
                                target.send(PacketCreator.removeEffect(client.getName(), "devilish"));
                                target.send(PacketCreator.removeEffect(client.getName(), "monster"));
                                
                	}
                }
       
                client.setEffect((byte)4);
                return;
                
            }
                
                if (arg.equals("+glow")) {
        		if (!client.checkCode(1111) && !client.hasPermission("cmd.code.glow")) {
        			if(client.getRank() < 8) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                	if(target.getShowEffects() == 1) {
                		target.send(PacketCreator.effect(client.getName(), "glow"));
                		target.send(PacketCreator.removeEffect(client.getName(), "flame"));
                		target.send(PacketCreator.removeEffect(client.getName(), "holy"));
                                target.send(PacketCreator.removeEffect(client.getName(), "god"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glamour"));
                                target.send(PacketCreator.removeEffect(client.getName(), "devilish"));
                                target.send(PacketCreator.removeEffect(client.getName(), "monster"));
                                
                	}
                }
       
                client.setEffect((byte)5);
                return;
                
                
                }
                
                
                
                if (arg.equals("+devilish")) {
        		if (!client.checkCode(430) && !client.hasPermission("cmd.code.devilish")) {
        			if(client.getRank() < 8) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                	if(target.getShowEffects() == 1) {
                		target.send(PacketCreator.effect(client.getName(), "devilish"));
                		target.send(PacketCreator.removeEffect(client.getName(), "flame"));
                		target.send(PacketCreator.removeEffect(client.getName(), "holy"));
                                target.send(PacketCreator.removeEffect(client.getName(), "god"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glamour"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glow"));
                                target.send(PacketCreator.removeEffect(client.getName(), "monster"));
                               
                	}
                }
       
                client.setEffect((byte)6);
                return;
                
                
                }
                
                
                
                if (arg.equals("+monster")) {
        		if (!client.checkCode(419) && !client.hasPermission("cmd.code.monster")) {
        			if(client.getRank() < 8) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                	if(target.getShowEffects() == 1) {
                		target.send(PacketCreator.effect(client.getName(), "monster"));
                		target.send(PacketCreator.removeEffect(client.getName(), "flame"));
                		target.send(PacketCreator.removeEffect(client.getName(), "holy"));
                                target.send(PacketCreator.removeEffect(client.getName(), "god"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glamour"));
                                target.send(PacketCreator.removeEffect(client.getName(), "glow"));
                                target.send(PacketCreator.removeEffect(client.getName(), "devilish"));
                                
                	}
                }
       
                client.setEffect((byte)7);
                return;
                
                
                }
                
                
                
            
            
            if (arg.equals("-god")) {
        		if(client.getRank() < 8 && client.getEffect() == 0) {
                            if (!client.checkCode(382) && !client.hasPermission("cmd.code.god")) {
        			client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        			return;
        		}
            }
        		
                for (Client target : channel.getClients()) {
                    target.send(PacketCreator.removeEffect(client.getName(), "god"));
                }
            
                client.setEffect((byte)0); 
                return;
            }
            
           if (arg.equals("-light")) {
       		if(client.getRank() < 8 && client.getEffect() == 0) {
       			if(!client.checkCode(56) && !client.checkCode(57)) {
       				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
    				return;
    			}
    		}
    		
                for (Client target : channel.getClients()) {
                    target.send(PacketCreator.removeEffect(client.getName(), "holy"));
                }
            
                client.setEffect((byte)0); 
                return;
            }
            
            if (arg.equals("-flames")) {
        		if(client.getRank() < 8 && client.getEffect() == 0) {
        			if(!client.checkCode(75) && !client.checkCode(76)) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                    target.send(PacketCreator.removeEffect(client.getName(), "flame"));
                }
            
                client.setEffect((byte)0); 
                return;
            }
            
            
            if (arg.equals("-glamour")) {
        		if(client.getRank() < 8 && client.getEffect() == 0) {
        			if (!client.checkCode(1111) && !client.hasPermission("cmd.code.glamour")) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                    target.send(PacketCreator.removeEffect(client.getName(), "glamour"));
                }
            
                client.setEffect((byte)0); 
                return;
            }
            
            
            
            if (arg.equals("-glow")) {
        		if(client.getRank() < 8 && client.getEffect() == 0) {
        			if (!client.checkCode(1111) && !client.hasPermission("cmd.code.glow")) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                    target.send(PacketCreator.removeEffect(client.getName(), "glow"));
                }
            
                client.setEffect((byte)0); 
                return;
            }
            
            if (arg.equals("-devilish")) {
        		if(client.getRank() < 8 && client.getEffect() == 0) {
        			if (!client.checkCode(430) && !client.hasPermission("cmd.code.devilish")) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                    target.send(PacketCreator.removeEffect(client.getName(), "devilish"));
                }
            
                client.setEffect((byte)0); 
                return;
            }
            
            
            
            if (arg.equals("-monster")) {
        		if(client.getRank() < 8 && client.getEffect() == 0) {
        			if (!client.checkCode(419) && !client.hasPermission("cmd.code.monster")) {
        				client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        				return;
        			}
        		}
        		
                for (Client target : channel.getClients()) {
                    target.send(PacketCreator.removeEffect(client.getName(), "monster"));
                }
            
                client.setEffect((byte)0); 
                return;
            }
            
            



            if(arg.isEmpty()) {
				client.send(PacketCreator.createCodeWindow());
                return;
            }
            
            if(arg.equals("activate")) {
				client.send(PacketCreator.createCodeActivateWindow());
                return;
            }
            
            if(arg.equals("giveaway")) {
				client.send(PacketCreator.createCodeGiveAwayWindow("", ""));
                return;
            }

            if(!Server.get().checkCodeActivated(arg)) {
            	client.sendButlerMessage(channel.getName(), "Ungültiger Code.");
                return;
            }

            int codeActivatedCategory = Integer.parseInt(Settings.getCodes().split(arg)[1].split("\\|")[0].substring(1));
            String categoryName = Server.smileyCategories.get(codeActivatedCategory)[0];
            
            client.sendButlerMessage(channel.getName(), String.format("Du hast einen _%s-Code aktiviert_.", categoryName));
            client.activateSmiley(codeActivatedCategory);
            Settings.setCodes(Settings.getCodes().replace(String.format("|%s~%s|", arg, codeActivatedCategory), ""));
        } else if(cmd.equals("loveletterlala")) {

        		String msg = "";
        	    String[] lols = arg.split(":", 2);
        	    int split2 = arg.indexOf(':');
        	    String art = lols[0];
        	    if (split2 >= 0) {
        	      msg = lols[1];
        	    }

        	    if (art.equals("answer")) {
        	      if ((msg.equals("1")) || (msg.equals("2")) || (msg.equals("3")))
        	      {
        	        String von = "";
        	        String id = "";
        	        String art2 = "";
        	        PoolConnection pcon0 = ConnectionPool.getConnection(); PreparedStatement ps0 = null;
        	        try { Connection con0 = pcon0.connect(); ps0 = con0.prepareStatement("SELECT * FROM acts WHERE act LIKE 'loveletter|%' and an='" + client.getName() + "' order by id desc limit 1"); for (ResultSet rs0 = ps0.executeQuery(); rs0.next(); ) {
        	            id = rs0.getString("id");
        	            von = rs0.getString("von");
        	            art2 = rs0.getString("act");
        	          }
        	        }
        	        catch (SQLException e)
        	        {
        	          e.printStackTrace(); } finally { if (ps0 != null) try { ps0.close(); } catch (SQLException e) {
        	            } pcon0.close();
        	        }
        	        if (von.isEmpty()) {
        	          client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        	          return;
        	        }

        	        String nicknamen = KCodeParser.escape(von);
        	        Client target = Server.get().getClient(nicknamen);
        	        if (target == null) {
        	          target = new Client(null);
        	          target.loadStats(nicknamen);
        	        }

        	        String[] arts = art2.split("\\|");
        	        String text = "";
        	        if (msg.equals("1"))
        	          text = "_°BB>_h" + client.getName() + "|/serverpp " + client.getName() + "|/w " + client.getName() + "<°°r°_ hat zugestimmt. _°BB>_h" + target.getName() + "|/serverpp " + target.getName() + "|/w " + target.getName() + "<°°r°_ und _°BB>_h" + client.getName() + "|/serverpp " + client.getName() + "|/w " + client.getName() + "<°°r°_ gehen nun miteinander!°#°°#°";
        	        else if (msg.equals("2"))
        	          text = "_°BB>_h" + client.getName() + "|/serverpp " + client.getName() + "|/w " + client.getName() + "<°°r°_ hat _°BB>_h" + target.getName() + "|/serverpp " + target.getName() + "|/w " + target.getName() + "<°°r°_ leider einen Korb gegeben.°#°°#°";
        	        else if (msg.equals("3")) {
        	          text = "_°BB>_h" + client.getName() + "|/serverpp " + client.getName() + "|/w " + client.getName() + "<°°r°_ muss erst nochmal über die Frage von _°BB>_h" + target.getName() + "|/serverpp " + target.getName() + "|/w " + target.getName() + "<°°r°_ nachdenken.°#°°#°";
        	        }

        	        String bild = "";
        	        if (arts[1].equals("classic")) {
        	          if (msg.equals("1"))
        	            bild = "°>abo/loveletter_classic_bg...h_177.png<°°#°°+9177>abo/loveletter_classic_over...h_177.gif<°°#°°+913012+0063° °#°°>abo/loveletter_classic_option.gif<°°#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_option_trans.png<°°#° °#° °#°°+0000r°";
        	          else if (msg.equals("2"))
        	            bild = "°>abo/loveletter_classic_bg...h_177.png<°°#°°+9177>abo/loveletter_classic_over...h_177.gif<°°#°°+913012+0063° °#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_classic_option.png<°°#°°>abo/loveletter_option_trans.gif<°°#° °#° °#°°+0000r°";
        	          else if (msg.equals("2"))
        	            bild = "°>abo/loveletter_classic_bg...h_177.png<°°#°°+9177>abo/loveletter_classic_over...h_177.gif<°°#°°+913012+0063° °#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_classic_option.png<°°#° °#° °#°°+0000r°";
        	        }
        	        else if (arts[1].equals("rude")) {
        	          if (msg.equals("1"))
        	            bild = "°>abo/loveletter_rude_bg...h_179.png<°°#°°+9179>abo/loveletter_rude_over...h_179.gif<°°#°°+913112+0092° °#°°>abo/loveletter_rude_option.png<°°#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_option_trans.gif<°°#° °#° °#°°+0000r°";
        	          else if (msg.equals("2"))
        	            bild = "°>abo/loveletter_rude_bg...h_179.png<°°#°°+9179>abo/loveletter_rude_over...h_179.gif<°°#°°+913112+0092° °#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_rude_option.png<°°#°°>abo/loveletter_option_trans.gif<°°#° °#° °#°°+0000r°";
        	          else if (msg.equals("3"))
        	            bild = "°>abo/loveletter_rude_bg...h_179.png<°°#°°+9179>abo/loveletter_rude_over...h_179.gif<°°#°°+913112+0092° °#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_rude_option.png<°°#° °#° °#°°+0000r°";
        	        }
        	        else if (arts[1].equals("timid")) {
        	          if (msg.equals("1"))
        	            bild = "°>abo/loveletter_timid_bg...h_176.png<°°#°°+9176>abo/loveletter_timid_over...h_176.gif<°°#°°+912212+0051° °#°°>abo/loveletter_timid_option.png<°°#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_option_trans.gif<°°#° °#° °#°°+0000r°";
        	          else if (msg.equals("2"))
        	            bild = "°>abo/loveletter_timid_bg...h_176.png<°°#°°+9176>abo/loveletter_timid_over...h_176.gif<°°#°°+912212+0051° °#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_timid_option.png<°°#°°>abo/loveletter_option_trans.gif<°°#° °#° °#°°+0000r°";
        	          else if (msg.equals("3")) {
        	            bild = "°>abo/loveletter_timid_bg...h_176.png<°°#°°+9176>abo/loveletter_timid_over...h_176.gif<°°#°°+912212+0051° °#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_option_trans.gif<°°#°°>abo/loveletter_timid_option.png<°°#° °#° °#°°+0000r°";
        	          }
        	        }
        	        String ausgabe = text + bild;
        	        channel.broadcastMessage(ausgabe, Server.get().getButler(), false);

        	        client.setZusammen(target.getName());
        	        target.setZusammen(client.getName());
        	        Server.get().query("delete from acts where id='" + id + "'");
        	      }

        	      return;
        	    }

        	    if (arg.isEmpty()) {
        	      client.sendButlerMessage(channel.getName(), "Bitte die Funktion folgendermaßen benutzen:#/loveletter NICK oder !#(Mit NICK zusammen sein, ! zum löschen)");
        	      return;
        	    }

        	    if (arg.equals("!")) {
        	      if (client.getZusammen().isEmpty()) {
        	        client.sendButlerMessage(channel.getName(), "Du bist derzeit mit niemanden zusammen.");
        	      } else {
        	        client.sendButlerMessage(channel.getName(), "Du bist nun mit niemanden zusammen.");
        	        client.setZusammen("");
        	      }
        	      return;
        	    }
        	    
        	    if(client.getRank() < 8) {
        			client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
        			return;
        		}

        	    if ((art.equals("timid")) || (art.equals("rude")))
        	    {
        	      String nicknamen2 = KCodeParser.escape(msg);
        	      boolean online2 = true;
        	      Client target2 = Server.get().getClient(nicknamen2);
        	      if (target2 == null) {
        	        online2 = false;
        	        target2 = new Client(null);
        	        target2.loadStats(nicknamen2);
        	      }
        	      nicknamen2 = target2.getName();

        	      if (nicknamen2 == null) {
        	        client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(msg));
        	        return;
        	      }

        	      if (target2.getName().equals(client.getName())) {
        	        client.sendButlerMessage(channel.getName(), "Du kannst doch nicht mit dir selbst zusammen sein.");
        	        return;
        	      }

        	      if (!online2) {
        	        client.sendButlerMessage(channel.getName(), CommandParser.userIsOffline(target2));
        	        return;
        	      }

        	      if (target2.getName().equals(Server.get().getButler().getName())) {
        	        client.sendButlerMessage(channel.getName(), "Mit " + Server.get().getButler().getName() + " kannst du nicht zusammen sein.");
        	        return;
        	      }

        	      if (!channel.getClients().contains(target2)) {
        	        client.sendButlerMessage(channel.getName(), String.format("°>_h%s|/serverpp \"|/w \"<° hält sich im Moment _in einem anderen Channel_ auf.", new Object[] { target2.getName() }));
        	        return;
        	      }

        	      channel.broadcastMessage("_°BB>_h" + client.getName() + "|/serverpp " + client.getName() + "|/w " + client.getName() + "<°°°_ schiebt einen kleinen Zettel zu _°BB>_h" + target2.getName() + "|/serverpp " + target2.getName() + "|/w " + target2.getName() + "<°°°_ hinüber!", Server.get().getButler(), false);

        	      if (art.equals("timid"))
        	        target2.sendButlerMessage(channel.getName(), "_°BB>_h" + client.getName() + "|/serverpp " + client.getName() + "|/w " + client.getName() + "<°°r°_ schiebt dir diesen Zettel herüber:##°>abo/loveletter_timid_bg...h_176.png<°#°+9176>abo/loveletter_timid_over...h_176.gif<°#°+912212+0051° #°>abo/loveletter_option_trans.gif|abo/loveletter_timid_option.png<>|/loveletter answer:1<°#°>abo/loveletter_option_trans.gif|abo/loveletter_timid_option.png<>|/loveletter answer:2<°#°>abo/loveletter_option_trans.gif|abo/loveletter_timid_option.png<>|/loveletter answer:3<°# # #°+0000r°");
        	      else if (art.equals("rude"))
        	        target2.sendButlerMessage(channel.getName(), "_°BB>_h" + client.getName() + "|/serverpp " + client.getName() + "|/w " + client.getName() + "<°°r°_ schiebt dir diesen Zettel herüber:##°>abo/loveletter_rude_bg...h_179.png<°#°+9179>abo/loveletter_rude_over...h_179.gif<°#°+913112+0100° #°>abo/loveletter_option_trans.gif|abo/loveletter_rude_option.png<>|/loveletter answer:1<°#°>abo/loveletter_option_trans.gif|abo/loveletter_rude_option.png<>|/loveletter answer:2<°#°>abo/loveletter_option_trans.gif|abo/loveletter_rude_option.png<>|/loveletter answer:3<°# # #°+0000r°");
        	      else if (art.equals("classic")) {
        	        target2.sendButlerMessage(channel.getName(), "_°BB>_h" + client.getName() + "|/serverpp " + client.getName() + "|/w " + client.getName() + "<°°r°_ schiebt dir diesen Zettel herüber:##°>abo/loveletter_classic_bg...h_177.png<°°#°°+9177>abo/loveletter_classic_over...h_177.gif<°#°+913012+0063° °#°°>abo/loveletter_option_trans.gif|abo/loveletter_classic_option.png<>|/loveletter answer:1<°°#°°>abo/loveletter_option_trans.gif|abo/loveletter_classic_option.png<>|/loveletter answer:2<°°#°°>abo/loveletter_option_trans.gif|abo/loveletter_classic_option.png<>|/loveletter answer:3<°°#° °#° °#°°+0000r°");
        	      }

        	      Server.get().query("insert into acts set von='" + client.getName() + "', an='" + target2.getName() + "', channel='" + channel.getName() + "', time='" + System.currentTimeMillis() / 1000L + "',act='loveletter|" + art + "'");

        	      return;
        	    }

        	    String nicknamen = KCodeParser.escape(arg);
        	    boolean online = true;
        	    Client target = Server.get().getClient(nicknamen);
        	    if (target == null) {
        	      online = false;
        	      target = new Client(null);
        	      target.loadStats(nicknamen);
        	    }
        	    nicknamen = target.getName();

        	    if (nicknamen == null) {
        	      client.sendButlerMessage(channel.getName(), CommandParser.unknownUser(arg));
        	      return;
        	    }

        	    if (target.getName().equals(client.getName())) {
        	      client.sendButlerMessage(channel.getName(), "Du kannst doch nicht mit dir selbst zusammen sein.");
        	      return;
        	    }

        	    if (!online) {
        	      client.sendButlerMessage(channel.getName(), CommandParser.userIsOffline(target));
        	      return;
        	    }
        	    if (target.getName().equals(Server.get().getButler().getName())) {
        	      client.sendButlerMessage(channel.getName(), "Mit " + Server.get().getButler().getName() + " kannst du nicht zusammen sein.");
        	      return;
        	    }

        	    if (!channel.getClients().contains(target)) {
        	      client.sendButlerMessage(channel.getName(), String.format("°>_h%s|/serverpp \"|/w \"<° hält sich im Moment _in einem anderen Channel_ auf.", new Object[] { target.getName() }));
        	      return;
        	    }

        	    client.sendButlerMessage(channel.getName(), String.format("Wie willst du den Liebesbrief schreiben?#_°BB>_hKlassisch|/loveletter classic:%s<°_°°,\t _°BB>_hAufreißerisch|/loveletter rude:%s<°_°° oder _°BB>_hSchüchtern|/loveletter timid:%s<°°°_", new Object[] { target.getName(), target.getName(), target.getName() }));
        	} else if (cmd.equals("blinddate")) {
                if(!client.hasPermission("cmd.blinddate")) {
                	client.sendButlerMessage(channel.getName(), "Diese Funktion steht dir hier nicht zur Verfügung.");
                	return;
                }
        		
                if (arg.equals("!")) {
                       if (client.existBlindDate() == 1) {
                    client.sendButlerMessage(channel.getName(), "Ich habe dich aus der Blinddate Datenbank entfernt.");
                     Server.get().query("delete from blinddate where user = '"+client.getName()+"'");
                     Server.get().query("update blinddate set zuteilung='', time='' where zuteilung='"+client.getName()+"'");
                       } else {
                    client.sendButlerMessage(channel.getName(), "Du stehst nicht in der Blinddate Datenbank.");
                       }
                } else if (arg.equals("edit") || client.getSearchGender().isEmpty() || client.getSearchGender().isEmpty() || client.getSearchAgeUntil() == 0 || client.getSearchAgeFrom() == 0 || client.getSearchMotiv().isEmpty()) {
                  StringBuilder builder = new StringBuilder();
                  builder.append("k\0Blinddate Einstellungenõsblinddateõblinddateõf\0\0\0h¾¼ûãEl         õcgFh¾¼ûãWl         õcgFh¾¼ûãCpBNpBNl õgIh¾¼ûãClBlinddate EinstellungenõblgSf\0\0\0hååÿãSl õgQh¾¼ûããCpBCcIn diesem Fenster musst du Daten über deinen _Wunschblinddatepartner_ angeben. Dabei ist darauf zu achten, dass die erste Altersangabe _höchstens so groß_ gewählt wird, wie die zweite Altersangabe.#Bei _Motiv_ kannst du zwischen _Partnerschaft_, _Abenteuer_ oder _gutes Gespräch_ wählen - je nachdem, was du dir von dem Blinddate versprichst.#°13°Hinweis: Du kannst diese Einstellungen jederzeit durch Eingabe von _/blinddate edit_ ändern.õs@f\0\0\0h¾¼ûipics/cloudsblue.gifõ\0ãSpGEBDDl õgUh¾¼ûãpBWl");
                  builder.append("Geschlecht: õgOh¾¼ûãCoc");
                  if (client.getSearchGender().equals("weibl.")) {
                  builder.append("B");
                  } else {
                  builder.append("A");   
                  }
                  builder.append("ãmännl.õweibl.õããpBWl");
                  builder.append("Alter:õgOh¾¼ûãCpGACDDpBWl von õgOh¾¼ûãCoc");
                  if (client.getSearchAgeFrom() == 14) {
                  builder.append("A");
                  } else if (client.getSearchAgeFrom() == 15) {
                  builder.append("B");
                  }  else if (client.getSearchAgeFrom() == 16) {
                  builder.append("C");
                  } else if (client.getSearchAgeFrom() == 17) {
                  builder.append("D");
                  } else if (client.getSearchAgeFrom() == 18) {
                  builder.append("E");
                  } else if (client.getSearchAgeFrom() == 19) {
                  builder.append("F");
                  } else if (client.getSearchAgeFrom() == 20) {
                  builder.append("G");
                  }  else if (client.getSearchAgeFrom() == 21) {
                  builder.append("H");
                  } else if (client.getSearchAgeFrom() == 22) {
                  builder.append("I");
                  } else if (client.getSearchAgeFrom() == 23) {
                  builder.append("J");
                  } else if (client.getSearchAgeFrom() == 24) {
                  builder.append("K");
                  } else if (client.getSearchAgeFrom() == 25) {
                  builder.append("L");
                  } else if (client.getSearchAgeFrom() == 26) {
                  builder.append("M");
                  } else if (client.getSearchAgeFrom() == 28) {
                  builder.append("N");
                  } else if (client.getSearchAgeFrom() == 30) {
                  builder.append("O");
                  } else if (client.getSearchAgeFrom() == 32) {
                  builder.append("P");
                  } else if (client.getSearchAgeFrom() == 34) {
                  builder.append("Q");
                  } else if (client.getSearchAgeFrom() == 36) {
                  builder.append("R");
                  } else if (client.getSearchAgeFrom() == 40) {
                  builder.append("S");
                  } else if (client.getSearchAgeFrom() == 45) {
                  builder.append("T");
                  } else if (client.getSearchAgeFrom() == 50) {
                  builder.append("U");
                  } else if (client.getSearchAgeFrom() == 55) {
                  builder.append("V");
                  } else if (client.getSearchAgeFrom() == 60) {
                  builder.append("W");
                  } else if (client.getSearchAgeFrom() == 70) {
                  builder.append("X");
                  } else if (client.getSearchAgeFrom() == 100) {
                  builder.append("Y");
                  }
                  builder.append("ã14õ15õ16õ17õ18õ19õ20õ21õ22õ23õ24õ25õ26õ28õ30õ32õ34õ36õ40õ45õ50õ55õ60õ70õ100õããpBWl bis õgOh¾¼ûãCoc");
                  if (client.getSearchAgeUntil() == 14) {
                  builder.append("A");
                  } else if (client.getSearchAgeUntil() == 15) {
                  builder.append("B");
                  }  else if (client.getSearchAgeUntil() == 16) {
                  builder.append("C");
                  } else if (client.getSearchAgeUntil() == 17) {
                  builder.append("D");
                  } else if (client.getSearchAgeUntil() == 18) {
                  builder.append("E");
                  } else if (client.getSearchAgeUntil() == 19) {
                  builder.append("F");
                  } else if (client.getSearchAgeUntil() == 20) {
                  builder.append("G");
                  }  else if (client.getSearchAgeUntil() == 21) {
                  builder.append("H");
                  } else if (client.getSearchAgeUntil() == 22) {
                  builder.append("I");
                  } else if (client.getSearchAgeUntil() == 23) {
                  builder.append("J");
                  } else if (client.getSearchAgeUntil() == 24) {
                  builder.append("K");
                  } else if (client.getSearchAgeUntil() == 25) {
                  builder.append("L");
                  } else if (client.getSearchAgeUntil() == 26) {
                  builder.append("M");
                  } else if (client.getSearchAgeUntil() == 28) {
                  builder.append("N");
                  } else if (client.getSearchAgeUntil() == 30) {
                  builder.append("O");
                  } else if (client.getSearchAgeUntil() == 32) {
                  builder.append("P");
                  } else if (client.getSearchAgeUntil() == 34) {
                  builder.append("Q");
                  } else if (client.getSearchAgeUntil() == 36) {
                  builder.append("R");
                  } else if (client.getSearchAgeUntil() == 40) {
                  builder.append("S");
                  } else if (client.getSearchAgeUntil() == 45) {
                  builder.append("T");
                  } else if (client.getSearchAgeUntil() == 50) {
                  builder.append("U");
                  } else if (client.getSearchAgeUntil() == 55) {
                  builder.append("V");
                  } else if (client.getSearchAgeUntil() == 60) {
                  builder.append("W");
                  } else if (client.getSearchAgeUntil() == 70) {
                  builder.append("X");
                  } else if (client.getSearchAgeUntil() == 100) {
                  builder.append("Y");
                  }
                  builder.append("ã14õ15õ16õ17õ18õ19õ20õ21õ22õ23õ24õ25õ26õ28õ30õ32õ34õ36õ40õ45õ50õ55õ60õ70õ100õããããpBWl");
                  builder.append("Motiv: õgOh¾¼ûãCo");
                  String motive;
                  if (client.getSearchMotiv().equals("Abenteuer")) {
                   motive = "ãAbenteuerõgutes GesprächõPartnerschaft";
                  } else if (client.getSearchMotiv().equals("Partnerschaft")) {
                  motive = "ãPartnerschaftõAbenteuerõgutes Gespräch";
                  } else {
                      motive = "ãgutes GesprächõPartnerschaftõAbenteuer";
                  }
                  builder.append(motive);
                  builder.append("õããããSpFb  OK  õsdpgSf\0\0\0h¾¼ûãb  Abbrechen  õdpgSf\0\0\0h¾¼ûãããã");
                  client.send(builder.toString());
             } else {
                    if (client.existBlindDate() == 1) {
                     client.send(Popup.create("Blinddate läuft bereits","Blinddate läuft bereits", "Du bist schon in der Blinddatedatenbank. Sobald jemand für dich gefunden wurde, erhältst du eine Nachricht.", 400, 300));
                    } else {
                        String gender2;
                        if (client.getGender() == 2) {
                            gender2 = "weibl.";
                        } else {
                        gender2 = "männl.";
                        }
                        client.sendButlerMessage(channel.getName(), "Ich habe Sie soeben in die _Blinddate-Datenbank aufgenommen_. Sie werden hieraus automatisch entfernt, wenn Sie den Chat verlassen. Mit _/blinddate edit_ können Sie jederzeit ihre Blinddate-Einstellungen ändern.");
                         Server.get().query("insert into blinddate set time='',gender2='"+gender2+"',age='"+client.getAge()+"',zuteilung='',user='"+client.getName()+"', gender='"+client.getSearchGender()+"', agefrom='"+client.getSearchAgeFrom()+"', ageuntil='"+client.getSearchAgeUntil()+"', motiv='"+client.getSearchMotiv()+"'");
                    }
                
                }
            
            }
            // ende blinddate 
            else if (cmd.equals("test")) {

                Server.get().query("update blinddate set zuteilung='', time='' where time <= '"+((System.currentTimeMillis()/1000)-180)+"'");
                
                  PoolConnection pcon = ConnectionPool.getConnection();
            PreparedStatement ps = null;
           try {
                Connection con = pcon.connect();
                ps = con.prepareStatement("SELECT * FROM `blinddate` WHERE `zuteilung` = ''");
               
                ResultSet rs = ps.executeQuery();
    while(rs.next()) {
        
        String zuteilung = "";
        String ids = "";
        PoolConnection pcon2 = ConnectionPool.getConnection(); PreparedStatement ps2 = null; try {Connection con2 = pcon2.connect();
        ps2 = con2.prepareStatement("select * from blinddate where `age` >= '"+rs.getString("agefrom")+"' and `user` != '"+rs.getString("user")+"' and `age` <= '"+rs.getString("ageuntil")+"' and `motiv` = '"+rs.getString("motiv")+"' and `gender2` = '"+rs.getString("gender")+"' and zuteilung=''");
        ResultSet rs2 = ps2.executeQuery(); if(rs2.next()) {
        zuteilung = rs2.getString("user");
        ids = rs2.getString("id");
    }} catch (SQLException e) {  e.printStackTrace();  } finally {  if (ps2 != null) {  try {   ps2.close(); } catch (SQLException e) {  }  }  pcon2.close();   } 
        
        if (!zuteilung.isEmpty()) {
       
          Client target = Server.get().getClient(rs.getString("user"));
        
          StringBuilder builder = new StringBuilder();
         builder.append("k\0Blinddate?õsblinddateõ"+rs.getString("id")+"õf\0\0\0h¾¼ûãEl         õcgFh¾¼ûãWl         õcgFh¾¼ûãCpBNpBNl õcgFh¾¼ûãClBlinddate?õblgSf\0\0\0hååÿãSl õcgFh¾¼ûããCcSoeben hat die Blinddate-Datenbank ein Blinddate für dich gefunden. Nun musst du das Blinddate nur noch annehmen und wirst dann automatisch in einen geheimen Blinddate-Channel mit deinem Wunschpartner gebracht.õs�\0úf\0\0\0h¾¼ûipics/cloudsblue.gifõ\0ãSpFbAnnehmenõsdpkAnnehmenõgMf\0\0\0h¾¼ûãbAblehnenõsdpkAblehnenõgMf\0\0\0h¾¼ûãbCloseõdpgMf\0\0\0h¾¼ûãããã");
          client.send(builder.toString());
          target.send(builder.toString());
      
                 Server.get().query("update blinddate set time='"+System.currentTimeMillis()/1000+"', `zuteilung` = '"+zuteilung+"'  where id='"+rs.getString("id")+"'");
                 Server.get().query("update blinddate set time='"+System.currentTimeMillis()/1000+"', `zuteilung` = '"+rs.getString("user")+"'  where id='"+ids+"'");
           
          
        }
    }
      } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                if (ps != null) {
                    try {
                        ps.close();
                    } catch (SQLException e) {
                    }
                }

                pcon.close();
            }
                
                

            } 
	}
}
