﻿//SLM CHAT SYSTEM
//(c) 2008 SingleLetsMingle.co.uk

var m_Mode = 0; 
var m_Id = 0;
var m_UserTimerInterval = 5000;
var m_MessageTimerInterval = 2000;
var m_FirstUserTimerInterval = 2000;
var m_TopicTimerInterval = 5000;
var m_LastMessageId = 0;
var m_MsgOpenChatBot = '<div class="chat_msg"><span class="chat_msg_chatbot">';
var m_MsgOpenAdmin = '<div class="chat_msg"><span class="chat_msg_user">';
var m_MsgOpenUser = '<div class="chat_msg"><span class="chat_msg_user">';
var m_MsgMid = '</span><span class="chat_msg_text">: ';
var m_MsgClose = '</span></div>';
var m_MingleBotName = 'MingleBot';
var m_AdminName = 'support@singleletsmingle';
var m_IsHost = false;
var m_MessageTimeout;
var m_UserTimeOut;
var m_MaxContent = 20000;
var m_MaxContentStripBytes = 5000;

var m_TxtMessage;
var chat_div;
var users_div;
var users_div_buffer;
var usercount_div;
var radioUrl;
var topicCache = '';

var doneFirstUserListPopulation = false;


function ToggleMusic() {
    var musicControlSpan = document.getElementById('ChatControl_MusicControlSpan');
    var radioFrame = document.getElementsByTagName('radioFrame');
    var musicDiv = document.getElementById('musicDiv');
    
    if (musicControlSpan.innerHTML == 'music on') {
        //turn music off
        radioUrl = radioFrame.src;       
        musicControlSpan.innerHTML = 'music off';
        musicDiv.innerHTML = '<b>music off</b>';
        //alert(radioFrame.src);
    }
    else {
        //turn music on
        musicDiv.innerHTML = '<iframe runat="server" id="radioframe" width="0" height="0" style="display: none;" src="' + radioUrl + '"></iframe>';        
        radioFrame.src = radioUrl;
        musicControlSpan.innerHTML = 'Connecting...';
        setTimeout("document.getElementById('ChatControl_MusicControlSpan').innerHTML = 'music on';", 5000);
    }
}

function startChat(id, mode, isHost) {
    m_Mode = mode;
    m_Id = id;

    
    chat_div = document.getElementById('div_chat');
    users_div = document.getElementById('div_users');
    users_div_buffer = document.getElementById('div_users_buffer');
    usercount_div = document.getElementById('usercount');    
       
    if (m_Mode == 1) {               
        ChatService.GetChatRoomMessages(m_Id, 0, GetMessagesOnComplete);
        setInterval('ChatService.GetChatRoomUsers(' + m_Id + ', GetChatRoomUsersOnComplete);', m_UserTimerInterval);
        setInterval('ChatService.GetChatRoomTopic(' + m_Id + ', GetChatRoomTopicOnComplete);', m_TopicTimerInterval);
    }
    else {                
	    setTimeout('ChatService.GetInstantMessengerSession(' + m_Id + ',' + m_IsHost + ', GetInstantMessengerSessionOnComplete);', m_FirstUserTimerInterval);																	   
	    ChatService.GetInstantMessages(m_Id, 0, GetMessagesOnComplete);
    }
    
    //Don't do this if not logged in user.    
    if (document.getElementById('txt_message')) {
        m_TxtMessage = document.getElementById('txt_message');
	    m_TxtMessage.focus();		
	}
}

function GetChatRoomTopicOnComplete(topic) {

    //if (topic != topicCache) {
        //topicCache = topic;
        //$('#topic').hide();    
        $('#topic').html('"' + topic + '"');
        //$('#topic').customFadeIn(500);
    //}
}

