/* ########################################################################## # ET-Chat v3.x.x # Lizenz: CCPL - http://creativecommons.org/licenses/by-nc/2.0/de/ # Autor: Evgeni Tcherkasski # E-mail: info@s-e-d.de # WWW: http://www.sedesign.de ############################################################################*/ function ET_Chat(){ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Deklaration globaler Attribute im Class ------------------------------------------------------------ var self = this; this.time_last_req=0; //(privat) Zeit im Milisek seit der letzten AJAX-Anfrage this.time_last_send=0; //(privat) Zeit im Milisek seit der letzten Message from User this.inactivity_message_flag=false; //(privat) TRUE wenn bereits eine Systemwarnmeldung an den User gesendet wurde this.interval_for_inactivity=1800000; //(public) Wie lange darf der User nichts schreiben bis er aus dem Chat rausfliegt this.reload_interval; //(public) Reloadzeit this.show_history_all_user; //(public) [bool] Soll die History fuer alle Gezeigt wrden oder nur Admin/Mod-Team this.messages_im_chat; //(public) Anz. der Mess. im Fenster this.username=""; //(public) this.user_id=""; //(public) this.userstat=""; //(public) UserStatus this.set_dynamic_height; //(public) this.textcolor; //(public) this.mouse_top=0; //(privat) Cursorkoordueberwachung this.mouse_left=0; //(privat) Cursorkoordueberwachung this.win_block = Array(); //(privat) Window-Object-Array zum Userblokieren this.win_admin_user = Array(); //(privat) Window-Object-Array zum Useradministrrieren this.win_color; //(privat) Window-Object zum Darstellen der Colorauswahl this.win_color_content; //(privat) Inhalt des Colorfensters wird ueber AJAX onLoad gefuellt this.win_smileys; //(privat) Window-Object zum Darstellen der Smileys this.win_smileys_content; //(privat) Inhalt des Smileysfensters wird ueber AJAX onLoad gefuellt this.win_memory; //(privat) Window-Object zum Darstellen von Memory this.win_memory_content; //(privat) Inhalt des memoryfensters wird ueber AJAX onLoad gefuellt this.win_style; //(public) Festlegung der Windowstyle fuer alle Windows im Chat this.win_prop; //(privat) Window Zusatzfeatures this.win_history; //(privat) Window History this.jsonObjUserGlobal; //(privat) Message JSON Array. this.userPrivilegienGlobal; //(public) Privilegien z.B.: Gast,User,Moderator,Admin this.privat_an; //(privat) Privat an User-ID this.sound_status; //(privat) Wann soll der Sound kommen, bei allen Messages oder nur Privat // (Stop) Deklaration globaler Attribute im Class ------------------------------------------------------------- // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Konstruktor der Class ET_Chat wird onLoad ausgefuehrt ----------------------------------------------- this.start = function(){ // Adminbereich if (self.userPrivilegienGlobal=="admin"){ $("form_right").innerHTML+="   \"\""; $("link_admin").onclick = function(){ var hoehe = $('chatinhalt').getHeight(); var breite = $('chatinhalt').getWidth(); var win_admin = new Window({url: "./admin/", className: self.win_style, width:breite, height:hoehe, top:20, left:10, resizable: true, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: true, maximizable: true, destroyOnClose: true }); //win_prop.maximize(); win_admin.show(); } } AjaxReadRequest(); // Erste Messageabfrage beim Start setInterval(AjaxReadRequest, this.reload_interval); // Interval fuer regelmaesige Abfragen setzen. // Sound beim Einsteigen abschalten - deaktiviert: Sound nun nur bei privat beim start // Sound.disable(); self.sound_status='privat'; Sound.enable(); // autocomplete="off" ist nicht XHTML valide deshalb ueber JS $("message").setAttribute("autocomplete", "off"); // Passt die Hoehe des Chatinhalts immer auf die Hoehe des fensters. Also height 100% if(this.set_dynamic_height){ window_height(); setInterval(window_height, 200); } $('message').focus(); $("message_form").onsubmit = function(){return self.send();} // Wichtig damit beim Submit das Dokument nicht neu geladen wird. $("link_sagen").onclick = function(){return self.send();} // s.o. Zeile. $("link_prop").onclick = function(){ // Wenn das Fenster noch nicht existiert, muss es erzeugt und befuellt werden if (typeof self.win_prop!="object"){ // Fensterinstanz self.win_prop = new Window({className: self.win_style, width:210, height:100, top:eval(self.mouse_top-165), left:eval(self.mouse_left-120), resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: false, opacity: 1}); // History anzeigen? für user und gäste gesperrt // if(self.show_history_all_user || self.userPrivilegienGlobal=="admin" || self.userPrivilegienGlobal=="mod") if(self.userPrivilegienGlobal=="admin" || self.userPrivilegienGlobal=="mod") var history_link_content = '
  '+lang_start_prop_link_2+'
'; else var history_link_content=''; // Fenster fuellen self.win_prop.setHTMLContent('
  '+lang_start_prop_link_1+'
\ '+history_link_content+'\
  '+lang_start_prop_link_3+'
- '+lang_start_prop_link_4+' - '+lang_start_prop_link_8+' - '+lang_start_prop_link_5+'
'); // Das befuellte Fenster ueberwachen Event.observe('prop_list', 'click', function(event){ if(Event.element(event).id!="" && Event.element(event).id!='prop_list' && Event.element(event).id!='sound_icon'){ if (Event.element(event).id=="cls") $('chatinhalt').innerHTML=''; if (Event.element(event).id=="history") self.historyWindow(1); if (Event.element(event).id=="sound_off") { Sound.disable(); $('sound_icon').src="img/sound_mute.png";} if (Event.element(event).id=="sound_on") {self.sound_status='all'; Sound.enable(); $('sound_icon').src="img/sound_none.png";} if (Event.element(event).id=="sound_privat") {self.sound_status='privat'; Sound.enable(); $('sound_icon').src="img/sound_privat.png";} $('message').focus(); // Nach Auswahl einfach Fenster schliessen self.win_prop.close(); } }); } // Ist dass Fenster bereits sichtbar? if($(self.win_prop.getId()).style.display=='none'){ self.win_prop.show(); self.win_prop.toFront(); } else self.win_prop.close(); } // Logout $("link_logout").onclick = function(){ location.href="./logout.php?r="+$("room").value; } // Logout Funktion bei onUnLoad function chatverlassen() { location.href="./logout.php?r="+$("room").value; } // MausKoord fuer Fenster und Tooltips Event.observe(document, 'mousemove', function(event){ self.mouse_left = Event.pointerX(event); self.mouse_top = Event.pointerY(event); }); // ueberwachung aller Elemente der OnlineList, Chatinhalts, // also beim Private, Roomchange oder Usersperren wirds dadurch ausgeloest Event.observe('onlinelist', 'click', function(event){ // send Private Messages and Change Rooms changeUserEvent(Event.element(event).id); } ); Event.observe('chatinhalt', 'click', function(event){ // send Private Messages and Change Rooms changeUserEvent(Event.element(event).id); } ); // ueberwachung zum ausschalten der Privatanzeige Event.observe('privat_anzeige', 'click', function(event){ if(Event.element(event).id=="close_privat"){ $("privat").value = "0"; $("privat_anzeige").innerHTML=lang_start_1; //$("message").style.backgroundColor="#ffffff"; $("message").focus(); } } ); //Lade Fensterinhalt zum Darstellen des Chat-Quiz - self.user_id var quser_name = self.userPrivilegienGlobal; var qzurl = 'chatquiz.php?quserstat='+quser_name+'&chatnickname='+self.username; new Ajax.Request(qzurl,{onSuccess:function(result){self.win_chatquiz_content=result.responseText;}}); // new Ajax.Request("chatquiz.php?chatnickname="+self.username,{onSuccess:function(result){self.win_chatquiz_content=result.responseText;}}); //Lade Fensterinhalt zum Darstellen des Chatwerbefensters new Ajax.Request("chatwerbung.php",{onSuccess:function(result){self.win_chatwerbung_content=result.responseText;}}); //Lade Fensterinhalt zum Darstellen der Chat-Hilfe new Ajax.Request("chathilfe.php",{onSuccess:function(result){self.win_chathilfe_content=result.responseText;}}); //Click auf ChatHilfe-Icon $("link_chathilfe").onclick = function(){ // Wenn das Fenster noch nicht existiert, muss es erzeugt und befuellt werden if (typeof self.win_chathilfe!="object"){ // Fensterinstanz self.win_chathilfe = new Window({className: self.win_style, width:520, height:325, title: 'myMagdeburg.de - Chat-Hilfe', top:20, left:110, resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: false, opacity: 1}); // Fenster fuellen self.win_chathilfe.setHTMLContent('
'+self.win_chathilfe_content+'
'); // Das befuellte Fenster ueberwachen Event.observe('chathilfe_list', 'click', function(event){ if(Event.element(event).id!="" && Event.element(event).id!='chathilfe_list'){ $('message').value +=Event.element(event).id; $('message').focus(); // Nach Auswahl des Smileys einfach Fenster schliessen self.win_chathilfe.close(); } }); } // Ist dass Fenster bereits sichtbar? if($(self.win_chathilfe.getId()).style.display=='none'){ self.win_chathilfe.show(); self.win_chathilfe.toFront(); } else self.win_chathilfe.close(); } //Lade Fensterinhalt zum Darstellen des ChatGames new Ajax.Request("memory.inc_ajax.php",{onSuccess:function(result){self.win_memory_content=result.responseText;}}); //Click auf Memory-Icon $("link_memory").onclick = function(){ // Wenn das Fenster noch nicht existiert, muss es erzeugt und befuellt werden if (typeof self.win_memory!="object"){ // Fensterinstanz self.win_memory = new Window({className: self.win_style, width:455, title: 'myMagdeburg.de - Chat-Game', height:315, top:20, left:120, resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: false, opacity: 1}); // Fenster fuellen self.win_memory.setHTMLContent('
'+self.win_memory_content+'
'); // Das befuellte Fenster ueberwachen Event.observe('memory_list', 'click', function(event){ if(Event.element(event).id!="" && Event.element(event).id!='memory_list'){ $('message').value +=Event.element(event).id; $('message').focus(); // Nach Auswahl des Smileys einfach Fenster schliessen self.win_memory.close(); } }); } // Ist dass Fenster bereits sichtbar? if($(self.win_memory.getId()).style.display=='none'){ self.win_memory.show(); self.win_memory.toFront(); } else self.win_memory.close(); } //Lade Fensterinhalt zum Darstellen der Quiz-Highscore new Ajax.Request("quizhighscore.php",{onSuccess:function(result){self.win_quizscore_content=result.responseText;}}); //Click auf quizscore-Icon $("link_quizscore").onclick = function(){ // Wenn das Fenster noch nicht existiert, muss es erzeugt und befuellt werden if (typeof self.win_quizscore!="object"){ // Fensterinstanz self.win_quizscore = new Window({className: self.win_style, width:500, title: 'myMagdeburg.de - Chat-Quiz HighScore', height:315, top:20, left:120, resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: false, opacity: 1}); // Fenster fuellen self.win_quizscore.setHTMLContent('
'+self.win_quizscore_content+'
'); // Das befuellte Fenster ueberwachen Event.observe('quizscore_list', 'click', function(event){ if(Event.element(event).id!="" && Event.element(event).id!='quizscore_list'){ $('message').value +=Event.element(event).id; $('message').focus(); // Nach Auswahl des Smileys einfach Fenster schliessen // self.win_quizscore.close(); } }); } // Ist dass Fenster bereits sichtbar? if($(self.win_quizscore.getId()).style.display=='none'){ self.win_quizscore.show(); self.win_quizscore.toFront(); } else self.win_quizscore.close(); } //Lade Fensterinhalt zum Darstellen des Smileys new Ajax.Request("smileys.inc_ajax.php",{onSuccess:function(result){self.win_smileys_content=result.responseText;}}); //Click auf Smiley-Icon $("link_smileys").onclick = function(){ // Wenn das Fenster noch nicht existiert, muss es erzeugt und befuellt werden if (typeof self.win_smileys!="object"){ // Fensterinstanz self.win_smileys = new Window({className: self.win_style, width:240, height:120, top:eval(self.mouse_top-175), left:eval(self.mouse_left-120), resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: false, opacity: 1}); // Fenster fuellen self.win_smileys.setHTMLContent('
'+self.win_smileys_content+'
'); // Das befuellte Fenster ueberwachen Event.observe('smileys_list', 'click', function(event){ if(Event.element(event).id!="" && Event.element(event).id!='smileys_list'){ $('message').value +=Event.element(event).id; $('message').focus(); // Nach Auswahl des Smileys einfach Fenster schliessen self.win_smileys.close(); } }); } // Ist dass Fenster bereits sichtbar? if($(self.win_smileys.getId()).style.display=='none'){ self.win_smileys.show(); self.win_smileys.toFront(); } else self.win_smileys.close(); } //Lade Fensterinhalt zum Darstellen des Farbenfensters new Ajax.Request("farben_fenster.inc_ajax.php",{onSuccess:function(result){self.win_color_content=result.responseText;}}); $('message').style.color = "#"+self.textcolor; //Click auf Color-Icon $("link_color").onclick = function(){ // Wenn das Fenster noch nicht existiert, muss es erzeugt und befuellt werden if (typeof self.win_color!="object"){ self.win_color = new Window({className: self.win_style, width:350, height:200, top:eval(self.mouse_top-265), left:eval(self.mouse_left-250), resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: false, opacity: 1}); self.win_color.setHTMLContent(self.win_color_content); //(Start) Font Art auswaehlen und in hidden-Inputs eintragen -------------------- $("kursiv").onclick = function(){ $("italic").value = ($("kursiv").checked) ? "italic" : "normal"; $('message').style.fontStyle = ($("kursiv").checked) ? "italic" : "normal"; } $("fett").onclick = function(){ $("bold").value = ($("fett").checked) ? "bold" : "normal"; $('message').style.fontWeight = ($("fett").checked) ? "bold" : "normal"; } //(Stop) Font Art auswaehlen und in hidden-Inputs eintragen --------------------- // Startfarbe des Textes var r = self.textcolor.slice(0,2); var g = self.textcolor.slice(2,4); var b = self.textcolor.slice(4,6); //(Start) Init Slider zum RGB-Mischen ------------------------------ var slider_red = new Control.Slider('handle_red', 'track_red', { onSlide: function(v) { /* Nix */ }, onChange: function(v){ r = dec2hex(v*255); $('message').style.color=$('color').value=$('farbenvorschau').style.backgroundColor="#"+r+g+b; } }); var slider_green = new Control.Slider('handle_green', 'track_green', { onSlide: function(v) { /* Nix */ }, onChange: function(v){ g = dec2hex(v*255); $('message').style.color=$('color').value=$('farbenvorschau').style.backgroundColor="#"+r+g+b; } }); var slider_blue = new Control.Slider('handle_blue', 'track_blue', { onSlide: function(v) { /* Nix */ }, onChange: function(v){ b = dec2hex(v*255); $('message').style.color=$('color').value=$('farbenvorschau').style.backgroundColor="#"+r+g+b; } }); //(Stop) Init Slider zum RGB-Mischen ------------------------------- // Slider laut aktueller Farbe stellen slider_red.setValue(hex2dec(r)/255); slider_green.setValue(hex2dec(g)/255); slider_blue.setValue(hex2dec(b)/255); // ueberwachung des Klicks auf die Farbentabelle Event.observe('farben_tab', 'click', function(event){ if(Event.element(event).id!=""){ // Farbe Hex in Dec umwandeln var rd = hex2dec(Event.element(event).id.slice(0, 2)); var gd = hex2dec(Event.element(event).id.slice(2, 4)); var bd = hex2dec(Event.element(event).id.slice(4, 6)); // Slider entsprechend der Auswahl verschieben slider_red.setValue(rd/255); slider_green.setValue(gd/255); slider_blue.setValue(bd/255); } } ); } // Ist dass Fenster bereits sichtbar? if($(self.win_color.getId()).style.display=='none'){ self.win_color.show(); self.win_color.toFront(); } else self.win_color.close(); } // chwerbefenster(); }; // (Stop) Konstruktor der Class ET_Chat wird onLoad ausgefuehrt ------------------------------------------------ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ function chwerbefenster() { // Beim Start Werbefenster laden // Wenn das Fenster noch nicht existiert, muss es erzeugt und befuellt werden if (typeof self.win_chatwerbung!="object"){ // Fensterinstanz self.win_chatwerbung = new Window({className: self.win_style, width:580, height:380, title: 'myMagdeburg.de - Chat', top:20, left:110, resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: true, destroyOnClose: false, opacity: 1}); // Fenster fuellen self.win_chatwerbung.setHTMLContent('
'+self.win_chatwerbung_content+'
'); // Das befuellte Fenster ueberwachen Event.observe('chatwerbung_list', 'click', function(event){ if(Event.element(event).id!="" && Event.element(event).id!='chatwerbung_list'){ $('message').value +=Event.element(event).id; $('message').focus(); // Nach Auswahl des Smileys einfach Fenster schliessen self.win_chatwerbung.close(); } }); } // Ist dass Fenster bereits sichtbar? if($(self.win_chatwerbung.getId()).style.display=='none'){ self.win_chatwerbung.show(); self.win_chatwerbung.toFront(); } else self.win_chatwerbung.close(); } // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Das Schreibfeld nach Versand wieder freigeben ------------------------------------------------------ var let_write = function(){ $('message').disabled=false $('message').value = ""; $('message').focus(); }; // (Stop) Das Schreibfeld nach Versand wieder freigeben ------------------------------------------------------- // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Messagefeld nach Unten scrollen -------------------------------------------------------------------- var scroll_down = function(){ $('chatinhalt').scrollTop = $('chatinhalt').scrollHeight }; // (Stop) Messagefeld nach Unten scrollen --------------------------------------------------------------------- // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Zum Ausdehnen auf height 100% ---------------------------------------------------------------------- var window_height = function(){ var flag_innerHeight=false; if (window.innerHeight) { flag_innerHeight=true; if($('chatinhalt').style.height != eval(window.innerHeight-150)+"px"){ $('chatinhalt').style.height = eval(window.innerHeight-150)+"px"; $('onlinelist').style.height = eval(window.innerHeight-150)+"px"; //$('chatinhalt').innerHTML+="FF_Opera_Safari_win_opt
"; } } else if (document.documentElement && document.documentElement.clientWidth) { try{ if($('chatinhalt').style.height != eval(document.documentElement.clientHeight-150)+"px"){ $('chatinhalt').style.height = eval(document.documentElement.clientHeight-150)+"px"; $('onlinelist').style.height = eval(document.documentElement.clientHeight-150)+"px"; //$('chatinhalt').innerHTML+="IE7_6_win_opt
"; } else return 0; } catch(e){ return 0; } } else { return 0; } }; // (Stop) Zum Ausdehnen auf height 100% ----------------------------------------------------------------------- // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Hierhin wird das Erg. der AJAx Abfrage nach neuen Messages im Chat uebertragen und dargestellt ------ var receiveResultJSON = function(ajaxResultJSON) { // Das Schreibfeld nach Versand wieder freigeben und noch 1/2 Sek abwarten, wirkt besser. ;-) if ($('message').disabled) setTimeout(let_write, 500); // uebertragenes als Text klassifizieren var jsonInhalt = ajaxResultJSON.responseText; // Wenn UserIP in der Blacklist, wird der User rausgeworfen. if (jsonInhalt=='blacklist'){ location.href="admin/blacklist.php"; } // Wenn neue Datensaetze in der DB vorhanden sind, ist ein Inhalt vorhanden if (jsonInhalt!=''){ // Erzeugt JSON-Literal-Object aus dem Text var jsonObj = jsonInhalt.evalJSON(); // SoundFlag damit der Sound nur gespielt wird wenn dies eine fremde Message ist. var play_sound=false; // Alle Elemende des uebertragenen MessageArrays durchlaufen und ausgeben for (var i=0; i'+self.win_chatquiz_content+''); // Das befuellte Fenster ueberwachen Event.observe('chatquiz_list', 'click', function(event){ if(Event.element(event).id!="" && Event.element(event).id!='chatquiz_list'){ $('message').value +=Event.element(event).id; $('message').focus(); // Nach Auswahl des Smileys einfach Fenster schliessen self.win_chatquiz.close(); } }); } // Ist dass Fenster bereits sichtbar? if($(self.win_chatquiz.getId()).style.display=='none'){ self.win_chatquiz.show(); self.win_chatquiz.toFront(); } else self.win_chatquiz.close(); // Ende /startquiz } } else { // Jede neue Message wird in ein neu erzeugtes DIV verpackt. // Dies ist wichtig da sonst das Grow-Effect sich mit dem innerHTML ueberschneiden und dadurch der // Effekt nicht vollstaendig abgearbeitet wird. Follge: Messages nicht Sichtbar oder nur zur Haelfte. var newDIV = new Element('div', { id : "a"+id }); $('chatinhalt').appendChild(newDIV); // Das oben angelegte DIV mit Inhalt auf dem JSON-Object befuellen if (privat=='0') { // time abgeschalten $("a"+id).innerHTML = "
("+time+") "+user+": "+message+"
"; // Neue Funktion zum prüfen ob der eigene Nickname im allgemeinen Text message // Wenn ja, dann Schrift vergrößern // String für Eintritt zum Filtern // var msgvari = '/' + self.username + '+/i'; var mynameinmsg = message; var mynameErgebnis1 = mynameinmsg.search(eval("/" + " " +self.username+ " " +"/gi")); var mynameErgebnis2 = mynameinmsg.search(eval("/"+self.username+ " " +"/gi")); var mynameErgebnis3 = mynameinmsg.search(eval("/"+self.username+ ":" +"/gi")); if(mynameErgebnis1 != -1 || mynameErgebnis2 != -1 || mynameErgebnis3 != -1) { var mybigtextstart = ""; var mybigtextende = ""; } else { var mybigtextstart = ""; var mybigtextende = ""; } $("a"+id).innerHTML = "
"+user+": "+mybigtextstart+message+mybigtextende+"
"; // $("a"+id).innerHTML = "
"+user+": "+message+"
"; } else { if (user_id==self.user_id) // time abgeschalten $("a"+id).innerHTML = "
("+time+") "+user+" ("+lang_receiveResultJSON_1+" "+self.privat_an+"): "+message+"
"; $("a"+id).innerHTML = "
"+user+" ("+lang_receiveResultJSON_1+" "+self.privat_an+"): "+message+"
"; else // time abgeschalten $("a"+id).innerHTML = "
("+time+") "+user+" ("+lang_receiveResultJSON_2+"): "+message+"
"; $("a"+id).innerHTML = "
"+user+" ("+lang_receiveResultJSON_2+"): "+message+"
"; } // Zuerst das neue DIV verstecken um es spaeter mit Effekt zu visualisieren Element.hide('a'+id); // Hier wird festgestellt ob die angekommenen Messages alle von dem Benutzer sind. Damit der Sound nur abgespielt wird wenn // ein anderer eine Message gesenden hat. if (user_id!=self.user_id) { // play_sound=true; if (self.sound_status=="all") play_sound=true; if (self.sound_status=="privat" && privat!='0') play_sound=true; // Sound bei Nachrichten vom System ausgeben // String für Eintritt zum Filtern var sysAussage = message; var sysErgebnis = sysAussage.search(/ kommt hinein.+/); // if (sysErgebnis != -1) alert("gefunden"); if(self.sound_status=="all" || self.sound_status=="privat" && user_id=="1" && sysErgebnis != -1) play_soundentry=true; } } // Ende mein Test } } // sound --------------------------- //Sound.enable(); if(play_sound) Sound.play('sound/sound.mid',{replace:false}); // Sound bei Eintritt if(play_soundentry) { Sound.play('sound/comein.wav',{replace:false}); play_soundentry=false; } // Alle erzeugten neuen Datensaetze der Rheie nach visualisieren // Effect.Grow // Effect.SlideDown for (var i=0; i self.interval_for_inactivity - 30000) { self.sendSysMessages ( $("room").value, ""+self.username+" "+lang_AjaxReadRequest_1, self.user_id); self.inactivity_message_flag=true; }; // Pruefung wie lange der User schweigt und rauswurf if(time_now - self.time_last_send > self.interval_for_inactivity) location.href="./logout.php?reason=timeout&r="+$("room").value; // Dies verhindert dass nach einem DatenversendeRequest die Schleife sofort einen Datenholrequest // veranlasst. Spart etwas an Traffic und an Serverlast if ((time_now - self.time_last_req) > eval(self.reload_interval/2)){ self.time_last_req = time_now; var myAjaxObj= new Ajax.Request( "reloader.php", { onSuccess: receiveResultJSON, postBody: "room="+$("room").value+"&privat="+encodeURIComponent($("privat").value) } ); } }; // (Stop) Anfrage an den Reloader wird im Interval this.reload_interval aufgerufen ---------------------------- // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Anfrage an den Reloader mit Datenuebergabe vom User, also beim Sender der Massage in den Chat ------- this.send = function() { var AktuellesDatum=new Date(); this.time_last_req = this.time_last_send = Date.parse(AktuellesDatum); // Damit in Falle einer zu langen Inaktivitaet der User informiert wird. // Ohme einen Flag bekommt er staendige Mlendungen siehe Zeile 373 this.inactivity_message_flag=false; var myAjaxObj= new Ajax.Request( "reloader.php", { onSuccess: receiveResultJSON, postBody: $("message_form").serialize() } ); // Nach Versand Feld deaktivieren $('message').value = lang_send_1; $('message').blur(); $('message').disabled = true; return false; }; // (Stop) Anfrage an den Reloader mit Datenuebergabe vom User, also beim Sender der Massage in den Chat -------- // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Anfrage an den Reloader mit Datenuebergabe vom System ----------------------------------------------- this.sendSysMessages = function(room, inhalt, privat) { if(!privat) privat = 0; var myAjaxObj= new Ajax.Request( "reloader.php", { onSuccess: receiveResultJSON, postBody: "room="+room+"&sysmess=1&privat="+privat+"&message="+encodeURIComponent(inhalt) } ); }; // (Stop) Anfrage an den Reloader mit Datenuebergabe vom System ------------------------------------------------ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) UseronlineUpdater - uebertragung der Chatrooms und Onlineuser im Interval --------------------------- this.userOnline = function() { new Ajax.PeriodicalUpdater( "", "reloaderUserOnline.php", { onSuccess: updateUserOnlineAnzeige, postBody: "reloadsequenz="+this.reload_interval, frequency: eval(this.reload_interval*0.004) } ); return false; }; // (Stop) UseronlineUpdater - uebertragung der Chatrooms und Onlineuser im Interval ---------------------------- // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // (Start) Historywindow -------------------------------------------------------------------------------------- this.historyWindow = function(seite){ // Wenn das Fenster noch nicht existiert, muss es erzeugt und befuellt werden if (typeof self.win_history!="object"){ // Fensterinstanz var hoehe = $('chatinhalt').getHeight(); var breite = $('chatinhalt').getWidth(); self.win_history = new Window({className: self.win_style,width:eval(breite-10), title: lang_historyWindow_1, height:eval(hoehe-10), top:20, left:20, resizable: true, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: true, destroyOnClose: false}); self.win_history.setHTMLContent('
Loading...
'); } self.win_history.show(); self.win_history.toFront(); //RaumID auslesen falls bereits vorhanden var raumID=''; try{ raumID = $("raum_in_history").value; } catch(e) {/*nix*/} new Ajax.Request("history.php", { onSuccess:function(result){ $("history_content").innerHTML=result.responseText; Event.observe('history_seiten', 'click', function(event){ if (Event.element(event).id.slice(0, 12)=="historysite_"){ Event.stop(event); self.historyWindow(Event.element(event).id.slice(12, Event.element(event).id.length)); } if (Event.element(event).id=="export_excel"){ window.open('history_export_excel.php?roomid='+raumID); } if (Event.element(event).id=="export_csv"){ window.open('history_export_csv.php?roomid='+raumID); } if (Event.element(event).id=="export_xml"){ window.open('history_export_xml.php?roomid='+raumID); } } ); Event.observe('raum_in_history', 'change', function(event){ Event.stop(event); self.historyWindow(1); } ); }, postBody: "site="+seite+"&roomid="+raumID }); } // (Stop) Historywindow -------------------------------------------------------------------------------------- // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //##################################################################################### // UserOnline Anzeige var updateUserOnlineAnzeige = function(ajaxResultJSON) { var aktuelle_room_id; // Hier wird der Array des Updaters ausgewertet var jsonObj = self.jsonObjUserGlobal = ajaxResultJSON.responseText.evalJSON(); if(jsonObj==0){ setTimeout( updateUserOnlineAnzeigeAfterRoomChange ,1000); } else{ var inner_html =""+lang_updateUserOnlineAnzeige_1+"
"; // UserOnlineAnzeige entfernt von mir // inner_html +=lang_updateUserOnlineAnzeige_2+" "+jsonObj.userOnline.length+"

"; // von mir - Feld leeren document.frmuseronlinetest.useronlinetest.value = ""; // aktuelle Rechte aus der DB Erhalten und als Globaler Wert festlegen for (var i=0; i"+jsonObj.userOnline[i].room+""; else{ if (allowed==2) inner_html+="
"+jsonObj.userOnline[i].room+"
"; else inner_html+="
"+jsonObj.userOnline[i].room+"
"; } } // Wenn admin var admin_user = (self.userPrivilegienGlobal=="admin" || self.userPrivilegienGlobal=="mod") ? " " : ""; if ((self.userPrivilegienGlobal=="admin" && self.user_id==jsonObj.userOnline[i].user_id)||(self.userPrivilegienGlobal=="mod" && self.user_id==jsonObj.userOnline[i].user_id)) admin_user = " "; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ var usr_priv=""; if (jsonObj.userOnline[i].user_priv=="gast") usr_priv="(Gast)"; if (jsonObj.userOnline[i].user_priv=="admin") usr_priv="(Profil) A"; if (jsonObj.userOnline[i].user_priv=="mod") usr_priv="(Profil) M"; if (jsonObj.userOnline[i].user_priv=="user") usr_priv="(Profil)"; // ----------------- if (self.user_id==jsonObj.userOnline[i].user_id){ if (jsonObj.userOnline[i].user_sex=="m") var gender_icon="user_comment_m_self.png"; if (jsonObj.userOnline[i].user_sex=="f") var gender_icon="user_comment_w_self.png"; if (jsonObj.userOnline[i].user_sex=="n") var gender_icon="user_comment_n_self.png"; // Wenn Admin, dann nicht anzeigen (öffentlich) if (jsonObj.userOnline[i].user_priv!="admin") { inner_html+="\""+lang_updateUserOnlineAnzeige_3+"\" \""+lang_updateUserOnlineAnzeige_4+"\" "+admin_user+jsonObj.userOnline[i].user+" "+usr_priv+"
"; } } else{ if (jsonObj.userOnline[i].user_sex=="m") var gender_icon="user_comment_m.png"; if (jsonObj.userOnline[i].user_sex=="f") var gender_icon="user_comment_w.png"; if (jsonObj.userOnline[i].user_sex=="n") var gender_icon="user_comment_n.png"; // Wenn Admin, dann nicht anzeigen (anzeige für einen selbst) if (jsonObj.userOnline[i].user_priv!="admin") { inner_html+="\""+lang_updateUserOnlineAnzeige_5+"\" \""+lang_updateUserOnlineAnzeige_6+"\" "+admin_user+jsonObj.userOnline[i].user+" "+usr_priv+"
"; } // von mir document.frmuseronlinetest.useronlinetest.value = document.frmuseronlinetest.useronlinetest.value + "," + jsonObj.userOnline[i].user; } if (self.user_id==jsonObj.userOnline[i].user_id) var aktuell_room="room_"+aktuelle_room_id; } try{ for (var i=0; i"+jsonObj.all_empty_rooms[i].room+""; else { if (jsonObj.all_empty_rooms[i].room_allowed==2) inner_html+="
"+jsonObj.all_empty_rooms[i].room+"
"; else inner_html+="
"+jsonObj.all_empty_rooms[i].room+"
"; } } catch(e){/*nix*/} $("onlinelist").innerHTML = inner_html; $(aktuell_room).style.fontWeight="bold"; } } var changeUserEvent = function(ereignis){ //############################################################################################################## if (ereignis.slice(0, 7)=="privat_") { $("privat").value = ereignis.slice(7, ereignis.length); // Hier ird anhand der User_ID der entsprechende Username aus dem JSON Resultarray herausgefischt for (var i=0; i < self.jsonObjUserGlobal.userOnline.length; i++) if (self.jsonObjUserGlobal.userOnline[i].user_id==ereignis.slice(7, ereignis.length)) self.privat_an = self.jsonObjUserGlobal.userOnline[i].user; $("privat_anzeige").innerHTML=lang_changeUserEvent_privat_1+" "+self.privat_an+": "+lang_changeUserEvent_privat_2+""; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ new Effect.Highlight("message",{startcolor:"#ff6666"}); $("message").focus(); //alert(self.jsonObjUserGlobal.userOnline[0].room); } //############################################################################################################## if (ereignis.slice(0, 5)=="room_"){ $('chatinhalt').innerHTML=''; $("room").value=ereignis.slice(5, ereignis.length); // Hier ird anhand der Room_ID der entsprechende Roomname aus dem JSON Resultarray herausgefischt for (var i=0; i < self.jsonObjUserGlobal.userOnline.length; i++) if (self.jsonObjUserGlobal.userOnline[i].room_id==ereignis.slice(5, ereignis.length)){ var roomName = self.jsonObjUserGlobal.userOnline[i].room; } // try weil wenn es keine freien Raeume gibt, entsteht error try{ for (var i=0; i < self.jsonObjUserGlobal.all_empty_rooms.length; i++) if (self.jsonObjUserGlobal.all_empty_rooms[i].room_id==ereignis.slice(5, ereignis.length)){ var roomName = self.jsonObjUserGlobal.all_empty_rooms[i].room; } } catch(e){ /* nix */ } self.sendSysMessages ( $("room").value, ""+self.username+" "+lang_changeUserEvent_room_1+" " + roomName ); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ setTimeout( updateUserOnlineAnzeigeAfterRoomChange ,700); } //############################################################################################################## // User Blockieren. ANFANG if (ereignis.slice(0, 10)=="infoblock_"){ // Hier ird anhand der User_ID der entsprechende Username aus dem JSON Resultarray herausgefischt for (var i=0; i < self.jsonObjUserGlobal.userOnline.length; i++) if (self.jsonObjUserGlobal.userOnline[i].user_id==ereignis.slice(10, ereignis.length)){ var user_name = self.jsonObjUserGlobal.userOnline[i].user; } var id = ereignis.slice(10, ereignis.length); if (typeof self.win_block[id]!="object"){ self.win_block[id] = new Window({className: self.win_style, width:240, height:80, top:eval(self.mouse_top-10), left:eval(self.mouse_left-280), resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: false, opacity: 1}); self.win_block[id].setHTMLContent('
'+lang_changeUserEvent_infoblock_1+' '+user_name+'
'+lang_changeUserEvent_infoblock_2+'
'+lang_changeUserEvent_infoblock_3+'
'); } self.win_block[id].show(); // Ist leider noetig im falle einer Aktualisierung der Seite (F5). Sonst ist es nicht eindeutig, was zufor bereits ausgewaehlt wurde. new Ajax.Request( "blockUser.php", { onSuccess: function(result) { if (result.responseText == "all") $("blokiere_user_all_"+ereignis.slice(10, ereignis.length)).checked=true; else $("blokiere_user_all_"+ereignis.slice(10, ereignis.length)).checked=false; if (result.responseText == "priv") $("blokiere_user_priv_"+ereignis.slice(10, ereignis.length)).checked=true; else $("blokiere_user_priv_"+ereignis.slice(10, ereignis.length)).checked=false; }, postBody: "show="+ereignis.slice(10, ereignis.length) } ); $("blokiere_user_all_"+ereignis.slice(10, ereignis.length)).onclick = function(){ $("blokiere_user_priv_"+ereignis.slice(10, ereignis.length)).checked=false; new Ajax.Request( "blockUser.php", { onSuccess: function(){ self.win_block[id].close(); updateUserOnlineAnzeigeAfterRoomChange(); }, postBody: "block_all="+ereignis.slice(10, ereignis.length) } ); } $("blokiere_user_priv_"+ereignis.slice(10, ereignis.length)).onclick = function(){ $("blokiere_user_all_"+ereignis.slice(10, ereignis.length)).checked=false; new Ajax.Request( "blockUser.php", { onSuccess: function(){ self.win_block[id].close(); updateUserOnlineAnzeigeAfterRoomChange(); }, postBody: "block_priv="+ereignis.slice(10, ereignis.length) } ); } } // User Blokieren. ENDE //############################################################################################################## // Wenn der User zu anministrieren ist. if (ereignis.slice(0, 7)=="adminu_"){ // Hier ird anhand der User_ID der entsprechende Username aus dem JSON Resultarray herausgefischt for (var i=0; i < self.jsonObjUserGlobal.userOnline.length; i++) if (self.jsonObjUserGlobal.userOnline[i].user_id==ereignis.slice(7, ereignis.length)){ var user_ip = self.jsonObjUserGlobal.userOnline[i].user_ip; var user_name = self.jsonObjUserGlobal.userOnline[i].user; var user_priv = self.jsonObjUserGlobal.userOnline[i].user_priv; } var id = ereignis.slice(7, ereignis.length); if (typeof self.win_admin_user[id]!="object"){ self.win_admin_user[id] = new Window({className: self.win_style, width:350, height:180, top:eval(self.mouse_top-10), left:eval(self.mouse_left-390), resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: false}); } if (user_priv!='admin' && user_priv!='mod') self.win_admin_user[id].setHTMLContent(''+user_name+'
'+user_ip+'

'+lang_changeUserEvent_adminu_1+'

'+lang_changeUserEvent_adminu_2+'
'); else self.win_admin_user[id].setHTMLContent(''+user_name+' '+lang_changeUserEvent_adminu_3+' ' + user_priv + ' '+lang_changeUserEvent_adminu_4); self.win_admin_user[id].show(); try{ $("sperre_user_"+id).onclick = function(){ new Ajax.Request( "admin/add2Blacklist.php", { onSuccess: function(){ self.win_admin_user[id].close() }, postBody: "user_id="+id } ); } } catch(e){/* nix */} } //############################################################################################################## if (ereignis.slice(0, 5)=="user_" || ereignis.slice(0, 5)=="usch_"){ for (var i=0; i < self.jsonObjUserGlobal.userOnline.length; i++) if (self.jsonObjUserGlobal.userOnline[i].user_id==ereignis.slice(5, ereignis.length)) var user_name = self.jsonObjUserGlobal.userOnline[i].user; $("message").value += user_name.unescapeHTML(); $("message").focus(); } //############################################################################################################## if (ereignis.slice(0, 15)=="notallowedroom_" || ereignis.slice(0, 18)=="notallowedroomimg_") { var win_allowed = new Window({className: self.win_style, width:240, height:80, top:eval(self.mouse_top-10), left:eval(self.mouse_left-280), resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: true, opacity: 1}); win_allowed.setHTMLContent(lang_changeUserEvent_notallowedroom_1+'

'+lang_changeUserEvent_notallowedroom_2+'
'); win_allowed.show(); try{ $("close_room_warning").onclick = function(){ win_allowed.close(); } }catch(e){/* nix */} } //############################################################################################################## if (ereignis.slice(0, 7)=="pwroom_" || ereignis.slice(0, 10)=="pwroomimg_") { var room_id_now = (ereignis.slice(0, 7)=="pwroom_") ? ereignis.slice(7, ereignis.length) : ereignis.slice(10, ereignis.length); // Hier ird anhand der Room_ID der entsprechende Roomname aus dem JSON Resultarray herausgefischt for (var i=0; i < self.jsonObjUserGlobal.userOnline.length; i++) if (self.jsonObjUserGlobal.userOnline[i].room_id==room_id_now) var roomName = self.jsonObjUserGlobal.userOnline[i].room; // try weil wenn es keine freien Raeume gibt, entsteht error try{ for (var i=0; i < self.jsonObjUserGlobal.all_empty_rooms.length; i++) if (self.jsonObjUserGlobal.all_empty_rooms[i].room_id==room_id_now) var roomName = self.jsonObjUserGlobal.all_empty_rooms[i].room; } catch(e){ /* nix */ } var win_laypw = new Window({className: self.win_style, title: roomName, width:240, height:100, top:eval(self.mouse_top-10), left:eval(self.mouse_left-280), resizable: false, showEffect:Effect.Appear, hideEffect: Effect.Fade, showEffectOptions: {duration:0.5, afterFinish:function(){$('layerpw').focus();}}, hideEffectOptions: {duration:0.5}, draggable: true, minimizable: false, maximizable: false, destroyOnClose: true, opacity: 1}); win_laypw.setHTMLContent('
'+lang_changeUserEvent_pwroom_1+'

'+'
'+lang_changeUserEvent_notallowedroom_2+'
'); win_laypw.show(); $('pwroom_error').innerHTML = ""; try{ $("send_room_pw").onclick = function(){ check_room_pw(win_laypw, room_id_now, roomName); } $("layerpw_form").onsubmit = function(){ check_room_pw(win_laypw, room_id_now, roomName); return false; } }catch(e){/* nix */} } //############################################################################################################## } var check_room_pw = function(win_laypw,room_id_now, roomName){ new Ajax.Request( "check_room_pw.php", { onSuccess: function(result){ if (result.responseText==1){ win_laypw.close(); $('chatinhalt').innerHTML=''; $("room").value=room_id_now; self.sendSysMessages ( $("room").value, ""+self.username+" "+lang_changeUserEvent_room_1+" " + roomName ); setTimeout(updateUserOnlineAnzeigeAfterRoomChange, 400); } else{$('pwroom_error').innerHTML = ""+lang_changeUserEvent_pwroom_2+"";} }, postBody: "layerpw="+$('layerpw').value+"&roomid="+room_id_now } ); } var updateUserOnlineAnzeigeAfterRoomChange = function(){ new Ajax.Request( "reloaderUserOnline.php", { onSuccess: updateUserOnlineAnzeige, postBody: "reloadsequenz="+self.reload_interval } ) } //############################################################################################################### // Little helpers var dec2hex = function(n){ n = parseInt(n); var c = 'ABCDEF'; var b = n / 16; var r = n % 16; b = b-(r/16); b = ((b>=0) && (b<=9)) ? b : c.charAt(b-10); return ((r>=0) && (r<=9)) ? b+''+r : b+''+c.charAt(r-10); } var hex2dec = function(n) { return parseInt( n, 16 ); } } //##################################################################################### //############## END ################################################################## //#####################################################################################