Benutzer:Deus Figendi/ChatLogFormater.js

Aus Jedipedia

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*
A WORD ON LICENCIES:
This script was written in less a day so... I'm not
sure if it reaches a hight enough threshold of originality.
'Cause there might be no such law in your country you'll
need a licence anyway.
And: This plattform wants me to use the GDLF but... that
is a document-licence not for software and this is software!

However, so I decided just to multi-licence this work XD

For every licence:
Name: Chat Formater
Version: 1.2
Description: JavaScript that converts some chat-logs into HTML-definition-lists
Author: ©2011 Deus Figendi aka Kai-Uwe Kramer
Contact: http://www.jedipedia.net/wiki/Benutzer_Diskussion:Deus_Figendi

* -------------------------THE BEER-WARE LICENSE------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* http://www.jedipedia.net/wiki/Benutzer_Diskussion:Deus_Figendi schrieb
* diese Datei. Solange Sie diesen Vermerk nicht entfernen, können Sie mit
* der Datei machen, was Sie möchten. Wenn wir uns eines Tages treffen
* und Sie denken, die Datei ist es wert, können Sie mir dafür ein Bier
* ausgeben. Deus Figendi
*
* Für weitere Informationen über diese Lizenz siehe:
* http://people.freebsd.org/~phk/
* ----------------------------------------------------------------------------

------------------------------------GPL---------------------------------------
    (C) 2011  Deus Figendi alias Kai-Uwe Kramer

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.


--------------------------------GFDL------------------------------------------
    Copyright (C)  2011 Deus Figendi aka Kai-Uwe Kramer
    Permission is granted to copy, distribute and/or modify this document
    under the terms of the GNU Free Documentation License, Version 1.3
    or any later version published by the Free Software Foundation;
    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
    A copy of the license can be found here: http://www.gnu.org/copyleft/fdl.html


*/

