document.onkeydown = check_input;


var sounds_loaded = false;



function parse_bbcodes(message,parse_b,parse_i,parse_u,parse_urls)
{
   if (parse_b == true)
   {
       var expression = /\[b\](.*)\[\/b\]/g;
       var replacement = '<b>$1<\/b>';
       message = message.replace(expression, replacement);
   }

   if (parse_i == true)
   {
       var expression = /\[i\](.*)\[\/i\]/g;
       var replacement = '<i>$1<\/i>';
       message = message.replace(expression, replacement);
   }

   if (parse_u == true)
   {
       var expression = /\[u\](.*)\[\/u\]/g;
       var replacement = '<u>$1<\/u>';
       message = message.replace(expression, replacement);
   }

   if (parse_urls == true)
   {
//       var expression = /\[url=(http:\/\/.*)\](.*)\[\/url\]/g;
//       var replacement = '<a href="$1" target="_blank">$2<\/a>';
//       message = message.replace(expression, replacement);
//
//       var expression = /\s(http:\/\/\S*)/g;
//       var replacement = '<a href="$1" target="_blank">$1<\/a>';
//       message = message.replace(expression, replacement);


		//URLs kürzen
		//var expression = /http:\/\/(.{30})(.*)</g;   // <- funktioniert!!!
		//var replacement = 'http://$1...<\/a>';
		//message = message.replace(expression, replacement);

		//var expression = /http:\/\/(.{30})(.*)/g;   //<- funktioniert!!!
		//var replacement = '<a href="http://$1$2" target="_blank">http://$1...<\/a>';
		//message = message.replace(expression, replacement);

		var expression = /\[url=(http:\/\/.*)\](.*)\[\/url\]/g;
		var replacement = '<a href="$1" target="_blank">$2<\/a>';
		message = message.replace(expression, replacement);

		var expression = /\s(http:\/\/\S*)/g;
		var replacement = '<a href="$1" target="_blank">$1<\/a>';
		message = message.replace(expression, replacement);

		//URLs kürzen
		var expression = />http:\/\/(.{30})(.*)<\/a>/g;   // <- funktioniert!!!
		var replacement = '>http:\/\/$1...html<\/a>';
		message = message.replace(expression, replacement);


   }

   return message;
}


function parse_smilies(message)
{
      for (var i=0; i<smilies.length; i++)
      {
          var expression = smilies[i]['code'];
          var replacement = '<img src="' + smilies[i]['image'] + '" alt =""/>';
          message = message.replace(expression, replacement);
      }
      return message;
}


//Beispiel von http://de.selfhtml.org/javascript/objekte/event.htm
function check_input(event)
{
    if (!event && window.event)
    {
        event = window.event;
    }
    if (event.which)
    {
        //Mozilla
        key_code = event.which;
    }
    else if (event.keyCode)
    {
        //IE
        key_code = event.keyCode;
    }

    switch (key_code)
    {
         case 13 :  create_new_entry('message_text')
                    break;
         default:
    }
}


function chat_init()
{
    //get_chat_config();
    get_user_config();
    get_messages(true);

	isIE = /MSIE/.test(navigator.userAgent);
	isGecko= /Gecko/.test(navigator.userAgent);
	isKHTML =/Konqueror|Safari|KHTML/.test(navigator.userAgent)
	isSafari = navigator.appVersion.indexOf('AppleWebKit') > -1;
	isOpera = navigator.userAgent.indexOf('Opera') > -1;

    //damn browserswitch! how it's work better an browser save !?!???
	//alert("isIE:" + isIE + "\n isGecko:" + isGecko + "\n isKHTML:" + isKHTML + "\n isSafari:" + isSafari + "\n isOpera:" + isOpera);

    document.getElementById('message_text').setAttribute('autocomplete','off');
}





function create_new_entry(id)
{
    var message = gebi(id).value;
    var message_recipient = get_message_recipient();
    var send_message = encodeURIComponent(message);

    var request_url = "server.php";
    var request_parameters = 'action=new_message&current_id=' + current_id + '&message_text=' + send_message + '&recipient=' + message_recipient;
    //t(request_parameters);

    if (flood_count > flood_limit)
    {
        alert('Flood-Sperre');
    }
    else if(message == '')
    {
        alert('Es muss eine Nachricht eingegeben werden');
    }
    else
    {
        var is_pm = (message_recipient != 0) ? true : false;
        flood_count++;
        var test = get_recipient_name()
        var username = (is_pm) ? ( 'an ' + test + ' (privat)') : user_config.username;
        gebi(id).value = '';
        text = '<b>' + username + '</b>: ' + message;
        color = user_config.user_color;
        time_string = '(' + message_time(0) +')';
        username = user_config.user_name;
        message_order = user_config.message_order;
        play_sound('message');
        tbRequest.add(create_message(text,username,color,'asc',time_string,true,is_pm,''), 'GET', request_url, request_parameters, true);
    }
}