function GetMessagesOnComplete(obj) {  
    var thisId;
    var msg;
    var kickban = false;
   
    
    for(var i = 0; i < obj.length; i++) {   
        if (m_Mode == 1) {
            thisId = obj[i].ChatRoomMessageId;
        }
        else {
            thisId = obj[i].InstantMessageId;
        }

        if (m_LastMessageId != thisId) {  //only proceed if we haven't already processed this message (and it's the last one we had) //todo - and it wasn't MY last message...(by text?)                           
        
            m_LastMessageId = thisId;
            
            //Kick or ban?
            var test = obj[i].MessageHtml.substr(0, 11);
            switch (test) {
                case '[###KB1###]':                    
                    alert('You have been kicked from the live chat.\n\nPlease take a moment to consider your actions.  You may re-join in 60 seconds.');                    
                    kickban = true;
                    break;
                case '[###KB2###]':
                    alert('You have been banned from the live chat for 15 minutes.\n\nPlease take this time to consider your actions.');
                    kickban = true;
                    break;
                case '[###KB3###]':
                    alert('You have been banned from the live chat for 24 hours.\n\nPlease take this time to consider your actions.\n\nThis decision cannot be overturned by a chatroom administrator, so please do not ask them.');
                    kickban = true;
                    break;                    
                case '[###KB4###]':
                    alert('You have been banned from the live chat PERMANENTLY.\n\nThis decision cannot be overturned by a chatroom administrator, so please do not ask them.\n\nIf you think that this was an unfair decision, please contact us via the contact page.');
                    kickban = true;
                    break;
            }
            
            if (kickban) {
                $('#chatbody').hide();
                window.location = 'http://en.wikipedia.org/wiki/Chat_room';
                kickban = true;
                return(false);
            }
          
            if (!kickban) {  
                if (obj[i].FromUserScreenName == m_MingleBotName) {           
                
                    msg = $('#chat_msg_bot').clone();
                    $(msg).attr('id', 'msg_' + obj[i].ChatRoomMessageId);
                    $(msg).find('.chat_msg_chatbot').html(obj[i].FromUserScreenName);
                }
                else {                                         
                    msg = $('#chat_msg_user').clone();
                    $(msg).attr('id', 'msg_' + obj[i].ChatRoomMessageId);
                    $(msg).find('.chat_msg_user').html(obj[i].FromUserScreenName);
                }   
                $(msg).find('.chat_msg_text').html(obj[i].MessageHtml);
                //$(msg).hide();
                $('#div_chat').append($(msg));
                //$(msg).customFadeIn(200);
            }
                        
        }     
    }
    
    //Remove some content?   
    if ($('#div_chat').children().size() > 50) {
        //$('#div_chat').children()[0].removeNode(true);
        $('#div_chat').children()[0].parentNode.removeChild($('#div_chat').children()[0]);


    }
    
    chat_div.scrollTop = chat_div.scrollHeight;
        
    if (!kickban) {	    

        clearTimeout(m_MessageTimeout);
	    if (m_Mode == 1) {        
            m_MessageTimeout = setTimeout('ChatService.GetChatRoomMessages(' + m_Id + ', ' + m_LastMessageId + ', GetMessagesOnComplete);', m_MessageTimerInterval);
        }
        else {
            m_MessageTimeout = setTimeout('ChatService.GetInstantMessages(' + m_Id + ', ' + m_LastMessageId + ', GetMessagesOnComplete);', m_MessageTimerInterval); 
        }	
    }
    
       
}			

function SaveMessageOnComplete() {                
    if (0 == 0) {
    	clearTimeout(m_MessageTimeout);

	    //Execute update now and re-enable timer going forward.
	    if (m_Mode == 1) {
    	    ChatService.GetChatRoomMessages(m_Id, m_LastMessageId, GetMessagesOnComplete);
            }
        else {
            ChatService.GetInstantMessages(m_Id, m_LastMessageId, GetMessagesOnComplete);        
        }	
    }
}

function sendMessage() {	
	if(m_TxtMessage.value == '') {
		alert("You have not entered a message");
		return;
	}
	var param = m_TxtMessage.value;
	if (param.length > 1024) {
	    param = param.substring(0, 1023);
	    alert('Your message was too long and has been truncated.  1,024 Chars max.');
	}
	if (m_Mode == 1) {
	    ChatService.SaveChatRoomMessage(m_Id, param, SaveMessageOnComplete);				
	}
	else {
	    ChatService.SaveInstantMessage(m_Id, param, SaveMessageOnComplete);
	}
	m_TxtMessage.value = '';											
}

