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
}
};
}