function get_user_config()
{
    var request_url = "server.php";
    var request_parameters = 'action=get_user_config';
    tbRequest.add(init_user_config, 'GET', request_url, request_parameters, true);
    get_user_list();
}

function init_user_config(response_xml, response_text)
{
    if (response_text != '[]' && response_text != '')
    {
            try
            {
               eval("user_config = " + response_text);
            }
            catch (e){alert('Fehler beim Auslesen der Benutzerdaten')}
    }
}



function get_messages(load_all_messages)
{
    var request_url = 'server.php';
    load_all = (load_all_messages == true) ? '&load_all=true' : '';

    var request_parameters = 'action=get_messages&current_id=' + current_id + load_all;
    tbRequest.add(insert_messages, 'GET', request_url, request_parameters, true);
}


//Fügt neue Nachrichten ins Chatfenster ein
function insert_messages(response_xml, response_text)
{
    if (response_text != '[]' && response_text != '')
    {
            try
            {
               eval("var message_data = " + response_text);
               if (message_data == false)
               {
                   window.location.href=login_url;
               }
               else
               {
                   current_id = message_data[0].timestamp;
               }
            }
            catch (e){alert('Fehler beim parsen der Nachrichten')}


            var message_order = '';
            var to_username = '';
            var is_pm = false;

            for (var i=message_data.length-1; i>=0; i--)
            {
                        is_pm = (message_data[i].message_type == 'pm') ? true : false;
                        create_message(message_data[i].message,message_data[i].username,message_data[i].user_color,message_order,message_data[i].time,false,is_pm,to_username)
                        play_sound(message_data[i].message_type);
                        //delete_message('delete');
            }
    }
    //das Selectfeld für private Nachrichten überprüfen

    //Sounds laden (falls noch nicht geschehen)
    if (!sounds_loaded)
    {
        sounds_loaded = load_sounds();
    }

    window.setTimeout('get_messages()',reload_time); //Erneute Anfrage in vier Sekunden
    window.setTimeout('reset_flood_count()', flood_timeout); //Flood_limit zurück setzen
}


function create_message(text,username,color,order,time_string,temp_msg,is_pm,to_username)
{
                chat_table = document.getElementById("chat_entries");
                text = parse_bbcodes(text,true,true,false,true);
                text = parse_smilies(text);

                var message_time = document.createTextNode(time_string);
                var message_text = document.createTextNode(text);
                //var admin_buttons = document.createTextNode('admin');
                var row = document.createElement('tr');
                var cell_1 = document.createElement('td');
                var cell_2 = document.createElement('td');
                var cell_3 = document.createElement('td');
                var nobr = document.createElement('nobr');

                //erste Zelle für Datum
                cell_1.setAttribute('class','chat_time');
                cell_1.setAttribute('className','chat_time');
                cell_1.setAttribute('vAlign','top');
                cell_1.appendChild(nobr);
                nobr.appendChild(message_time);

                //zweite Zelle für Username und Message
                cell_2.setAttribute('class','chat_message');
                cell_2.setAttribute('className','chat_message');
                cell_2.setAttribute('vAlign','top');
                cell_2.style.color = '#' + color;
                if (is_pm)
                {
                    cell_2.style.background = '#FFFFBF';
                }
                cell_2.innerHTML = text;

                //Die dritte Zelle dient für Adminzwecke
                //cell_3.appendChild(admin_buttons);

                row.appendChild(cell_1);
                row.appendChild(cell_2);
                row.appendChild(cell_3);

                chat_table.insertBefore(row, chat_table.firstChild);


                gebi('chat_content').scrollTop = 5000000;
                // gebi('chat_bottom').scrollIntoView();
                //self.location.href="#chat_bottom";
                if ( order == 'dessc')
                {
                    chat_table.insertBefore(row, chat_table.firstChild);
                }
                else
                {
                    chat_table.insertBefore(row, chat_table.lastChild);
                }
}

function get_user_list()
{
    var request_url = "server.php";
    var request_parameters = 'action=get_users';
    tbRequest.add(create_users_list, 'GET', request_url, request_parameters, true);
}