function SendNudge() {
    var param = m_TxtMessage.value;
    if (m_Mode == 1) {
	    ChatService.SaveChatRoomMessage(m_Id, 'Nudge!', SaveMessageOnComplete);				
        }
	else {
	    ChatService.SaveInstantMessage(m_Id, 'Nudge!', SaveMessageOnComplete);	
	}
}

function blockSubmit() {
	sendMessage();
	return false;
}

function pausecomp(millis){ 
 var date = new Date(); 
 var curDate = null; 
 do { curDate = new Date(); } 
 while(curDate-date < millis); 
} 

function endChat(isHost) {

    if (m_Mode == 1) {       
        if (m_Id !== null) {           //if it was null, user was kicked/banned and redirected.
            ChatService.DeleteChatRoomUser(m_Id, 0, 0);
            pausecomp(1000);
        }
    }
    else {
        if (isHost == true) {
            ChatService.EndInstantMessengerSession(m_Id, 6);}
        else {
            ChatService.EndInstantMessengerSession(m_Id, 7);}
    }
}

function submitonEnter(evt){
    var charCode = (evt.which) ? evt.which : event.keyCode
    if(charCode == "13"){
        sendMessage();
        return false;    
    }
}

function addEmoticon(id) {
    var messageText = document.getElementById('txt_message');
    var emoticonsDiv = document.getElementById('EmoticonsDiv');
    messageText.value += id.replace('F','"');
    AjaxControlToolkit.PopupControlBehavior.__VisiblePopup.hidePopup();
    messageText.focus();
    return false;
}


function limitText(limitField, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value = limitField.value.substring(0, limitNum);
    } 
}


//ChatRoom Specific
function GetChatRoomUsersOnComplete(obj) {

    //if (!doneFirstUserListPopulation) {
        $('#div_users').empty();
        doneFirstUserListPopulation = true;
    //}
    
    for(var i = 0; i < obj.length; i++) {
        //if ($('#chatuserlistitem_' + obj[i].UserId).length > 0 ) {
            //Item already exists.
        //}
        //else {
            //New chatroom user - add to list.
            var listItem = $('#chatuserlistitem').clone();
            $(listItem).attr('id', 'chatuserlistitem_' + obj[i].UserId);
            $(listItem).find('.chatuserlistitem_image_link').attr('href', '/' + obj[i].ScreenName.replace(" ","-"));
            $(listItem).find('.chatuserlistitem_image').attr('id', obj[i].UserId).attr('src', obj[i].FingerNailFileName);
            if (obj[i].IsChatAdmin) {
                $(listItem).find('.chatuserlistitem_screenname_link').attr('href', '/' + obj[i].ScreenName.replace(" ","-")).text('@' + obj[i].ScreenName);            
            }
            else {
                $(listItem).find('.chatuserlistitem_screenname_link').attr('href', '/' + obj[i].ScreenName.replace(" ","-")).text(obj[i].ScreenName);            
            }
            
            
            if (m_Mode == 1 && admin == true) {
                $(listItem).find('.chatuserlistitem_image').contextMenu('chatusermenu', {
                    bindings: {
                        'item_kick': function(t) {
                            if (confirm('Kick ' + $(t).parent().attr('href').replace('/','') + '?')) {
                                ChatService.DeleteChatRoomUser(m_Id, t.id, 1);
                            }
                        },
                        'item_ban15': function(t) {
                            if (confirm('Ban ' + $(t).parent().attr('href').replace('/','') + ' for 15 minutes?')) {
                                ChatService.DeleteChatRoomUser(m_Id, t.id, 2);
                            }
                        },
                        'item_ban_today': function(t) {
                            if (confirm('Ban ' + $(t).parent().attr('href').replace('/','') + ' for 24 hours?')) {
                                ChatService.DeleteChatRoomUser(m_Id, t.id, 3);
                            }
                        },
                        'item_ban_perm': function(t) {
                            if (confirm('Ban ' + $(t).parent().attr('href').replace('/','') + ' permanently?')) {
                                if (confirm('Are you sure you want to ban ' + $(t).parent().attr('href').replace('/','') + ' permanently?\n\nThis cannot be undone by a chatroom admin.')) {    
                                    ChatService.DeleteChatRoomUser(m_Id, t.id, 4);
                                }
                            }
                        }
                    }
                });
            }
            
            //$(listItem).hide();
            $('#div_users').append($(listItem));
            //$(listItem).customFadeIn(500);
        //}
    }
    usercount_div.innerHTML = i;
    
}