function getGlobalParser () {
	//this function creates a parser-Object
	//it containts for various Chat-Clients a RegularExpression and
	//the numbers/positions of sub-expressions.
    if (!globalParser) {
        var globalParser = new Array();
        var line_analyser = new Object();
        line_analyser.name = "ChatZilla";
        //                        v----------------1 Date/Time-----------------------v
        line_analyser.pattern = /^(\[(\d{4})\-(\d\d)\-(\d\d)\s(\d\d)\:(\d\d):(\d\d)\])?\s(\<|\*\s|\=\-\=\s|\-\-\>\|\s|\|\<\-\-\s)([\w\^\-\.\|]+)\>?\s(.*)$/;
        //                            2Jahr   3Monat   4Tag   5Stunde 6Minute7Sekunde    8 Action-Identifier                     9 Nickname      10Txt

        line_analyser.dt_year  = 2;
        line_analyser.dt_month = 3;
        line_analyser.dt_day   = 4;
        line_analyser.dt_hour  = 5;
        line_analyser.dt_minute= 6;
        line_analyser.dt_second= 7;
        line_analyser.act_say_pos = 8;
        line_analyser.act_say_pat = /^\<$/;
        line_analyser.act_say_nic = 9;
        line_analyser.act_say_txt = 10;
        line_analyser.act_mode_pos= 8;
        line_analyser.act_mode_pat= /^\=\-\=\s$/;
        line_analyser.act_mode_nic = 9;
        line_analyser.act_mode_txt = 10;
        line_analyser.act_act_pos = 8;
        line_analyser.act_act_pat = /^\*\s$/;
        line_analyser.act_act_nic = 9;
        line_analyser.act_act_txt = 10;
        line_analyser.act_join_pos= 8;
        line_analyser.act_join_pat= /^\-\-\>\|\s$/;
        line_analyser.act_join_nic = 9;
        line_analyser.act_join_txt = 10;
        line_analyser.act_part_pos= 8;
        line_analyser.act_part_pat= /^\|\<\-\-\s$/;
        line_analyser.act_part_nic = 9;
        line_analyser.act_part_txt = 10;
        line_analyser.act_quit_pos= 8;
        line_analyser.act_quit_pat= /^\-\-\>\|\s$/;
        line_analyser.act_quit_nic = 9;
        line_analyser.act_quit_txt = 10;
        line_analyser.act_nick_pos= 8;
        line_analyser.act_nick_pat= /^\=\-\=\s_____$/;
        line_analyser.act_nick_nic = 9;
        line_analyser.act_nick_txt = 10;
        // =-= steht für Topic-Change, Nickchange, Modi... muss nachgebessert werden.
        globalParser[globalParser.length] = line_analyser;        
        
        var line_analyser = new Object();
        line_analyser.name = "mibbit";
        line_analyser.pattern = /^(\d\d)\:(\d\d)\s(\s*\**\s)?([\w\^\-\.\|]+)\s(.*)$/;
        //                       1Stunde 2Minute   3Act-Type  4nickname   5text
        line_analyser.dt_year  = -1;
        line_analyser.dt_month = -1;
        line_analyser.dt_day   = -1;
        line_analyser.dt_hour  = 1;
        line_analyser.dt_minute= 2;
        line_analyser.dt_second= -1;
        line_analyser.act_say_pos = 3;
        line_analyser.act_say_pat = /^$/;
        line_analyser.act_say_nic = 4;
        line_analyser.act_say_txt = 5;
        line_analyser.act_mode_pos= 3;
        line_analyser.act_mode_pat= /^\s*\*\*\*\s$/;
        line_analyser.act_mode_nic = 4;
        line_analyser.act_mode_txt = 5;
        line_analyser.act_act_pos = 3;
        line_analyser.act_act_pat = /^\s*\*\s$/;
        line_analyser.act_act_nic = 4;
        line_analyser.act_act_txt = 5;
        line_analyser.act_join_pos= 3;
        line_analyser.act_join_pat= /^\s*\*\*\*\s$/; //check
        line_analyser.act_join_nic = 4;
        line_analyser.act_join_txt = 5;
        line_analyser.act_part_pos= 3;
        line_analyser.act_part_pat= /^\s*\*\*\*\s$/; //check
        line_analyser.act_part_nic = 4;
        line_analyser.act_part_txt = 5;
        line_analyser.act_quit_pos= 3;
        line_analyser.act_quit_pat= /^\s*\*\*\*\s$/; //check
        line_analyser.act_quit_nic = 4;
        line_analyser.act_quit_txt = 5;
        line_analyser.act_nick_pos= 3;
        line_analyser.act_nick_pat= /^\s*\*\*\*\s$/; //check
        line_analyser.act_nick_nic = 4;
        line_analyser.act_nick_txt = 5;
        globalParser[globalParser.length] = line_analyser;       
        
        
        var line_analyser = new Object();
        line_analyser.name = "MirandaIM";
        //                                                        v----------------------------------------------------4 Action + Mode-Block----------------------------------------------------------------------------------------------v
        line_analyser.pattern = /^\[(\d\d):(\d\d)\]\s([\w\^\-\.\|]+)((:)?\s(has left|has joined|[\w]{2,3}ables \'\w+\' status for [\w\^\-\.\|]+|sets mode (\+|\-)[\w]+\s?[\w\^\-\.]*|is now known as [\w\^\-\.\|]+|has disconnected\: Quit\: .*))(.*)$/;
        //                          1hour  2Minute    3nickname   5act   ^--------------------------------6 action type------------------------------------------------------------------------------------------------------------------^ 8txt
        //                                                                                                                                           7mode+/
        line_analyser.dt_year  = -1;
        line_analyser.dt_month = -1;
        line_analyser.dt_day   = -1;
        line_analyser.dt_hour  = 1;
        line_analyser.dt_minute= 2;
        line_analyser.dt_second= -1;
        line_analyser.act_say_pos = 5;
        line_analyser.act_say_pat = /^:$/;
        line_analyser.act_say_nic = 3;
        line_analyser.act_say_txt = 8;
        line_analyser.act_mode_pos= 4;
        line_analyser.act_mode_pat= /^\s([\w]{2,3}ables \'\w+\' status for [\w\^\-\.\|]+|sets mode (\+|\-)[\w]+\s?[\w\^\-\.\|]*).*$/;
        line_analyser.act_mode_nic = 3;
        line_analyser.act_mode_txt = 6;
        line_analyser.act_act_pos = 4;
        line_analyser.act_act_pat = /^\s(has left|has joined|[\w]{2,3}ables \'\w+\' status for [\w\^\-\.\|]+|sets mode (\+|\-)[\w]+\s?[\w\^\-\.\|]*|is now known as [\w\^\-\.\|]+|has disconnected\: Quit\: .*){0}$/;
        line_analyser.act_act_nic = 3;
        line_analyser.act_act_txt = 8;
        line_analyser.act_join_pos= 4;
        line_analyser.act_join_pat= /^\shas joined.*$/;
        line_analyser.act_join_nic = 3;
        line_analyser.act_join_txt = 6;
        line_analyser.act_part_pos= 4;
        line_analyser.act_part_pat= /^\shas left.*$/;
        line_analyser.act_part_nic = 3;
        line_analyser.act_part_txt = 6;
        line_analyser.act_quit_pos= 4;
        line_analyser.act_quit_pat= /^\shas disconnected\: Quit\: .*$/;
        line_analyser.act_quit_nic = 3;
        line_analyser.act_quit_txt = 6;
        line_analyser.act_nick_pos= 6;
        line_analyser.act_nick_pat= /^\sis now known as [\w\^\-\.\|]+.*$/;
        line_analyser.act_nick_nic = 3;
        line_analyser.act_nick_txt = 6;
        globalParser[globalParser.length] = line_analyser;   
        
        var line_analyser = new Object();
        line_analyser.name = "PidGin";
        //                                                    v  4 Typ/Nick-Block   v
        line_analyser.pattern = /^\((\d\d)\:(\d\d)\:(\d\d)\)\s(\*{0,3}([\w\^\-]+)\:?)\s(.*)$/;
        //                          1Stunde 2Minute 3Sekunde           5nickname       6text
        line_analyser.dt_year  = -1;
        line_analyser.dt_month = -1;
        line_analyser.dt_day   = -1;
        line_analyser.dt_hour  = 1;
        line_analyser.dt_minute= 2;
        line_analyser.dt_second= 3;
        line_analyser.act_say_pos = 4;
        line_analyser.act_say_pat = /^[\w\^\-\.\|]+\:$/;
        line_analyser.act_say_nic = 5;
        line_analyser.act_say_txt = 6;
        line_analyser.act_mode_pos= 5;
        line_analyser.act_mode_pat= /^Modus$/;
        line_analyser.act_mode_nic = -1;
        line_analyser.act_mode_txt = 6;
        line_analyser.act_act_pos = 4;
        line_analyser.act_act_pat = /^\*\*\*[\w\^\-\.\|]+$/;
        line_analyser.act_act_nic = 5;
        line_analyser.act_act_txt = 6;
        line_analyser.act_join_pos= 6;
        line_analyser.act_join_pat= /^\s?\[[\w\^\-\.\|]+\]\shat\sden\sRaum\sbetreten\..*$/;
        line_analyser.act_join_nic = 5;
        line_analyser.act_join_txt = 6;
        line_analyser.act_part_pos= 6;
        line_analyser.act_part_pat= /^\s?hat\sden\sRaum\sverlassen\.$/;
        line_analyser.act_part_nic = 5;
        line_analyser.act_part_txt = 6;
        line_analyser.act_quit_pos= 6;
        line_analyser.act_quit_pat= /^\s?hat\sden\sRaum\sverlassen\.\s\(quit\:\s.*$/;
        line_analyser.act_quit_nic = 5;
        line_analyser.act_quit_txt = 6;
        line_analyser.act_nick_pos= 6;
        line_analyser.act_nick_pat= /^\s?hei.t jetzt[\w\^\-\.\|]+.*$/;
        line_analyser.act_nick_nic = 5;
        line_analyser.act_nick_txt = 6;
        globalParser[globalParser.length] = line_analyser;       
        
        var line_analyser = new Object();
        line_analyser.name = "Trillian";
        //                                            v        3 Action- and Nick- and Text-Block     v
        line_analyser.pattern = /^\[(\d\d)\:(\d\d)\]\s((\*{0,3})\s?\<?[\@\+]?([\w\^\-\.\|]+)\>?(\s|\!)(.*))$/;
        //                          1Stunde 2Minute    4Act-Type              5nickname    6????? 7text
        line_analyser.dt_year  = -1;
        line_analyser.dt_month = -1;
        line_analyser.dt_day   = -1;
        line_analyser.dt_hour  = 1;
        line_analyser.dt_minute= 2;
        line_analyser.dt_second= -1;
        line_analyser.act_say_pos = 4;
        line_analyser.act_say_pat = /^$/;
        line_analyser.act_say_nic = 5;
        line_analyser.act_say_txt = 7;
        line_analyser.act_mode_pos= 3;
        line_analyser.act_mode_pat= /^\*\*\*\s[\w\^\-\.\|]+\ssets\smode\s.*$/;
        line_analyser.act_mode_nic = 5;
        line_analyser.act_mode_txt = 7;
        line_analyser.act_act_pos = 3;
        line_analyser.act_act_pat = /^\*\s.*$/;
        line_analyser.act_act_nic = 5;
        line_analyser.act_act_txt = 7;
        line_analyser.act_join_pos= 3;
        line_analyser.act_join_pat= /^\*\*\*\s[\w\^\-\.\|]+\shas\sjoined\s.*$/; 
        line_analyser.act_join_nic = 5;
        line_analyser.act_join_txt = 7;
        line_analyser.act_part_pos= 3;
        line_analyser.act_part_pat= /^\*\*\*\s[\w\^\-\.\|]+\shas\sleft\s.*$/;
        line_analyser.act_part_nic = 4;
        line_analyser.act_part_txt = 5;
        line_analyser.act_quit_pos= 3;
        line_analyser.act_quit_pat= /^\*\*\*\s[\w\^\-\.\|]+\shas\squit\s.*$/;
        line_analyser.act_quit_nic = 4;
        line_analyser.act_quit_txt = 5;
        line_analyser.act_nick_pos= 3;
        line_analyser.act_nick_pat= /^\*\*\*\s[\w\^\-\.\|]+\sis now known as [\w\^\-\.\|]+.*$/;
        line_analyser.act_nick_nic = 4;
        line_analyser.act_nick_txt = 5;
        globalParser[globalParser.length] = line_analyser;
        
        var line_analyser = new Object();
        line_analyser.name = "xChat-de";
        //                           v--------1 Date--------v v--------4 Time-----------v             v----------8 Nick/Action-Block-------v
        //line_analyser.pattern = /^\s?((\w{1,3})\s(\d{1,2})\s)?(\[?(\d\d):(\d\d)(\:(\d\d))?\]?)?\s{0,2}(<?([\w\^\-]+)>?|((\*)\s*([\w\^\-]*)))\s{1,2}(.*)$/;
        //                            2Month       3Day            5hour 6minute  7seconds                9saynick      11act   12act-nick         13text
        
        //                        v----------------------------------1 Date-------------------v v----------4 time------------v    v----------------------------------------------------------------------8 action/say-Block-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------v
        line_analyser.pattern = /^((Jan|Feb|Mrz|Apr|Mai|Jun|Jul|Aug|Sep|Okt|Nov|Dez)\s(\d\d)\s)?(\[?(\d\d):(\d\d):?(\d\d)?\]?)?\s*((\*\s|<)?([\w\^\-\.\|]+)>?\s+(\([\~\w\.\-\@\/]+\)\shat\s[\#\w\-\.]+\sbetreten|\([\~\w\.\-\@]+\)\shat\s[#\w\-\.]+\sverlassen|hat die Verbindung getrennt \(.*|ist jetzt bekannt als [\w\^\-\.\|]+|gibt \w+\-Status an [\w\^\-\.\|]+|setzt Modus (\+|\-)\w [\w\#\-\.]+|entfernt \w+\-Status bei [\w\^\-\.\|]+|ist jetzt bekannt als [\w\^\-\.\|]+)?(.*))$/
        //                         ^-------------------2 Month---------------------^  3 day         5hour  6minute 7second         9action?  10 nickname        ^-------------------------------11 action-type--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^ 13txt
        //                                                                                                                                                       ^-----------------join-------------------------^-------------------part----------------------^-----------------quit-----------^-------------------nick------------^--------------------------------mode----------11cmode-----------------------------------------------------^------------nick-------------------^

        line_analyser.dt_year  = -1;
        line_analyser.dt_month = 2;
        line_analyser.dt_day   = 3;
        line_analyser.dt_hour  = 5;
        line_analyser.dt_minute= 6;
        line_analyser.dt_second= 7;
        line_analyser.act_say_pos = 9;
        line_analyser.act_say_pat = /^<$/;
        line_analyser.act_say_nic = 10;
        line_analyser.act_say_txt = 13;
        line_analyser.act_mode_pos= 11;
        line_analyser.act_mode_pat= /^gibt \w+\-Status an [\w\^\-\.\|]+|setzt Modus (\+|\-)\w [\w\#\-\.]+|entfernt \w+\-Status bei [\w\^\-\.\|]+$/;
        line_analyser.act_mode_nic = 10;
        line_analyser.act_mode_txt = 11;
        line_analyser.act_act_pos = 8;
        line_analyser.act_act_pat = /^\*\s[\w\^\-\.\|]+\s(\([\~\w\.\-\@]+\)\shat\s[#\w\-\.]+\sbetreten|\([\~\w\.\-\@]+\)\shat\s[#\w\-\.]+\sverlassen|hat die Verbindung getrennt \(Quit: .*\)?|ist jetzt bekannt als [\w\^\-\.\|]+|gibt \w+\-Status an [\w\^\-\.\|]+|setzt Modus (\+|\-)\w [\w\#\-\.]+|ist jetzt bekannt als [\w\^\-\.\|]+){0}.*$/;
        line_analyser.act_act_nic = 10;
        line_analyser.act_act_txt = 13;
        line_analyser.act_join_pos= 11;
        line_analyser.act_join_pat= /^\([\~\w\.\-\@\/]+\)\shat\s[\#\w\-\.]+\sbetreten.*$/; 
        line_analyser.act_join_nic = 10;
        line_analyser.act_join_txt = 11;
        line_analyser.act_part_pos= 11;
        line_analyser.act_part_pat= /^\([\~\w\.\-\@\/]+\)\shat\s[#\w\-\.]+\sverlassen.*$/;
        line_analyser.act_part_nic = 10;
        line_analyser.act_part_txt = 11;
        line_analyser.act_quit_pos= 11;
        line_analyser.act_quit_pat= /^hat die Verbindung getrennt \(.*$/;
        line_analyser.act_quit_nic = 10;
        line_analyser.act_quit_txt = 11;
        line_analyser.act_nick_pos= 11;
        line_analyser.act_nick_pat= /^ist jetzt bekannt als [\w\^\-\.\|]+.*$/;
        line_analyser.act_nick_nic = 10;
        line_analyser.act_nick_txt = 11;
        globalParser[globalParser.length] = line_analyser;        
    }
    return globalParser;
}

function movePreloadSelect (repitations) {
//moves the preload-<select>-Element to the right if it has the style.marginLeft-Thingy in px (otherwise I'd need CSS3)

    
    
    if (document.getElementById("stdPreloads")) {
        if (document.getElementById("stdPreloads").parentNode) {
            var ml_text = document.getElementById("stdPreloads").parentNode.style.marginLeft;
            var ml_re = /^(\d+)(.+)$/;
            var ml_re_result = ml_re.exec(ml_text);
            if (ml_re_result) {
                if (ml_re_result[2].trim() == "px") {
                    var num_pixel = parseInt(ml_re_result[1]);
                    num_pixel = parseInt(num_pixel + (23 * (repitations)));
                    document.getElementById("stdPreloads").parentNode.style.marginLeft = String(num_pixel)+"px";
                }
            }
        }
    }
}
/*
function analyse_line(input_line,parse_object) {
    var log_type = -1;
    var j = 0;
    while (log_type < 0 && j < parse_object.length) {
        if (parse_object[j].pattern.test(input_line)) {
            log_type = j;
        }       
        j++;
    }
    return log_type;
}

function c2c_lineident (input_line) {
//Tries to identify from what kind of client the logfile was created. Returns an integer: 
//  0  = did not identify
// 10 = xChat with timestamps (my client)
// 11 = xChat without timestamps
// 20 = PidGin
// 30 = Trillian
// 40 = mibbit
// 50 = ChatZilla
    

    if (/^(\w{1,3}\s\d{1,2}\s)?\[?\d\d\:\d\d(\:\d\d)?\]?\s{1,2}((\<?[\w\^\-\.\|]+\>?)|\*)\s{1,2}.*$/.exec(input_line)) {
        return 10; //xChat mit Timestamps
    } else if (/^\s?((\<?[\w\^\-\.\|]+\>?)|\*)\s{1,2}.*$/.exec(input_line)) {
        return 11; //xChat ohne Timestamps
    } else if (/^\(\d\d\:\d\d\:\d\d\)\s\*{0,3}[\w\^\-\.\|]+\:?\s.*$/.exec(input_line)) {
        return 20; //PidGin
    } else if (/^\[\d\d\:\d\d\]\s(((\*\s)?\<(\@|\+)?[\w\^\-\.\|]+\>?\s.*)|(\*\*\*\s[\w\^\-\.\|]+\!.*))$/.exec(input_line)) {
        return 30; //Trillian
    } else if (/^\d\d\:\d\d\s\s?(\*\*\*\s)?[\w\^\-\.\|]+\s.*$/.exec(input_line)) {
        return 40; //mibbit
    } else if (/^\[\d{4}\-\d\d\-\d\d\s\d\d\:\d\d:\d\d\]\s(\<|\*\s|\=\-\=\s|\-\-\>\|\s|\|\<\-\-\s)[\w\^\-\.\|]*\>?\s.*$/.exec(input_line)) {
        return 50; //ChatZilla
    } else {
        return 0; //nicht erkannt.
    }
}

function find_2_highest(input_array) {
//finds out what indexes in an array are the highest. Returns an array with two elements telling what indexes are the highest.

    var first = 0;
    var second = 0;
    for (var i = 0; i < input_array.length; i++) {
        if (!isNaN(input_array[i])) {
            if (input_array[i] > input_array[first]) {            
                second = first;
                first = i;
            }
            if (input_array[i] > input_array[second] && i != first) {   
                second = i;
            }
        }
    }
    return (new Array(first,second));
}
*/
function chatlog2chatlog (input_text) {
    //Main-Function:
    //Takes every line, parses it and returns finaly a formated string.
    
    var my_parser = getGlobalParser();
    if (document.getElementById("df_nicklinkscheck").checked) {
        var nick_user_array = new Object();
    }
    var c2c_linearray = input_text.split("\n");
    var c2c_outputtext = "\n";
    var c2c_outputformat = document.getElementById("df_outputformatselect").options[document.getElementById("df_outputformatselect").selectedIndex].value;
    var c2c_inputtype1 = document.getElementById("df_logformatselect").options[document.getElementById("df_logformatselect").selectedIndex].value;
    var datestring = document.getElementById("df_chatdate").value;

	if (c2c_outputformat == "DEBUG") {
		c2c_outputtext += "Settings:\nClient: "+c2c_inputtype1+"\nAusgabe: "+c2c_outputformat+"\ndateString: "+datestring+"\nUsernames: "+document.getElementById("df_nicklinkscheck").checked+"\nnowiki: "+document.getElementById("df_nowikicheck").checked+"\n\n";
	} else if (c2c_outputformat == "HTML1") {
		c2c_outputtext += "<dl class=\"chatlog\">";
	} else if (c2c_outputformat == "WIKI1") {
		c2c_outputtext += "{{Dialog\n";
	} else if (c2c_outputformat == "WIKI2") {
		c2c_outputtext += "{|";
	}
    if (c2c_inputtype1 >=0) { var c2c_inputtype2 = c2c_inputtype1; }
    var c2c_this_parsed = new Object();
    var c2c_this_parsed2 = new Object();
    var theday = new Date();
    if (datestring.match(/^\d{4}\-\d\d?\-\d\d?$/)) {
		var datearray = /^(\d{4})\-(\d\d?)\-(\d\d?)$/.exec(datestring);
		theday.setFullYear(datearray[1]);
		theday.setMonth(datearray[2]);
		theday.setDate(datearray[3]);
    }
	
    var c2c_nick2user = new Object();
    for (var i = 0; i < c2c_linearray.length; i++) {
        if (c2c_inputtype1 <0) { var c2c_inputtype2 = analyse_line(c2c_linearray[i]); }
        
        //defaults:
        c2c_this_parsed.year   = theday.getFullYear();//Year
        c2c_this_parsed.month  = theday.getMonth();   //Month
        c2c_this_parsed.day    = theday.getDate();    //Day
        c2c_this_parsed.hour   = ".";                 //Hour
        c2c_this_parsed.minute = ".";                 //Minute
        c2c_this_parsed.second = "00";                //Second
        c2c_this_parsed.nick   = ".";                 //Nickname
        c2c_this_parsed.acttype= "say";               //Action-Type like say, me, join, part, nickchange, quit...
        c2c_this_parsed.content= ".";                 //Content-Line (whats said/happened)
        
        var c2c_this_parsed2 = my_parser[c2c_inputtype2].pattern.exec(c2c_linearray[i]);
        
        if (c2c_this_parsed2) {
	    	if (c2c_outputformat == "DEBUG") {
	            c2c_outputtext += "\n\n\nAnalysiere:\n"+c2c_linearray[i]+"\nc2c_this_parsed2:\n"+c2c_this_parsed2.join("\n")+"\n";
	    	}
        
            if (my_parser[c2c_inputtype2].act_nick_pos) {
                if (my_parser[c2c_inputtype2].act_nick_pos >0) {
                    if (my_parser[c2c_inputtype2].act_nick_pat.test(c2c_this_parsed2[my_parser[c2c_inputtype2].act_nick_pos])) {
                        c2c_this_parsed.acttype = "nick";
                    } else { if (c2c_outputformat == "DEBUG") { c2c_outputtext += "-1:"+c2c_this_parsed2[my_parser[c2c_inputtype2].act_nick_pos]+"\n"; }}
                } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-2"; }}
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-3"; }}
            if (c2c_this_parsed.acttype == "say") {
                if (my_parser[c2c_inputtype2].act_quit_pos) {
                    if (my_parser[c2c_inputtype2].act_quit_pos >0) {
                        if (my_parser[c2c_inputtype2].act_quit_pat.test(c2c_this_parsed2[my_parser[c2c_inputtype2].act_quit_pos])) {
                            c2c_this_parsed.acttype = "quit";
                        } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-4:"+c2c_this_parsed2[my_parser[c2c_inputtype2].act_quit_pos]+" ("+my_parser[c2c_inputtype2].act_quit_pos+")"+"\n"; }}
                    } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-5"; }}
                } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-6"; }}
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-7"; }}
            if (c2c_this_parsed.acttype == "say") {
                if (my_parser[c2c_inputtype2].act_mode_pos) {
                    if (my_parser[c2c_inputtype2].act_mode_pos >0) {
                        if (my_parser[c2c_inputtype2].act_mode_pat.test(c2c_this_parsed2[my_parser[c2c_inputtype2].act_mode_pos])) {
                            c2c_this_parsed.acttype = "mode";
                        } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-8"; }}
                    } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-9"; }}
                } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-10"; }}
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-11"; }}
            if (c2c_this_parsed.acttype == "say") {
                if (my_parser[c2c_inputtype2].act_part_pos) {
                    if (my_parser[c2c_inputtype2].act_part_pos >0) {
                        if (my_parser[c2c_inputtype2].act_part_pat.test(c2c_this_parsed2[my_parser[c2c_inputtype2].act_part_pos])) {
                            c2c_this_parsed.acttype = "part";
                        } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-12"; }}
                    } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-13"; }}
                } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-14"; }}
            } else {if (c2c_outputformat == "DEBUG") { c2c_outputtext += "-15"; }}
            if (c2c_this_parsed.acttype == "say") {
                if (my_parser[c2c_inputtype2].act_join_pos) {
                    if (my_parser[c2c_inputtype2].act_join_pos >0) {
                        if (my_parser[c2c_inputtype2].act_join_pat.test(c2c_this_parsed2[my_parser[c2c_inputtype2].act_join_pos])) {
                            c2c_this_parsed.acttype = "join";
                        } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-16:"+c2c_this_parsed2[my_parser[c2c_inputtype2].act_join_pos]+"\n"; }}
                    } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-17"; }}
                } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-18"; }}
            } else {if (c2c_outputformat == "DEBUG") { c2c_outputtext += "-19"; }}
            if (c2c_this_parsed.acttype == "say") {
                if (my_parser[c2c_inputtype2].act_act_pos) {
                    if (my_parser[c2c_inputtype2].act_act_pos >0) {
                        if (my_parser[c2c_inputtype2].act_act_pat.test(c2c_this_parsed2[my_parser[c2c_inputtype2].act_act_pos])) {
                            c2c_this_parsed.acttype = "act";
                        } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-20"; }}
                    } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-21"; }}
                } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-22"; }}
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-23"; }}
        
            if (my_parser[c2c_inputtype2].dt_year >0 && c2c_this_parsed2[my_parser[c2c_inputtype2].dt_year]) {
                c2c_this_parsed.year = c2c_this_parsed2[my_parser[c2c_inputtype2].dt_year];
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-24"; }}
            if (my_parser[c2c_inputtype2].dt_month >0 && c2c_this_parsed2[my_parser[c2c_inputtype2].dt_month]) {
                c2c_this_parsed.month = c2c_this_parsed2[my_parser[c2c_inputtype2].dt_month];
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-25"; }}
            if (my_parser[c2c_inputtype2].dt_day >0 && c2c_this_parsed2[my_parser[c2c_inputtype2].dt_day]) {
                c2c_this_parsed.day = c2c_this_parsed2[my_parser[c2c_inputtype2].dt_day];
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-26"; }}
            if (my_parser[c2c_inputtype2].dt_hour >0 && c2c_this_parsed2[my_parser[c2c_inputtype2].dt_hour]) {
                c2c_this_parsed.hour = c2c_this_parsed2[my_parser[c2c_inputtype2].dt_hour];
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-27"; }}
            if (my_parser[c2c_inputtype2].dt_minute >0 && c2c_this_parsed2[my_parser[c2c_inputtype2].dt_minute]) {
                c2c_this_parsed.minute = c2c_this_parsed2[my_parser[c2c_inputtype2].dt_minute];
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-28"; }}
            if (my_parser[c2c_inputtype2].dt_second >0 && c2c_this_parsed2[my_parser[c2c_inputtype2].dt_second]) {
                c2c_this_parsed.second = c2c_this_parsed2[my_parser[c2c_inputtype2].dt_second];
            } else { if (c2c_outputformat == "DEBUG") {c2c_outputtext += "-29"; }}
            
            if (c2c_this_parsed.acttype == "say") {
                c2c_this_parsed.nick    = c2c_this_parsed2[my_parser[c2c_inputtype2].act_say_nic];
                c2c_this_parsed.content = c2c_this_parsed2[my_parser[c2c_inputtype2].act_say_txt];
            } else if (c2c_this_parsed.acttype == "act") {
                c2c_this_parsed.nick    = c2c_this_parsed2[my_parser[c2c_inputtype2].act_act_nic];
                c2c_this_parsed.content = c2c_this_parsed2[my_parser[c2c_inputtype2].act_act_txt];
            } else if (c2c_this_parsed.acttype == "mode") {
                c2c_this_parsed.nick    = c2c_this_parsed2[my_parser[c2c_inputtype2].act_mode_nic];
                c2c_this_parsed.content = c2c_this_parsed2[my_parser[c2c_inputtype2].act_mode_txt];
            } else if (c2c_this_parsed.acttype == "part") {
                c2c_this_parsed.nick    = c2c_this_parsed2[my_parser[c2c_inputtype2].act_part_nic];
                c2c_this_parsed.content = c2c_this_parsed2[my_parser[c2c_inputtype2].act_part_txt];
            } else if (c2c_this_parsed.acttype == "join") {
                c2c_this_parsed.nick    = c2c_this_parsed2[my_parser[c2c_inputtype2].act_join_nic];
                c2c_this_parsed.content = c2c_this_parsed2[my_parser[c2c_inputtype2].act_join_txt];
            } else if (c2c_this_parsed.acttype == "nick") {
                c2c_this_parsed.nick    = c2c_this_parsed2[my_parser[c2c_inputtype2].act_nick_nic];
                c2c_this_parsed.content = c2c_this_parsed2[my_parser[c2c_inputtype2].act_nick_txt];
            } else if (c2c_this_parsed.acttype == "quit") {
                c2c_this_parsed.nick    = c2c_this_parsed2[my_parser[c2c_inputtype2].act_quit_nic];
                c2c_this_parsed.content = c2c_this_parsed2[my_parser[c2c_inputtype2].act_quit_txt];
            }
            
            if (document.getElementById("df_nicklinkscheck").checked) {
                if (c2c_nick2user[c2c_this_parsed.nick] === undefined) {
                    c2c_nick2user[c2c_this_parsed.nick] = prompt("Wie lautet der Benutzername von "+c2c_this_parsed.nick+"?\n(Lösche das Feld wenn er oder sie kein Benutzerkonto hat)", c2c_this_parsed.nick);
                }
            }
		    if (c2c_outputformat == "DEBUG") {
	            c2c_outputtext += "\nRead:\nYear: "+c2c_this_parsed.year+"\nMonth: "+c2c_this_parsed.month+"\nDay: "+c2c_this_parsed.day+"\nHour:  "+c2c_this_parsed.hour+"\nMinute: "+c2c_this_parsed.minute+"\nSecond: "+c2c_this_parsed.second+"\nAct-Type: "+c2c_this_parsed.acttype+"\nNickname:  "+c2c_this_parsed.nick+"\nUser:  "+c2c_nick2user[c2c_this_parsed.nick]+"\nContent: "+c2c_this_parsed.content;
			} else if (c2c_outputformat == "HTML1") {
	            c2c_outputtext += "<dt class=\"timenick";
				if (c2c_this_parsed.acttype == "say") { c2c_outputtext += " sayline\""; }
				if (c2c_this_parsed.acttype == "act") { c2c_outputtext += " actline\" "; }
				if (c2c_this_parsed.acttype == "mode") { c2c_outputtext += " modeline\" style=\"color:#a5a5a5;\""; }
				if (c2c_this_parsed.acttype == "part") { c2c_outputtext += " partline\" style=\"color:#a00;\""; }
				if (c2c_this_parsed.acttype == "join") { c2c_outputtext += " joinline\" style=\"color:#0A0;\""; }
				if (c2c_this_parsed.acttype == "nick") { c2c_outputtext += " ncline\" style=\"text-weight:bold;\""; }
				if (c2c_this_parsed.acttype == "quit") { c2c_outputtext += " quitline\" style=\"color:#a00\""; }
	            c2c_outputtext += ">";
	            c2c_outputtext += ">";
				if (c2c_this_parsed.minute != ".") {
		            c2c_outputtext += "<abbr style=\"font-size:xx-small;\" class=\"time\" title=\""+c2c_this_parsed.year;
		            c2c_outputtext += "-"+c2c_this_parsed.month+"-"+c2c_this_parsed.day+"T"+c2c_this_parsed.hour+":";
		            c2c_outputtext += c2c_this_parsed.minute+":"+c2c_this_parsed.second+"\">"+c2c_this_parsed.hour+":";
		            c2c_outputtext += c2c_this_parsed.minute+"</abbr>";
				}
	            c2c_outputtext += "<span class=\"nickname\">";
                if (c2c_nick2user[c2c_this_parsed.nick]) {
					c2c_outputtext += "[[Benutzer:"+c2c_nick2user[c2c_this_parsed.nick]+"|"+c2c_this_parsed.nick+"]]";
				} else {
					c2c_outputtext += c2c_this_parsed.nick;
				}
	            c2c_outputtext += "</span>";
	            c2c_outputtext += "</dt>";
	            c2c_outputtext += "<dd ";
				if (c2c_this_parsed.acttype == "say")  { c2c_outputtext += " class=\"sayline\""; }
				if (c2c_this_parsed.acttype == "act")  { c2c_outputtext += " class=\"actline\" style=\"font-style:italic;\""; }
				if (c2c_this_parsed.acttype == "mode") { c2c_outputtext += " class=\"modeline\" style=\"color:#a5a5a5;\""; }
				if (c2c_this_parsed.acttype == "part") { c2c_outputtext += " class=\"partline\" style=\"color:#a00;\""; }
				if (c2c_this_parsed.acttype == "join") { c2c_outputtext += " class=\"joinline\" style=\"color:#0A0;\""; }
				if (c2c_this_parsed.acttype == "nick") { c2c_outputtext += " class=\"ncline\" style=\"text-weight:bold;\""; }
				if (c2c_this_parsed.acttype == "quit") { c2c_outputtext += " class=\"quitline\" style=\"color:#a00\""; }
	            c2c_outputtext += ">";
				if(document.getElementById("df_nowikicheck").checked) {
		            c2c_outputtext += "<nowiki>"+c2c_this_parsed.content+"</nowiki>";
				} else {
		            c2c_outputtext += c2c_this_parsed.content;
				}
	            c2c_outputtext += "</dd>\n";
			} else if (c2c_outputformat == "WIKI1") {
				c2c_outputtext += "|Person"+parseInt(i % 7 + 1)+"=";
                if (c2c_nick2user[c2c_this_parsed.nick]) {
					c2c_outputtext += "[[Benutzer:"+c2c_nick2user[c2c_this_parsed.nick]+"|"+c2c_this_parsed.nick+"]]";
				} else {
					c2c_outputtext += c2c_this_parsed.nick;
				}
				c2c_outputtext += "\n|Aussage"+parseInt(i % 7 + 1)+"=";
				if(document.getElementById("df_nowikicheck").checked) {
		            c2c_outputtext += "<nowiki>"+c2c_this_parsed.content+"</nowiki>";
				} else {
		            c2c_outputtext += c2c_this_parsed.content;
				}
				c2c_outputtext += "\n";
				if (i % 7 == 6) {
		           c2c_outputtext += "|Zuschreibung=\n|Quelle=\n}}\n{{Dialog\n";
				}
			} else if (c2c_outputformat == "WIKI2") {
	            c2c_outputtext += "\n|-";

	            c2c_outputtext += "\n|";
				if (c2c_this_parsed.minute != ".") {
		            c2c_outputtext += c2c_this_parsed.day+"."+c2c_this_parsed.month+"."+c2c_this_parsed.year
		            c2c_outputtext += " "+c2c_this_parsed.hour+":"+c2c_this_parsed.minute+":"+c2c_this_parsed.second;
				}
	            c2c_outputtext += "||";
                if (c2c_nick2user[c2c_this_parsed.nick]) {
					c2c_outputtext += "[[Benutzer:"+c2c_nick2user[c2c_this_parsed.nick]+"|"+c2c_this_parsed.nick+"]]";
				} else {
					c2c_outputtext += c2c_this_parsed.nick;
				}
	            c2c_outputtext += "||";
				if (c2c_this_parsed.acttype == "act")  { c2c_outputtext += "''"; }
				if (c2c_this_parsed.acttype == "mode") { c2c_outputtext += "''"; }
				if (c2c_this_parsed.acttype == "part") { c2c_outputtext += "''"; }
				if (c2c_this_parsed.acttype == "join") { c2c_outputtext += "''"; }
				if (c2c_this_parsed.acttype == "nick") { c2c_outputtext += "'''"; }
				if (c2c_this_parsed.acttype == "quit") { c2c_outputtext += "''"; }
				if(document.getElementById("df_nowikicheck").checked) {
		            c2c_outputtext += "<nowiki>"+c2c_this_parsed.content+"</nowiki>";
				} else {
		            c2c_outputtext += c2c_this_parsed.content;
				}
				if (c2c_this_parsed.acttype == "act")  { c2c_outputtext += "''"; }
				if (c2c_this_parsed.acttype == "mode") { c2c_outputtext += "''"; }
				if (c2c_this_parsed.acttype == "part") { c2c_outputtext += "''"; }
				if (c2c_this_parsed.acttype == "join") { c2c_outputtext += "''"; }
				if (c2c_this_parsed.acttype == "nick") { c2c_outputtext += "'''"; }
				if (c2c_this_parsed.acttype == "quit") { c2c_outputtext += "''"; }
			}
        } else {
		    if (c2c_outputformat == "DEBUG") {
	            c2c_outputtext += "\n\nKonnte Zeile nicht einlesen:\n"+c2c_linearray[i]+"\n\n";
		    } else if (c2c_outputformat == "HTML1") {
	            c2c_outputtext += "\n<!--\nKonnte Zeile nicht einlesen:\n"+c2c_linearray[i]+"\n-->\n";
		    } else if (c2c_outputformat == "WIKI1") {
	            c2c_outputtext += "\n<!--\nKonnte Zeile nicht einlesen:\n"+c2c_linearray[i]+"\n-->\n";
		    } else if (c2c_outputformat == "WIKI2") {
	            c2c_outputtext += "\n<!--\nKonnte Zeile nicht einlesen:\n"+c2c_linearray[i]+"\n-->\n";
		    }
        }
        
    }
    if (c2c_outputformat == "DEBUG") {
           c2c_outputtext += "\n\nEOF\n\n";
    } else if (c2c_outputformat == "HTML1") {
           c2c_outputtext += "</dl>\n\n";
    } else if (c2c_outputformat == "WIKI1") {
           c2c_outputtext += "|Zuschreibung=\n|Quelle=\n}}\n\n";
    } else if (c2c_outputformat == "WIKI2") {
           c2c_outputtext += "\n}\n\n";
    }
    
    return c2c_outputtext;
    
}

function create_SelectElement (select_id,resize) {
	//Creates a Select-Element.
	//First parameter is the elements id, second...
	//if an option contains more than resize characters
	//it will set a smaller font-size. 0 means not resize.
	//Third and following parameters are the option-values and the text.
	//example: create_SelectElement("my_id",15,0,"zero",1,"one",2,"two");
    var new_select = document.createElement("select");
    new_select.id = select_id;
    if (document.cookie) {
        var my_RegExp_string = select_id+"_selsave\\=(\\w*)\\;"
        var my_RegExp = new RegExp(my_RegExp_string,"");
        if (document.cookie.match(my_RegExp)) {
            var my_cookie = document.cookie.match(my_RegExp)[1];                    
        } else {
            var my_cookie = "kljhfsaökjh";

        }
    }
    for (var i = 1; i < create_SelectElement.arguments.length/2; i++) {
        var new_option = document.createElement("option");
        new_option.value = create_SelectElement.arguments[i*2];
        new_option.appendChild(document.createTextNode(create_SelectElement.arguments[i*2+1]));
        if (my_cookie == create_SelectElement.arguments[i*2]) {
            new_option.selected = "selected";
        }
        if (resize && create_SelectElement.arguments[i*2+1].length>resize) {
            new_option.style.fontSize = parseInt(resize/create_SelectElement.arguments[i*2+1].length*100)+"%";
        }
        new_select.appendChild(new_option);
    }
    new_select.addEventListener("change",function(){var dfin30days = new Date(); dfin30days.setTime(dfin30days.getTime()+33*24*60*60*1000); document.cookie = select_id+"_selsave="+this.options[this.selectedIndex].value+"; expire="+dfin30days.toGMTString()+";";},false);
    return new_select;
}

function createChatParser() {
//Creates and displays an input-form.

    if (document.getElementById("df_chatpannel")) {
        document.getElementById("df_chatpannel").parentNode.removeChild(document.getElementById("df_chatpannel"));
    } else {
        var cp_pannel = document.createElement("div");
        cp_pannel.id = "df_chatpannel";
        cp_pannel.style.position = "fixed";
        cp_pannel.style.top = "50px";
        cp_pannel.style.right = "50px";
        cp_pannel.style.zIndex = "100";
        cp_pannel.style.background = "rgba(180,220,255,0.5)";
        cp_pannel.style.padding = "4px";
        cp_pannel.style.paddingRight = "81px";
        var cp_textarea = document.createElement("textarea");
        cp_textarea.style.display = "inline";
        cp_textarea.cols = 60;
        cp_textarea.rows = 13;
        cp_textarea.id = "cp_textarea";
        var cp_setupbox = document.createElement("div");
        cp_setupbox.style.display = "block";
        cp_setupbox.style.position = "absolute";
        cp_setupbox.style.background = "rgba(255,220,180,0.8)";
        cp_setupbox.style.padding = "4px";
        cp_setupbox.style.top = "4px";
        cp_setupbox.style.right = "4px";
        cp_setupbox.style.width = "150px";
        
        var my_parser = getGlobalParser();
        var my_parser_nn = new Array("df_logformatselect",12);
        for (var j = 0; j < my_parser.length; j++) {
            my_parser_nn[my_parser_nn.length] = j;
            my_parser_nn[my_parser_nn.length] = my_parser[j].name;
        }
        my_parser_nn[my_parser_nn.length] = -1;
        my_parser_nn[my_parser_nn.length] = "Sonstiges...";
        var cp_logformat = create_SelectElement.apply(null,my_parser_nn);
        cp_logformat.style.display = "block";
        cp_logformat.style.margin = "4px";
        cp_outformat = create_SelectElement("df_outputformatselect",12,"HTML1","HTML-dl","WIKI1","Vorlage:Dialog","WIKI2","Wiki-Tabelle","DEBUG","Debug-Modus: Ausgabe aller gefundenen Felder...");
        cp_outformat.style.display = "block";
        cp_outformat.style.margin = "4px";
        var cp_date = document.createElement("input");
        cp_date.setAttribute("type", "date");
        cp_date.id = "df_chatdate";
        cp_date.style.width = "140px";
        cp_date.style.margin = "4px";
		var today = new Date();
        cp_date.value=today.getFullYear()+"-"+today.getMonth()+"-"+today.getDate();
		if (cp_date.type == "text") {
			//type=date not suported, load jq-datepicker..?
			//'cause I have no idea about jQuery I will not
			//maybe write an own datepicker..?
		}
        var cp_nicklinks1 = document.createElement("label");
        cp_nicklinks1.style.display = "block";
        cp_nicklinks1.for = "df_nicklinkscheck";
        cp_nicklinks1.style.fontSize = "xx-small";
        var cp_nicklinks2 = document.createElement("input");
        cp_nicklinks2.type="checkbox";
        cp_nicklinks2.id="df_nicklinkscheck";
        cp_nicklinks1.appendChild(cp_nicklinks2);
        cp_nicklinks1.appendChild(document.createTextNode("Nicknames mit Benutzerprofilen verknüpfen"));
        var cp_nowiki1 = document.createElement("label");
        cp_nowiki1.style.display = "block";
        cp_nowiki1.for = "df_nowikicheck";
        cp_nowiki1.style.fontSize = "xx-small";
        var cp_nowiki2 = document.createElement("input");
        cp_nowiki2.type="checkbox";
        cp_nowiki2.id="df_nowikicheck";
        cp_nowiki2.checked="checked";
        cp_nowiki1.appendChild(cp_nowiki2);
        cp_nowiki1.appendChild(document.createTextNode("Wiki-Syntax unterdrücken"));
        var cp_convert = document.createElement("button");
        cp_convert.style.margin = "4px";
        cp_convert.style.display = "block";
        cp_convert.style.listStyleType = "none";
        cp_convert.appendChild(document.createTextNode("konvertieren"));
        cp_convert.addEventListener("click",function() { document.getElementById("cp_textarea").value = chatlog2chatlog(document.getElementById("cp_textarea").value);},false);
        var cp_close = document.createElement("button");
        cp_close.style.margin = "4px";
        cp_close.style.display = "block";
        cp_close.style.listStyleType = "none";
        cp_close.appendChild(document.createTextNode("schließen"));
        cp_close.addEventListener("click",function() { document.getElementsByTagName("body")[0].removeChild(this.parentNode.parentNode);},false);
        
    
        cp_pannel.appendChild(cp_textarea);
        cp_pannel.appendChild(cp_setupbox);
        cp_setupbox.appendChild(cp_logformat);
        cp_setupbox.appendChild(cp_outformat);
        cp_setupbox.appendChild(cp_date);
        cp_setupbox.appendChild(cp_nicklinks1);
        cp_setupbox.appendChild(cp_nowiki1);
        cp_setupbox.appendChild(cp_convert);
        cp_setupbox.appendChild(cp_close);
        document.getElementsByTagName("body")[0].appendChild(cp_pannel);
    }

}

function AddChatLogFunctionality() {


//This identifies the edit-page
  if (document.getElementById("toolbar") && document.getElementById("stdPreloads") && document.getElementById("mw-editbutton-extlink")) {

    var tooldiv = document.getElementById("toolbar"); // find the toolbar
    var ChatButton = document.createElement("span");  // create a new button
    ChatButton.id = "df-editbutton-chatlog";          // name it
    ChatButton.className = "mw-toolbar-editbutton";   // class it ;)
    ChatButton.style.margin = "0";                    // style
    ChatButton.style.padding = "0";                   //   |
    ChatButton.style.bottom = "0";                    //   |
    ChatButton.style.height = "22px";                 //   |
    ChatButton.style.border = "none";                 //   |
    ChatButton.style.width = "23px";                  //   |
    ChatButton.style.display = "inline-block";        //   |
    ChatButton.style.overflow = "hidden";             //   |
    ChatButton.style.backgroundImage = "url(/w/skins/common/images/button_template.png)";
    ChatButton.style.verticalAlign = "middle";        //   V
    ChatButton.style.fontSize = "10px";               // it
    ChatButton.appendChild(document.createTextNode("Chat"));  // Write a caption
    ChatButton.title = "ChatProtokoll";
    ChatButton.style.cursor = "pointer";
    ChatButton.addEventListener("click",function(){ createChatParser(); },false); // give it a function
    tooldiv.appendChild(ChatButton);                  // Display it
    movePreloadSelect(1);                             // And move the Select-Thingy away
  } else {
    //there is not enough DOM ^^ wait a half second and try again...

    window.setTimeout(AddChatLogFunctionality,500);
  }

}

function df_doOnLoad () {    
//all stuff that should happen on finishing page-load

  if (document.getElementById("toolbar")) {
    AddChatLogFunctionality();
  }


}


df_debugmode = 0;

//addOnloadHook(df_doOnLoad);
$(document).ready(df_doOnLoad);
//df_doOnLoad();