var Chat=function(){ function joinRoom(){ var room=document.getElementById( 'room-name' ).value; if(socket.room) leaveRoom(); socket.room=room; socket.emit( 'room.join', { room:socket.room } ); document.getElementById('user-current-room').innerHTML=socket.room; var join=document.getElementById('modal-join'); join.style.opacity=0; join.style.zIndex=0; document.getElementById('chat-primary').style.opacity=1; document.getElementById('playlist-area').style.opacity=1; document.querySelector('main').style.zIndex=5 } function leaveRoom(){ socket.emit( 'room.leave', { room:socket.room } ); document.getElementById('user-current-room').innerHTML='nowhere'; } function setHandle(e){ if (webkitNotifications.checkPermission() != 0) { webkitNotifications.requestPermission(); } socket.handle=document.getElementById( 'user-handle' ).value socket.emit( 'set.handle', { handle:socket.handle } ) document.getElementById('user-current-handle').innerHTML=socket.handle; var handle=document.getElementById('modal-handle'); handle.style.opacity=0; handle.style.zIndex=0; var join=document.getElementById('modal-join'); join.style.opacity=1; join.style.zIndex=5; } function fromRoom(data){ var box=document.getElementById( 'chat-primary-window' ), newItem=document.createElement('li'); newItem.innerHTML+='

'+ data.handle+':

'+
            data.msg+
        '

'; //box.insertBefore(newItem,box.getElementsByTagName('li')[0]); box.appendChild(newItem); box.scrollTop=box.scrollHeight; //should not scroll down if user is not at the bottom. } function toRoom(){ if(!socket.room) return; var input=document.getElementById( 'chat-primary-input' ); var data={ msg:input.value } input.value=''; socket.emit( 'room.chat', data ); } function fromUser(data){ //show private message } function toUser(){ //send private message } function userOnline(data){ var notification=webkitNotifications.createNotification( '', data.handle+' is Online', data.handle+' has just come online on the server' ); notification.show(); ( function(){ setTimeout( function() { notification.close(); }, 1000 ); } )(notification) } function reConnect(){ if(socket.handle) socket.emit( 'set.handle', { handle:socket.handle } ); if(socket.room) socket.emit( 'room.join', { room:socket.room } ); } return { room : { join : joinRoom, leave : leaveRoom, chat : toRoom }, user : { chat:toUser }, set : { handle:setHandle }, on : { room : { chat:fromRoom }, user : { chat : fromUser, online : userOnline }, connect : reConnect } }; }