//IM Specific
function GetInstantMessengerSessionOnComplete(obj) {
    var temp = '';
    users_div_buffer.style.display = 'none';   
    
    //fromuser
    if (obj.FromUserSexId < 4) {
        temp += '<table><tbody><tr><td style="text-align: center; width: 52px; background-color: #B4A894;"><img height=39 src="' + obj.FromUserFingerNailFileName + '"></td><td>&nbsp;<a class="smclink" target="slmprofile" href="/' + obj.FromUserScreenName.replace(" ","-") + '">' + obj.FromUserScreenName + '</a></td></tr></tbody><table><br />';}
    else {
        temp += '<table><tbody><tr><td style="text-align: center; width: 52px; background-color: #B4A894;"><img  height=39 src="' + obj.FromUserFingerNailFileName + '"></td><td>&nbsp;<a class="smclink" target="slmprofile" href="/' + obj.FromUserScreenName.replace(" ","-") + '">' + obj.FromUserScreenName + '</a></td></tr></tbody><table><br />';                        
    }	
    
    //touser
    if (obj.ToUserSexId < 4) {
        temp += '<table><tbody><tr><td style="text-align: center; width: 52px; background-color: #B4A894;"><img height=39 src="' + obj.ToUserFingerNailFileName + '"></td><td>&nbsp;<a class="smclink" target="slmprofile" href="/' + obj.ToUserScreenName.replace(" ","-") + '">' + obj.ToUserScreenName + '</a></td></tr></tbody><table><br />';}
    else {
        temp += '<table><tbody><tr><td style="text-align: center; width: 52px; background-color: #B4A894;"><img  height=39 src="' + obj.ToUserFingerNailFileName + '"></td><td>&nbsp;<a class="smclink" target="slmprofile" href="/' + obj.ToUserScreenName.replace(" ","-") + '">' + obj.ToUserScreenName + '</a></td></tr></tbody><table><br />';
    }	
    		
    users_div_buffer.innerHTML = temp;			    
    if (users_div_buffer.innerHTML !== users_div.innerHTML) {
        users_div.innerHTML = users_div_buffer.innerHTML; 	        
        usercount_div.innerHTML = 2;
    }
    setTimeout('ChatService.GetInstantMessengerSession(' + m_Id + ',' + m_IsHost + ', GetInstantMessengerSessionOnComplete);', m_UserTimerInterval);
}

//ClearType custom jQuery effects.
(function($) {
	$.fn.customShow = function(speed, callback) {
		$(this).show(speed, function() {
			if(jQuery.browser.msie)
				$(this).get(0).style.removeAttribute('filter');
			if(callback != undefined)
				callback();
		});
	};
	$.fn.customFadeIn = function(speed, callback) {
		$(this).fadeIn(speed, function() {
			if(jQuery.browser.msie)
				$(this).get(0).style.removeAttribute('filter');
			if(callback != undefined)
				callback();
		});
	};
	$.fn.customFadeOut = function(speed, callback) {
		$(this).fadeOut(speed, function() {
			if(jQuery.browser.msie)
				$(this).get(0).style.removeAttribute('filter');
			if(callback != undefined)
				callback();
		});
	};
})(jQuery);