function create_users_list(response_xml, response_text)
{
    if (response_text != '[]' && response_text != '')
    {
            try
            {
               eval("var user_data = " + response_text);
            }
            catch (e){alert('Fehler beim parsen der Benutzerliste')}

            var user_list = '';
            var user_select_field = '<select name="pm_recipient" id="message_recipient" size="">';
            var message_recipient = get_message_recipient();

            user_select_field += '<option value="">Chat</option>';
            for (var i = 0; i < user_data.length; i++)
            {
                        var selected = (user_data[i].user_id == message_recipient) ? 'selected="selcted"' : '';
                        user_list += '<a style="color:#000000" target="_blank" href="' + user_profile_url + user_data[i].user_id +'">' + user_data[i].username + '</a><br/>'

                        //if (user_data[i].user_id != user_config.user_id )
                        //{
                            user_select_field += '<option value="' + user_data[i].user_id +'"' + selected +  '>' + user_data[i].username + '</option>';
                        //}
            }
            user_select_field += '</select>';

            gebi("userlist").innerHTML = user_list;
            gebi("message_target").innerHTML = user_select_field;
            window.setTimeout('get_user_list()', reload_userlist); //Erneute Anfrage in vier Sekunden
    }
}

function delete_message(id)
{
            delete_node = gebi(id);
            table = gebi("chat_entries");

            if(delete_node)
            {
                        try
                        {
                           table.removeChild(delete_node);
                        }
                        catch(e)
                        {
                           alert(e);
                        }
                        delete_node = gebi(id);
            }
}






function reset_flood_count()
{
         flood_count = 0;
}


function popup(url, width, height)
{
    window.open(url, '_popup', 'HEIGHT=' + height + ',resizable=yes,scrollbars=yes, WIDTH=' + width);
    return false;
}










//HILFS-FUNKTIONEN

function get_message_recipient()
{
    try
    {
         var message_recipient = gebi('message_recipient').value;
    }
    catch(e)
    {
          var message_recipient = 0;
    }
    return message_recipient;
}

function get_recipient_name()
{
    try
    {
         var message_recipient = gebi('message_recipient').options[gebi('message_recipient').selectedIndex].text;
    }
    catch(e)
    {
          var message_recipient = 'schlecht';
    }
    return message_recipient;
}



function gebi(id)
{
  return document.getElementById(id);
}


function t(test)
{
    prompt("Test-Fenster",test);
}




function message_time(timestamp)
{
       var date = new Date();
       if (timestamp > 0 )
       {
           date.setTime = timestamp;
       }

       if (user_config.user_show_time == '1')
       {
            var hours = date.getHours();
            var minutes = date.getMinutes();
            var seconds = date.getSeconds();
            hours = ((hours < 10) ? "0" + hours : hours);
            minutes = ((minutes < 10) ? "0" + minutes : minutes);
            seconds = ((seconds < 10) ? "0" + seconds : seconds);

            var time = (user_config.user_show_days == '1') ?  weekdays[date.getDay()] + ', ' : '';
            time += hours + ':' + minutes;
            time += (user_config.user_show_seconds == '1') ? ':' + seconds : '';
       }
       return time;
}



//funktion clone(): Quelle CT/Heise: http://www.heise.de/ct/06/05/links/152.shtml
// geht den Knoten durch um weitere HTML-Tags in der Nachricht umzuwendeln
function clone(quelle, ziel)
{
  // Einfaches cloneNode() funktioniert nicht bei komplexen
  // Gebilden; eine Schleife baut den Teilbaum nach.
  for(var i = 0; i < quelle.childNodes.length; i++)
  {
     var knoten = quelle.childNodes[i];
     switch (knoten.nodeType)
     {
      case 1:    // Elementknoten
           var neu = ziel.appendChild(document.createElement(knoten.nodeName));
           for (var j = 0; j < knoten.attributes.length; j++)
           {
               neu.setAttribute(knoten.attributes[j].nodeName, knoten.attributes[j].nodeValue);
           }
           clone(knoten, neu);
           break;
      case 3:    // Textknoten
           subknoten = document.createTextNode(knoten.nodeValue);
           ziel.appendChild(subknoten);
      // andere Knotentypen sind nicht relevant
     }
  }
}


function try_catch()
{
         try
         {
         }
         catch(e)
         {
               alert('Fehler:   ' + e.message + '\nFehlertyp:   ' + e.name);
         }
}