document.write('\\\\\
\
\ \
\
\
\
\
\ \
\ Get your own free shoutbox\
\
\
\
\
\ \
\
\ \
\
\ \
\
\
forgotten password ?
\ \
\ \
\
\
\
\ \ \
\
\
\
\
\
\ \
\
\
\
\
\
\
\
\ \
\
\
Enter email
\
\
\
\
\
Register for new account
\
\
\
forgotten password ?
\
\
\
\
\
\ \
\
\
Enter email
\
\
\
\
\
\
\
\
\ \
\
\
\
\
\
\
\
\ \ \ \
\ \
\
'); var Chat = function(room, username, avatar) { var server = "https://www.shoutbox.com"; avatar = avatar || "https://www.shoutbox.com/avatars/" + Math.ceil(Math.random()*29) + ".svg"; username = username || ''; var that = this; console.log("init"); this.myUser = {"username":username, "room":room, "avatar":avatar, "password":"", id: new Date().getTime()}; String.prototype.replaceAll = function(target, replacement) { return this.split(target).join(replacement); }; this.ago = function(date) { var seconds = Math.floor((new Date() - date) / 1000); var interval = Math.floor(seconds / 31536000); if (interval > 0) { return interval + " y. ago"; } interval = Math.floor(seconds / 2592000); if (interval > 0) { return interval + " mon. ago"; } interval = Math.floor(seconds / 86400); if (interval > 0) { return interval + " d. ago"; } interval = Math.floor(seconds / 3600); if (interval > 0) { return interval + " h ago"; } interval = Math.floor(seconds / 60); if (interval > 0) { return interval + " min. ago"; } return "now"; //return Math.floor(seconds) + " s ago"; }; // traductions this.traductions = { welcome:"Welcome %s. ", userOnline:"%s user online", usersOnline:"%s users online", enterYourTextHere : "Enter your text here", serverMessage: "
%s
", enterAdminPassword:"Enter admin password", imageAvatar: "", youAreAdminNow:"You are admin now", mp3: "https://www.shoutbox.com/chat/dink.mp3", addUser : "
%s %s
", banText : "", receivedText:"
%s%s %s: %s
" }; // smileys this.smileys = { "(angry)":"", "(lol)":"", "(love)":"", "(sorry)":"", "(why)":"", ":D":"", ";(":"", ";)":"", ":)":"" }; this.parseSmileys = function(text) { for (var symbol in this.smileys) { var image = this.smileys[symbol]; text = text.replaceAll(symbol,image); } return text; }; this.stripHTML = function(html) { var div = document.createElement("div"); div.innerHTML = html; return div.textContent || div.innerText || ""; }; this.clearChat = function() { $("#shoutChat").html(""); }; this.refreshChat = function() { this.clearChat(); var that = this; $.post('https://www.shoutbox.com/chat/ajax.php',{a:'getLastMessages', id:that.myUser.room},function(data) { var messages = JSON.parse(data); //console.log(messages.length); for (var i=messages.length-1;i>=0;i--) { var message = messages[i]; that.receiveText(message.username , message.message, message.date,0,message.avatar,message.ip, message.id); } }); }; this.getLastMessages = function() { var that = this; $.post('https://www.shoutbox.com/chat/ajax.php',{a:'getLastMessages', id:that.myUser.room},function(data) { var messages = JSON.parse(data); //console.log(messages.length); for (var i=messages.length-1;i>=0;i--) { var message = messages[i]; that.receiveText(message.username , message.message, message.date, 0, message.avatar, message.ip, message.id); } if (that.myUser.username!=='') { that.welcome(); } }); }; function keyPressedFunction(e){ //console.log("keyPressed"); if (!e) { e = window.event; } var keyCode = e.keyCode || e.which; if (keyCode == '13'){ this.sendText(); } } this.sendText = function() { var texte = $('#shoutBoxInput').val(); texte = this.stripHTML(texte); if (texte==='') { return; } // enter username if (this.enteringAdminPassword) { this.enteringAdminPassword = false; this.shoutboxSocket.emit("checkPassword", texte); $("#shoutBoxInput").removeClass("adminShoutBoxInput"); $('#shoutBoxInput').val(''); $('#shoutBoxInput').get(0).type = 'text'; $('#shoutBoxInput').attr("placeholder", that.traductions.enterYourTextHere); return; } if (this.myUser.username==='') { this.myUser.username = texte; $('#shoutBoxInput').val(""); that.welcome(); that.shoutboxSocket.emit('changeUser', that.myUser); return; } $('#shoutBoxInput').val(""); this.shoutboxSocket.emit("send", this.myUser, texte); }; this.welcome = function() { $('#shoutBoxInput').attr("placeholder", that.traductions.enterYourTextHere); localStorage.setItem("username", this.myUser.username); this.serverMessage(sprintf(that.traductions.welcome, this.myUser.username)); $("#shoutBoxInput").removeClass("shoutInputRed"); localStorage.setItem('username', this.myUser.username); }; this.serverMessage = function(texte) { $("#shoutChat").append(sprintf(that.traductions.serverMessage, texte)); $("#shoutChat").animate({ scrollTop: $("#shoutChat")[0].scrollHeight}, 1000); }; this.receiveText = function(username, message, date, scrollTimer, avatar, ip, id) { message = that.parseSmileys(message); if (avatar!=="") { avatar = sprintf(that.traductions.imageAvatar, avatar); } if (date!=='') { date="("+date+")"; } var text = sprintf(that.traductions.receivedText, id, ip, avatar, date, username, message); //console.log(text); $("#shoutChat").animate({ scrollTop: $("#shoutChat")[0].scrollHeight}, scrollTimer); $(text).hide().appendTo("#shoutChat").fadeIn(2000); }; this.addUser = function(user) { if (user.username==='') { user.username='Guest'; } this.updateNumberUsersDisplay(); var avatar = user.avatar; if (avatar!=='') { var image = user.avatar || 'avatars/' + Math.ceil(Math.random()*29) + '.svg'; avatar = sprintf(that.traductions.imageAvatar, image); } var txt = sprintf(that.traductions.addUser, user.id, user.id, avatar, user.username); //console.log(user); //console.log("shoutBoxUserList"+txt); $("#shoutBoxUserList").append(txt); }; //******************************************* init ******************************************** document.getElementById('shoutBoxInput').addEventListener("keypress", keyPressedFunction.bind(this), false); this.getLastMessages(); this.users = []; this.shoutboxSocket = io.connect(server+":1400"); this.shoutboxSocket.on('connect', function() { var username = localStorage.getItem('username'); if(username) { that.myUser.username = username; } that.shoutboxSocket.emit('enterRoom', that.myUser); }); this.shoutboxSocket.on('roomEntered', function () { var username = localStorage.getItem('username'); if (username) { that.welcome(); } }); this.shoutboxSocket.on('del', function (id) { $('*[data-id='+id+']').remove(); }); this.shoutboxSocket.on('ban', function (ip) { $('*[data-ip='+ip+']').remove(); }); this.shoutboxSocket.on('receiveText', function (user, message, ip, id) { that.receiveText(user.username, message , "",200,user.avatar, ip, id); var snd = new Audio(that.traductions.mp3); snd.play(); }); this.setAdminMode = function(password) { this.myUser.password = password; that.serverMessage(that.traductions.youAreAdminNow); $("#shoutBoxAdminImage").toggle(); }; $( ".shoutBoxContainer").on( "click", ".shoutboxBanBtn", function() { var ip = ($(this).parent().data("ip")); that.shoutboxSocket.emit("ban", ip); }); $( ".shoutBoxContainer").on( "click", ".shoutboxDelBtn", function() { var id = ($(this).parent().data("id")); that.shoutboxSocket.emit("del", id); }); this.shoutboxSocket.on('userChanged', function (user) { var avatar = user.avatar; if (avatar!=='') { avatar = sprintf(that.traductions.imageAvatar, avatar); } var txt = sprintf(that.traductions.addUser, user.id, user.id, avatar, user.username); //console.log(txt); $("#shoutBoxUser"+user.id).html(txt); }); this.shoutboxSocket.on('setAdminMode', function (password) { that.setAdminMode(password); $(".shoutboxBanBtn").css("display","block"); $(".shoutboxDelBtn").css("display","block"); }); this.shoutboxSocket.on('error', function (errorMessage) { console.log(errorMessage); }); this.shoutboxSocket.on('addUser', function(user) { that.users.push(user); that.addUser(user); }); $(document).on('click', ".changeUsernameBtn", function() { localStorage.clear(); that.myUser.username = ''; $("#shoutBoxInput").addClass("shoutInputRed"); $('#shoutBoxInput').val(''); $('#shoutBoxInput').attr("placeholder", 'Enter new nickname'); }); this.updateNumberUsersDisplay = function() { var len = Object.keys(that.users).length; var text = sprintf(that.traductions.userOnline, len); if (that.users.length>1) { text = sprintf(that.traductions.usersOnline, len); } $("#shoutBoxHeaderText").text(text); }; this.shoutboxSocket.on('getUsers', function(usersInRoom) { // convert to array ! //console.log("usersInRoom="+usersInRoom+ "len=" + usersInRoom.length); that.users = usersInRoom; that.updateNumberUsersDisplay(); //that.sortUsers(); for (var id in usersInRoom) { that.addUser(usersInRoom[id]); } }); this.sortUsers = function() { that.users.sort(function(user1, user2) { return user1.avatar < user2.avatar; }); }; this.shoutboxSocket.on('removeUser', function(user) { var index = that.users.indexOf(user); that.users.splice(index, 1); that.updateNumberUsersDisplay(); $("#shoutBoxUser"+user.id).remove(); }); $(".shoutBoxContainer").on( "click", ".shoutBoxUserItem", function(e) { e.stopImmediatePropagation(); var userid = ($(e.currentTarget).data("id")); that.openPrivateChat(userid); }); this.openPrivateChat = function(userid) { //$("body").append("
zaza
"); }; this.displayError = function($_element, message) { $_element.html(message); setTimeout(function() { $_element.empty(); },3000); }; $("#forgottenBtn").click(function() { $("#forgottenPassword").slideToggle(200); }); $("#saveBtn").click(function() { var $_element = $(this).parent().parent().find(".error"); var userMustRegister = $("#userMustRegister").is(':checked'); var password = $("#changePassword1").val(); var password2 = $("#changePassword2").val(); if (password.length<3 || password!==password2) { that.displayError($_element , "Invalid Password"); return; } $(".error").empty(); $.ajax({ type: 'POST', url: 'https://www.shoutbox.com/chat/ajax.php', crossDomain: true, data: {a:'updateAdmin', userMustRegister:userMustRegister, password:password}, success: function (user) { if(user==="ko") { that.displayError($_element , "Invalid email/password"); return; } user = JSON.parse(user); that.myUser.password = user.password; that.myUser.userMustRegister = user.userMustRegister; $("#configPanel2").slideToggle(200); $("#configPanel").hide(); } }); }); $('#loginAdminBtn').click(function() { var $_element = $(this).parent().parent().find('.error'); var email = $('#emailAdmin').val(); var password = $('#passwordAdmin').val(); if (password.length<3) { that.displayError($_element , 'Invalid Password'); return; } var re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; if (!re.test(email)) { that.displayError($_element, 'Invalid email'); return; } $('.error').empty(); $.ajax({ type: 'POST', url: 'https://www.shoutbox.com/chat/ajax.php', crossDomain: true, data: {a:'loginAdmin', email:email, password:password}, success: function (user) { if(user==="ko") { that.displayError($_element , "Invalid email/password"); return; } user = JSON.parse(user); that.myUser.username = "admin"; that.myUser.password = user.password; that.myUser.userMustRegister = user.userMustRegister; that.myUser.isAdmin = true; that.myUser.avatar = 'https://www.shoutbox.com/avatars/admin.svg'; $("#configPanel2").slideToggle(200); that.serverMessage(that.traductions.youAreAdminNow); } }); }); $("#sendMyPasswordBtn").click(function() { var $_element = $(this).parent().parent().find(".error"); var re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; var email = $("#forgottenEmail").val(); if (!re.test(email)) { that.displayError($_element, "Invalid email"); return; } $.ajax({ type: 'POST', url: 'https://www.shoutbox.com/chat/ajax.php', crossDomain: true, data: {a:'forgottenPasswordAdmin', email:email}, success: function (res) { if(res==="ko") { that.displayError($_element , "No such email !"); return; } $("#forgottenPassword").hide(200); } }); }); $("#shoutBoxAdminImage").click(function(e) { e.stopImmediatePropagation(); $("#configPanel").slideToggle(200); $("#configPanel2").hide(); $("#forgottenPassword").hide(); }); $("#shoutBoxHeader").click(function() { $("#shoutBoxUserList").toggle("fast"); }); };