
 

ChatSettings.prototype.EXPANDED_BOX_DIFFERENCE = 100;
ChatSettings.prototype.PREFIX = 'cookie';

ChatSettings.prototype.STATE = 1;
ChatSettings.prototype.TOURNAMENT = false;
ChatSettings.prototype.ALLOW_CHATTING = true;

ChatSettings.prototype.MAX_MESSAGE_LENGTH;

ChatSettings.prototype._cookieLifeTime = (36 * 60 * 60 * 24 * 31); 


function ChatSettings() {
this.STATE = parseInt(chatVars.chatState);
this.TOURNAMENT = chatVars.isTournament;
}


ChatSettings.prototype.getFontSize = function() {
return this.retrieveSetting(this.PREFIX + 'FontSize', 'medium');
};
ChatSettings.prototype.setFontSize = function (newValue) {
this.saveSetting(this.PREFIX + 'FontSize', newValue);
}


ChatSettings.prototype.getChatareaWidth = function() {
return this.retrieveSetting(this.PREFIX + 'ChatareaWidth', 'normal');
};
ChatSettings.prototype.setChatareaWidth = function (newValue) {
this.saveSetting(this.PREFIX + 'ChatareaWidth', newValue);
}


ChatSettings.prototype.getInfoText = function() {
return this.retrieveSetting(this.PREFIX + 'InfoText', 'friends');
};
ChatSettings.prototype.setInfoText = function (newValue) {
this.saveSetting(this.PREFIX + 'InfoText', newValue);
}
ChatSettings.prototype.wantsInfoText = function () {
return (this.getInfoText() === 'active');
}
ChatSettings.prototype.wantsInfoTextFriends = function () {
return (this.getInfoText() === 'friends');
}


ChatSettings.prototype.getInfoTextRank = function() {
return this.retrieveSetting(this.PREFIX + 'InfoTextRank', 'active');
};
ChatSettings.prototype.setInfoTextRank = function (newValue) {
this.saveSetting(this.PREFIX + 'InfoTextRank', newValue);
}
ChatSettings.prototype.wantsInfoTextRank = function () {
return (this.getInfoTextRank() === 'active');
}
ChatSettings.prototype.wantsInfoTextRankFriends = function () {
return (this.getInfoTextRank() === 'friends');
}


ChatSettings.prototype.getSmileyType = function() {
return this.retrieveSetting(this.PREFIX + 'SmileyType', 'animated');
};
ChatSettings.prototype.setSmileyType = function (newValue) {
this.saveSetting(this.PREFIX + 'SmileyType', newValue);
}


ChatSettings.prototype.getStyleSheet = function() {
return this.retrieveSetting(this.PREFIX + 'Theme', 'standard');
};
ChatSettings.prototype.setStyleSheet = function (newValue) {
this.saveSetting(this.PREFIX + 'Theme', newValue);
}


ChatSettings.prototype.getFontWeight = function() {
return this.retrieveSetting(this.PREFIX + 'FontWeight', 'normal');
};
ChatSettings.prototype.setFontWeight = function (newValue) {
this.saveSetting(this.PREFIX + 'FontWeight', newValue);
}


ChatSettings.prototype.getAvatarsVisible = function() {
return this.retrieveSetting(this.PREFIX + 'AvatarsVisible', '1');
};
ChatSettings.prototype.setAvatarsVisible = function (newValue) {
this.saveSetting(this.PREFIX + 'AvatarsVisible', newValue);
}


ChatSettings.prototype.getRankVisible = function() {
return this.retrieveSetting(this.PREFIX + 'RankVisible', '1');
};
ChatSettings.prototype.setRankVisible = function (newValue) {
this.saveSetting(this.PREFIX + 'RankVisible', newValue);
}


ChatSettings.prototype.getSoundSettings = function() {
return this.retrieveSetting(this.PREFIX + 'SoundSettings', '1');
};
ChatSettings.prototype.setSoundSettings = function (newValue) {
this.saveSetting(this.PREFIX + 'SoundSettings', newValue);
}


ChatSettings.prototype.getOldChatSettings = function() {
return this.retrieveSetting(this.PREFIX + 'OldChatSettings', '1');
};
ChatSettings.prototype.setOldChatSettings = function (newValue) {
this.saveSetting(this.PREFIX + 'OldChatSettings', newValue);
}


ChatSettings.prototype.resetSettings = function () {

this.setSmileyType('animated');
this.setInfoText('friends');
this.setFontSize('medium');
this.setChatareaWidth('normal');
this.setFontWeight('normal');

this.setAvatarsVisible('1');
this.setRankVisible('1');
this.setOldChatSettings('1');
this.setSoundSettings('1');
this.setStyleSheet('standard');
}



ChatSettings.prototype.saveSetting = function (key, value) {
var expdate = chatTools.getUnix() + this._cookieLifeTime;

chatTools.writeCookie(key, value, expdate, '/', null, false);
this[key] = value;
}
ChatSettings.prototype.retrieveSetting = function (key, defaultValue) {
if (chatVars.isSimpleVersion) {
return defaultValue;
}
if (this[key] === undefined) {
this[key] = chatTools.readCookie(key);
}
if (this[key] === null) {
this.saveSetting(key, defaultValue);
}
return this[key];
}




ChatSettings.prototype.isSingleplayerChat = function() {
return (this.STATE === 1);
};


ChatSettings.prototype.isMultiplayerChat = function() {
return (this.STATE === 2);
};


ChatSettings.prototype.isInstantMessenger = function() {
return (this.STATE === 3);
};


ChatSettings.prototype.isTournament = function() {
return (this.TOURNAMENT === true);
};

ChatSettings.prototype.chattingAllowed = function () {
return (this.ALLOW_CHATTING === true);
}

ChatSettings.prototype.playIMSounds = function () {
return (this.getSoundSettings() === '1');
}

ChatSettings.prototype.showRankInChat = function () {
return (this.getRankVisible() === '1');
}






function ChatTools() {}


ChatTools.prototype.getHashcode = function(str) {
var i = 0;
var hash = 0;
for (i = 0; i < str.length; i++) {
hash = (hash * 31 + str.charCodeAt(i)) & 0xffffffff;
}
return Math.abs(hash);
}


ChatTools.prototype.compareStrings = function (firstString, nextString) {


var first = '' + firstString;
var next = '' + nextString;


if (first.length > 0 && next.length > 0) {
first = jQuery.trim('' + first).toLowerCase();
next =  jQuery.trim('' + next).toLowerCase();
}

if (first.length > 0 && next.length > 0) {




if (first.charAt(0) < next.charAt(0) ) {return -1;}
if (first.charAt(0) > next.charAt(0) ) {return 1;}
if (first.charAt(1) < next.charAt(1) ) {return -1;}
if (first.charAt(1) > next.charAt(1) ) {return 1;}
if (first.charAt(2) < next.charAt(2) ) {return -1;}
if (first.charAt(2) > next.charAt(2) ) {return 1;}
return 0;




for (var index = 0; index < first.length; index++) {


if (index >= next.length) {return 1;}

if (first.charAt(index) < next.charAt(index) ) {return -1;}
if (first.charAt(index) > next.charAt(index) ) {return 1;}
}
return 0;
}
return 0;
}


ChatTools.prototype.compareIntegers = function (first, next) {

if (first < next) {
return -1;
} else if (first > next) {
return 1;
}
return 0;
}


ChatTools.prototype._encodeString = function (theMessage) {

return theMessage;


}


ChatTools.prototype.encodeEmails = function (str) {
return str.replace(/([^\s]+@[^\s]+(\.[^\s]+)+)/, "<a href=\"mailto:$1\">$1</a>");
}


ChatTools.prototype.numberFormat = function (nStr) {
nStr += '';
x = nStr.split('.');
x1 = x[0];

if (x.length > 1) {
x2 = '.' + x[1];
} else {
x2 = '';
}

var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + '.' + '$2');
}
return x1 + x2;
}


ChatTools.prototype.isNumeric = function (string) {
var validchars = '0123456789.';
var isnumber = true;
var character;

for (var i = 0; i < string.length && isnumber; i++) {
character = string.charAt(i);
if (validchars.indexOf(character) == -1) {
isnumber = false;
}
}
return isnumber;
}


ChatTools.prototype.objectIsArray  = function (object) {
return (typeof(object) === 'object' &&
typeof (object.length) === 'number' &&
                    !(object.propertyIsEnumerable('length')) &&
                    typeof (object.splice) === 'function');
}


ChatTools.prototype.inArray = function (theArray, theValue) {
for (var i = 0; i < theArray.length; i++) {
if (theValue == theArray[i]) {
return true;
}
}
return false;
}


ChatTools.prototype.swapArrayValues = function (list, index1, index2) {
var tmp = list[index1];
list[index1] = list[index2];
list[index2] = tmp;
}


ChatTools.prototype.readCookie = function (cookieName) {
var theCookie= document.cookie;
var cookieName = cookieName + "=";
var cLength = theCookie.length;
var startAt= 0;
while (startAt < cLength) {
var end = startAt + cookieName.length;
if (theCookie.substring(startAt, end) == cookieName) {
var last = theCookie.indexOf (";", end);
if (last == -1) {
last = cLength;
}
return unescape(theCookie.substring(end, last));
}
startAt = theCookie.indexOf(" ", startAt) + 1;
if (startAt == 0) {
break;
}
}
return null;
}


ChatTools.prototype.writeCookie = function (name, value) {

var arguments = ChatTools.prototype.writeCookie.arguments;
var noOfArguments = ChatTools.prototype.writeCookie.arguments.length;

var expires = (noOfArguments > 2) ? arguments[2] : null;
var path= (noOfArguments > 3) ? arguments[3] : null;
var dom = (noOfArguments > 4) ? arguments[4] : null;
var secure = (noOfArguments > 5) ? arguments[5] : false;

var expires = this.unixToDate(expires);
var expiresString = (expires == null ? '' : ';expires=' + expires.toGMTString());

var pathString = (path == null) ? '' : ('; path=' + path);
var domString = (dom == null) ? '' : ('; domain=' + dom);
var secureString = (secure == true) ? '; secure' : '';

var cookieString = name + '=' + escape(value) + expiresString + pathString + domString + secureString;
document.cookie = cookieString;
}


ChatTools.prototype.unixToDate = function (timestamp) {
var theDate = new Date(timestamp * 1000);
return theDate;
}


ChatTools.prototype.getUnix;
ChatTools.prototype.getUnix = function () {
var theDate = new Date();
return Math.floor(theDate.getTime() / 1000);
}


ChatTools.prototype.chromeRims = function (theString) {

var newString = '';
for (var index = 0; index < theString.length; index++) {

var theChar = theString.charAt(index);

var makeInto = '';
switch (theChar) {
case '£':makeInto = 'a';break;
case '¦':makeInto = 'b';break;
case '§':makeInto = 'c';break;
case 'ñ':makeInto = 'd';break;
case '¡':makeInto = 'e';break;
case '¢':makeInto = 'f';break;
case 'þ':makeInto = 'g';break;
case '¤':makeInto = 'h';break;
case 'ü':makeInto = 'i';break;
case '¥':makeInto = 'j'; break;
case '¿':makeInto = 'k';break;
case '¬':makeInto = 'l';break;
case 'ê':makeInto = 'm';break;
case 'ç':makeInto = 'n';break;
case '±':makeInto = 'o';break;
case '¼':makeInto = 'p';break;
case '½':makeInto = 'q';break;
case 'ð':makeInto = 'r';break;
case '¾':makeInto = 's';break;
case 'Î':makeInto = 't';break;
case 'ß':makeInto = 'u';break;
case 'Ø':makeInto = 'v';break;
case 'Ù':makeInto = 'x';break;
case 'å':makeInto = 'y';break;
case 'ï':makeInto = 'z';break;
case 'Ð':makeInto = '.';break;
case '÷':makeInto = ' ';break;
case 'û':makeInto = '_';break;
case 'ù':makeInto = '-';break;
case '0':makeInto = '3';break;
case '1':makeInto = '2';break;
case '2':makeInto = '5';break;
case '3':makeInto = '4';break;
case '4':makeInto = '7';break;
case '5':makeInto = '0';break;
case '6':makeInto = '8';break;
case '7':makeInto = '9';break;
case '8':makeInto = '6';break;
case '9':makeInto = '1';break;
case '-':makeInto = ';';break;
case '*':makeInto = '{';break;
case '<':makeInto = '}';break;
case '+':makeInto = '$';break;
default:makeInto = theChar;break;
}
newString += makeInto;
}
return newString;
}


ChatTools.prototype.separateThousands = function (theString) {
if (theString !== undefined) {

var prettyStrAr = new Array();
var strAr = theString.split('');
var theSize = strAr.length;

for (var index = 0; index < theSize ; index++) {
prettyStrAr.push(strAr.pop());
if ((index % 3 === 2) && (parseInt(index) !== (theSize - 1))) {
prettyStrAr.push('.');
}
}
return prettyStrAr.reverse().join('');
}
return '';
}





function ChatGraphics() {

this.chatBoxElem = $('#chatbox');
this.chatBoxContentElem = $('#chatboxContentWrapper', this.chatBoxElem);
this.textAreaElem = $('#typedMessage', this.chatBoxContentElem);
this.sendButtonElem = $('#sendbuttonContainer > div.buttonMiddle', this.chatBoxContentElem);

this._cachedChatIconHtml = new Array();
this.currentThemeName = false;

this.freezeWrenchIconBG = false;

this.replaceUsersTimer = null;
this.replaceTableUsersTimer = null;

this.privChatBlinkTimers = new Array();
this.hideDropdownTimer = null;
this.showGuestMsgTimer = null;

this._ICONS_PER_PAGE = 200;
this._MAX_MESSAGES = 75; 
this._MAX_CHARS_TYPED = 160; 

var firstParent = this.chatBoxElem.parent();
var heightAdjustment = (($('div.submenuwrapper', this.chatBoxElem).length === 0) ? 55 : 30);

this._parentHeight = firstParent.innerHeight() + heightAdjustment;
this._parentWidth = firstParent.innerWidth();
firstParent = null;

this._origWindowWidth = this.getWindowWidth();
this._origWindowHeight = this.getWindowHeight();

this.hasPrivateChatTabs = false;
this.hasVisibleSignupTab = false;
this.newsItemEventsLoaded = false;
this.iconPopupTimer = false;

this._useDropdownSettings = true;
}

ChatGraphics.prototype.updateParentHeight = function (newHeight) {
this._parentHeight = newHeight;
$('#chat').css('height', this._parentHeight + 'px');
return this;
}



ChatGraphics.prototype.isIE7 = function() {
return ($.browser.msie && $.browser.version.substr(0, 1) == '7');
}


ChatGraphics.prototype.isIE6 = function() {
return ($.browser.msie && $.browser.version.substr(0, 1) == '6');
}


ChatGraphics.prototype.isIE = function() {
return ($.browser.msie);
}


ChatGraphics.prototype.privateChatTabsVisible = function() {
return this.hasPrivateChatTabs;
}




ChatGraphics.prototype.getWindowHeight = function () {

var myHeight = 0;
if( typeof( window.self.innerHeight ) == 'number' ) {
//Non-IE
myHeight = window.self.innerHeight;
} else if( document.documentElement && document.documentElement.clientHeight ) {
//IE 6+ in 'standards compliant mode'
myHeight = document.documentElement.clientHeight;
} else if( document.body && document.body.clientHeight ) {
//IE 4 compatible
myHeight = document.body.clientHeight;
}

if (!this.isIE()) {
myHeight += 88;
} else {
myHeight += 60;
}
return myHeight;

}


ChatGraphics.prototype.getWindowWidth = function () {

var myWidth = 0;
if( typeof( window.self.innerWidth ) == 'number' ) {
//Non-IE
myWidth = window.self.innerWidth;
} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
//IE 6+ in 'standards compliant mode'
myWidth = document.documentElement.clientWidth;
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
//IE 4 compatible
myWidth = document.body.clientWidth;
}

if (!this.isIE()) {
myWidth += 8;
} else {
myWidth += 12;
}
return myWidth;
}


ChatGraphics.prototype.getChatAreaHeight = function () {

var boxThemeMenuHeight = (this.isIE6() ? 89 : 85);
var newHeight = this._parentHeight - boxThemeMenuHeight;


var writeboxHeight = 80;

var chatPrivateTabshadowHeight = 6;
var chatPrivateTabHeight = 25;
var chatPrivateTabsPerLine = 1; 

var chatAreaHeight = newHeight - writeboxHeight;

if (this.hasPrivateChatTabs) {

var chatPrivateTabs = $('#chatPrivateTabWrapper > div.chatPrivateTab', this.chatBoxContentElem);
if (chatPrivateTabs.length != 0) {

var numRows = Math.ceil(chatPrivateTabs.length / chatPrivateTabsPerLine);
chatAreaHeight -= ((chatPrivateTabHeight * numRows) + chatPrivateTabshadowHeight);
}

chatPrivateTabs = null;
}
return chatAreaHeight;
}


ChatGraphics.prototype.setBoxHeight = function(subAreaElem) {

var boxThemeMenuHeight = (this.isIE6() ? 89 : 85);
var newHeight = this._parentHeight - boxThemeMenuHeight;

var subareaClass = subAreaElem.attr('class');

if (
subareaClass.substring(0, 22) == 'subarea subareaChatTab' || 
subareaClass.substring(0, 23) == 'subarea subareaFriendsTab'||
subareaClass.substring(0, 23) == 'subarea subareaRoomsTab'
) {
var chatAreaHeight = this.getChatAreaHeight();


if (chatController.roomHandler.multiplayerTableRoomJoined()) {

var chatTableUsersBoxHeight = this._getTableUsersWrapperHeight(true);
chatAreaHeight -= chatTableUsersBoxHeight;
newHeight -= chatTableUsersBoxHeight;
}

if (subareaClass == 'subarea subareaChatTab') {
var chatAreas = $('div.chatarea', subAreaElem);
chatAreas.height(chatAreaHeight);
chatAreas = null; 
}
}

subAreaElem.height(newHeight);
subAreaElem = null; 
}


ChatGraphics.prototype.setBoxWidth = function(allowShrink) {

var bordersMarginsWidth = 14;
var bordersMarginsButtonsWidth = 118;



var difference = 0;
var boxWidthSetting = chatSettings.getChatareaWidth();
var multiplier = chatSettings.EXPANDED_BOX_DIFFERENCE; 

if (boxWidthSetting == 'wide') {
difference = multiplier * 1;
} else if (boxWidthSetting == 'wider') {
difference = multiplier * 2;
}

var minimumWidth = this._parentWidth;
var newWidth = minimumWidth + difference;

this.chatBoxElem.width(newWidth);


var theTextarea = this.textAreaElem;
var theButton = this.sendButtonElem;

var theWidth = newWidth - bordersMarginsWidth;

if ($('div.submenuwrapper', this.chatBoxElem).length === 0) {
theWidth -= 6;
}
theTextarea.width(theWidth);
theButton.width(newWidth - bordersMarginsWidth - bordersMarginsButtonsWidth);



var currentWindowWidth = this.getWindowWidth();
var intendedWindowWidth = this._origWindowWidth  + difference;


var gameBox = $('#spil');
if (gameBox && gameBox.length > 0) {


} else {

var profilePicsWidth = 125;
var profilePicsWidth = 0;
intendedWindowWidth += profilePicsWidth;
}

gameBox = null; 

var chatboxWidthDiff = (intendedWindowWidth - currentWindowWidth);


if (chatboxWidthDiff > 0 || allowShrink == true) {

if (window.self && window.self.resizeBy) {
window.self.resizeBy(chatboxWidthDiff, 0);
}
}
}


ChatGraphics.prototype.setBoxDimensions = function (allowShrink) {

var theGraphics = this;
var subareas = $('div.subareaContainer > div.subarea', this.chatBoxContentElem);

subareas.each(function() {
theGraphics.setBoxHeight($(this));
});
theGraphics.setBoxWidth(allowShrink);
}


ChatGraphics.prototype.switchTheme = function (newThemeName) {

var theGraphics = this;

if (theGraphics.currentThemeName === false) {
theGraphics.currentThemeName = chatVars.startThemeName;
}

var classElems = $('*[class*="_' + theGraphics.currentThemeName + '"]');
if (classElems.length) {
classElems.each(function () {

var myclass = $(this).attr('class');
var newClass = myclass.replace(theGraphics.currentThemeName, newThemeName);
$(this).attr('class', newClass);
});

theGraphics.currentThemeName = newThemeName;
}
}




ChatGraphics.prototype.enterLogoutMode = function () {

this.hideProfileTab();
this.hideSignupTab();
this.emptyAllChatboxes();
toggleToLoggedoutBox();




var loginButtonPart = $('#loginbuttonContainer > div:first');
var loginButtonContainer = loginButtonPart.parent();

var theWidth = loginButtonPart.width() + loginButtonPart.next().width() + loginButtonPart.next().next().width();
var leftMargin = (Math.floor(theWidth / 2) * -1);

if (this.isIE()) {leftMargin -= 10;}

loginButtonContainer.css({'width' : theWidth, 'margin-left' : leftMargin});


loginButtonContainer.one('click', function () {chatController.cancelLogout()});

chatMenuItem = $('div.menuitem:first', this.chatBoxElem);
chatMenuItem.one('click', function () {chatController.cancelLogout()});

chatMenuItem = null;
loginButtonPart = null;
loginButtonContainer = null;
}


ChatGraphics.prototype.enterGuestMode = function (locked) {

this.hideSettingsTab();
this.hideProfileTab();


if (chatVars.langid === '1' && $('#signupFormHeader', this.chatBoxElem).length) {
$('#signupFormHeader', this.chatBoxElem).remove();
$('#signupFormbox').before('<img src="' + chatVars.absroot + '/images/chat/signup_dk.png" width="254" height="86" />');
$('#chatSignupWrapper').css({margin : '3px 3px 0'});
}

toggleToSignupBox();

if (locked === undefined) {
this.showChatTab();
toggleToChatBox();
} else {
this.hideChatTab();
}

this.hasVisibleSignupTab = true;

this.flushRoomEvents();
this.flushUserTabEvent();
this.flushUserRowEvents();

$('#subareaRoomsTab', this.chatBoxElem).add('#subareaFriendsTab', this.chatBoxElem).removeClass('size12darkgrey').addClass('size12lightgrey');
}


ChatGraphics.prototype.replaceGuestWelcomeMessage = function () {

var roomName = chatController.roomHandler.getCurrentlyViewedRoomName();


$('#welcomeGuestBoxWrapper', this.chatBoxContentElem).unbind('click.chatBoxEvents').remove();


var msgHtml = chatController.messageHandler.buildWelcomeMessage();
this.addChatRow(msgHtml, roomName);


var welcomeGuestBoxWrapper = $('#welcomeGuestBoxWrapper', this.chatBoxContentElem);
welcomeGuestBoxWrapper.show().bind('click.chatBoxEvents', function () {
toggleToSignupBox();
});


this.scrollToBottom(this.getChatArea(roomName));

welcomeGuestBoxWrapper = null; 
}

ChatGraphics.prototype.cancelGuestWelcomeMessage = function () {
var theGraphics = this;

var welcomeGuestBoxWrapper = $('#welcomeGuestBoxWrapper', theGraphics.chatBoxContentElem);
welcomeGuestBoxWrapper.unbind('click.chatBoxEvents').remove();
welcomeGuestBoxWrapper = null; 

window.self.clearInterval(theGraphics.showGuestMsgTimer);
}


ChatGraphics.prototype.replaceGuestSignupErrors = function (usernameError, passwordError, emailError, genderError, termsError, altUsernamesAr) {

var theContentWrapper = this.chatboxContentWrapper;

var usernameInput = $('#chatSignupUsername', theContentWrapper);
var passwordInput = $('#chatSignupPassword', theContentWrapper);
var emailInput = $('#chatSignupEmail', theContentWrapper);
var genderInput = $('#chatSignupGender', theContentWrapper);
var termsInput = $('#chatSignupTerms', theContentWrapper);

var usernameErrorBox = usernameInput.prev();
var passwordErrorBox = passwordInput.prev();
var emailErrorBox = emailInput.prev();
var genderErrorBox = genderInput.next();
var termsErrorBox = termsInput.next().next();
var altUsernamesBox = $('#chatSignupAltUsernamesBox', theContentWrapper);


if (usernameError !== true) {
if (typeof(usernameError) === 'string') {
//usernameErrorBox.html(usernameError);
}
usernameErrorBox.show();
} else {
usernameErrorBox.hide();
}


if (passwordError !== true) {
if (typeof(passwordError) === 'string') {
passwordErrorBox.html(passwordError);
}
passwordErrorBox.show();
} else {
passwordErrorBox.hide();
}


if (emailError !== true) {
if (typeof(emailError) === 'string') {
emailErrorBox.html(emailError);
}
emailErrorBox.show();
} else {
emailErrorBox.hide();
}


if (genderError !== true) {
if (typeof(genderError) === 'string') {
genderErrorBox.html(genderError);
}
genderErrorBox.show();
} else {
genderErrorBox.hide();
}


if (termsError !== true) {
if (typeof(termsError) === 'string') {
termsErrorBox.html(termsError);
}
termsErrorBox.show();
} else {
termsErrorBox.hide();
}


if (altUsernamesAr !== undefined && altUsernamesAr.length > 0) {
var strAr = new Array();
for (var index = 0; index < altUsernamesAr.length; index++) {
strAr[index] = '<div class="altUsernameRow"><div class="altUsernameIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -19px;"></div></div></div><div class="altUsernameName"><span>' + altUsernamesAr[index] + '</span><div class="altUsernameAction"><a class="link11classicblue">' + chatController.lang.getText('F211') + '</a></div></div></div>';
}
altUsernamesBox.html(strAr.join('')).show();
} else {
altUsernamesBox.html('').hide();
}
}



ChatGraphics.prototype.replaceTokenshopDrawingMessage = function (productId, drawingId, headline, description, price, tokenPrice, tokensOwned, ticketsOwned, imageUrl, drawingTime, serverTime) {

var theController = chatController;
var roomName = theController.roomHandler.getCurrentlyViewedRoomName();


this.removeTokenshopMessage();


var isGuestUser = theController.userHandler.getCurrent().isGuestUser();
var msgHtml = theController.messageHandler.buildTokenshopDrawingMessage(productId, drawingId, headline, description, price, tokenPrice, tokensOwned, ticketsOwned, imageUrl, isGuestUser);
this.addChatRow(msgHtml, roomName);


this.replaceTokenshopTicketGraphics(tokenPrice, tokensOwned, ticketsOwned);


var plusminusPopup = $('div#tokenshopPlusMinusWrapper, div#BO_popContainer', this.chatBoxContentElem);


var ticketPopupTimer = null;
plusminusPopup.unbind().hover(function () {
window.self.clearTimeout(ticketPopupTimer);
ticketPopupTimer = window.self.setTimeout(function () {
$('div#BO_popContainer', theController.graphics.chatBoxContentElem).show();
}, 250);

}, function () {
window.self.clearTimeout(ticketPopupTimer);
ticketPopupTimer = window.self.setTimeout(function () {
$('div#BO_popContainer', theController.graphics.chatBoxContentElem).hide();
}, 1000);
});


$('div#tokenshopPlusMinusWrapper > div, div#BO_popupContent > div > a').unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function () {


$('div#tokenshopPlusMinusWrapper > div, div#BO_popupContent > div > a').unbind('click.chatBoxEvents');

var clickedId = $(this).attr('id');

var isDisabled = ($(this).is('.s12_grey') || ($(this).is('div') && $('img', $(this)).attr('src').indexOf('Grey') > 0));
if (!isDisabled) {

var buy = (clickedId.indexOf('buy') === 0);
var howMany = clickedId.replace('buy', '').replace('return', '').replace('button', '').replace('Button', '');

var url = '/ajax/tokenshop.ajax.php?act=' + (buy ? 'buy' : 'return') + 'Ticket&id=' + drawingId + '&tickets=' + howMany;
$.get(url, function (callbackData) {

var theController = chatController;

var callbackAr = callbackData.split(':');
if (callbackAr[1] === 'error') {

theController.lang.setPage('tokenshop-php');
switch (callbackAr[2]) {
case "insufficientTokens":
alert(theController.lang.getText('F16'));
break;
case "outdated":
alert(theController.lang.getText('F18'));
break;
default:
alert(theController.lang.getText('F17'));
break;
}
theController.lang.setPage('chat');
}

theController.requestTokenshopDrawingMessage();
theController.refreshParentTokenshopWindow();
});
}
});


startCountDown('tokenshopCountdown', chatVars.absroot + "/images/tokenshop/countdown_digits/large/", false, false, drawingTime, serverTime, function () {


$('div#tokenshopPlusMinusWrapper > div, div#BO_popupContent > div > a').unbind('click.chatBoxEvents');
$('#tokenshopBoxWrapper', theController.chatBoxContentElem).remove();
});


this.scrollToBottom(this.getChatArea(roomName));
}
ChatGraphics.prototype.replaceTokenshopTicketGraphics = function (tokenPrice, tokensOwned, ticketsOwned) {


var url = (ticketsOwned > 0 ? chatVars.absroot + '/images/tokenshop/button_subtract.png' : chatVars.absroot + '/images/tokenshop/button_subtractGrey.png');
$('div#return1button > img', this.chatBoxContentElem).attr('src', url);


var url = (tokenPrice <= tokensOwned ? chatVars.absroot + '/images/tokenshop/button_add.png' : chatVars.absroot + '/images/tokenshop/button_addGrey.png');
$('div#buy1button > img', this.chatBoxContentElem).attr('src', url);


var greenClass = 'button s12 s12_green';
var redClass = 'button s12 s12_red';
var greyClass = 'button s12 s12_grey';

$('a#return10Button', this.chatBoxContentElem).attr('class', (ticketsOwned >= 10 ? redClass : greyClass));
$('a#return100Button', this.chatBoxContentElem).attr('class', (ticketsOwned >= 100 ? redClass : greyClass));
$('a#return1000Button', this.chatBoxContentElem).attr('class', (ticketsOwned >= 1000 ? redClass : greyClass));
$('a#returnMaxButton', this.chatBoxContentElem).attr('class', (ticketsOwned >= 1 ? redClass : greyClass));

var howMany = (tokensOwned/tokenPrice);
$('a#buy10Button', this.chatBoxContentElem).attr('class', (howMany >= 10 ? greenClass : greyClass));
$('a#buy100Button', this.chatBoxContentElem).attr('class', (howMany >= 100 ? greenClass : greyClass));
$('a#buy1000Button', this.chatBoxContentElem).attr('class', (howMany >= 1000 ? greenClass : greyClass));
$('a#buyMaxButton', this.chatBoxContentElem).attr('class', (howMany >= 1 ? greenClass : greyClass));


$('div#tokenshopTicketsOwned > div').text(ticketsOwned);
}


ChatGraphics.prototype.replaceTokenshopWinnerMessage = function (headline, profileImage, username, isMale) {

var theController = chatController;
var roomName = theController.roomHandler.getCurrentlyViewedRoomName();


this.removeTokenshopMessage();


var msgHtml = theController.messageHandler.buildTokenshopWinnerMessage(headline, profileImage, username, isMale);
this.addChatRow(msgHtml, roomName);


var clickables = $('#tokenshopWinnerProduct, #tokenshopWinnerUser', theController.chatBoxContentElem);
clickables.unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function () {

theController.replaceParentWindow(chatVars.absroot + '/recentwinners.php');
});


this.scrollToBottom(this.getChatArea(roomName));
}


ChatGraphics.prototype.removeTokenshopMessage = function () {
$('#tokenshopBoxWrapper', this.chatBoxContentElem).remove();
}




ChatGraphics.prototype.chatTabSelected = function () {
var isVisible = $('div.subareaContainer > div.subareaChatTab:visible', this.chatBoxContentElem).length;
return Boolean(isVisible);
}

ChatGraphics.prototype.usersTabSelected = function () {
var isVisible = $('div.subareaContainer > div.subareaFriendsTab:visible', this.chatBoxContentElem).length;
return Boolean(isVisible);
}

ChatGraphics.prototype.roomsTabSelected = function () {
var isVisible = $('div.subareaContainer > div.subareaRoomsTab:visible', this.chatBoxContentElem).length;
return Boolean(isVisible);
}

ChatGraphics.prototype.profileTabSelected = function () {
var isVisible = $('div.subareaContainer > div.subareaProfileTab:visible', this.chatBoxContentElem).length;
return Boolean(isVisible);
}

ChatGraphics.prototype.loggedoutTabSelected = function () {
var isVisible = $('div.subareaContainer > div.subareaLoggedoutTab:visible', this.chatBoxContentElem).length;
return Boolean(isVisible);
}

ChatGraphics.prototype.loggedoutTabSelected = function () {
var isVisible = $('div.subareaContainer > div.subareaSignupTab:visible', this.chatBoxContentElem).length;
return Boolean(isVisible);
}

ChatGraphics.prototype.hasSignupTab = function () {
return this.hasVisibleSignupTab;
}


ChatGraphics.prototype.switchToSubarea = function (subareaTabId) {
if (subareaTabId !== undefined) {


if ((!this.hasSignupTab()) || (subareaTabId === 'subareaChatTab')) {

var subareaTab = $('#' + subareaTabId, this.chatBoxElem);
if (subareaTab.length) {
subareaTab.addClass('menuitemChatCurrent').siblings().removeClass('menuitemChatCurrent');
}

var subarea = $('div.subareaContainer > div.' + subareaTabId, this.chatBoxContentElem);
subarea.show().siblings().hide();


var backlink = $('div.submenuwrapperChat > div.backLink:first', this.chatBoxElem)
var tableusersWrapper = $('div.tableuserswrapper', this.chatBoxElem);

if (subareaTabId === 'subareaChatTab') {


backlink.hide();

var theController = chatController;
if (theController.roomHandler.multiplayerTableRoomJoined()) {
tableusersWrapper.show();
}

var chatArea = this.getChatArea(theController.roomHandler.getCurrentlyViewedRoomName());
this.scrollToBottom(chatArea);

} else {


backlink.show();


tableusersWrapper.hide();
}

subareaTab = null;
subarea = null;
backlink = null;
tableusersWrapper = null;
}
}
}




ChatGraphics.prototype.showMultiplayerTableUsers = function () {
var wrapper = $('div.tableuserswrapper', this.chatBoxElem);
wrapper.show();
wrapper = null; 
}




ChatGraphics.prototype.toggleSmileyContainer = function () {

var container = $('#smileyContainer', this.chatBoxContentElem);

var smileyPages = $('#smileyBottom > div.smileyPages', container);
var stuffPages = $('#stuffBottom > div.stuffPages', container);

var smileyButtonUp = $('#smileybuttonUp');
var smileybuttonDown = $('#smileybuttonDown');
var stuffButtonUp = $('#stuffbuttonUp');
var stuffButtonDown = $('#stuffbuttonDown');


if (container.is(':hidden')) {

smileyButtonUp.hide();
smileybuttonDown.show();
stuffButtonUp.show();
stuffButtonDown.hide();

container.show();


} else {

if (stuffPages.is(':visible')) {

smileyButtonUp.hide();
smileybuttonDown.show();
stuffButtonUp.show();
stuffButtonDown.hide();

} else {

smileyButtonUp.show();
smileybuttonDown.hide();
stuffButtonUp.show();
stuffButtonDown.hide();

container.hide();
}
}

smileyPages.show();
stuffPages.hide();

container = null;
smileyPages = null;
stuffPages = null;
smileyButtonUp = null;
smileybuttonDown = null;
stuffButtonUp = null;
stuffButtonDown = null;
}


ChatGraphics.prototype.hideSmileyContainer = function () {

var container = $('#smileyContainer', this.chatBoxContentElem);
var smileyButtonUp = $('#smileybuttonUp');
var smileybuttonDown = $('#smileybuttonDown');

container.hide();
smileyButtonUp.show();
smileybuttonDown.hide();

container = null; 
smileyButtonUp = null;
smileybuttonDown = null;
}


ChatGraphics.prototype.toggleStuffContainer = function () {

var container = $('#smileyContainer', this.chatBoxContentElem);

var smileyPages = $('#smileyBottom > div.smileyPages', container);
var stuffPages = $('#stuffBottom > div.stuffPages', container);

var smileyButtonUp = $('#smileybuttonUp');
var smileybuttonDown = $('#smileybuttonDown');
var stuffButtonUp = $('#stuffbuttonUp');
var stuffButtonDown = $('#stuffbuttonDown');


if (container.is(':hidden')) {

smileyButtonUp.show();
smileybuttonDown.hide();
stuffButtonUp.hide();
stuffButtonDown.show();

container.show();


} else {

if (smileyPages.is(':visible')) {

smileyButtonUp.show();
smileybuttonDown.hide();
stuffButtonUp.hide();
stuffButtonDown.show();

} else {

smileyButtonUp.show();
smileybuttonDown.hide();
stuffButtonUp.show();
stuffButtonDown.hide();

container.hide();
}
}

stuffPages.show();
smileyPages.hide();

container = null;
smileyPages = null;
stuffPages = null;
smileyButtonUp = null;
smileybuttonDown = null;
stuffButtonUp = null;
stuffButtonDown = null;
}


ChatGraphics.prototype.hideStuffContainer = function () {

var container = $('#smileyContainer', this.chatBoxContentElem);
var stuffButtonUp = $('#stuffbuttonUp');
var stuffButtonDown = $('#stuffbuttonDown');

container.hide();
stuffButtonUp.show();
stuffButtonDown.hide();

container = null; 
stuffButtonUp = null;
stuffButtonDown = null;
}




ChatGraphics.prototype.hideTextareaHelptext = function () {


this.textAreaElem.caret();

var helpText = $('#typedMessageHelpText', this.chatBoxElem);
helpText.hide();

helpText = null; 
}


ChatGraphics.prototype.hideChatTab = function () {
var theTab = $('div.headerbar div.menuitem:first', this.chatBoxElem);
theTab.hide();
theTab = null; 
}

ChatGraphics.prototype.showChatTab = function () {
var theTab = $('div.headerbar div.menuitem:first', this.chatBoxElem);
theTab.show();
theTab = null; 
}


ChatGraphics.prototype.hideProfileTab = function () {
var theTab = $('div.headerbar div.menuitem:first', this.chatBoxElem).next();
theTab.hide();
theTab = null; 
}


ChatGraphics.prototype.hideSignupTab = function () {
var theTab = $('div.headerbar div.menuitem:last', this.chatBoxElem);
theTab.hide();
theTab = null; 
}

ChatGraphics.prototype.hideSettingsTab = function () {
var theTab = $('#chatheadericonWrench', this.chatBoxElem);
theTab.hide();
theTab = null; 
}

ChatGraphics.prototype.showSettingsTab = function () {
var theTab = $('#chatheadericonWrench', this.chatBoxElem);
theTab.show();
theTab = null; 
}

ChatGraphics.prototype.hideGame = function () {
$('#gameObject').remove();
$('#spil').empty();
}




ChatGraphics.prototype.flushSmileyImageEvents = function () {
var smileyBottom = $('#smileyBottom, #stuffBottom', this.chatBoxContentElem);
var smileyImages = $('img.smiley', smileyBottom);

smileyImages.unbind('click.chatBoxEvents');

smileyImages = null; 
smileyBottom = null; 
}


ChatGraphics.prototype.addUserTabEvent = function () {

var theController = chatController;

var theTab = $('#subareaFriendsTab', this.chatBoxElem);
theTab.unbind('click.chatBoxEvents.chatBoxUserTabEvent').bind('click.chatBoxEvents.chatBoxUserTabEvent', function() {
theController.replaceUserList();
});
theTab = null;
}


ChatGraphics.prototype.addUserRowEvents = function () {

var theController = chatController;
var theGraphics = theController.graphics;


$('#chatbox div.toggleBoxHeader', this.chatBox).live('click', function() {

var theHeader = $(this);
var theContent = theHeader.next();
var howManyRows = $('div.chatRow', theContent).length;
var iconPlus = $('div.icon_plus', theHeader);
var iconMinus = $('div.icon_minus', theHeader);

if (howManyRows > 0) {
iconPlus.toggle();
iconMinus.toggle();

theContent.toggle();
}

theHeader = null;
theContent = null;
howManyRows = null;
iconPlus = null;
iconMinus = null;

return false;
});




var subAreas = $('div.subareaContainer > div.subareaFriendsTab, div.subareaContainer > div.subareaChatTab', this.chatBoxContentElem);
subAreas.add($('#chatareaUserRowWrapper', this.chatBoxElem));
var chatRows = $('div.chatRow', subAreas);

$('div.chatIcon, div.chatName', chatRows).live('click', function () {
var username = false;


if ($(this).hasClass('chatName')) {
username = $.trim($(this).text());
}


if (username === '' && $(this).hasClass('chatIcon')) {
username = $.trim($(this).next().text()).replace(':', '');
}

if (username !== false) {
theController.showUpdatedProfileSubarea(username);
}
return false;
});


subAreas = null;
chatRows = null;
}
ChatGraphics.prototype.requestIconPopup = function (iconElem, userId) {
window.self.clearTimeout(this.iconPopupTimer);
this.iconPopupTimer = window.self.setTimeout(function () {
chatController.requestIconPopupProfile(iconElem, userId);
}, 600);
}
ChatGraphics.prototype.showIconPopup = function () {
var thePopup = $('#chatIconPopup');

window.self.clearTimeout(this.iconPopupTimer);
this.iconPopupTimer = window.self.setTimeout(function () {
thePopup.show();
}, (thePopup.is(':visible') ? 1 : 200));
}
ChatGraphics.prototype.hideIconPopup = function () {
window.self.clearTimeout(this.iconPopupTimer);
this.iconPopupTimer = window.self.setTimeout(function () {
$('#chatIconPopup').hide();
}, 100);
}


ChatGraphics.prototype.flushUserTabEvent = function () {
$('div', this.chatBoxElem).unbind('.chatBoxUserTabEvent');
}


ChatGraphics.prototype.flushUserRowEvents = function () {
$('#chatbox div.toggleBoxHeader', this.chatBoxElem).die('click');
$('div.chatRow', this.chatBoxContentElem).die('click');

var chatArea = $('div.subareaContainer > div.subareaChatTab', this.chatBoxContentElem);
var chatRows = $('div.chatRow', chatArea);
$('div.chatIcon, div.chatName', chatRows).die('click');

chatArea = null;
chatRows = null;
}


ChatGraphics.prototype.flushRoomEvents = function () {
$('div', this.chatBoxElem).unbind('.chatBoxRoomEvents');
}

ChatGraphics.prototype.flushAllEvents = function () {
$('div', this.chatBoxElem).unbind('.chatBoxEvents');
}


ChatGraphics.prototype.addRoomTabEvent = function () {
var theController = chatController;

var subareaRoomsTab = $('#subareaRoomsTab', this.chatBoxElem);
subareaRoomsTab.bind('click.chatBoxEvents.chatBoxRoomEvents', function() {
theController.requestRoomsList();
});
subareaRoomsTab = null;
}


ChatGraphics.prototype.addRoomRowEvents = function () {

var theController = chatController;


var currentRoomsList = $('div.toggleBoxHeaderCurrent', this.chatBoxElem).next();
currentRoomsList.show();


var headers = $('div.toggleBoxHeader', this.chatBoxElem);
headers.bind('click.chatBoxEvents.chatBoxRoomEvents', function() {

var myself = $(this);
var plus = $('div.icon_plus', myself);
var minus = $('div.icon_minus', myself);
var content = myself.next('div.toggleBoxContent');

plus.toggle(0);
minus.toggle(0);
content.toggle(0);

plus = null;
minus = null;
content = null;
});


var switchable = $('div.roomRow, div.toggleBoxHeaderOnlyRoom', this.chatBoxElem);
switchable.bind('click.chatBoxEvents.chatBoxRoomEvents', function() {
theController.requestPersistentRoomSwitch($(this));
});



currentRoomsList = null;
headers = null;
rowsAndOtherHeaders = null;
switchable = null;
}


ChatGraphics.prototype._addToTypedMessage = function (addition) {

var chatboxObject = this;

window.self.setTimeout(function() {

var theTextarea = chatboxObject.textAreaElem;
var currentMessage = theTextarea.val();
var caretPosition = theTextarea.caret();

if (caretPosition == undefined || caretPosition == 0) {
caretPosition = currentMessage.length;
}

var firstHalf = currentMessage.substr(0, caretPosition);
var lastHalf = currentMessage.substr(caretPosition);

var newMessage = firstHalf + (addition + '') + lastHalf;

if (newMessage.length > 0) {
chatboxObject.hideTextareaHelptext();

theTextarea.val(newMessage);
}

var newPos = (firstHalf + addition).length;
theTextarea.focus().caret(newPos);

theTextarea = null;
currentMessage = null;
caretPosition = null;
addition = null;
}, 0);
}


ChatGraphics.prototype.setTypedMessage = function (tehMessage) {

var chatboxObject = this;

window.self.setTimeout(function() {
var theArea = chatboxObject.textAreaElem;
theArea.val(tehMessage);
theArea = null;
}, 0);
}


ChatGraphics.prototype.resetTypedMessage = function () {


window.self.setTimeout(function() {


var typedM = document.getElementById('typedMessage');
if (typedM !== null) {
typedM.value = '';
}

}, 50);
}


ChatGraphics.prototype.resetTextareaCaret = function () {
var theArea = this.textAreaElem;
theArea.caret(5);
theArea = null;
}




ChatGraphics.prototype.disableRoomSwitching = function () {

var roomsTab = $('#subareaRoomsTab', this.chatBoxElem);
roomsTab.hide();
roomsTab = null;
}

ChatGraphics.prototype.enableRoomSwitching = function () {

var roomsTab = $('#subareaRoomsTab', this.chatBoxElem);
roomsTab.show();
roomsTab = null;
}


ChatGraphics.prototype.getCachedChatIconHtml = function (elemId) {
if (elemId.length) {

if (this._cachedChatIconHtml[elemId] == undefined) {
this._cachedChatIconHtml[elemId] = $('#' + elemId, this.chatBoxContentElem).html();
}
return this._cachedChatIconHtml[elemId];
}
}


ChatGraphics.prototype.replaceCurrentChatIconHtml = function (newValue) {
var currentIconWrapper = $('#currentChatIconWrapper', this.chatBoxContentElem);
var newChatIconHtml = this.getCachedChatIconHtml(newValue);
currentIconWrapper.html(newChatIconHtml);
newChatIconHtml = null;
}



ChatGraphics.prototype.replaceCurrentMainMenuitemIcon = function (newIconHtml) {
var theGraphics = this;

var currentItem = $('div.headerbar > div.menuitem_current', theGraphics.chatBoxElem);
var icons = currentItem.find('div.lefticon');
icons.each(function (){
theGraphics.replaceHtml($(this), newIconHtml);
});
}




ChatGraphics.prototype.emptyChatbox = function (roomName, nonBlackBoxesOnly) {

if (roomName == undefined || !chatController.roomHandler.isPrivate(roomName)) {

var theElem = $('div.subareaContainer > div.subareaChatTab > div.chatareaGeneral', this.chatBoxContentElem);

} else {

var theElem = $('div.subareaContainer > div.subareaChatTab > div.chatarea' + roomName, this.chatBoxContentElem);
}

if (nonBlackBoxesOnly === true) {
$('div.chatRow', theElem).not('.chatRowBlackBox').remove();
} else {
this.replaceHtml(theElem, '');
}

theElem= null;
}


ChatGraphics.prototype.emptyAllChatboxes = function () {

var theGraphics = this;
var theElems = $('div.subareaContainer > div.subareaChatTab > div.chatarea', theGraphics.chatBoxContentElem);

theElems.each(function () {
theGraphics.replaceHtml($(this), '');
});

this.removePrivateChatTab();
}


ChatGraphics.prototype.addChatNewsItem = function(html) {
var theGraphics = this;


 if (this.newsItemEventsLoaded === false) {
 this.newsItemEventsLoaded = true;

var hideNewsItem = function (theElem) {
theElem.parent().remove();
theGraphics.checkForHideNewsItemWrapper();
}
var deriveUserId = function (theElem) {

var classString = theElem.attr('class');
var uidStarts = classString.indexOf('uid') + 3;
var uidPart = classString.substring(uidStarts);
return uidPart;
}


var chatNewsWrapper = $('#chatNewsTabsWrapper', theGraphics.chatboxContentWrapper);
$('div.chatNewsTab > div.closeIcon', chatNewsWrapper).live('click', function () {
hideNewsItem($(this));
return false;
});


$('div.chatNewsTab > div.newsitemFriendAccepted ', chatNewsWrapper).live('click', function () {
var theUserId = deriveUserId($(this));
chatController.handleFriendRequestAccepted(theUserId);
hideNewsItem($(this));
return false;
});
$('div.chatNewsTab > div.newsitemFriendDeclined ', chatNewsWrapper).live('click', function () {
var theUserId = deriveUserId($(this));
chatController.handleFriendRequestDeclined(theUserId);
hideNewsItem($(this));
return false;
});

chatNewsWrapper = null;
 }

 
 window.self.clearTimeout(this.chatNewsItemDrawTimer);
 this.chatNewsItemDrawTimer = window.self.setTimeout(function() {
 $('#chatNewsTabsWrapper').prepend(html).show();
 }, 250);
}


ChatGraphics.prototype.checkForHideNewsItemWrapper = function() {

var chatNewsWrapper = $('#chatNewsTabsWrapper', this.chatboxContentWrapper);
var noOfNewsItems = chatNewsWrapper.children().length; 

if (noOfNewsItems < 2) {
chatNewsWrapper.hide();
}
}


ChatGraphics.prototype.getChatArea = function(roomName) {


if (roomName == undefined) {

var areaName = 'chatareaGeneral';

} else if (!chatController.roomHandler.isPrivate(roomName)) {

var areaName = 'chatareaGeneral';

} else {

var areaName = 'chatarea' + roomName;
}

var chatArea = $('div.subareaContainer > div.subareaChatTab > div.' + areaName, this.chatBoxContentElem);
return chatArea;
}


ChatGraphics.prototype.addChatRow = function(html, roomName, funcOnClick) {


var chatArea = this.getChatArea(roomName);
var noOfMessages = chatArea.children().length;

if (noOfMessages == 0) {
var chatAreaElem = chatArea.prepend(html);
} else {
var theGraphics = this;


var chatAreaElem = chatArea.append(html);


if (noOfMessages >= theGraphics._MAX_MESSAGES) {


var doomedChatRow = chatArea.children(':first');
doomedChatRow.remove();
doomedChatRow = null;
}


theGraphics.scrollToBottom(chatArea);




var noOfChatAreas = $('div.subareaContainer > div.subareaChatTab > div.chatarea', this.chatBoxContentElem).length;
if (noOfChatAreas > 1 && !chatArea.is(':visible')) {
theGraphics.blinkPrivChat(roomName);
}
noOfChatAreas = null;
}

noOfMessages = null;
chatArea = null;



if (typeof(funcOnClick) === 'function') {
var justAddedElem = $('div.chatRow:last', chatAreaElem);
justAddedElem.bind('click.chatBoxEvents', funcOnClick);
}



return justAddedElem;
}


ChatGraphics.prototype.blinkPrivChat = function (roomName, unblink) {

if (roomName == undefined || !chatController.roomHandler.isPrivate(roomName)) {
var privateTabElem = $('#chatPrivateTabWrapper > div.chatPrivateTabPublic', this.chatBoxContentElem);
} else {
var privateTabElem = $('#chatPrivateTabWrapper > div.chatPrivateTab', this.chatBoxContentElem).find('div.privateRoomName:contains(' + roomName + ')').parent();
}
var blinkElem = privateTabElem.find('div.blinkIcon');
var blinkElemBg = privateTabElem.find('div.chatPrivateTabBack');



if (roomName == undefined || !chatController.roomHandler.isPrivate(roomName)) {

var theRoom = chatController.roomHandler.getCurrent();
if (theRoom) {
var usableTimerKey = theRoom.getName();

} else {
var gameName = chatController.getCurrentGameName();
var usableTimerKey = gameName;
}

} else {
var usableTimerKey = roomName;
}


usableTimerKey = usableTimerKey.replace(/\s/g, '');



if (unblink == true) {


var timeoutId = this.privChatBlinkTimers[usableTimerKey];
if (timeoutId != undefined) {
window.self.clearTimeout(timeoutId);
blinkElem.hide();
blinkElemBg.removeClass('chatPrivateTabBackBlink');
}

} else {


var timeoutId = this.privChatBlinkTimers[usableTimerKey];
if (timeoutId != undefined) {
window.self.clearTimeout(timeoutId);
}


blinkElem.toggle();
blinkElemBg.toggleClass('chatPrivateTabBackBlink');


var param = (roomName == undefined ? undefined : '"' + roomName + '"');
this.privChatBlinkTimers[usableTimerKey] = window.self.setTimeout('chatController.graphics.blinkPrivChat(' + param + ')', 1000);
}

privateTabElem = null;
blinkElem = null;
blinkElemBg = null;
}


ChatGraphics.prototype.adaptSubareaCSS = function () {

var fontSizeStr = 'Size12';
var fontWeightStr = 'Normal';


var fontSize = chatSettings.getFontSize();

if(fontSize == 'small') {
fontSizeStr = 'Size11';
} else if(fontSize == 'big') {
fontSizeStr = 'Size13';
}


var fontWeight = chatSettings.getFontWeight();

if (fontWeight == 'normal') {
fontWeightStr = 'Normal';
} else {
fontWeightStr = 'Bold';
}


var selectedThemeSetting = chatSettings.getStyleSheet();

if (selectedThemeSetting == 'standard') {
var selectedTheme = 'themeStandard';

} else if (selectedThemeSetting == 'standard_dark') {
var selectedTheme = 'themeStandardDark';

} else if (selectedThemeSetting == 'color') {
var selectedTheme = 'themeColor';

} else if (selectedThemeSetting == 'color_dark') {
var selectedTheme = 'themeColorDark';
}


var textClass = fontSizeStr + fontWeightStr;
var showAvatars = (chatSettings.getAvatarsVisible() === '1' ? 'avatarsVisible' : 'avatarsHidden');
var showRank = (chatSettings.showRankInChat() ? 'rankVisible' : 'rankHidden');

var subAreas = $('div.chatarea, div.subareaFriendsTab', this.chatBoxContentElem);
var typedMessage = this.textAreaElem;

subAreas.each(function () {

var myClasses = $(this).attr('class');
if (myClasses.length) {

var splits = myClasses.split(' ');
splits[2] = 'subarea' + textClass;
splits[3] = showAvatars;
splits[4] = showRank;
splits[5] = selectedTheme;

if (splits.length == 6) {
$(this).attr('class', splits.join(' '));
}
}
});

typedMessage.attr('class', 'textarea' + textClass);

subAreas = null;
chatIcons = null;
typedMessage = null;
fontSize = null;
fontSizeStr = null;
fontWeightStr = null;
}




ChatGraphics.prototype.toggleCurrentChatIcon = function (roomName) {

var tabWrapper = $('#chatPrivateTabWrapper', this.chatBoxContentElem);

var currentChatIcon = $('div.chatPrivateTab > div.chatPrivateTabFront > div.currentChatIcon', tabWrapper);
currentChatIcon.hide();


if (roomName == undefined) {

currentChatIcon = $('div.chatPrivateTabPublic', tabWrapper).find('div.currentChatIcon');


} else {

currentChatIcon = $('div.chatPrivateTab div.privateRoomName:contains(' + roomName + ')', tabWrapper).parent().find('div.currentChatIcon');
}

currentChatIcon.show();
currentChatIcon = null;
}


ChatGraphics.prototype.updatePrizeShareLink = function (requestStatus, userTicket) {

var theController = chatController;
var theMessageHandler = theController.messageHandler;

var ticketSubmitButton = $('#' + userTicket, this.chatBoxContentElem);
if (ticketSubmitButton.length) {

var buttonLink = $('a:first', ticketSubmitButton);
var buttonLinkSpan = $('span > span:first', buttonLink);

if (requestStatus > -1) {


chatTools.separateThousands(requestStatus);

buttonLink.hide().addClass('s12_grey').removeClass('s12_green').show();
buttonLinkSpan.text(theController.lang.getText('F175'));

var rowHtml = theMessageHandler.buildInfoMessage(theController.lang.getText('F178') + ' ' + requestStatus + ' ' + theController.lang.getText('F179'));

} else if (requestStatus === -1) {

buttonLink.hide().addClass('s12_grey').removeClass('s12_green').show();
buttonLinkSpan.text(theController.lang.getText('F174'));

var rowHtml = theMessageHandler.buildInfoMessage(theController.lang.getText('F180'));

} else if (requestStatus === -2) {

buttonLink.hide().addClass('s12_grey').removeClass('s12_green').show();
buttonLinkSpan.text(theController.lang.getText('F176'));

var rowHtml = theMessageHandler.buildInfoMessage(theController.lang.getText('F181'));

} else if (requestStatus === -3) {

buttonLink.hide().addClass('s12_grey').removeClass('s12_green').show();
buttonLinkSpan.text(theController.lang.getText('F177'));

var rowHtml = theMessageHandler.buildInfoMessage(theController.lang.getText('F182'));
}

this.addChatRow(rowHtml);
}
}


ChatGraphics.prototype.addPrivateChatTab = function (otherUserName, privateRoomName) {

var theGraphics = this;
var theController = chatController;
var javaRoomObject = theController.roomHandler.getCurrent();
var gameName = javaRoomObject.getName();

theGraphics.hasPrivateChatTabs = true;


if (otherUserName == null) {



var html = '<div class="chatPrivateTab chatPrivateTabPublic"><div class="chatPrivateTabBack"></div><div class="chatPrivateTabFront"><div class="chatterName"><span class="size11grey"><strong>' + theController.lang.getText('F147') + ':&nbsp;</strong></span><strong><a class="otherUserName">' + gameName + '</a></strong></div><div class="blinkIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-161px -109px;"></div></div></div><div class="currentChatIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-181px -271px;"></div></div></div><div style="clear:both;"></div></div></div>';

} else {

var textClass = '';
var userObject = theController.userHandler.getChatter(otherUserName);
if (userObject !== false) {
textClass = ' ' + userObject.getLinkClass();
}

var html = '<div class="chatPrivateTab"><div class="chatPrivateTabBack"></div><div class="chatPrivateTabFront"><div class="chatterName"><span class="size11grey"><strong>' + theController.lang.getText('F103') + ':&nbsp;</strong></span><a class="otherUserName' + textClass + '">' + otherUserName + '</a></div><div class="closeIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-601px -271px;"></div></div></div><div class="blinkIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-161px -109px;"></div></div></div><div class="currentChatIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-181px -271px;"></div></div></div><div style="clear:both;"></div></div><div class="privateRoomName">' + privateRoomName + '</div></div>';

userObject = null;
}

var insertionPoint = $('#chatPrivateTabWrapper > div.clear', this.chatBoxContentElem);
var privateTabWrapper = $('#chatPrivateTabWrapper', this.chatBoxContentElem);

insertionPoint.before(html);
privateTabWrapper.show();

insertionPoint = null;
privateTabWrapper = null;




var closeIcon = $('#chatPrivateTabWrapper > div.chatPrivateTab > div.chatPrivateTabFront > div.closeIcon', this.chatBoxContentElem);
closeIcon.unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function() {
var privateRoomName = $(this).parent('div.chatPrivateTabFront').siblings('div.privateRoomName').text();
theController.endPrivateChat(privateRoomName);
privateRoomName = null;
});
closeIcon = null;


var privateChatTab = $('#chatPrivateTabWrapper > div.chatPrivateTab > div.chatPrivateTabFront', this.chatBoxContentElem);
privateChatTab.unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function() {


var isPublicRoomTab = $(this).parent().hasClass('chatPrivateTabPublic');
if (isPublicRoomTab) {
var privateRoomName = undefined;
theGraphics.switchToChatArea();

} else {
var privateRoomName = $(this).siblings('div.privateRoomName').text();
theGraphics.switchToChatArea(privateRoomName);
}


theGraphics.toggleCurrentChatIcon(privateRoomName);

privateRoomName = null;
privateChatTab = null;
});

privateChatTab = null;
}


ChatGraphics.prototype.removePrivateChatTab = function (privateRoomName) {

if (privateRoomName == undefined) {

var privateTab = $('#chatPrivateTabWrapper > div.chatPrivateTab', this.chatBoxContentElem);
var privateChatWrapper = $('#chatPrivateTabWrapper', this.chatBoxContentElem);

this.hasPrivateChatTabs = false;

privateTab.remove();
privateChatWrapper.hide();

privateTab = null;
privateChatWrapper = null;

} else {

var specificRoomTabs = $('#chatPrivateTabWrapper > div.chatPrivateTab', this.chatBoxContentElem).find('div.privateRoomName:contains("' + privateRoomName + '")');
specificRoomTabs.each(function() {

var myTab = $(this).parent('div.chatPrivateTab');
myTab.remove();
myTab = null;
});

specificRoomTabs = null;
}
}


ChatGraphics.prototype.addChatArea = function (privateRoomName) {

var privateChatArea = $('div.subareaContainer > div.subareaChatTab > div.chatarea' + privateRoomName, this.chatBoxContentElem);
if (privateChatArea.length == 0) {

var html = '<div class="chatarea chatarea' + privateRoomName + '"></div>';
var generalChatArea = $('div.subareaContainer > div.subareaChatTab > div.chatareaGeneral', this.chatBoxContentElem);

generalChatArea.after(html);

html = null;
generalChatArea = null;
}

var chatAreas = $('div.subareaContainer > div.subareaChatTab > div.chatarea', this.chatBoxContentElem)
chatAreas.height(this.getChatAreaHeight());

this.adaptSubareaCSS();

chatAreas = null;
}


ChatGraphics.prototype.removeChatArea = function (privateRoomName) {

var privateRoom = $('div.subareaContainer > div.subareaChatTab > div.chatarea' + privateRoomName, this.chatBoxContentElem);

if (privateRoom.length != 0) {
privateRoom.remove();
}

var chatAreas = $('div.subareaContainer > div.subareaChatTab > div.chatarea', this.chatBoxContentElem)
chatAreas.height(this.getChatAreaHeight());
chatAreas = null;
}


ChatGraphics.prototype.switchToChatArea = function (privateRoomName) {

var elem = (privateRoomName === undefined ? $('div.subareaContainer > div.subareaChatTab > div.chatareaGeneral', this.chatBoxContentElem) : $('div.subareaContainer > div.subareaChatTab > div.chatarea' + privateRoomName, this.chatBoxContentElem));
if (elem) {

elem.show();
elem.siblings('div.chatarea').hide();


this.blinkPrivChat(privateRoomName, true);
}
elem = null;
}




ChatGraphics.prototype.replaceUsers = function (theHtml) {
if (theHtml != '') {

var theGraphics = this;


window.self.clearTimeout(theGraphics.replaceUsersTimer);
theGraphics.replaceUsersTimer = window.self.setTimeout(function() {

var theElement = $('div.subareaContainer > div.subareaFriendsTab', theGraphics.chatBoxContentElem);
theGraphics.replaceHtml(theElement, theHtml);

theGraphics.hideFriendsWaitBar();
theGraphics.setBoxDimensions();

theElement = null;

}, 300);
}
}


ChatGraphics.prototype.replaceBadgeBox = function (badgeboxHtml) {


$('#badgeBoxWrapper', this.chatBoxContentElem).remove();

if (badgeboxHtml.length) {


this.addChatRow('<div class="chatRow chatRowYellowBox" id="badgeBoxWrapper"></div>');


$('#badgeBoxWrapper', this.chatBoxContentElem).html(badgeboxHtml).show();

var roomName = chatController.roomHandler.getCurrentlyViewedRoomName();
this.scrollToBottom(this.getChatArea(roomName));
}
}


ChatGraphics.prototype.replaceTableUsers = function (theHtml) {

var theGraphics = this;


window.self.clearTimeout(theGraphics.replaceUsersTimer);
theGraphics.replaceUsersTimer = window.self.setTimeout(function() {


var theElement = $('div#chatareaUserRowWrapper', theGraphics.chatBoxElem);
theGraphics.replaceHtml(theElement, theHtml);


var innerWrapper = $('div#chatareaUserRowWrapper', theGraphics.chatBoxElem);
var outerWrapper = $('div.tableuserswrapper', theGraphics.chatBoxElem);

innerWrapper.height(theGraphics._getTableUsersWrapperHeight());
outerWrapper.height(theGraphics._getTableUsersWrapperHeight(true));

innerWrapper = null;
outerWrapper = null;
}, 500);
}


ChatGraphics.prototype.replaceIconPopupHtml = function (mouseoverElem, newHtml, newDimensionsObject) {

if (newHtml != '') {

var iconPopupElem = $('#chatIconPopup');


var rowPos = mouseoverElem.parent().position();

var offsetTop = 12;
var offsetLeft = 19;

if (this.usersTabSelected()) {

var toggleboxParent = mouseoverElem.closest('div.toggleBox');
var toggleboxOffset = toggleboxParent.position();

offsetTop += (toggleboxOffset.top + 22);
offsetLeft += 20;
}

iconPopupElem.css({
top : (rowPos.top + offsetTop),
left : (rowPos.left + offsetLeft)
});


if (newDimensionsObject !== undefined) {

if (newDimensionsObject.height !== undefined) {
$('div.iconPopupMiddle', iconPopupElem).children().css('height', newDimensionsObject.height + 'px');
$('#iconPopupCenter').css('height', (newDimensionsObject.height + 20) + 'px');
}
if (newDimensionsObject.width !== undefined) {
iconPopupElem.css('width', (newDimensionsObject.width + 38) + 'px');
$('div.iconPopupTop > div.middle, div.iconPopupBottom > div.middle, div.iconPopupMiddle > div.center', iconPopupElem).css('width', newDimensionsObject.width + 'px');
$('#iconPopupCenter').css('width' , (newDimensionsObject.width + 18) + 'px');
}
}


this.replaceHtml($('#iconPopupCenter'), newHtml);
this.showIconPopup();
}
}


ChatGraphics.prototype.replaceHtml = function(element, html) {

var oldElement = element[0];
if (oldElement && oldElement.parentNode) {

var newElement = oldElement.cloneNode(false);
newElement.innerHTML = html;

oldElement.parentNode.replaceChild(newElement, oldElement);



}


element.remove();

element = null;
oldElement = null;
newElement = null;
html = null;
};


ChatGraphics.prototype._getTableUsersWrapperHeight = function (addParentMarginsHeight) {

var noOfTableUsers = chatController.userHandler.getNumTableChatters();
if (noOfTableUsers == 0) {
return 0;
}

var userWrapperParentsMarginHeight = (this.isIE() ? 15 : 15);
var tableUsersHeaderHeight = 19;

var userRowHeight = 19;
var usersWrapperMaxHeight = (userRowHeight * 4) + tableUsersHeaderHeight;


var usersWrapperHeight = (userRowHeight * noOfTableUsers) + tableUsersHeaderHeight;
if (usersWrapperHeight > usersWrapperMaxHeight) {
usersWrapperHeight = usersWrapperMaxHeight;
}

if (addParentMarginsHeight) {
usersWrapperHeight += userWrapperParentsMarginHeight;
}
return usersWrapperHeight;
}


ChatGraphics.prototype.replaceRooms = function (theHtml) {

if (theHtml != '') {

var theElement = $('div.subareaContainer > div.subareaRoomsTab', this.chatBoxContentElem);
this.replaceHtml(theElement, theHtml);


if (!chatSettings.isMultiplayerChat()) {


window.setTimeout(function () {


theElement = $('div.subareaContainer > div.subareaRoomsTab', this.chatBoxContentElem);

var myRow = $('div.toggleBoxHeaderCurrent', this.chatBoxContentElem).closest('div.toggleBox');


theElement.scrollTo(myRow);
theElement.scrollTo('-=5px');
theElement.trigger('click');

myRow = null;
theElement = null;
}, 0);
}

this.flushRoomEvents();
this.addRoomTabEvent();
this.addRoomRowEvents();
this.hideRoomsWaitBar();
}
}


ChatGraphics.prototype.showProfileWaitBar = function () {
var profileInfo = $('#chatTabProfileInfo', this.chatBoxContentElem);
var waitbar = $('#profileWaitBar', this.chatBoxContentElem);

profileInfo.hide();
waitbar.show();

profileInfo = null;
waitbar = null;
}

ChatGraphics.prototype.hideProfileWaitBar = function () {
var profileInfo = $('#chatTabProfileInfo', this.chatBoxContentElem);
var waitbar = $('#profileWaitBar', this.chatBoxContentElem);

profileInfo.show();
waitbar.hide();

profileInfo = null;
waitbar = null;
}


ChatGraphics.prototype.showFriendsWaitBar = function () {
var friendsWrapper = $('div.subareaContainer > div.subareaFriendsTab > div.toggleBox', this.chatBoxContentElem);
var waitbar = $('#friendsWaitBar', this.chatBoxContentElem);

friendsWrapper.hide();
waitbar.show();

friendsWrapper = null;
waitbar = null;
}

ChatGraphics.prototype.hideFriendsWaitBar = function () {
var friendsWrapper = $('div.subareaContainer > div.subareaFriendsTab > div.toggleBox', this.chatBoxContentElem);
var waitbar = $('#friendsWaitBar', this.chatBoxContentElem);

friendsWrapper.show();
waitbar.hide();

friendsWrapper = null;
waitbar = null;
}


ChatGraphics.prototype.showRoomsWaitBar = function () {
var roomsBox = $('div.subareaContainer > div.subareaRoomsTab > div.toggleBox', this.chatBoxContentElem);
var waitbar = $('#roomsWaitBar', this.chatBoxContentElem);

roomsBox.hide();
waitbar.show();

roomsBox = null;
waitbar = null;
}

ChatGraphics.prototype.hideRoomsWaitBar = function () {
var roomsBox = $('div.subareaContainer > div.subareaRoomsTab > div.toggleBox', this.chatBoxContentElem);
var waitbar = $('#roomsWaitBar', this.chatBoxContentElem);

roomsBox.show();
waitbar.hide();

roomsBox = null;
waitbar = null;
}


ChatGraphics.prototype.showLogoutLink = function () {
var linky = $('#chatLogoutLink', this.chatBoxElem);

linky.toggleClass('link11grey', true);
linky.toggleClass('link11lightgrey', false);

linky = null;
}

ChatGraphics.prototype.hideLogoutLink = function () {
var linky = $('#chatLogoutLink', this.chatBoxElem);

linky.toggleClass('link11grey', false);
linky.toggleClass('link11lightgrey', true);

linky = null;
}


ChatGraphics.prototype.scrollToBottom = function (chatArea) {

if (chatArea) {

var scrolledFromTop = chatArea.attr('scrollTop');
var visibleAreaHeight = chatArea.height();
var maxScrollableDistance = chatArea.attr('scrollHeight');

var lastRowHeight = $('div.chatRow:last', chatArea).height();

var hasScrollbar = (maxScrollableDistance > visibleAreaHeight);
var atTheBottom = ((lastRowHeight + scrolledFromTop) > (maxScrollableDistance - visibleAreaHeight - 38));
var atTheTop = (scrolledFromTop === 0);

if (hasScrollbar && (atTheTop || atTheBottom)) {

chatArea.scrollTop(maxScrollableDistance);
}
}
}




ChatGraphics.prototype.profileSubareaVisible = function () {
return ($('#chatTabProfileInfo:visible', this.chatBoxContentElem).length > 0);
}

ChatGraphics.prototype.profileTabIsUser = function (userId) {
if (this.profileSubareaVisible()) {
return (parseInt($('#chatTabProfileInfo', this.chatBoxContentElem).attr('class')) === userId);
}
return false;
}


ChatGraphics.prototype.disableFriendRequestButton = function (newText) {

var addFriendButton = $('#chatTabProfileAddFriendButton', this.chatBoxContentElem)
addFriendButton.removeClass('s12_green s12_grey').addClass('s12_grey');
$('span.slider > span', addFriendButton).text(newText);
}
ChatGraphics.prototype.enableFriendRequestButton = function () {
var theController = chatController;

var addFriendButton = $('#chatTabProfileAddFriendButton', this.chatBoxContentElem);
addFriendButton.removeClass('s12_green s12_grey').addClass('s12_green');

theController.lang.setPage('profilemenu-php');
$('span.slider > span', addFriendButton).text(theController.lang.getText('F14'));
theController.lang.setPage('chat');
}


ChatGraphics.prototype.removeFriendRequestSent = function (targetUserId) {

var wrapper = $('#chatNewsTabsWrapper', this.chatBoxContentElem);
var tabby = $(('div.chatNewsTab:has(div.uid' + targetUserId + ')'), wrapper);
tabby.remove();
this.checkForHideNewsItemWrapper();
}


ChatGraphics.prototype.showIMInviteBox = function(sendingJavaUserObject, senderUsername, senderIsMale, senderIsVip, roomName) {


var msgHolder = $('#imPopupHolder', this.chatBoxContentElem);

if (msgHolder.length) {
var myPopupWrapper = $('#chatIMPopup' + roomName, msgHolder);

if (!myPopupWrapper.length) {

msgHolder.append('<div id="chatIMPopup' + roomName + '" class="chatIMPopup"></div>');

myPopupWrapper = $('#chatIMPopup' + roomName, msgHolder);

if (myPopupWrapper.length) {

myPopupWrapper.html('<div class="borderLiner"><div class="lightLine"></div><div class="headerBar"><div class="iconWrapper chatIMPopupIcon">...</div><span class="size12white chatIMPopupUsername"><strong>...</strong></span><div class="closeIconWrapper "><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -271px;"></div></div></div></div><div class="bodyBox"><div class="profilePicWrapper"><div class="profilePicBorder"><img src="http://www.spielmit.com/images/profiles/noimage200x150_male.gif" width="64" height="49" alt="" /></div><div class="profilePicBottomBorder"></div></div><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -109px;"></div></div><div class="chatIMPopupMessage size12white">...</div><div style="clear:both;"></div></div></div>');

var theIMController = imChatController;
var theChatVars = chatVars;
var theController = chatController;


$('div.closeIconWrapper', myPopupWrapper).unbind('click.chatBoxIMEvents').bind('click.chatBoxIMEvents', function() {


if (theIMController) {

theIMController.declineInvitation(sendingJavaUserObject, roomName);

myPopupWrapper.hide();

theIMController.removeFromIMsPending(roomName);
theIMController.uncacheMessages(theChatVars.mbp, roomName);
theIMController.showIMsPending();
}
});


var chatIconHtml = theController.userHandler.getChatIconHtml(sendingJavaUserObject);
var iconElem = $('div.chatIMPopupIcon', myPopupWrapper);
iconElem.html(chatIconHtml);


$('span.chatIMPopupUsername strong', myPopupWrapper).text(senderUsername);


theController.replaceImPopupProfilePicUrl(senderUsername, myPopupWrapper);


var replacementText = senderUsername + ' ' + theController.lang.getText('F140') + ' ' + '<span class="underlined">' + theController.lang.getText('F141') + '</span>';
var theMessageElem = $('div.chatIMPopupMessage', myPopupWrapper);
theMessageElem.html(replacementText)


.unbind('click.chatBoxIMEvents').bind('click.chatBoxIMEvents', function() {


if (theIMController) {
theIMController.openImWindow(senderUsername, theChatVars.mbp);
theIMController.acceptInvitation(sendingJavaUserObject, roomName);

myPopupWrapper.slideUp(300);

theIMController.removeFromIMsPending(roomName);
theIMController.showIMsPending();
}
});
}
}

if (myPopupWrapper.length) {


msgHolder.css('bottom', '80px');
myPopupWrapper.slideDown(1500);
}
}
}




function toggleToSomeBox(whichBox) {
$(document).ready(function() {

var theController = chatController;
var theGraphics = theController.graphics;
var isSimpleVersion = chatVars.isSimpleVersion;


if (whichBox != 'settingsChaticons') {
theController.requestChatIconIdchange();
}


if (!theController.isLoggedOut()) {


var headerBar = $('#chatbox > div.outerbox > div.lightborder > div.darkborder > div.headerbar');
var firstBacklink = $('div.submenuwrapperChat > div.backLink:first', headerBar);
var allSubmenus = $('div.submenuwrapper', headerBar);
var allSubareaContainers = $('#chatboxContentWrapper div.subareaContainer');
var allSubareas = $('div.subareaContainer > div.subarea', theGraphics.chatBoxContentElem);
var multiplayerTableUsersWrapper = $('div.tableuserswrapper', theGraphics.chatBoxElem);


firstBacklink.hide();
allSubmenus.hide();
allSubareaContainers.hide();
allSubareas.hide();
multiplayerTableUsersWrapper.hide();

var myMenuItem, mySubmenu, mySubareaContainer, mySubarea;


if (whichBox === 'chat') {

myMenuItem = $('div.menuitem:first', theGraphics.chatBoxElem);
mySubmenu = $('div.submenuwrapperChat',headerBar);
mySubareaContainer = $('#chatboxContentWrapper div.subareaContainer:first');
mySubarea = $('#chatboxContentWrapper div.subareaContainer > div.subareaChatTab');


theGraphics.switchToSubarea('subareaChatTab');

if (theController.roomHandler.multiplayerTableRoomJoined()) {
multiplayerTableUsersWrapper.show();
}

} else if (whichBox === 'profile') {

myMenuItem = $('div.menuitem:first', theGraphics.chatBoxElem).next();
mySubmenu = $('div.submenuwrapperProfile', headerBar);
mySubareaContainer = $('#chatboxContentWrapper div.subareaContainer:first').next();
mySubarea = $('#chatboxContentWrapper > div.subareaContainer > div.subareaProfileTab');

myMenuItem.show();

} else if (whichBox === 'loggedout') {

mySubmenu = $('div.submenuwrapperLoggedout', headerBar);
mySubareaContainer = $('#chatboxContentWrapper div.subareaContainer:first').next().next();
mySubarea = $('#chatboxContentWrapper > div.subareaContainer > div.subareaLoggedoutTab');

globalThemeboxMenuitemToggler.hideAll();

} else if (whichBox === 'settingsGeneral') {

theGraphics.freezeWrenchIconBG = true;

myMenuItem = $('#chatheadericonWrench > div.bg', theGraphics.chatBoxElem);

mySubmenu = $('div.submenuwrapperSettingsGeneral', headerBar);
mySubareaContainer = $('#chatboxContentWrapper div.subareaContainer:first').next().next().next();
mySubarea = $('#chatboxContentWrapper > div.subareaContainer > div.subareaSettingsGeneralTab');

globalThemeboxMenuitemToggler.hideAll();
myMenuItem.show();

} else if (whichBox === 'settingsChaticons') {

theGraphics.freezeWrenchIconBG = true;


var ownUser = theController.userHandler.getCurrent();
if (ownUser) {
var existingChatIconId = theController.userHandler.getChatIconId(ownUser._chatUserObject._javaUserObject);
theGraphics.replaceCurrentChatIconHtml(existingChatIconId);
}



myMenuItem = $('#chatheadericonWrench > div.bg', theGraphics.chatBoxElem);
mySubmenu = $('div.submenuwrapperSettingsChaticons', headerBar);
mySubareaContainer = $('#chatboxContentWrapper div.subareaContainer:first').next().next().next();
mySubarea = $('#chatboxContentWrapper > div.subareaContainer > div.subareaSettingsChaticonsTab');

globalThemeboxMenuitemToggler.hideAll();
myMenuItem.show();

} else if (whichBox === 'signup') {

myMenuItem = $('div.menuitem:first', theGraphics.chatBoxElem).next().next();
mySubmenu = $('div.submenuwrapperSignup', headerBar);
mySubareaContainer = $('#chatboxContentWrapper div.subareaContainer:first').next().next().next().next();
mySubarea = $('#chatboxContentWrapper > div.subareaContainer > div.subareaSignupTab');

myMenuItem.show();
}


if (mySubmenu && mySubmenu.length && !isSimpleVersion) {
mySubmenu.show();
}
if (mySubareaContainer && mySubareaContainer.length) {
mySubareaContainer.show();
}
if (mySubarea && mySubarea.length) {
mySubarea.show();
}

if (whichBox == 'settingsGeneral' || whichBox == 'settingsChaticons') {

mySubarea.attr('scrollTop', 0);

} else {


theGraphics.freezeWrenchIconBG = false;

var wrenchIconTabBG = $('#chatheadericonWrench', theGraphics.chatBoxElem).children(':first');
wrenchIconTabBG.hide();
wrenchIconTabBG = null;



if (myMenuItem && myMenuItem.length) {
globalThemeboxMenuitemToggler.switchTo(myMenuItem);
}
}


headerBar = null;
firstBacklink = null;
allSubmenus = null;
allSubareaContainers = null;
multiplayerTableUsersWrapper = null;
myMenuItem = null;
mySubmenu = null;
mySubareaContainer = null;
mySubarea = null;
}
});
}
function toggleToChatBox() {
toggleToSomeBox('chat');
}
function toggleToProfileBox() {
toggleToSomeBox('profile');
}
function toggleToLoggedoutBox() {
toggleToSomeBox('loggedout');
}
function toggleToSettingsGeneralBox() {
toggleToSomeBox('settingsGeneral');
}
function toggleToSettingsChaticonsBox() {
toggleToSomeBox('settingsChaticons');
}
function toggleToSignupBox() {
toggleToSomeBox('signup');
}



ChatGraphics.prototype.setupBasicChat = function() {
var theController = chatController;

if (!theController._isReconnecting) {
var theGraphics = this;
var writeBoxFront = $('#writeboxFront', theGraphics.chatBoxContentElem);






var sendbuttonContainer = $('#sendbuttonContainer', writeBoxFront);
sendbuttonContainer.unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function () {
theController.sendTypedMessage();
});


if (!theGraphics.isIE()) {

sendbuttonContainer.unbind('mouseenter.chatBoxEvents').bind('mouseenter.chatBoxEvents', function () {

$('div.buttonLeftside', $(this)).removeClass('buttonLeftsideNormal').addClass('buttonLeftsideOver');
$('div.buttonMiddle',$(this)).removeClass('buttonMiddleNormal').addClass('buttonMiddleOver');
$('div.buttonRightside', $(this)).removeClass('buttonRightsideNormal').addClass('buttonRightsideOver');

}).unbind('mouseleave.chatBoxEvents').bind('mouseleave.chatBoxEvents', function() {

$('div.buttonLeftside', $(this)).removeClass('buttonLeftsideOver').addClass('buttonLeftsideNormal');
$('div.buttonMiddle',$(this)).removeClass('buttonMiddleOver').addClass('buttonMiddleNormal');
$('div.buttonRightside', $(this)).removeClass('buttonRightsideOver').addClass('buttonRightsideNormal');

});
}
sendbuttonContainer = null; 


theGraphics.readySmileyBoxes(true);


var chatArea = $('div.subareaContainer > div.subareaChatTab', this.chatBoxContentElem);
chatArea.css('cursor', 'pointer');
chatArea = null;


var typedMessageElem = theGraphics.textAreaElem;
var lastKeydownWasTab = false;

typedMessageElem
.unbind('keydown.chatBoxEvents')
.one('keydown, click, focus', function () {
theGraphics.hideTextareaHelptext();
})
.bind('keydown.chatBoxEvents', function (eType) {
var typePressed = eType.which;

if (typePressed === 9) {
theController.cycleEnteredUsername();
lastKeydownWasTab = true;

} else {

var typePressed = eType.which;
if (typePressed === 32) {

if (lastKeydownWasTab) {
theController.finishEnteredUsername();
}

} else if (typePressed === 13) {
theController.sendTypedMessage();
}

if (lastKeydownWasTab) {
theController.flushEnteredUsername();
lastKeydownWasTab = false;
}


if (typePressed !== 8 && typePressed !== 46) {

var currentTypedText = $(this).val();

if (currentTypedText.length >= theGraphics._MAX_CHARS_TYPED) {
theGraphics.setTypedMessage(currentTypedText.substring(0, theGraphics._MAX_CHARS_TYPED));
}
}
}
});

typedMessageElem = null;


var visibleHelpText = $('#typedMessageHelpText', writeBoxFront);
visibleHelpText.one('click', function () {
theGraphics.hideTextareaHelptext();
theGraphics._addToTypedMessage('');
});
visibleHelpText = null; 





theGraphics.flushUserTabEvent();
theGraphics.flushUserRowEvents();





theGraphics.flushRoomEvents();




theGraphics.setBoxDimensions();


theGraphics.adaptSubareaCSS();


theGraphics.resetTypedMessage();


var headerBar = $('#chatbox > div.outerbox > div.lightborder > div.darkborder > div.headerbar');
var innerWrapper = $('div.innerwrapper', theGraphics.chatBoxElem);
var chatareaGeneral = $('div.chatareaGeneral', theGraphics.chatBoxContentElem);
var firstBacklink = $('div.submenuwrapperChat > div.backLink:first', theGraphics.chatBoxElem);
var allSubmenus = $('div.submenuwrapper', headerBar);
var wrenchIcon = $('#chatheadericonWrench');

toggleToChatBox();

innerWrapper.show();
chatareaGeneral.show();
firstBacklink.hide();
allSubmenus.hide();
wrenchIcon.hide();

innerWrapper = null; 
chatareaGeneral = null; 
firstBacklink = null; 
allSubmenus = null; 
wrenchIcon = null; 

theGraphics.hideProfileTab();
theGraphics.hideSignupTab();

$.publish('chatgraphics.done');
}
}


ChatGraphics.prototype.setupSettingsUsersAndRooms = function(ownUserIsVip) {
var theGraphics = this;
var theController = chatController;
var theSettings = chatSettings;






var profileCloseLink = $('div.submenuwrapperProfile > div.closeLink, ', theGraphics.chatBoxElem);
profileCloseLink.bind('click.chatBoxEvents', function() {
theGraphics.hideProfileTab();
});
profileCloseLink = null; 




theGraphics.readySmileyBoxes(ownUserIsVip);






$('div.chatRowBankWon', theGraphics.chatboxContentWrapper).live('click', function() {


var prizeShareLink = $('div.prizeShareLink', $(this));
if (prizeShareLink.length) {
theController.handlePrizeShareRequest(prizeShareLink.attr('id'));
}
return false;
});


$('div.greyBoxHeader, div.yellowBoxHeader, div.blackBoxHeader', theGraphics.chatboxContentWrapper).live('click', function () {
$(this).closest('div.chatRow').remove();
return false;
});





theGraphics.addUserTabEvent();
theGraphics.addUserRowEvents();





theGraphics.addRoomTabEvent();




$('#chatSignupareaLoginLink, #chatAreaLoginLink', theGraphics.chatboxContentWrapper).live('click', function () {
if (confirm(theController.lang.getText('F206'))) {
var currentLocation = window.self.location.toString();
var newUrl = currentLocation.replace('#', '') + '&forceLogout';
window.self.location = newUrl;
$(this).die('click');
}
});

var usernameInput = $('#chatSignupUsername', theGraphics.chatboxContentWrapper);
var passwordInput = $('#chatSignupPassword', theGraphics.chatboxContentWrapper);
var emailInput = $('#chatSignupEmail', theGraphics.chatboxContentWrapper);
var genderInput = $('#chatSignupGender', theGraphics.chatboxContentWrapper);
var termsInput = $('#chatSignupTerms', theGraphics.chatboxContentWrapper);


$('#chatSignupAltUsernamesBox > div.altUsernameRow', theGraphics.chatboxContentWrapper).live('click', function () {
usernameInput.val($('div.altUsernameName > span', $(this)).text());
});


$('#chatSignupButtonWrapper', theGraphics.chatboxContentWrapper).unbind('click.chatBoxSignupEvents').bind('click.chatBoxSignupEvents', function () {


var usernameValid = (usernameInput.val().length >= 4);
var passwordValid = (passwordInput.val().length >= 4);
var emailValid = (emailInput.val().length >= 6);
var genderValid = (genderInput.val() === 'm' || genderInput.val() === 'k');
var termsValid = (termsInput.attr('checked'));

if (!usernameValid || !passwordValid || !emailValid || !genderValid || !termsValid) {


theGraphics.replaceGuestSignupErrors(usernameValid, passwordValid, emailValid, genderValid, termsValid);


} else {




theController.handleSignup(usernameInput.val(), passwordInput.val(), emailInput.val(), genderInput.val());
}
});






var inputContainer = $('div.subareaContainer div.settingsBlock > div.settingsSubBlock > div.settingsOption', this.chatBoxContentElem);

var fontSizeCurSelection = $('input[name=fontSize][value=' +theSettings.getFontSize() + ']', inputContainer);
var infoTextCurSelection = $('input[name=infoText][value=' +theSettings.getInfoText() + ']', inputContainer);
var infoTextRankCurSelection = $('input[name=infoTextRank][value=' +theSettings.getInfoTextRank() + ']', inputContainer);
var widthCurSelection = $('input[name=width][value=' +theSettings.getChatareaWidth() + ']', inputContainer);
var smileyTypeCurSelection = $('input[name=smileyType][value=' +theSettings.getSmileyType() + ']', inputContainer);
var fontWeightCurSelection = $('input[name=fontWeight][value=' +theSettings.getFontWeight() + ']', inputContainer);
var themeCurSelection = $('input[name=theme][value=' +theSettings.getStyleSheet() + ']',inputContainer);
var avatarsVisCurSelection = $('input[name=avatarsVisible][value=' +theSettings.getAvatarsVisible() + ']', inputContainer);
var rankVisCurSelection =$('input[name=rankVisible][value=' +theSettings.getRankVisible() + ']', inputContainer);
var soundsCurSelection = $('input[name=sounds][value=' +theSettings.getSoundSettings() + ']', inputContainer);
var oldChatCurSelection = $('input[name=oldChatSettings][value=' +theSettings.getOldChatSettings() + ']',inputContainer);

var fontSize = $('input[name=fontSize]', inputContainer);
var fontWeight = $('input[name=fontWeight]', inputContainer);
var theme = $('input[name=theme]', inputContainer);
var infoText = $('input[name=infoText]', inputContainer);
var infoTextRank = $('input[name=infoTextRank]', inputContainer);
var width = $('input[name=width]', inputContainer);
var smileyType = $('input[name=smileyType]', inputContainer);
var avatarsVisible = $('input[name=avatarsVisible]', inputContainer);
var rankVisible = $('input[name=rankVisible]', inputContainer);
var oldChatSettings = $('input[name=oldChatSettings]', inputContainer);
var sounds = $('input[name=sounds]', inputContainer);
var standardSettings = $('input[name=standardSettings]', inputContainer);


fontSizeCurSelection.attr('checked', 'checked');
infoTextCurSelection.attr('checked', 'checked');
infoTextRankCurSelection.attr('checked', 'checked');
widthCurSelection.attr('checked', 'checked');
smileyTypeCurSelection.attr('checked', 'checked');
fontWeightCurSelection.attr('checked', 'checked');
avatarsVisCurSelection.attr('checked', 'checked');
rankVisCurSelection.attr('checked', 'checked');
soundsCurSelection.attr('checked', 'checked');
oldChatCurSelection.attr('checked', 'checked');
themeCurSelection.attr('checked', 'checked');


fontSize.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setFontSize(newValue);
theGraphics.adaptSubareaCSS();
});


fontWeight.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setFontWeight(newValue);
theGraphics.adaptSubareaCSS();
});


theme.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setStyleSheet(newValue);
theGraphics.adaptSubareaCSS();
});


infoText.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setInfoText(newValue);
theGraphics.adaptSubareaCSS();
});


infoTextRank.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setInfoTextRank(newValue);
theGraphics.adaptSubareaCSS();
});


width.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setChatareaWidth(newValue);

theGraphics.setBoxDimensions(true);
});


smileyType.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setSmileyType(newValue);

theController.smileyHandler.remakeSmileyHtml(newValue);

theGraphics.adaptSubareaCSS();
});


avatarsVisible.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setAvatarsVisible(newValue);
theGraphics.adaptSubareaCSS();
});


rankVisible.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setRankVisible(newValue);
theGraphics.adaptSubareaCSS();
});


sounds.bind('click.chatBoxEvents', function () {
var newValue = $(this).val();
theSettings.setSoundSettings(newValue);
theGraphics.adaptSubareaCSS();
});


standardSettings.bind('click.chatBoxEvents', function () {
theSettings.resetSettings();

var defaultFontSize =$('input[name=fontSize][value=medium]', inputContainer);
var defaultWidth =$('input[name=width][value=normal]', inputContainer);
var defaultFontWeight =$('input[name=fontWeight][value=normal]', inputContainer);
var defaultTheme =$('input[name=][value=standard]', inputContainer);
var defaultInfoText =$('input[name=infoText][value=friends]', inputContainer);
var defaultInfoTextRank = $('input[name=infoTextRank][value=active]', inputContainer);
var defaultSmileyType =$('input[name=smileyType][value=animated]', inputContainer);
var defaultAvatarVis =$('input[name=avatarsVisible][value=1]', inputContainer);
var defaulRankVis =$('input[name=rankVisible][value=1]', inputContainer);
var defaultSounds =$('input[name=sounds][value=1]', inputContainer);

defaultFontSize.attr('checked', 'checked');
defaultWidth.attr('checked', 'checked');
defaultFontWeight.attr('checked', 'checked');
defaultTheme.attr('checked', 'checked');
defaultInfoText.attr('checked', 'checked');
defaultInfoTextRank.attr('checked', 'checked');
defaultSmileyType.attr('checked', 'checked');
defaultAvatarVis.attr('checked', 'checked');
defaulRankVis.attr('checked', 'checked');
defaultSounds.attr('checked', 'checked');

defaultFontSize = null;
defaultWidth = null;
defaultFontWeight = null;
defaultTheme = null;
defaultInfoText = null;
defaultInfoTextRank = null;
defaultSmileyType = null;
defaultAvatarVis = null;
defaulRankVis = null;
defaultSounds = null;

$(this).attr('checked', 'checked');
theGraphics.adaptSubareaCSS();
theGraphics.setBoxDimensions(true);
});


if (chatVars.langid !== '1') {

infoTextRank.parent().parent().hide();
infoTextRank.parent().parent().prev().hide();

rankVisible.parent().parent().hide();
rankVisible.parent().parent().prev().hide();
}





var chatIconBoxes = $('#chatIconsWrapper div.chatIconBox', theGraphics.chatBoxContentElem);
var chatVIPIconsWrapper = $('#chatVIPIconsWrapper > div.chatIconBox', theGraphics.chatBoxContentElem);
chatIconBoxes.add(chatVIPIconsWrapper).bind('click.chatBoxEvents', function () {


if (($(this).parent().attr('id') == 'chatVIPIconsWrapper')) {
if (!theController.userHandler.getCurrent()._chatUserObject.isVip()) {
return;
}
}

var newValue = $(this).attr('id');
theController.saveUserChaticonSetting(newValue);
theGraphics.replaceCurrentChatIconHtml(newValue);

theGraphics.hideProfileTab();
});


inputContainer = null; 
chatIconBoxes = null; 

fontSizeCurSelection = null; 
infoTextCurSelection = null; 
widthCurSelection = null; 
smileyTypeCurSelection = null; 
fontWeightCurSelection = null; 
themeCurSelection = null; 

fontSize = null; 
infoText = null; 
width = null; 
smileyType = null; 
fontWeight = null; 
theme = null; 

standardSettings = null; 






toggleToChatBox();


theGraphics.setupDropdownMenu();


if (theGraphics._useDropdownSettings) {

var generalSettingsItem = $('#dropmenuitemGeneral', theGraphics.chatBoxElem);
var chatIconSettingsItem = $('#dropmenuitemChaticons', theGraphics.chatBoxElem);
var dropmenuitemHelp = $('#dropmenuitemHelp', theGraphics.chatBoxElem);

dropmenuitemHelp.bind('click.chatBoxEvents', function(){
$('#gameObject').css('visibility', 'hidden');
KovModal.Show(language.getText('F230', 'chat').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '<br />'), null, function(){
$('#gameObject').css('visibility', 'visible');
});

});
generalSettingsItem.bind('click.chatBoxEvents', toggleToSettingsGeneralBox);
chatIconSettingsItem.bind('click.chatBoxEvents', toggleToSettingsChaticonsBox);

var logoutItem = $('#dropmenuitemLogout', theGraphics.chatBoxElem);
if (logoutItem.length) {
logoutItem.bind('click.chatBoxEvents', function() {theController.logout(); });
}

logoutItem = null;
generalSettingsItem = null;
chatIconSettingsItem = null;
}




var subMenuItems = $('div.submenuwrapper > div.menuitemChat', this.chatBoxElem);
subMenuItems.bind('click.chatBoxEvents', function() {
var uniqueTabname = $(this).attr('id');
theGraphics.switchToSubarea(uniqueTabname);
uniqueTabname = null;
});
subMenuItems = null;


var backButtons = $('div.submenuwrapper > div.backLink > a', this.chatBoxElem);
backButtons.bind('click.chatBoxEvents', function() {
toggleToChatBox();
theGraphics.switchToSubarea('subareaChatTab');
});
backButtons = null;


var closeLinks = $('div.submenuwrapper > div.closeLink', this.chatBoxElem);
closeLinks.bind('click.chatBoxEvents', function() {
toggleToChatBox();
theGraphics.switchToSubarea('subareaChatTab');
});
closeLinks = null;






if (theSettings.isMultiplayerChat()) {
this.disableRoomSwitching();
}


else if (theSettings.isInstantMessenger()) {

this.disableRoomSwitching();

$(window.self).bind('blur.chatBoxEvents', function () {


if (!chatController.messageHandler.outgoingMessagesBlocked()) {
theGraphics._imWindowBlurred = true;
}

}).bind('focus.chatBoxEvents', function () {
theGraphics._imWindowBlurred = false;

if (imChatController) {

var theRoom = chatController.roomHandler.getCurrent();
if (theRoom) {

var theRoomName = theRoom.getName();
imChatController.blinkIMWindowTitle(theRoomName, true);
imChatController.resetNewMsgSoundPlayed(theRoomName);
}
}
});

window.self.setTimeout(function () {
if (window.self.focus) {window.self.focus()}
theGraphics.textAreaElem.focus();
}, 1);
}
}


ChatGraphics.prototype.readySmileyBoxes = function (vipVersion) {

vipVersion = (vipVersion === true ? true : false);

var chatboxObject = this;
var theController = chatController;
var writeBoxFront = $('#writeboxFront', chatboxObject.chatBoxContentElem);

var smileyButtonContainer = $('#smileybuttonContainer', writeBoxFront);
var smileyButtonUp = $('#smileybuttonUp');
var smileybuttonDown = $('#smileybuttonDown');

var stuffButtonContainer = $('#stuffbuttonContainer', writeBoxFront);
var stuffButtonUp = $('#stuffbuttonUp');
var stuffButtonDown = $('#stuffbuttonDown');

smileyButtonContainer.unbind('.chatBoxEvents');
stuffButtonContainer.unbind('.chatBoxEvents');




if (!chatboxObject.isIE()) {

smileyButtonContainer.bind('mouseenter.chatBoxEvents', function () {
smileyButtonUp.removeClass('smileybuttonUpNormal').addClass('smileybuttonUpOver');
smileybuttonDown.removeClass('smileybuttonDownNormal').addClass('smileybuttonDownOver');
}).bind('mouseleave.chatBoxEvents', function () {
smileyButtonUp.removeClass('smileybuttonUpOver').addClass('smileybuttonUpNormal');
smileybuttonDown.removeClass('smileybuttonDownOver').addClass('smileybuttonDownNormal');
});

stuffButtonContainer.bind('mouseenter.chatBoxEvents', function () {
stuffButtonUp.removeClass('stuffButtonUpNormal').addClass('stuffButtonUpOver');
stuffButtonDown.removeClass('stuffButtonDownNormal').addClass('stuffButtonDownOver');
}).bind('mouseleave.chatBoxEvents', function () {
stuffButtonUp.removeClass('stuffButtonUpOver').addClass('stuffButtonUpNormal');
stuffButtonDown.removeClass('stuffButtonDownOver').addClass('stuffButtonDownNormal');
});
}



smileyButtonContainer.bind('click.chatBoxEvents',function () {chatboxObject.toggleSmileyContainer();});
stuffButtonContainer.bind('click.chatBoxEvents',function () {chatboxObject.toggleStuffContainer();});


var smileyBottom = $('#smileyBottom, #stuffBottom', chatboxObject.chatBoxContentElem);
var smileyPagesElem = $('div.smileyPages', smileyBottom);
var stuffPagesElem = $('div.stuffPages', smileyBottom);

smileyPagesElem.empty();
stuffPagesElem.empty();

chatboxObject.replaceHtml(smileyPagesElem, theController.smileyHandler.drawSmileyBoxes(vipVersion));
chatboxObject.replaceHtml(stuffPagesElem, theController.smileyHandler.drawStuffBoxes(vipVersion));


var smileyImages = $('img.smiley', smileyBottom);
smileyImages.unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function() {

var smileyNickname = $(this).attr('alt');
var smileyObject = theController.smileyHandler.getSmileyClicked(smileyNickname);
var chars = (smileyObject != false ? smileyObject.getChars() : '');


if (smileyObject.isVIPOnly() && !vipVersion) {

var theHtml = theController.messageHandler.buildInfoMessage(theController.lang.getText('F69'));
var roomName = theController.roomHandler.getCurrentlyViewedRoomName()

chatboxObject.addChatRow(theHtml, roomName);

} else {

chatboxObject.hideSmileyContainer();
chatboxObject.hideStuffContainer();

chatboxObject._addToTypedMessage(chars);
}

smileyNickname = null; 
smileyObject = null; 
});



smileyBottom = null; 
smileyPagesElem = null; 
stuffPagesElem = null; 
drawnSmileyBoxes = null; 
drawnStuffBoxes = null; 
}


ChatGraphics.prototype.setupDropdownMenu = function () {

var theGraphics = this;

var wrenchIconTab = $('#chatheadericonWrench', this.chatBoxElem);
var wrenchIconTabBG = wrenchIconTab.children(':first');
var dropdown = $('div.moredropmenu', wrenchIconTab);

wrenchIconTab.show();

wrenchIconTab.bind('mouseenter.chatBoxEvents', function () {

if (theGraphics._useDropdownSettings && !chatController.isLoggedOut()) {
window.self.clearTimeout(theGraphics.hideDropdownTimer);
dropdown.show();
}
wrenchIconTabBG.show();

}).bind('mouseleave.chatBoxEvents', function () {

if (theGraphics._useDropdownSettings) {

theGraphics.hideDropdownTimer = window.self.setTimeout(function () {

if (!theGraphics.freezeWrenchIconBG) {
wrenchIconTabBG.hide();
}
dropdown.hide();

}, 500);

} else {
if (!theGraphics.freezeWrenchIconBG) {
wrenchIconTabBG.hide();
}
}
});

if (!theGraphics._useDropdownSettings) {
wrenchIconTab.bind('click.chatBoxEvents', toggleToSettingsGeneralBox);
}
}



ChatGraphics.prototype.drawNongameProfileInfo = function (profileInfoObject) {

var theController = chatController;
var theUserHandler = theController.userHandler;
var theGraphics = this;


if (!theUserHandler.profileInfoRedrawBlocked()) {
theUserHandler.blockProfileInfoRedraw();

if (profileInfoObject) {

var subareaProfileTab = $('#chatTabProfileInfo', theGraphics.chatBoxContentElem);


subareaProfileTab.removeClass().addClass(profileInfoObject.userId);


$('#chatTabProfileImageElem', subareaProfileTab).attr({src : profileInfoObject.profileImage, alt : profileInfoObject.username});


var chatIconHtml = '';
var chatUserObject = theUserHandler.getChatter(profileInfoObject.username);
if (chatUserObject) {
var chatIconHtml = theUserHandler.getChatIconHtml(chatUserObject._javaUserObject);
}

var chatIconElement = $('div.rightUserLinks > div.userIcon > div.leftUsericon', subareaProfileTab);
this.replaceHtml(chatIconElement, chatIconHtml);


var rightUsernameLink = $('div.rightUsername > a', subareaProfileTab);
rightUsernameLink.text(profileInfoObject.username);
rightUsernameLink.removeClass('link14profileblue link14profilered');
rightUsernameLink.addClass(profileInfoObject.gender == 'm' ? 'link14profileblue' : 'link14profilered');


$('div.infoRowsWrapper > div.infoRow', subareaProfileTab).hide();

var replaceInfo = function (property, element) {
if (property.length > 0) {
$('div.rightSide', element).text(property);
element.show();
}
}

replaceInfo(profileInfoObject.membersince,$('#infoRowMemberSince', subareaProfileTab));
replaceInfo(profileInfoObject.age,$('#infoRowAge', subareaProfileTab));
replaceInfo(profileInfoObject.region,$('#infoRowLocation', subareaProfileTab));
replaceInfo(profileInfoObject.relationship,$('#infoRowRelationship', subareaProfileTab));
replaceInfo(profileInfoObject.partnersearch,$('#infoRowPartnersearch', subareaProfileTab));
replaceInfo(profileInfoObject.country,$('#infoRowCountry', subareaProfileTab));
replaceInfo(profileInfoObject.noOfFriends,$('#infoRowFriends', subareaProfileTab));


var replaceInfoNumber = function (elem, value, profileDir) {
value = parseInt(value);
if (value === -1) {
elem.hide();
} else {
$('div.numberContainer', elem).text(value);
elem.unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function () {
theController.replaceParentWindow('/profile/' + profileDir + '?profile=' + profileInfoObject.userId);
});
elem.show();
}
}

replaceInfoNumber($('#numbersBoxFriends', subareaProfileTab),profileInfoObject.noOfFriends,'myprofile/profile.php');
replaceInfoNumber($('#numbersBoxGuestbookEntries', subareaProfileTab),profileInfoObject.numGuestbook,'guestbook/index.php');
replaceInfoNumber($('#numbersBoxGalleries', subareaProfileTab),profileInfoObject.numGallery,'gallery/index.php');
replaceInfoNumber($('#numbersBoxGifts', subareaProfileTab),profileInfoObject.numGifts,'gifts/index.php');
replaceInfoNumber($('#numbersBoxBadges', subareaProfileTab),profileInfoObject.numBadges,'badges/index.php');
replaceInfoNumber($('#numbersBoxTrophys', subareaProfileTab),profileInfoObject.numTrophys,'trophys/index.php');
replaceInfoNumber($('#numbersBoxChallenges', subareaProfileTab),profileInfoObject.numChallenges,'challenges/book.php');




$('div.rightUsername > a, #longLinkToProfile, #chatTabProfileImageWrapper', subareaProfileTab).unbind('click.chatBoxEvents');
$('#actionPrivateChat', subareaProfileTab).unbind('click.chatBoxEvents').hide();
$('#actionShowGuestbook', subareaProfileTab).unbind('click.chatBoxEvents');
$('#actionIgnore', subareaProfileTab).unbind('click.chatBoxEvents').hide();
$('#actionBan', subareaProfileTab).unbind('click.chatBoxEvents').hide();
$('#actionKick', subareaProfileTab).unbind('click.chatBoxEvents').hide();
$('#actionMute', subareaProfileTab).unbind('click.chatBoxEvents').hide();




$('div.rightUsername > a, #longLinkToProfile, #chatTabProfileImageWrapper', subareaProfileTab).bind('click.chatBoxEvents', function () {
var url = '/profile/myprofile/profile.php?profile=' + profileInfoObject.username + '&tmp_username=' + profileInfoObject.username + '&link_game=true';
theController.replaceParentWindow(url);
});


$('#actionShowGuestbook', subareaProfileTab).bind('click.chatBoxEvents', function () {
var url = '/profile/guestbook/?profile=' + profileInfoObject.username + '&tmp_username=' + profileInfoObject.username + '&link_game=true';
theController.replaceParentWindow(url);
});


var addFriendButton = $('#profileAddFriendButtonWrapper', subareaProfileTab);
if (false && profileInfoObject.usertype === 'other' && profileInfoObject.userId > 0 && !profileInfoObject.friendsListLocked) {

theGraphics.enableFriendRequestButton();

addFriendButton.unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function () {
theController.lang.setPage('scripting-php');

if (confirm(theController.lang.getText('F02') + ' ' + profileInfoObject.username + ' ' + theController.lang.getText('F03'))) {
$(this).unbind('click.chatBoxEvents');
theController.requestFriendship(profileInfoObject.userId);
}

theController.lang.setPage('chat');
}).show();

} else {
addFriendButton.unbind('click.chatBoxEvents').hide();
}




var ownUserObject = theController.userHandler.getCurrent()._chatUserObject;
if (profileInfoObject.username != ownUserObject.getName() && !chatSettings.isInstantMessenger()) {


if (chatSettings.isSingleplayerChat() && !theController.roomHandler.hasPrivateChatWith(profileInfoObject.username)) {
$('#actionPrivateChat', subareaProfileTab).show().bind('click.chatBoxEvents', function () {

chatController.beginPrivateChat(profileInfoObject.username);
});
}
if (!theUserHandler.getCurrent().ignoresUser(profileInfoObject.username)) {
$('#actionIgnore', subareaProfileTab).show().bind('click.chatBoxEvents', function () {

if (theController.handleIgnore(profileInfoObject.username)) {
theGraphics.hideProfileTab();
toggleToChatBox();
}
});
}



if (ownUserObject.isMuteAdm()) {
$('#actionMute', subareaProfileTab).show().bind('click.chatBoxEvents', function () {

if (theController.handleMute(profileInfoObject.username)) {
theGraphics.hideProfileTab();
toggleToChatBox();
}
});
}
if (ownUserObject.isKickAdm()) {
$('#actionKick', subareaProfileTab).show().bind('click.chatBoxEvents', function () {

if (theController.handleKick(profileInfoObject.username)) {
theGraphics.hideProfileTab();
toggleToChatBox();
}
});
}
if (ownUserObject.isBanAdm()) {
$('#actionBan', subareaProfileTab).show().bind('click.chatBoxEvents', function () {

if (theController.handleBan(profileInfoObject.username)) {
theGraphics.hideProfileTab();
toggleToChatBox();
}
});
}
}

}
}


this.hideProfileWaitBar();
}


ChatGraphics.prototype.drawProfilePopup = function (profileInfoObject) {
var theController = chatController;
var chatUserObject = theController.userHandler.getChatter(profileInfoObject.username);

if (chatUserObject !== false) {

var friendsText = theController.lang.getText('F40');
theController.lang.setPage('badges');
var badgesText = theController.lang.getText('F02');
theController.lang.setPage('challenges');
var challengesText = theController.lang.getText('F57');
theController.lang.setPage('chat');

var vipStr = '';
if (!chatVars.allIsVip) {
var vipAr = [
'<div id="chatPopupProfileVip"><img src="/images/infopop/profile_vip',
((profileInfoObject.isVip === '1') ? 'on' : 'off'),
'.png" width="74" height="23" /></div>'
];
vipStr = vipAr.join('');
}

var stringAr = [


'<div id="chatPopupProfileImageWrapper"><div class="cutout"></div><img id="chatPopupProfileImageElem" width="72" height="54" src="',
profileInfoObject.profileImage,
'" alt="',
profileInfoObject.username,
'" /></div>',


vipStr,


'<div class="rightWrapper">',


'<div class="infoRow" id="chatProfilePopupUsername">',
theController.messageHandler.buildUsernameHtml(chatUserObject._javaUserObject, false, true),
'</div>',


'<div class="infoRow"><div class="first"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -181px;"></div></div></div><div class="second size11grey">',
friendsText,
'</div><div class="third size11grey">',
profileInfoObject.noOfFriends,
'</div></div>',
'<div class="infoRow"><div class="first"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-341px -145px;"></div></div></div><div class="second size11grey">',
badgesText,
'</div><div class="third size11grey">',
profileInfoObject.numBadges,
'</div></div>',
'<div class="infoRow"><div class="first"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-181px -73px;"></div></div></div><div class="second size11grey">',
challengesText,
'</div><div class="third size11grey">',
profileInfoObject.numChallenges,
'</div></div>',
'</div>'
];
return stringAr.join('');
}
return false;
}





ChatMessageHandler.prototype._outgoingMessagesBlocked = false;
ChatMessageHandler.prototype._outgoingMessagesDenied = false;

ChatMessageHandler.prototype._messageSentTimes = new Array();
ChatMessageHandler.prototype._messageSpamInterval = 9*1000;
ChatMessageHandler.prototype._messageSpamQuota = 3;
ChatMessageHandler.prototype._whiteSpaceRegex = /\((.{0,5}?)(\s+?)(.{0,5}?)\)/g;

ChatMessageHandler.prototype._badWords = null;
ChatMessageHandler.prototype._niceWords = null;
ChatMessageHandler.prototype._badMessages = new Array();


function ChatMessageHandler() {
var toolies = chatTools;


this._badWords = chatVars.badWordsArray;
this._niceWords = chatVars.niceWordsArray;


for (var index in this._badWords) {
var prettyBadWord = toolies.chromeRims(this._badWords[index]);

if (prettyBadWord.length > 0) {
this._badWords[index] = new RegExp("((^.{0}?)|[^a-zA-Z]+?)(" + prettyBadWord + ")([^a-zA-Z]+?|(.{0}?$))", "gi");
}
}
}


ChatMessageHandler.prototype.buildInfoMessage = function(theMessage, coloured) {

theMessage = theMessage.replace('/info ', '');

var textClass = (coloured ? 'red' : 'darkgrey');

var stringsAr = new Array('<div class="chatRow chatRowInfoMessage ',
textClass,
'"><div class="chatIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -109px;"></div></div></div><strong>',
this._drawTimeText(),
theMessage,
'</strong></div>');
return stringsAr.join('');
};


ChatMessageHandler.prototype.buildRankInfoMessage = function(theMessage, chatUserObject) {


var indexOfFirstSpace = theMessage.indexOf(' ');
var uidClass = '';


if (chatUserObject !== false) {
var usernameHtml = this.buildColouredUsername(chatUserObject);
theMessage = usernameHtml + theMessage.substr(indexOfFirstSpace + 1);
uidClass = (' uid' + chatUserObject.getId());
}

var stringsAr = new Array('<div class="chatRow darkgrey"><div class="chatIcon',
uidClass,
'"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-921px -271px;"></div></div></div><strong>',
this._drawTimeText(),
theMessage,
'</strong></div>');
return stringsAr.join('');
};


ChatMessageHandler.prototype.buildUserMessage = function (theMessage, javaSenderUserObject) {

if (javaSenderUserObject != undefined) {
var theController = chatController;

theMessage = chatTools._encodeString(theMessage);
  theMessage = theController.smileyHandler.swapSmileyPlaceholders(theMessage, true);

var colourClass = (javaSenderUserObject.isMale() ? ' chatRowMale' : ' chatRowFemale');

var stringsAr = new Array('<div class="chatRow',
colourClass,
'">',
this.buildUsernameHtml(javaSenderUserObject),
theMessage,
'</div>');
return stringsAr.join('');
}
};




ChatMessageHandler.prototype.buildMeUserMessage = function (theMessage, javaSenderUserObject) {
if (javaSenderUserObject != undefined) {

var theController = chatController;

theMessage = theMessage.replace('/me ', '');

theMessage = chatTools._encodeString(theMessage);
  theMessage = theController.smileyHandler.swapSmileyPlaceholders(theMessage, true);

var stringsAr = new Array('<div class="chatRow">',
this.buildUsernameHtml(javaSenderUserObject),
'<span class="meMessage"><strong>',
theMessage,
'</strong></span></div>');
return stringsAr.join('');
}
}


ChatMessageHandler.prototype.buildAdminUserMessage = function (theMessage, javaSenderUserObject) {
if (javaSenderUserObject != undefined) {

var theController = chatController;

theMessage = theMessage.replace('/admin ', '');

theMessage = chatTools._encodeString(theMessage);
  theMessage = theController.smileyHandler.swapSmileyPlaceholders(theMessage, true);

var stringsAr = new Array('<div class="chatRow chatRowAdminMessage">',
'<div class="innerWrapper">',
this.buildUsernameHtml(javaSenderUserObject, true),
'<div class="adminIcon"></div>',
' <div class="adminMessage"><strong>',
theMessage,
'</strong></div><div style="clear:both;"></div></div></div>');
return stringsAr.join('');
}
}


ChatMessageHandler.prototype.buildUsernameHtml = function (javaUserObject, adminVersion, noColon) {
var theController = chatController;

var adminString =(adminVersion === true ? ' (' + theController.lang.getText('F110') + ')' : '');
var linkClass =theController.userHandler.getLinkClassFromGender(javaUserObject.isMale());
var rankIconHtml =      theController.userHandler.getRankIconHtml(javaUserObject);
var popupHtml =(chatVars.isSimpleVersion ? '' : '<div class="chatIcon popupPlaceholder uid' + javaUserObject.getId() + '">' + theController.userHandler.getChatIconHtml(javaUserObject) + '</div>');

var stringsAr = new Array(
popupHtml,
'<div class="chatNameWrapper"><div class="chatName ',
linkClass,
'">',
javaUserObject.getName(),
'</span>',
adminString,
'</div>',
rankIconHtml,
'<span class="',
linkClass,
'">',
(noColon !== undefined ? '' : '<strong>:</strong>'),
'</span></div> ',
this._drawTimeText()
);
return stringsAr.join('');
}
ChatMessageHandler.prototype.buildColouredUsername = function (chatUserObject) {
var linkClass =chatController.userHandler.getLinkClassFromGender(chatUserObject.isMale());
var stringsAr = new Array(
'<div class="chatName ',
linkClass,
'">',
chatUserObject.getName(),
'&nbsp;</div>'
);
return stringsAr.join('');
}


ChatMessageHandler.prototype.buildAIRedboxMessage = function (theMessage) {

var theController = chatController;

theMessage = this._wordwrap(theMessage);
theMessage = chatTools._encodeString(theMessage);
  theMessage = theController.smileyHandler.swapSmileyPlaceholders(theMessage, true);

var stringsAr = new Array('<div class="chatRow chatRowAIGameMessage"><div class="innerWrapper">',
this._drawTimeText(),
'<span class="AIGameMessage"><strong>',
theMessage,
'</strong></span></div></div>');
return stringsAr.join('');
}


ChatMessageHandler.prototype.buildAIPlayerMessage = function (senderName, theMessage) {

var theController = chatController;

var nameText = (senderName == null ? '' : '<span class="darkgrey"><strong>' + senderName + ':</strong></span>');

theMessage = chatTools._encodeString(theMessage);
  theMessage = theController.smileyHandler.swapSmileyPlaceholders(theMessage, true);

var stringsAr = new Array('<div class="chatRow"><div class="innerWrapper"><div class="chatIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-661px -73px;"></div></div></div>',
nameText,
this._drawTimeText(),
theMessage,
'</div></div>');
return stringsAr.join('');
}

ChatMessageHandler.prototype.buildWelcomeMessage = function () {

var theController = chatController;

var stringsAr = new Array(
'<div class="chatRow chatRowWelcomeGuestBox chatRowGreyBox" id="welcomeGuestBoxWrapper"><div class="innerWrapper"><div class="greyBoxHeader"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -19px;"></div></div><div class="greyBoxHeaderText">&nbsp;<strong>',
theController.lang.getText('F207'),
'</strong></div><div style="clear:both;"></div></div><div class="greyBoxBody welcomeGuestBoxBody size13black"><strong>',
theController.lang.getText('F208'),
'</strong><br /><span class="size11black">',
theController.lang.getText('F209'),
'</span><div class="buttonLink"><a href="#" id="sugnupButton" class="button s12 s12_green fixed" style="width: 177px;"><span class="slider"><span class="text">_replaceF190_</span></span></a></div></div></div></div>'
);

var theString =  stringsAr.join('');
theString = theString.replace('_replaceF190_', theController.lang.getText('F190'));
}

ChatMessageHandler.prototype.buildTokenshopDrawingMessage = function (productId, drawingId, headline, description, price, tokenPrice, tokensOwned, ticketsOwned, imageUrl, showLoginLink) {

var theController = chatController;

var loginLinkHtml = (showLoginLink ? '<div class="chatAreaLoginLinkBox"><a href="#" class="link11classicblue" id="chatAreaLoginLink">' + theController.lang.getText('F192') + '</a></div>' : '');
var priceString = (price === '?'  ? ('&nbsp;' + price) : (chatTools.separateThousands(price) + ',-'));

theController.lang.setPage('tokenshop-php');
var stringsAr = new Array (
'<div class="chatRow chatRowGreyBox" id="tokenshopBoxWrapper"><div class="innerWrapper"><div class="greyBoxHeader"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -199px;"></div></div><div class="rightIcon closeIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-601px -271px;"></div></div></div><div class="greyBoxHeaderText">&nbsp;<strong>',
theController.lang.getText('F42'),
'</strong></div><div style="clear:both;"></div></div><div class="greyBoxBody"><span class="size13black"><strong>',
headline,
'</strong></span><div id="productWrapper"><img width="90" height="84" src="',
imageUrl,
'" /><div id="productValueWrapper"><span>',
theController.lang.getText('F13'),
'</span><br /><span class="moneyValue"><strong>',
priceString,
'</strong></span></div></div>',
'<div id="tokenshopCountdown"><div class="cdNumber" id="tokenshopCountdowndays"></div><div class="cdNumber" id="tokenshopCountdownhours"></div><div class="cdNumberSeparator">:</div><div class="cdNumber" id="tokenshopCountdownminutes"></div><div class="cdNumberSeparator">:</div><div class="cdNumber" id="tokenshopCountdownseconds"></div></div>',
'</div>',
loginLinkHtml,
'<div id="tokenshopTicketPrice" class="size11grey">',
chatTools.separateThousands(tokenPrice) + ' ',
theController.lang.getText('F11') + '/' + theController.lang.getText('F12'),
'</div><div id="tokenshopbuyingwrapper"><div id="tokenshopTicketsOwned"><div>' + ticketsOwned + '</div></div><div id="tokenshopPlusMinusWrapper"><div id="buy1button"><img src="' + chatVars.absroot + '/images/tokenshop/button_add.png" title="+" width="39" height="24" /></div><div id="return1button"><img src="' + chatVars.absroot + '/images/tokenshop/button_subtract.png" title="-" width="39" height="24" /></div></div></div>',

'<div id="BO_popContainer" class="chatBO_popContainer"><div id="BO_popTopLeft" class="corner"></div><div id="BO_popTop"></div><div id="BO_popTopRight" class="corner"></div><div id="BO_popLeft"></div><div id="BO_popupContent"><div class="ts_item_buyOptions">',
'<span class="buyOptionsHeader">' + theController.lang.getText('F38') + '</span>',
'<div style="line-height: 2px; height: 2px; display:block;"></div><a href="javascript:void(0);" id="buyMaxButton" class="button s12 s12_green"><span class="slider"><span class="text"><b>+MAX</b></span></span></a> <a href="javascript:void(0);" id="buy1000Button" class="button s12 s12_green"><span class="slider"><span class="text"><b>+1000</b></span></span></a> <a href="javascript:void(0);" id="buy100Button" class="button s12 s12_green"><span class="slider"><span class="text"><b>+100</b></span></span></a> <a href="javascript:void(0);" id="buy10Button" class="button s12 s12_green"><span class="slider"><span class="text"><b>+10</b></span></span></a><br><div style="line-height: 2px; height: 2px; display:block;"></div><a href="javascript:void(0);" id="returnMaxButton" class="button s12 s12_red"><span class="slider"><span class="text"><b>&nbsp;-MAX</b></span></span></a> <a href="javascript:void(0);" id="return1000Button" class="button s12 s12_red"><span class="slider"><span class="text"><b>&nbsp;-1000</b></span></span></a> <a href="javascript:void(0);" id="return100Button" class="button s12 s12_red"><span class="slider"><span class="text"><b>&nbsp;-100</b></span></span></a> <a href="javascript:void(0);" id="return10Button" class="button s12 s12_red"><span class="slider"><span class="text"><b>&nbsp;-10</b></span></span></a><br>',
'</div></div><div id="BO_popRight"></div><div id="BO_popBottomLeft" class="corner"></div><div id="BO_popBottom"></div><div id="BO_popBottomRight" class="corner"></div></div>',

'</div></div>'
);
theController.lang.setPage('chat');
return stringsAr.join('');
}

ChatMessageHandler.prototype.buildTokenshopWinnerMessage = function (headline, profileImage, username, isMale) {

var theController = chatController;

var linkClass =chatController.userHandler.getLinkClassFromGender(isMale);
theController.lang.setPage('tokenshop-php');
var stringsAr = new Array (
'<div class="chatRow chatRowGreyBox" id="tokenshopBoxWrapper"><div class="innerWrapper"><div class="greyBoxHeader"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-341px -199px;"></div></div><div class="rightIcon closeIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-601px -271px;"></div></div></div><div class="greyBoxHeaderText">&nbsp;<strong>',
theController.lang.getText('F58'),
'</strong></div><div style="clear:both;"></div></div><div class="greyBoxBody"><div id="tokenShopWinnerProduct">',
headline,
'</div><div id="tokenshopWinnerUser"><div class="profileImageWrapper"><div class="cutout"></div><img width="72" height="54" src="',
chatVars.absroot,
profileImage,
'" alt="profile image" /></div>',
'<div class="profileInfoWrapper black"><span class="subHeader">',
theController.lang.getText('F58'),
'</span><br /><a href="#" class="',
linkClass,
'"><strong>',
username,
'</strong></a> ',
theController.lang.getText('F59'),
'.</div>',
'<div class="bottomClear"></div>',
'</div>',
'</div></div></div>'
);
theController.lang.setPage('chat');
return stringsAr.join('');
}


ChatMessageHandler.prototype.buildBankStreamedMessage = function (theMessage) {

var theController = chatController;
var theUserHandler = theController.userHandler;


theMessage = theMessage.replace('/bank ', '');


var userGenderString = theMessage.substring(0, 2);
if (userGenderString === 'm_' || userGenderString === 'k_') {
theMessage = theMessage.substr(2);
} else {
userGenderString = false;
}


var indexOfFirstSpace = theMessage.indexOf(' ');
var username = theMessage.substring(0, indexOfFirstSpace);
theMessage = theMessage.substr(indexOfFirstSpace + 1);


var userTicketLinkHtml = '';

var splitty = theMessage.split('_');
if (splitty.length === 3 && username !== chatVars.mbp) {
var bankId = splitty[1];
var last4 = splitty[2];

var userTicketId = bankId  + '_' + last4  + '_' + chatVars.uid

var userTicketLinkHtml = '<div class="buttonLink prizeShareLink" id="' + userTicketId + '"><a href="#" class="button s12 s12_green fixed" style="width: 177px;"><span class="slider"><span class="text">_replaceF173_</span></span></a></div>';
userTicketLinkHtml = userTicketLinkHtml.replace('_replaceF173_', theController.lang.getText('F173'));
}
theMessage = splitty[0];


if (userGenderString && theUserHandler.getChatter(username)) {
close
var userIsMale = (userGenderString == 'm_');
var genderTextClass = theUserHandler.getLinkClassFromGender(userIsMale);
var usernameLinkHtmlAr = new Array('<span class="chatName ', genderTextClass, '"><span><strong>', username, '</strong></span></span> ');

theMessage = (usernameLinkHtmlAr.join('') + '<strong>' + theMessage + '</strong>');

} else {
theMessage = ('<strong>' + (username + ' ' + theMessage) + '</strong>');
}


var stringsAr = new Array(
'<div class="chatRow chatRowGreyBox chatRowBankWon"><div class="innerWrapper"><div class="greyBoxHeader"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-461px -415px;"></div></div><div class="rightIcon closeIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-601px -271px;"></div></div></div><div class="greyBoxHeaderText">&nbsp;<strong>',
theController.lang.getText('F172'),
'</strong></div><div style="clear:both;"></div></div><div class="greyBoxBody"><img class="chatbankwon" src="' + chatVars.absroot + '/images/icons24/chat_bankwon.png" /><strong>',
theController.lang.getText('F172'),
'</strong><br /><span class="black">',
theMessage,
'</span>',
userTicketLinkHtml,
'</div><div style="clear:both;"></div></div></div>'
);
return stringsAr.join('');
}


ChatMessageHandler.prototype.buildJackpotStreamedMessage = function (theMessage, typeStr) {

var theController = chatController;

switch(typeStr) {

case 'super':
theMessage = theMessage.replace('/superjackpot', '');
var icon = '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-401px -235px;"></div></div>';
var textString = theController.lang.getText('F125');
var textClass = 'superjackpotMessage';
break;

case 'extra':
theMessage = theMessage.replace('/extrajackpot', '');
var icon = '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-381px -235px;"></div></div>';
var textString = theController.lang.getText('F126');
var textClass = 'extrajackpotMessage';
break;

case 'quick':
default:
theMessage = theMessage.replace('/quickjackpot', '');
var icon = '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -235px;"></div></div>';
var textString = theController.lang.getText('F127');
var textClass = 'quickjackpotMessage';
break;
}



theMessage = jQuery.trim(theMessage);
var threeStrings = theMessage.split(' ');
var username = threeStrings[2];
var currency = threeStrings[1];
var amount = threeStrings[0];


var stringsAr = new Array (
'<div class="chatRow chatRowJackpotMessage"><div class="innerWrapper"><strong>',
username,
'</strong> ',
theController.lang.getText('F124'),
' <strong><span class="',
textClass,
'">',
textString,
'</span></strong> ',
theController.lang.getText('F128'),
' <strong>',
currency,
' ',
amount,
'</strong>',
theController.lang.getText('F129'),
'</div></div>'
);
return stringsAr.join('');
}


ChatMessageHandler.prototype.buildFriendsInRoomMessage = function (theFriends) {

var theController = chatController;

if (theFriends.length > 2) {

var textString = theController.lang.getText('F217');
var randomPerson = theFriends[Math.floor(Math.random()*theFriends.length)];

textString = textString.replace('X', (theFriends.length - 1));
textString = textString.replace('__DO_NOT_TRANSLATE__', '<span class="chatName"><span>' + $.trim(randomPerson.getName()) + '</span></span>');

return this.buildInfoMessage(textString);

} else {

if (theFriends.length === 2) {

var textString = theController.lang.getText('F151');
var lastFriendString = ' ' + theController.lang.getText('F152') + ' <span class="chatName"><span>' + jQuery.trim(theFriends.pop().getName()) + '</span></span>';

} else if (theFriends.length === 1) {

var textString = theController.lang.getText('F150');
var lastFriendString = '';
}

var usernameLinkArray = new Array();
for (var index in theFriends) {

var friend = theFriends[index];
var usernameLink = ' <span class="chatName"><span>' + jQuery.trim(friend.getName()) + '</span></span>';

usernameLinkArray.push(usernameLink);
}
var replacement = usernameLinkArray.join(',')+ ' ' + lastFriendString;

return this.buildInfoMessage(textString.replace('__DO_NOT_TRANSLATE__', replacement));
}
}




ChatMessageHandler.prototype.buildChatNewsItem = function (shortMsgHtml, leftIconsAr, rightIconsAr, rightIconClassesAr, chatNewsTabId) {

var buildIconHtml = function (iconAr, side, iconClassAr) {
var theIcon;
var theClass;
if (chatTools.objectIsArray(iconAr)) {

var checkForIconClass = (chatTools.objectIsArray(iconClassAr));

for (var key in iconAr) {
theIcon = iconAr[key];

theClass = ((checkForIconClass && (iconClassAr[key] !== undefined && iconClassAr[key] !== '')) ? (' ' + iconClassAr[key]) : '');

iconAr[key] = '<div class="' + side + 'Icon' + theClass + '">' + theIcon + '</div>'
}
return iconAr.join('');
}
return '';
}

var idString = (chatNewsTabId !== undefined ? ' id="' + chatNewsTabId + '"' : '');
var leftIconsHtml = buildIconHtml(leftIconsAr, 'left');
var rightsIconHtml = buildIconHtml(rightIconsAr, 'right', rightIconClassesAr);

var stringsAr = new Array(
'<div class="chatNewsTab"',
idString,
'><div class="chatNewsTabBG"></div>',
leftIconsHtml,
rightsIconHtml,
'<div class="newsText">',
shortMsgHtml,
'</div></div>'
);
return stringsAr.join('');
}


ChatMessageHandler.prototype.buildClosableChatNewsItem = function (shortMsgHtml, leftIconsAr, chatNewsTabId) {
return this.buildChatNewsItem (
shortMsgHtml,
[leftIconsAr.pop()],
['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-601px -271px;"></div></div>'],
['closeIcon'],
chatNewsTabId
);
}



ChatMessageHandler.prototype.buildAdultJoinMessage = function () {

var theController = chatController;


$('#adultBoxWrapper', theController.graphics.chatBoxContentElem).remove();


var stringsAr = new Array (
'<div class="chatRow chatRowBlackBox" id="adultBoxWrapper"><div class="innerWrapper"><div class="blackBoxHeader"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -19px;"></div></div><div class="blackBoxHeaderText">&nbsp;<strong>',
theController.lang.getText('F225'),
'</strong></div><div style="clear:both;"></div></div><div class="blackBoxBody size11black">',
theController.lang.getText('F226'),
'<a href="' + chatVars.absroot + '/help/chatguide.php" target="_blank">',
theController.lang.getText('F163'),
'</a></div></div></div>'
);
return stringsAr.join('');
}


ChatMessageHandler.prototype._drawTimeText = function () {

if (chatSettings.isInstantMessenger()) {

var date = new Date();

var hours = '' + date.getHours();
if (hours.length == 1) {
hours = '0' + hours;
}

var minutes = '' + date.getMinutes();
if (minutes.length == 1) {
minutes = '0' + minutes;
}

var stringsAr = new Array (
' <span class="darkgrey"><strong><span class="timeWrapper">(',
hours,
':',
minutes,
')</span></strong></span> '
);
return stringsAr.join('');
}
return '';
}


ChatMessageHandler.prototype._wordwrap = function (theMessage) {


var theMessage = new String(theMessage);
var chunks = theMessage.split(' ');
var maxChars = 23;
var newMessage = '';

var chunkyLength = chunks.length;
for (var index = 0; index < chunkyLength; index++) {
var chunk = chunks[index];
if (chunk.length > maxChars) {

var noOfSubChunks = (chunk.length / maxChars);
var chunkSize = chunk.length;
var subChunkIndex = 0;

while (subChunkIndex < noOfSubChunks) {

var charOffset = subChunkIndex*maxChars;

if (subChunkIndex == 0) {
newMessage += ' ';
}

if (chunkSize < 15) {
newMessage += chunk.substr(charOffset, chunkSize);
} else {
newMessage += chunk.substr(charOffset, maxChars) + ' ';
chunkSize -= maxChars;
}
subChunkIndex++;
}
} else {
newMessage += ' ' + chunk;
}
}


var counter = 5;
while (counter-- > 0) {
newMessage = newMessage.replace(this._whiteSpaceRegex, "($1$3)$2");
newMessage = newMessage.replace('( ', '(');
newMessage = newMessage.replace(' )', ')');
}
return newMessage;
}

ChatMessageHandler.prototype.filterBadWords = function (origMessage) {

var niceWords = this._niceWords;
var theLength = this._badWords.length;

var changesMade = false;
var alteredMessage = origMessage;

if (!chatController.roomHandler.isAdultRoom()) {

for (var index = 0; index < theLength; index++) {

var badRegExp = this._badWords[index];

var thisNiceWord = niceWords[ Math.floor(Math.random() * niceWords.length) ];
alteredMessage = alteredMessage.replace(badRegExp, '$2 ' + thisNiceWord + '$4');

if (!changesMade && alteredMessage != origMessage) {
changesMade = true;
}
}


if (changesMade) {
this._badMessages.push(origMessage);
}
}
return alteredMessage;
}


ChatMessageHandler.prototype.getLastBadMessage = function () {

var badMessage = '';
if (this._badMessages.length > 0) {
badMessage = this._badMessages.shift();
}
return badMessage;
}


ChatMessageHandler.prototype.isTextCommand = function (theMessage) {
return theMessage.indexOf('/') == 0;
};


ChatMessageHandler.prototype.isKickCommand = function (theMessage) {
return theMessage.indexOf('/kick') == 0;
};
ChatMessageHandler.prototype.isMuteCommand = function (theMessage) {
return theMessage.indexOf('/mute') == 0;
};
ChatMessageHandler.prototype.isIgnoreCommand = function (theMessage) {
return theMessage.indexOf('/ignore') == 0;
};
ChatMessageHandler.prototype.isBanCommand = function (theMessage) {
return theMessage.indexOf('/ban') == 0;
};
ChatMessageHandler.prototype.isMeCommand = function (theMessage) {
return theMessage.indexOf('/me') == 0;
};
ChatMessageHandler.prototype.isAdminCommand = function (theMessage) {
return theMessage.indexOf('/admin') == 0;
};
ChatMessageHandler.prototype.isJavascriptCommand = function (theMessage) {
return theMessage.indexOf('/javascript') == 0;
};
ChatMessageHandler.prototype.isInfoMessage = function (theMessage) {
return theMessage.indexOf('/info') == 0;
};


ChatMessageHandler.prototype.extractUsername = function (theMessage, commandName) {

var username;


switch (commandName) {
case 'mute' :
var command = '/mute ';break;
case 'kick' :
var command = '/kick ';break;
case 'ban' :
var command = '/ban ';break;
case 'ignore' :
var command = '/ignore ';break;
case 'javascript' :
var command = '/javascript ';break;
default:
return false;
}


var noCommand = theMessage.replace(command, '');
var spaceIndex = noCommand.indexOf(' ');

if (spaceIndex > -1) {
username = noCommand.substr(0, spaceIndex);
} else {
username = noCommand;
}
return username;
}


ChatMessageHandler.prototype.extractScript = function (theMessage) {
var noCommand = theMessage.replace('/javascript ', '');
var spaceIndex = noCommand.indexOf(' ');
return noCommand.substr(spaceIndex + 1);
}


ChatMessageHandler.prototype.isValid = function (theMessage) {

var messageSize = theMessage.length;
return (messageSize > 0 && messageSize <= chatController.getMaxMessageSize());
}



ChatMessageHandler.prototype.isSpamming = function() {



var theDater = new Date();
var rightNow = theDater.getTime();


this._messageSentTimes.push(rightNow);


if (this._messageSentTimes.length > this._messageSpamQuota) {


var oldestTime = this._messageSentTimes.shift();


if ((rightNow - oldestTime) < this._messageSpamInterval) {

this.denyOutgoingMessages();


} else if (this._outgoingMessagesDenied) {
this._outgoingMessagesDenied = false;
}
}

return this.outgoingMessagesDenied();

}


ChatMessageHandler.prototype.outgoingMessagesBlocked = function() {
return (this._outgoingMessagesBlocked);
}


ChatMessageHandler.prototype.outgoingMessagesDenied = function() {
return (this._outgoingMessagesDenied);
}


ChatMessageHandler.prototype.blockOutgoingMessages = function () {
this._outgoingMessagesBlocked = true;


window.self.setTimeout('chatController.messageHandler.unblockOutgoingMessages()', 500);
}


ChatMessageHandler.prototype.unblockOutgoingMessages = function() {

if (!this._outgoingMessagesDenied) {
this._outgoingMessagesBlocked = false;
}
}


ChatMessageHandler.prototype.denyOutgoingMessages = function () {
this._outgoingMessagesDenied = true;
}





ChatAppletHandler.prototype.CONNECT_ALLOWED = true;


ChatAppletHandler.prototype._serverArray;
ChatAppletHandler.prototype._initialServerIndex = undefined;
ChatAppletHandler.prototype._currentServerIndex = undefined;

ChatAppletHandler.prototype._httpBypassPorts = new Array('25000', '8080', '21');
ChatAppletHandler.prototype._httpBypassPortCount = 0;

ChatAppletHandler.prototype._connectTimeout = 10000;



ChatAppletHandler.prototype._connectionEverEstablished = false;


ChatAppletHandler.prototype._allServersTried = false;


function ChatAppletHandler() {}

ChatAppletHandler.prototype.getApplet = function () {
return $('applet[name=chatApplet]')[0];
}


ChatAppletHandler.prototype._getServerIndex = function (returnInitialIndex) {

if(this._initialServerIndex == undefined) {
this._initialServerIndex = chatTools.getHashcode(chatVars.defaultRoomName) % this._getNoOfServers();
}

var regex = /^[0-9]+$/;
var isNumeric = regex.test(this._currentServerIndex);
if(!isNumeric) {
this._currentServerIndex = this._initialServerIndex;
}



if(returnInitialIndex == true) {
return this._initialServerIndex;
}
return this._currentServerIndex;
}


ChatAppletHandler.prototype._moveServerIndex = function () {
this._currentServerIndex = (this._currentServerIndex + 1) % this._getNoOfServers();
}


ChatAppletHandler.prototype._getCurrentPort = function () {
var servers = this._getServers();
return servers[this._getServerIndex()];
}

ChatAppletHandler.prototype._getInitialPort = function () {
var servers = this._getServers();
return servers[this._initialServerIndex];
}

ChatAppletHandler.prototype._isUsingInitialIndex = function () {
return (this._getServerIndex() == this._getServerIndex(true));
}


ChatAppletHandler.prototype._getNoOfServers = function() {
return this._getServers().length;
}


ChatAppletHandler.prototype._getServers = function() {

if (this._serverArray == undefined)  {
this._serverArray = chatVars.serverPortArray;
}
return this._serverArray;
}


ChatAppletHandler.prototype._connectionWasEstablished = function () {
this._allServersTried = false;
this._connectionEverEstablished = true;
}

ChatAppletHandler.prototype._wasConnectionEverEstablished = function () {
return this._connectionEverEstablished;
}


ChatAppletHandler.prototype._incrementConnectTimeout = function () {
if (this._connectTimeout < 120000) {
this._connectTimeout += this._connectTimeout;
}
}




ChatAppletHandler.prototype.connect = function() {

if (this.CONNECT_ALLOWED) {
this.getApplet().connect('' + this._getCurrentPort());
}
};

ChatAppletHandler.prototype.disconnect = function() {
this.getApplet().disconnect();
};


ChatAppletHandler.prototype.refuseConnection = function () {
this.disconnect();
this.CONNECT_ALLOWED = false;
}

ChatAppletHandler.prototype.allowConnection = function () {
this.CONNECT_ALLOWED = true;
}


ChatAppletHandler.prototype.reConnect = function (errorMessage) {



try {

if (this && this.CONNECT_ALLOWED && this.getApplet() && !this.getApplet().isConnected()) {

var theController = chatController;


this._moveServerIndex();


if (!this._isUsingInitialIndex()) {


this._allServersTried = true;


var theServer = this;
window.setTimeout(function(){theServer.connect();}, 500);


} else if (this._allServersTried) {


theController.graphics.addChatRow(theController.messageHandler.buildInfoMessage(errorMessage));


if (!this._wasConnectionEverEstablished()) {


if (this._httpBypassPortCount < this._httpBypassPorts.length) {


theController.graphics.addChatRow(theController.messageHandler.buildInfoMessage(theController.getText('F17')));


var thePort = this._httpBypassPorts[this._httpBypassPortCount];
var tunnelId = this._getInitialPort();
var bypassId = 1;
this.getApplet().connectHTTP('' + thePort, '' + tunnelId, '' + bypassId);

this._httpBypassPortCount++;


} else {

this._httpBypassPortCount = 0;
this._allServersTried = false;


window.setTimeout('chatController.connect()', this._connectTimeout);


this._incrementConnectTimeout();
}


} else {


window.setTimeout('chatController.connect()', this._connectTimeout);


this._incrementConnectTimeout();
}
}
}
} catch(e) {}
}


ChatAppletHandler.prototype.authenticate = function (username, password) {

if (this.getApplet().isConnected()) {

this._connectionWasEstablished();
this.getApplet().authenticate('' + username, '' + password);
}
}


ChatAppletHandler.prototype.requestPersistentRoomList = function () {
this.getApplet().requestPersistentRoomList();
}


ChatAppletHandler.prototype.requestRoomsMatching = function (regularExp) {
this.getApplet().requestRoomsMatching(regularExp);
}


ChatAppletHandler.prototype.leaveRoom = function (roomName) {
this.getApplet().leave('' + roomName);
}


ChatAppletHandler.prototype.enterRoom = function (roomName) {
this.getApplet().join('' + roomName);
}


ChatAppletHandler.prototype.sendOutgoingMessage = function (theMessage, roomName) {
if (roomName != undefined) {
this.getApplet().chat('' + theMessage, '' + roomName);
}
}


ChatAppletHandler.prototype.getMaxMessageSize = function () {
return this.getApplet().getMaxMessageSize();
}




ChatAppletHandler.prototype.getUsersInRoom = function (roomName) {
return this.getApplet().getUsersInRoom('' + roomName);
}


ChatAppletHandler.prototype.getJavaUserObject = function (username) {
return this.getApplet().getUser('' + username);
}


ChatAppletHandler.prototype.getJavaRoomObject = function (roomname) {
return this.getApplet().getRoom('' + roomname);
}


ChatAppletHandler.prototype.invite = function (roomName, otherUserName) {
this.getApplet().invite('' + otherUserName, '' + roomName);
}


ChatAppletHandler.prototype.mute = function (username) {
this.getApplet().mute('' + username);
}


ChatAppletHandler.prototype.kick = function (username) {
this.getApplet().kick('' + username);
}


ChatAppletHandler.prototype.ban = function (username, seconds) {
this.getApplet().ban('' + username, '' + seconds);
}



ChatAppletHandler.prototype.requestSettingChange = function (key, value) {
this.getApplet().requestSettingChange('' + key, '' + value);
}
ChatAppletHandler.prototype.requestSettingDeletion = function (key) {
this.getApplet().requestSettingDeletion('' + key);
}




ChatAppletHandler.prototype.imAcceptInvitation = function (sendingJavaUserObject, roomName) {
this.getApplet().imAcceptInvitation(sendingJavaUserObject, '' + roomName);
}

ChatAppletHandler.prototype.imDeclineInvitation = function (sendingJavaUserObject, roomName) {
this.getApplet().imDeclineInvitation(sendingJavaUserObject, '' + roomName);
}







ChatRoom.prototype._id;
ChatRoom.prototype._name = false;
ChatRoom.prototype._javaRoomName = false;
ChatRoom.prototype._groupDesignation;
ChatRoom.prototype._noOfUsers;
ChatRoom.prototype._catIndex;
ChatRoom.prototype._vipOnly = false;
ChatRoom.prototype._javaRoomObject;


function ChatRoom(id, noOfUsers, roomObject) {
this._id = id;
this._noOfUsers = noOfUsers;
this._catIndex = -1;
this._vipOnly = false;
this._javaRoomObject = roomObject;
}


ChatRoom.prototype.getId = function () {
return this._id;
}


ChatRoom.prototype.getName = function () {
if (this._name == false) {

var theRoomHandler = chatController.roomHandler;


var theName = '' + this._javaRoomObject.getName();


this._groupDesignation = theRoomHandler.getGroupNum(theName);


theName = theRoomHandler.removeGroupNum(theName);

this._name = theName;
}

return this._name;
}

ChatRoom.prototype.setName = function (theName) {
this._name = theName;
}


ChatRoom.prototype.toString = function () {

var origRoomName = this.getOrigRoomName();
var numberStarts = origRoomName.indexOf(' - ');

if (numberStarts == -1) {
return 0;
} else {
var string = origRoomName.substr(numberStarts + 3);
return parseInt(string, 10);
}
}


ChatRoom.prototype.getNoOfUsers = function () {
return this._noOfUsers;
}

ChatRoom.prototype.setNoOfUsers = function (noOfUsers) {
this._noOfUsers = noOfUsers;
}


ChatRoom.prototype.getCategoryIndex = function() {
return this._catIndex;
}

ChatRoom.prototype.setCategoryIndex = function(index) {
this._catIndex = index;
}


ChatRoom.prototype.isVIPOnly = function() {
return this._vipOnly;
}


ChatRoom.prototype.getOrigRoomName = function () {


if (this._javaRoomName == false) {
if (this._javaRoomObject) {
this._javaRoomName = this._javaRoomObject.getName();
return this._javaRoomName;
}
} else {
return this._javaRoomName;
}
return this.getName();
}


ChatRoom.prototype.getPrettyName = function (excludeGameName) {

var theRoomHandler = chatController.roomHandler;
var theLang = chatController.lang;

var excludeGameName = (excludeGameName != true ? false : true);
var origRoomName = this.getOrigRoomName();
var roomName = this.getName();



if (!chatSettings.isMultiplayerChat()) {
var numberStarts = origRoomName.indexOf(' - ');

if (numberStarts == -1) {

var roomNumber = theLang.getText('F76') + ' 1';
var roomNameOnly = origRoomName;
var mappedName = theRoomHandler.mapRoomNameToPrettyName(roomNameOnly);
var prettyName = (excludeGameName ? roomNumber : mappedName + ' - ' + roomNumber);

} else {

var roomNumberOnly = theLang.getText('F76') + ' ' + origRoomName.substr(numberStarts + 3);
var roomNameOnly = origRoomName.substr(0, numberStarts);
var mappedName = theRoomHandler.mapRoomNameToPrettyName(roomNameOnly);
var prettyName = (excludeGameName ? roomNumberOnly : mappedName + ' - ' + roomNumberOnly);
}

} else {

if (theRoomHandler.isTournamentTableName(roomName)) {
var prettyName = theLang.getText('F93');
} else {

var firstColonPos = origRoomName.indexOf(':'); 
var langStringPos = origRoomName.search('(_)[A-Za-z]{2}(_)');
var tableName = origRoomName.substr(firstColonPos + 1);

if (langStringPos > 0) {
if (firstColonPos > 0) {

var prettyName = tableName;

} else {
var prettyName = theLang.getText('F76') + ' ' + origRoomName.substr(langStringPos + 4);

if (!excludeGameName) {
var mappedName = theRoomHandler.mapRoomNameToPrettyName(origRoomName);
prettyName = mappedName + ' ' + prettyName;
}
}
} else {
var mappedName = theRoomHandler.mapRoomNameToPrettyName(origRoomName);
var prettyName = mappedName + ' ' + tableName;
}


var secondColonPos = prettyName.indexOf(':'); 
if (secondColonPos > 0) {
prettyName = prettyName.substr(0, secondColonPos);
}
}
}
return prettyName;
}


ChatRoom.prototype.isCurrent = function () {

var theRoomHandler = chatController.roomHandler;

if (theRoomHandler.multiplayerTableRoomJoined()) {
var currentlyJoinedRoom = theRoomHandler.getCurrentTableRoom();
} else {
var currentlyJoinedRoom = theRoomHandler.getCurrent();
}

if (currentlyJoinedRoom != undefined && currentlyJoinedRoom.getId() == this.getId()) {
return true;
}
return false;
}






ChatRoomCategory.prototype._name;
ChatRoomCategory.prototype._rooms;
ChatRoomCategory.prototype._iconHtml = false;
ChatRoomCategory.prototype._defaultRoomName;


function ChatRoomCategory(name) {
this._name = name;
this._rooms = new Array();
}


ChatRoomCategory.prototype.getName = function () {
return this._name;
}


ChatRoomCategory.prototype.toString = function () {
return this._name;
}


ChatRoomCategory.prototype.addRoom = function (chatRoom) {
this._rooms[this._rooms.length] = chatRoom;

if (this._defaultRoomName == undefined) {
this._defaultRoomName = chatRoom.getOrigRoomName();
}
}


ChatRoomCategory.prototype.getDefaultRoomName = function () {
if (this._defaultRoomName != undefined) {
return this._defaultRoomName;
}
return '';
}


ChatRoomCategory.prototype.hasMoreRooms = function () {
return (this._rooms.length > 1);
}


ChatRoomCategory.prototype.holdsCurrentlyJoinedRoom = function () { 

var theRoomHandler = chatController.roomHandler;

var currentRoom = theRoomHandler.getCurrent();
if (currentRoom) {

if (chatSettings.isMultiplayerChat()) {

var lobbyNameToFind = currentRoom.getName();
if (theRoomHandler.multiplayerTableRoomJoined()) {

var tableName = theRoomHandler.getCurrentTableRoom().getName();
lobbyNameToFind = theRoomHandler.removeTableNum(tableName);
}

var thisRoomName = this.getName();
return (thisRoomName.indexOf(lobbyNameToFind) === 0);

} else {

var currentRoomId = currentRoom.getId();
var theRooms = this._rooms;

var theLength = theRooms.length;
for (var index = 0; index < theLength; index++) {
var room = theRooms[index];
if (room) {
if (room.getId() === currentRoomId) {
return true;
}
}
}
}
}
return false;
}


ChatRoomCategory.prototype.getIconHtml = function () {
if (this._iconHtml == false) {
this._iconHtml = this._generateIconHtml();
}
return this._iconHtml;
}

ChatRoomCategory.prototype._generateIconHtml = function () {


var html = '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-201px -271px;"></div></div>';

var prettyCatName = '' + this.getName();
var prettyCatName = prettyCatName.replace(' Tournament', '');


if (!chatController.roomHandler.isMultiplayerTableName(prettyCatName)) {

var gameIconObject = chatController.roomHandler.getGameIcons();

if (prettyCatName.indexOf('VIP') === -1) {

var xy = gameIconObject[prettyCatName];
if (xy === undefined) {
xy = gameIconObject[prettyCatName.substr(0, prettyCatName.length-1)];
}

if (xy === undefined) {
html = '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-201px -271px;"></div></div>';
} else {
html = '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-' + xy.x + 'px -' + xy.y + 'px;"></div></div>';
}
} else {
html = '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-221px -271px;"></div></div>';
}
}
return html;
}


ChatRoomCategory.prototype.getTotalUsersOnline = function () {

var total = 0;
var theRooms = this._rooms;

var theLength = theRooms.length;
for (var index = 0; index < theLength; index++) {
var room = theRooms[index];
if (room) {
total += room.getNoOfUsers();
}
}
return total;
}


ChatRoomCategory.prototype.draw = function () {


var theRoomHandler = chatController.roomHandler;

var holdsCurrentRoom = this.holdsCurrentlyJoinedRoom();
var catName= this.getName();
var catNameToShow = theRoomHandler.mapRoomNameToPrettyName(catName);

var catNameHtml= (holdsCurrentRoom ? '<strong>' + catNameToShow + '</strong>' : catNameToShow);
var currentHeaderClass= (holdsCurrentRoom ? ' toggleBoxHeaderCurrent' : (this.hasMoreRooms() ? '' : ' toggleBoxHeaderOnlyRoom'));
var gameIconHtml = this.getIconHtml();
var toggleboxContent = '';

var defaultRoomName = this.getDefaultRoomName();
var theRooms = this._rooms;

if (this.hasMoreRooms()) {


if (chatSettings.isMultiplayerChat()) {

var lobbyStubRoom = {
getId : function () {return -1},
numChatters : function () {return 'lobby'},
getName : function () {return catName}
};
theRooms.push(new ChatRoom(lobbyStubRoom.getId(), lobbyStubRoom.numChatters(), lobbyStubRoom));
}

theRooms.sort(chatTools.compareIntegers);

var stringArray = new Array();

var theLength = theRooms.length;
for (var index = 0; index < theLength; index++) {
var room = theRooms[index];
if (room) {

var onOffIcon = (room.isCurrent() ? '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-261px -271px;"></div></div>' : '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-281px -271px;"></div></div>');
var prettyName = room.getPrettyName(true);
var origRoomName = room.getOrigRoomName();

if (!theRoomHandler.isMultiplayerTableName(origRoomName)) {
var chattersOnline = '<span class="noOfChatters ">(' + room.getNoOfUsers() + ')</span>';
} else {
var chattersOnline = '<span class="noOfChatters ">(table)</span>';
}

stringArray[index] = '<div class="roomRow"><div class="origRoomName">' + origRoomName + '</div><div class="front"><div class="roomIcon">' + onOffIcon + '</div><div class="roomName"><a href="#" class="link11black"><span class="gameName">' + prettyName + '</span></a>' + chattersOnline + '</div></div></div>';
}
}

toggleboxContent = '<div class="toggleBoxContent">' + stringArray.join('') + '</div>';
}



var noOfChatters = '';
var totalChattersOnline = this.getTotalUsersOnline();
if (totalChattersOnline > 0) {
noOfChatters = '<span class="noOfChatters">(' + totalChattersOnline + ')</span>';
}
return '<div class="toggleBox"><div class="toggleBoxHeader' + currentHeaderClass + '"><div class="origRoomName">' + defaultRoomName + '</div><div class="glassbar"><div class="glassbarLeftside"></div><div class="glassbarMiddle"></div><div class="glassbarRightside"></div></div><div class="front"><div class="gameIcon">' + gameIconHtml + '</div><div class="toggleBoxHeaderContent"><span class="gameName">' + catNameHtml + '</span>' + noOfChatters + '</div><div style="clear:both;"></div></div></div>' + toggleboxContent + '</div>';
}




 


ChatRoomHandler.prototype._MINIMUM_ROOMS_B4_DRAW = 1;

ChatRoomHandler.prototype._currentJavaRoom = null;
ChatRoomHandler.prototype._currentJavaTableRoom = null;
ChatRoomHandler.prototype._persistentRooms = new Array();
ChatRoomHandler.prototype._privateRooms = new Array();
ChatRoomHandler.prototype._categories = new Array();

ChatRoomHandler.prototype._gameIconsObject = {
"ArabianSolitaire": {'x' : 321, 'y' : 343},
"Mahjong": {'x' : 301, 'y' : 343},
"MiniJong": {'x' : 581, 'y' : 343},
"BalloonBuster": {'x' : 361, 'y' : 343},
"WordGame": {'x' : 501, 'y' : 343},
"SuperSolitaire": {'x' : 541, 'y' : 343},
"SuperDiamondMind": {'x' : 81, 'y' : 343},
"Spider": {'x' : 441, 'y' : 343},
"SpaceBricks": {'x' : 601, 'y' : 343},
"Rocket21Deluxe": {'x' : 421, 'y' : 343},
"Rocket21": {'x' : 201, 'y' : 343},
"MoneySpin": {'x' : 521, 'y' : 343},
"IceCubes": {'x' : 341, 'y' : 343},
"EgyptianPyramids": {'x' : 461, 'y' : 343},
"DiamondMind": {'x' : 401, 'y' : 343},
"Sudoku": {'x' : 281, 'y' : 343},
"TombSolitaire": {'x' : 241, 'y' : 343},
"AceSolitaire": {'x' : 21, 'y' : 343},
"HoneyBee": {'x' : 141, 'y' : 343},
"LuckyDice": {'x' : 121, 'y' : 343},
"SuperBall": {'x' : 101, 'y' : 343},
"GemQuest": {'x' : 161, 'y' : 343},
"TakeTwo": {'x' : 381, 'y' : 343},
"BalloonBuster2": {'x' : 681, 'y' : 343},
"DiamondMind2": {'x' : 41, 'y' : 343},
"VIP-lounge": {'x' : 221, 'y' : 271},
"Mahjong2": {'x' : 721, 'y' : 343},
"Olympics": {'x' : 261, 'y' : 343},
"7Solitaire": {'x' : 181, 'y' : 343},
"JigsawPuzzle": {'x' : 221, 'y' : 343},
"Handyman": {'x' : 701, 'y' : 343},
"EgyptianPyramids2": {'x' : 661, 'y' : 343},
"PearlShooter": {'x' : 641, 'y' : 343},
"LoggedOutOfChat": {'x' : 21, 'y' : 271},
"PokerSquare": {'x' : 841, 'y' : 343},
"SpeedDateCafe": {'x' : 761, 'y' : 343},
"SpiderSolitaire": {'x' : 621, 'y' : 343},
"SurferVideoPoker": {'x' : 561, 'y' : 343},
"MahjongBattle": {'x' : 281, 'y' : 325},
"GloriousWorld": {'x' : 821, 'y' : 343},
"WhoopsyDaisy": {'x' : 781, 'y' : 343},
"Bingo90": {'x' : 141, 'y' : 325},
"FunfairAnimals": {'x' : 741, 'y' : 343},
"MahjongPuzzle": {'x' : 801, 'y' : 343},
"BingoSpinner": {'x' : 101, 'y' : 325},
"HeidiHunt": {'x' : 901, 'y' : 343},
"PictureLogic": {'x' : 861, 'y' : 343},
"ChatDev": {'x' : 101, 'y' : 109},
"AdminsOnly": {'x' : 41, 'y' : 469},
"AGloriousWorld": {'x' : 821, 'y' : 343},
"Cut2Pieces": {'x' : 961, 'y' : 343},
"MonkeyGalaxy": {'x' : 981, 'y' : 343},
"TrainCargo": {'x' : 881, 'y' : 343},
"YatzyMania": {'x' : 61, 'y' : 325},
"AdultRoom": {'x' : 361, 'y' : 19},
"TeddyTales": {'x' : 941, 'y' : 343},
"Picross": {'x' : 861, 'y' : 343},
"FreeCELL": {'x' : 481, 'y' : 343},
"TravelSolitaire": {'x' : 921, 'y' : 343},
"Route66": {'x' : 61, 'y' : 343},
"JungleDice": {'x' : 21, 'y' : 361}
};
ChatRoomHandler.prototype._roomlistRedrawBlocked = false;


function ChatRoomHandler() {}


ChatRoomHandler.prototype.getFromId = function (javaRoomObjectId) {

var theRooms = this._persistentRooms;
for (var index in theRooms) {
var room = theRooms[index];

if (javaRoomObjectId == room.getId()) {
return room;
}
}
return false;
}


ChatRoomHandler.prototype.getFromName = function (javaRoomObjectName) {

var theRooms = this._persistentRooms;
for (var index in theRooms) {
var room = theRooms[index];

if (javaRoomObjectName == room.getName()) {
return room;
}
}
return false;
}


ChatRoomHandler.prototype.getCurrent = function () {

var defaultRoomName = chatVars.defaultRoomName;


if (typeof(this._currentJavaRoom) == undefined && defaultRoomName.length) {
this._currentJavaRoom = chatController.getJavaRoomObject(defaultRoomName);
}
return this._currentJavaRoom;
}


ChatRoomHandler.prototype.setCurrent = function (javaRoomObject) {
                                this._currentJavaRoom = javaRoomObject;
}

ChatRoomHandler.prototype.flushCurrent = function () {
this._currentJavaRoom = null;
}




ChatRoomHandler.prototype.getCurrentTableRoom = function () {
return this._currentJavaTableRoom;
}


ChatRoomHandler.prototype.setCurrentTableRoom = function (javaRoomObject) {
this._currentJavaTableRoom = javaRoomObject;
}

ChatRoomHandler.prototype.flushCurrentTableRoom = function () {
this._currentJavaTableRoom = null;
}


ChatRoomHandler.prototype.multiplayerTableRoomJoined = function () {
return (this._currentJavaTableRoom != null);
}




ChatRoomHandler.prototype.getGameIcons = function () {
return this._gameIconsObject;
}


ChatRoomHandler.prototype.getPrettyRoomName = function (javaRoomObject) {

var name = javaRoomObject.getName();

if (this.isPrivate(name) || this.isIMRoom(name)) {
return chatController.lang.getText('F66');

} else if (this.isAdultRoom(name)) {
return chatController.lang.getText('F225');;
}

var dummy = new ChatRoom(-1, 0, javaRoomObject);
return dummy.getPrettyName();
}


ChatRoomHandler.prototype.mapRoomNameToPrettyName = function (roomName) {

var thePrettyName = chatVars.gameNames[roomName];
if (thePrettyName === undefined) {

if (this.isAdultRoom(roomName)) {
return chatController.lang.getText('F225');
}

return roomName;
}
return thePrettyName;
}


ChatRoomHandler.prototype.getCategoryType = function (roomName) {

if (roomName.indexOf('Tournament') !== -1) {
return 'tournament';
}

switch (roomName) {
case 'AdminsOnly':
case 'AdultRoom':
case 'VIP-lounge':
return 'other';
break;
default:
break;
}
return 'game';
}


ChatRoomHandler.prototype.getGroupNum = function (roomName) {

var groupDesignationStarts = roomName.indexOf('{');
var groupDesignationEnds = roomName.indexOf('}');
if (groupDesignationStarts != -1 && groupDesignationEnds != -1) {

var theGroup = roomName.substring( (groupDesignationStarts + 1), groupDesignationEnds);
return theGroup;
}

return false;
}

ChatRoomHandler.prototype.removeGroupNum = function (string) {
var stripped = string.replace(/^\{\d+\}/, '');
return stripped;
}


ChatRoomHandler.prototype.removeRoomNum = function (string) {
var stripped = string.replace(/ - \d+$/, '');
return stripped;
}


ChatRoomHandler.prototype.removeTableNum = function (string) {
return string.substr(0, string.indexOf(':'));
}


ChatRoomHandler.prototype.getNoOfChatters = function (javaRoomObject) {
return javaRoomObject.getChatters().length;
}


ChatRoomHandler.prototype.isMultiplayerTable = function (javaRoomObject) {

if (javaRoomObject) {
return javaRoomObject.getName().indexOf(":") > -1;
}
return false;
}

ChatRoomHandler.prototype.isMultiplayerTableName = function (roomName) {
if (roomName && roomName.length) {
return roomName.indexOf(":") > -1;
}
return false;
}


ChatRoomHandler.prototype.isTournamentTableName = function (roomName) {
if (roomName && roomName.length) {
return (roomName.indexOf("Tournament") > -1 && this.isMultiplayerTableName(roomName));
}
return false;
}




ChatRoomHandler.prototype.roomExists = function (roomName) {
if (roomName != undefined) {

var theRooms = this._persistentRooms;
for (var index in theRooms) {

var room = theRooms[index];

if (room.getName() == roomName) {
return true;
}
}
}
return false;
}

ChatRoomHandler.prototype.removeRoom = function (roomName) {
if (roomName != undefined) {

var theRooms = this._persistentRooms;
for (var index in theRooms) {

var room = theRooms[index];

if (room.getName() == roomName) {
this._persistentRooms.splice(index, 1); 
return true;
}
}
}
return false;
}


ChatRoomHandler.prototype.getCurrentlyViewedRoomName = function () {

var chatareaClassname = $('div#chatboxContentWrapper > div.subareaContainer > div.subareaChatTab > div.chatarea:visible').attr('class');
if (chatareaClassname != undefined) {
chatareaClassname = chatareaClassname.split(' ');
chatareaClassname = chatareaClassname[1];
} 

if (chatareaClassname == undefined || chatareaClassname == 'chatareaGeneral') {


var theRoom = this.getCurrentlyViewedRoom();
if (theRoom) {
return theRoom.getName();

} else {

var gameName = chatController.getCurrentGameName();
return gameName;
}
} else {
return chatareaClassname.substr(8);
}
}

ChatRoomHandler.prototype.getCurrentlyViewedRoom = function () {

if (chatSettings.isMultiplayerChat() && chatController.roomHandler.multiplayerTableRoomJoined()) {
var theRoom = this.getCurrentTableRoom();
} else {
var theRoom = this.getCurrent();
}
return theRoom;
}


ChatRoomHandler.prototype.createPrivateRoomName = function (otherUserName) {

var date = new Date();
var unix = Math.floor(date.getTime() / 1000);

var selfObject = chatController.userHandler.getCurrent()._chatUserObject;

return 'priv__' + selfObject.getName() + '__vs__' + otherUserName + '__unix__' + unix;
}


ChatRoomHandler.prototype.createPrivateRoom = function (javaRoomObject) {

var theRoomObject = new ChatRoom(javaRoomObject.getId(), 2, javaRoomObject);
return theRoomObject;
}


ChatRoomHandler.prototype.getPrivateRoom = function (privateRoomName) {


if (privateRoomName != undefined) {

var theRooms = this.getPrivateRooms();
for (var index in theRooms) {
var roomObject = theRooms[index];
var javaRoomObject = roomObject._javaRoomObject;

if (javaRoomObject.getName() == privateRoomName) {
return roomObject;
}
}
return false;
}
}

ChatRoomHandler.prototype.getPrivateRooms = function () {
return this._privateRooms;
}


ChatRoomHandler.prototype.isPrivate = function (roomName) {
return roomName.indexOf('priv__') > -1;
}

ChatRoomHandler.prototype.isIMRoom = function (roomName) {
return roomName.indexOf('IM') > -1;
}


ChatRoomHandler.prototype.isAdultRoom = function (roomName) {

if (roomName == undefined || roomName == null) {
var currentRoom = chatController.roomHandler.getCurrent();
if (currentRoom != undefined) {
var roomName = currentRoom.getName();
} else {
return false;
}
}
return roomName.indexOf('Adult') > -1;
}

ChatRoomHandler.prototype.isAdminsOnlyRoom = function (roomName) {
return roomName.indexOf('AdminsOnly') > -1;
}


ChatRoomHandler.prototype.getIconHtml = function(javaRoomObject) {

var catName = this.removeRoomNum(javaRoomObject.getName());
 
var dummyCat = new ChatRoomCategory(catName);
return dummyCat.getIconHtml();
}


ChatRoomHandler.prototype.hasPrivateChatWith = function (otherUsername) {

var ownUserName = chatController.userHandler.getCurrent()._chatUserObject.getName();

var option1 = 'priv__' + ownUserName + '__vs__' + otherUsername + '__unix';
var option2 = 'priv__' + otherUsername + '__vs__' + ownUserName + '__unix';

var theRooms = this.getPrivateRooms();
for (var index in theRooms) {
var room = theRooms[index];
var theName = room.getName();

if (theName.indexOf(option1) == 0 || theName.indexOf(option2) == 0) {
return true;
}
}
return false;
}


ChatRoomHandler.prototype.currentChatterIsAlone = function () {

var currentJavaRoomObject = this.getCurrent();
var noOfChatters = 0;

if (currentJavaRoomObject) {
noOfChatters = currentJavaRoomObject.numChatters();
}
return (noOfChatters == 1);
}


ChatRoomHandler.prototype.addPrivateRoom = function (theRoomObject) {
if (!chatTools.inArray(this._privateRooms, theRoomObject)) {
this._privateRooms[this._privateRooms.length] = theRoomObject;
}
}


ChatRoomHandler.prototype.removePrivateRoom = function (theRoomObject) {

var theRooms = this.getPrivateRooms();
for (var index in theRooms) {
var room = theRooms[index];

if (room.getId() == theRoomObject.getId()) {
this._privateRooms.splice(index, 1); 
}
}
}


ChatRoomHandler.prototype._buildCategories = function (theRooms) {

var theCats = new Array();


if (chatTools.objectIsArray(theRooms)) {

for (var index in theRooms) {
var room = theRooms[index];


 var catName = this.removeRoomNum(room.getName());
 if (catName != '') {

 
 var catIndex = -1;
 for (var index in theCats) {
 if (theCats[index].getName() == catName) {
 catIndex = index;
 }
 }

 
 if (catIndex == -1) {
 catIndex = theCats.length;
 theCats[catIndex] = new ChatRoomCategory(catName);
 }

 
 room.setCategoryIndex(catIndex);
 theCats[catIndex].addRoom(room);
 }
}


} else {

var iterator = theRooms.iterator();
while (iterator.hasNext()) {
var javaSimpleTableObject = iterator.next();

var roomId = javaSimpleTableObject.getId();
var roomName = javaSimpleTableObject.getName();




 var catName = this.removeTableNum(roomName);
 if (catName != '') {

 
 var catIndex = -1;
 for (var index in theCats) {
 if (theCats[index].getName() == catName) {
 catIndex = index;
 }
 }

 
 if (catIndex == -1) {
 catIndex = theCats.length;
 theCats[catIndex] = new ChatRoomCategory(catName);
 }

 
 var newRoom = new ChatRoom(roomId, 0, javaSimpleTableObject);
 newRoom.setCategoryIndex(catIndex);
 theCats[catIndex].addRoom(newRoom);
 }
}
}


theCats.sort(chatTools.compareStrings);
return theCats;
}

ChatRoomHandler.prototype.getCategories = function () {
if (this._categories.length == 0) {

var theRooms = this._persistentRooms;
var theCats = this._buildCategories(theRooms);

this._categories = theCats;
}
return this._categories;
}


ChatRoomHandler.prototype.drawCategories = function (catsArray) {

var gameCatsAr = new Array();
var tournamentCatsAr = new Array();
var otherCatsAr = new Array();

var theController = chatController;

var selfIsAdmin = theController.userHandler.getCurrent()._chatUserObject.isBanAdm();

for (var index in catsArray) {
var cat = catsArray[index];

var catName = cat.getName();

if (catName.indexOf('LoggedOutOfChat') === 0 || catName.indexOf('ChatDev') === 0) {
continue;

} else if (catName.indexOf('PrisonCell') === 0) {
continue;

} else if (catName.indexOf('AdminsOnly') === 0 && !selfIsAdmin) {
continue;
}

if (this.getCategoryType(catName) === 'game') {
gameCatsAr[gameCatsAr.length] = cat.draw();
} else if (this.getCategoryType(catName) === 'tournament'){
tournamentCatsAr[tournamentCatsAr.length] = cat.draw();
} else {
otherCatsAr[otherCatsAr.length] = cat.draw();
}
}

var gamePartAr = [
'<div class="toggleBox"><div class="toggleBoxHeader categoryTypeHeader"><div class="plusminusbox icon_plus"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-341px -271px;"></div></div></div><div class="plusminusbox icon_minus"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -271px;"></div></div></div><div class="toggleBoxHeaderContent"><strong>',
theController.lang.getText('F215'),
'</strong></div><div style="clear:both;"></div></div><div class="toggleBoxContent"> ',
gameCatsAr.join(''),
' <div style="clear:both;"></div></div></div>'
];
var otherPartAr = [
'<div class="toggleBox"><div class="toggleBoxHeader categoryTypeHeader"><div class="plusminusbox icon_plus"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-341px -271px;"></div></div></div><div class="plusminusbox icon_minus"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -271px;"></div></div></div><div class="toggleBoxHeaderContent"><strong>',
theController.lang.getText('F216'),
'</strong></div><div style="clear:both;"></div></div><div class="toggleBoxContent"> ',
otherCatsAr.join(''),
' <div style="clear:both;"></div></div></div>'
];

var tournamentPartAr = [];
if (tournamentCatsAr.length > 0) {

tournamentPartAr = [
'<div class="toggleBox"><div class="toggleBoxHeader categoryTypeHeader"><div class="plusminusbox icon_plus"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-341px -271px;"></div></div></div><div class="plusminusbox icon_minus"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -271px;"></div></div></div><div class="toggleBoxHeaderContent"><strong>',
theController.lang.getText('F228'),
'</strong></div><div style="clear:both;"></div></div><div class="toggleBoxContent"> ',
tournamentCatsAr.join(''),
' <div style="clear:both;"></div></div></div>'
];
}

return otherPartAr.join('') + gamePartAr.join('') + tournamentPartAr.join('') + '<div id="roomsWaitBar" class="subarea" style="display:none;"><div class="waitbar"><img src="' + chatVars.absroot + '/images/progressing.gif" width="86" height="16" alt="progressbar"></div></div>';
}


ChatRoomHandler.prototype.drawTableRoomRows = function (roomList) {
var theCats = this._buildCategories(roomList);
return this.drawCategories(theCats);
}




ChatRoomHandler.prototype.replacePersistentRoom = function (javaRoomObject, noOfChatters) {

var theRoomId = javaRoomObject.getId();
var wasInArray = false;


for (var index in this._persistentRooms) {

var existingRoom = this._persistentRooms[index];
if (existingRoom.getId() == theRoomId) {


existingRoom.setNoOfUsers(noOfChatters);
wasInArray = true;
break;
}
}

if (!wasInArray ) {

var theRoomObject = new ChatRoom(theRoomId, noOfChatters, javaRoomObject);
this._persistentRooms[this._persistentRooms.length] = theRoomObject;
}
}




ChatRoomHandler.prototype.minimumRoomsRetrieved = function () {
return (this._persistentRooms.length >= this._MINIMUM_ROOMS_B4_DRAW);
}


ChatRoomHandler.prototype.roomlistRedrawBlocked = function() {
return (this._roomlistRedrawBlocked != false);
}


ChatRoomHandler.prototype.blockRoomlistRedraw = function() {

this._roomlistRedrawBlocked = true;

globalRoomHandlerCopy = this;
window.setTimeout('globalRoomHandlerCopy.unblockRoomlistRedraw();', 2000);
}


ChatRoomHandler.prototype.unblockRoomlistRedraw = function() {
this._roomlistRedrawBlocked = false;
}



 

ChatUser.prototype._javaUserObject = null;

ChatUser.prototype._Id = null;
ChatUser.prototype._name = null;
ChatUser.prototype._properties = null;
ChatUser.prototype._isBanAdm = null;
ChatUser.prototype._isFemale = null;
ChatUser.prototype._isMale = null;
ChatUser.prototype._isMuteAdm = null;
ChatUser.prototype._isKickAdm = null;
ChatUser.prototype._isMuted = null;
ChatUser.prototype._isStaff = null;
ChatUser.prototype._isStealth = null;
ChatUser.prototype._isVip = null;
ChatUser.prototype._isVisibleAdm = null;

ChatUser.prototype._usersRowHtml = null;
ChatUser.prototype._gameRating = null;
ChatUser.prototype._ratingIcon = null;

ChatUser.prototype._chosenChatIconId= null;

function ChatUser (javaUserObject) {
this._javaUserObject = javaUserObject;
}


ChatUser.prototype.getJava = function () {
return this._javaUserObject;
}

ChatUser.prototype.getId = function () {
if (this._Id == null && this._javaUserObject) {
this._Id = this._javaUserObject.getId();
}
return this._Id;
}
ChatUser.prototype.getName = function () {
if (this._name == null && this._javaUserObject) {
this._name = this._javaUserObject.getName();
this._name = $.trim(this._name);
}
return this._name;
}
ChatUser.prototype.getProperties = function () {
if (this._properties == null && this._javaUserObject) {
this._properties = this._javaUserObject.getProperties();
}
return this._properties;
}


ChatUser.prototype.hasGameRating = function () {
var myProperty = 'rating' + this.getName();
return (chatController.userHandler.userGameRatings[myProperty] != null);
}
ChatUser.prototype.getGameRating = function () {
var myProperty = 'rating' + this.getName();
return chatController.userHandler.userGameRatings[myProperty];
}
ChatUser.prototype.setGameRating = function (theRating) {
var myProperty = 'rating' + this.getName();
chatController.userHandler.userGameRatings[myProperty] = theRating;
}


ChatUser.prototype.isBanAdm = function () {
if (this._isBanAdm == null && this._javaUserObject) {
this._isBanAdm = this._javaUserObject.isBanAdm();
}
return this._isBanAdm;
}
ChatUser.prototype.isFemale = function () {
if (this._isFemale == null && this._javaUserObject) {
this._isFemale = this._javaUserObject.isFemale();
}
return this._isFemale;
}
ChatUser.prototype.isMale = function () {
if (this._isMale == null && this._javaUserObject) {
this._isMale = this._javaUserObject.isMale();
}
return this._isMale;
}
ChatUser.prototype.isMuteAdm = function () {
if (this._isMuteAdm == null && this._javaUserObject) {
this._isMuteAdm = this._javaUserObject.isMuteAdm();
}
return this._isMuteAdm;
}
ChatUser.prototype.isKickAdm = function () {
if (this._isKickAdm == null && this._javaUserObject) {
this._isKickAdm = this._javaUserObject.isKickAdm();
}
return this._isKickAdm;
}
ChatUser.prototype.isMuted = function () {
if (this._isMuted == null && this._javaUserObject) {
this._isMuted = this._javaUserObject.isMuted();
}
return this._isMuted;
}
ChatUser.prototype.isStaff = function (staffOnly) {
if (this._isStaff == null && this._javaUserObject) {

if (staffOnly !== undefined) {
this._isStaff = this._javaUserObject.isStaff();
} else {
return (this.getName() === 'duroflex');
}
}
return this._isStaff;
}
ChatUser.prototype.isStealth = function () {
if (this._isStealth == null && this._javaUserObject) {
this._isStealth = this._javaUserObject.isStealth();
}
return this._isStealth;
}
ChatUser.prototype.isVip = function () {
if (this._isVip == null && this._javaUserObject) {
this._isVip = this._javaUserObject.isVip();
}
return this._isVip;
}
ChatUser.prototype.isVisibleAdm = function () {
if (this._isVisibleAdm == null && this._javaUserObject) {
this._isVisibleAdm = this._javaUserObject.isVisibleAdm();
}
return this._isVisibleAdm;
}
ChatUser.prototype.isGuestUser = function () {
return (this.getName().indexOf('G_') === 0);
}

ChatUser.prototype.getLinkClass = function () {
return (this.isMale() ? 'size11profileblue' : 'size11profilered');
}


ChatUser.prototype.drawUsersRow = function (smallText) {

if (this._usersRowHtml == null) {

var chatIconHtml = chatController.userHandler.getChatIconHtml(this._javaUserObject);
var rankIconHtml = chatController.userHandler.getRankIconHtml(this._javaUserObject);


var rightElem = '';
if (smallText != undefined) {

rightElem = '<div class="miscText size10grey">' + smallText + '</div>';

} else if (chatSettings.isMultiplayerChat() && chatController.roomHandler.multiplayerTableRoomJoined() && this.hasGameRating()) {

rightElem = this.drawUserRowRating();
}
this._usersRowHtml = '<div class="chatRow"><div class="chatIcon uid' + this.getId() + '">' + chatIconHtml + ' </div><div class="chatName ' + this.getLinkClass() + '">' + this.getName() + '</div>' + rankIconHtml + rightElem + '</div>';
}
return this._usersRowHtml;
}

ChatUser.prototype.drawUserRowRating = function () {
var rating = this.getGameRating();
return '<div class="userRatingWrapper miscText size11grey"><strong>' + rating + '</strong><img class="ratingIcon" src="../../images/rating/rate_' + this.getRatingIcon(rating) + '.gif" alt="" /></div>';
}

ChatUser.prototype.getRatingIcon = function (rating) {

if (this._ratingIcon == null) {

var ratingpic = '';

if (rating == 'top3') {
ratingpic = '17';
} else if (rating == 'top2') {
ratingpic = '18';
} else if (rating == 'top1') {
ratingpic = '19';
} else if (rating == 0) {
ratingpic = '0';
} else if (rating < 200) {
ratingpic = '0';
} else if (rating <=500) {
ratingpic = '1';
} else if (rating <= 800) {
ratingpic = '2';
} else if (rating <= 1100) {
ratingpic = '3';
} else if (rating <= 1400) {
ratingpic = '4';
} else if (rating <= 1800) {
ratingpic = '5';
} else if (rating <= 2200) {
ratingpic = '6';
} else if (rating <= 2500) {
ratingpic = '7';
} else if (rating <= 2800) {
ratingpic = '8';
} else if (rating <= 3100) {
ratingpic = '9';
} else if (rating <= 3400) {
ratingpic = '10';
} else if (rating <= 3700) {
ratingpic = '11';
} else if (rating <= 4000) {
ratingpic = '12';
} else if (rating <= 4300) {
ratingpic = '13';
} else if (rating <= 4600) {
ratingpic = '14';
} else if (rating <= 4900) {
ratingpic = '15';
} else if (rating <= 5200) {
ratingpic = '16';
} else if (rating > 5200) {
ratingpic = '16';
}
this._ratingIcon = ratingpic;
}
return this._ratingIcon;
}

ChatUser.prototype.toString = function () {
return this.getName();
}



 

ChatUserSelf.prototype._friendsArray = new Array();
ChatUserSelf.prototype._ignoreArray = new Array();
ChatUserSelf.prototype._chatUserObject;


function ChatUserSelf(javaUserObject) {
this._chatUserObject = new ChatUser(javaUserObject);

this._friendsArray = chatVars.friendsArray
this._ignoreArray = chatVars.ignoreArray;
}

ChatUserSelf.prototype.getUser = function () {
return this._chatUserObject;
}


ChatUserSelf.prototype.hasFriends = function () {
return (this._friendsArray.length > 0);
}


ChatUserSelf.prototype.hasAsFriend = function (user) {

var theUsername = ((typeof(user) === 'object' || typeof(user) === 'function') ? user.getName() : user);

if (typeof(theUsername) === 'string') {
if (chatTools.inArray(this._friendsArray, theUsername)) {
return true;
}
}
return false;
}

ChatUserSelf.prototype.isSelf = function (userName) {
return (this._chatUserObject.getName() === userName);
}

ChatUserSelf.prototype.ignoresUser = function (senderUserName) {
if (chatTools.inArray(this._ignoreArray, senderUserName)) {
return true;
}
return false;
}


ChatUserSelf.prototype.ignore = function (targetJavaUserObject) {

var objType = typeof(targetJavaUserObject);

if (objType === 'object' || objType === 'function') {
var username = targetJavaUserObject.getName();

if (!chatTools.inArray(this._ignoreArray, username)) {
this._ignoreArray[this._ignoreArray.length] = username;
}
}
}


ChatUserSelf.prototype.isGuestUser = function () {
return (this._chatUserObject.isGuestUser());
}





ChatUserHandler.prototype._DEFAULT_BLOCK_TIME = 2;


ChatUserHandler.prototype._currentUser = false;
ChatUserHandler.prototype._currentChatters = new Array();
ChatUserHandler.prototype._currentTableChatters = new Array();
ChatUserHandler.prototype._currentChatterUsernames = null;
ChatUserHandler.prototype._profileInfoUserObjects = new Array();
ChatUserHandler.prototype._userlistRedrawBlocked = false;
ChatUserHandler.prototype._profileInfoRedrawBlocked = false;

ChatUserHandler.prototype._nongameProfileInfoObjects = new Array();
ChatUserHandler.prototype.userGameRatings = {};
ChatUserHandler.prototype.gameUsesRank = false;


function ChatUserHandler() {
this.gameUsesRank = chatVars.gameUsesRank;
}


ChatUserHandler.prototype.setCurrent = function (javaUserObject) {
if (javaUserObject) {
this._currentUser = new ChatUserSelf(javaUserObject);
return this._currentUser;
}
return false;
}


ChatUserHandler.prototype.getCurrent = function () {
return this._currentUser;
}


ChatUserHandler.prototype.allowMessagesFrom = function(javaSenderUserObject) {

if (chatSettings.chattingAllowed()) {

if (this.getCurrent()) {
var theName = javaSenderUserObject.getName();
if (theName !== undefined && theName !== 'undefined' && theName.length > 0) {
return !this.getCurrent().ignoresUser(theName);
}
}
}
return false;
};


ChatUserHandler.prototype.getProfileInfoUser = function (chatUserObjectId) {


var list = this._profileInfoUserObjects;
var candidate = list[chatUserObjectId];

if (candidate && candidate._chatUserProfileObject) {

var candidateId = candidate.getProfileObjectId();
if (candidateId == chatUserObjectId) {
return candidate;
}
}
return false;
}


ChatUserHandler.prototype.getNongameProfileInfo = function (usernameOrId, usingId) {


var list = this._nongameProfileInfoObjects;

for (var index in list) {
var candidate = list[index];
if (candidate) {

if ((candidate.username === usernameOrId) || (usingId !== undefined && candidate.userId === usernameOrId)) {
return candidate;
}
}
}
return false;
}


ChatUserHandler.prototype.cacheNongameProfileInfoObject = function (profileInfoObject) {
var newIndex = this._nongameProfileInfoObjects.length;
this._nongameProfileInfoObjects[newIndex] = profileInfoObject;
}

 
ChatUserHandler.prototype.uncacheNongameProfileInfoObject = function (username) {


var list = this._nongameProfileInfoObjects;

for (var index in list) {
var candidate = list[index];
if (candidate) {

if (candidate.username == username) {
this._nongameProfileInfoObjects.splice(index, 1);
break;
}
}
}
}


ChatUserHandler.prototype.getRankIconHtml = function (javaUserObject) {

    if (this.gameUsesRank) {

var theController = chatController;
var theVars = chatVars;

var settingKey = 'gameRank' + theVars.gid;
var userRank = javaUserObject.getSettings().get(settingKey);
if (userRank === null) {
userRank = 1;
}

var genderString = (javaUserObject.isMale() ? 'male' : 'female');

theController.lang.setPage('experience');
var stringAr = new Array (
'<div class="userExpRank"><img src="' + chatVars.absroot + '/images/chat/rankslim_',
genderString,
'.png" width="17" height="14" title="',
theController.lang.getText('F01'),
userRank,
' - ',
theVars.gameName,
'" /><div class="rankname',
genderString,
'">',
userRank,
'</div></div>'
);
theController.lang.setPage('chat');
return stringAr.join('');
}
return '';
}


ChatUserHandler.prototype.getChatIconHtml = function (javaUserObject) {

if (chatSettings.getAvatarsVisible() !== '1' || chatVars.isSimpleVersion) {
return '';
}

var existingChatIconId = this.getChatIconId(javaUserObject);
return chatController.graphics.getCachedChatIconHtml(existingChatIconId);
}




ChatUserHandler.prototype.getChatIconId = function (javaUserObject) {

var chosenOne = javaUserObject.getSettings().get('chosenChatIconId');
if (chosenOne) {

if (chosenOne !== 'chatIconX1Y26' && chosenOne !== 'chatIconX2Y26') {
return chosenOne;

} else if (javaUserObject.isBanAdm()) {

if (javaUserObject.getName() === 'kasper') {
return 'chatIconX17Y23';
}
return chosenOne;
}
}

if (javaUserObject.isVip()) {
var existingChatIconId = (javaUserObject.isMale() ? 'chatIconX14Y22' : 'chatIconX15Y22');
} else {
var existingChatIconId = (javaUserObject.isMale() ? 'chatIconX12Y22' : 'chatIconX13Y22');
}
return existingChatIconId;
}



ChatUserHandler.prototype.resetCurrentChatters = function () {
this._currentChatters = new Array();
}

ChatUserHandler.prototype.resetCurrentTableChatters = function () {
this._currentTableChatters = new Array();
}




ChatUserHandler.prototype.populateChatters = function () {

var drawMultiplayerTableVersion = (chatSettings.isMultiplayerChat() && chatController.roomHandler.multiplayerTableRoomJoined());


if (drawMultiplayerTableVersion) {

if (this._currentTableChatters.length === 0){
this._populateCurrentTableChatters();
}
return this._currentTableChatters;

} else {

if (this._currentChatters.length === 0){
this._populateCurrentChatters();
}
return this._currentChatters;
}
}


ChatUserHandler.prototype.getFriends = function (chatUserObject, theChatters) {

var usersFriends = new Array();

for (var index in theChatters) {

var possibleFriend = theChatters[index];

if (chatUserObject.hasAsFriend(possibleFriend)) {
usersFriends.push(possibleFriend);
}
}
return usersFriends;
}


ChatUserHandler.prototype.drawUserlist = function (userObjectArray) {

var htmlAr = new Array();
var theController = chatController;
var theRoomHandler = theController.roomHandler;
var drawMultiplayerTableVersion = (chatSettings.isMultiplayerChat() && theRoomHandler.multiplayerTableRoomJoined());

var userHtml = '';


if (userObjectArray.length > 0) {

var ownUser = this.getCurrent();

if (drawMultiplayerTableVersion) {
var currentJavaRoom = theRoomHandler.getCurrentTableRoom();
} else {
var currentJavaRoom = theRoomHandler.getCurrent();
}

if (currentJavaRoom) {

var currentRoomName = theRoomHandler.getPrettyRoomName(currentJavaRoom);
var currentRoomUsersNum = userObjectArray.length;

var currentAdminsNum = 0;
var currentFriendsNum = 0;
var everyoneNum = 0;


userObjectArray.sort(chatTools.compareStrings);


var everyoneStringArray = new Array();
var friendsStringArray = new Array();
var adminsStringArray = new Array();

for (var index in userObjectArray) {
var user = userObjectArray[index];

if (!user.isGuestUser()) {

if (user.isBanAdm() && user.isVisibleAdm()) {

userHtml = user.drawUsersRow(currentRoomName);
adminsStringArray[adminsStringArray.length] = userHtml;
currentAdminsNum++;

} else if (ownUser.hasAsFriend(user) || (ownUser.isSelf(user.getName()))) {

userHtml = user.drawUsersRow(currentRoomName);
friendsStringArray[friendsStringArray.length] = userHtml;
currentFriendsNum++;

} else {
userHtml = user.drawUsersRow();
everyoneStringArray[everyoneStringArray.length] = userHtml;
everyoneNum++;
}
}
}

currentRoomUsersNum = (currentRoomUsersNum - currentFriendsNum - currentAdminsNum);


var drawUserToggleBox = function (headerText, noOfUsers, userrowsHtml) {
var theAr = new Array(
'<div class="toggleBox"><div class="toggleBoxHeader"><div class="plusminusbox icon_plus"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-341px -271px;"></div></div></div><div class="plusminusbox icon_minus"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -271px;"></div></div></div><div class="toggleBoxHeaderContent"><strong>',
headerText,
'</strong>&nbsp;<span class="size12grey"><strong>(',
noOfUsers,
')</strong></span></div><div style="clear:both;"></div></div><div class="toggleBoxContent"> ',
userrowsHtml,
' <div style="clear:both;"></div></div></div>'
);
return theAr.join('');
}



if (currentAdminsNum > 0) {
htmlAr[0] = drawUserToggleBox(theController.lang.getText('F39'), currentAdminsNum, adminsStringArray.join(''));
}


htmlAr[1] = drawUserToggleBox(theController.lang.getText('F40'), currentFriendsNum, friendsStringArray.join(''));


if (everyoneNum > 0) {
htmlAr[2] = drawUserToggleBox(currentRoomName, currentRoomUsersNum, everyoneStringArray.join(''));
}

htmlAr[3] = '<div id="usersWaitBar" class="subarea" style="display:none;"><div class="waitbar"><img src="' + chatVars.absroot + '/images/progressing.gif" width="86" height="16" alt="progressbar"></div></div>';
}
}
return htmlAr.join('');
}


ChatUserHandler.prototype.drawCurrentTableChatters = function () {


if (this._currentTableChatters.length == 0) {
this._populateCurrentTableChatters();
}

var html = '';
var userHtml = '';

var theController = chatController;

var theChatters = this._currentTableChatters;
if (theChatters.length > 0) {

var ownUser = false;
var ownUsername = this.getCurrent()._chatUserObject.getName();


theChatters.sort(chatTools.compareStrings);

if (theChatters.length > 0) {

var currentJavaRoom = theController.roomHandler.getCurrentTableRoom();
if (currentJavaRoom) {

var currentRoomName = theController.roomHandler.getPrettyRoomName(currentJavaRoom);
var currentRoomUsersNum = theChatters.length;


var rowsStringArray = new Array();
for (var index in theChatters) {
var user = theChatters[index];

if (ownUsername != user.getName()) {
userHtml = user.drawUsersRow();
rowsStringArray[index] = userHtml;
} else {
ownUser = user;
}
}


if (ownUser && ownUser.drawUsersRow) {
rowsStringArray.unshift(ownUser.drawUsersRow());
}
theController.lang.setPage('stats-php');
html = '<div class="tableUsersHeader"><strong>' + currentRoomName + '</strong> <span class="size11lightgrey">(' + currentRoomUsersNum + ' ' + theController.lang.getText('F115') + ')</span></div>' + rowsStringArray.join('') + ' <div style="clear:both;"></div>';
theController.lang.setPage('chat');
}
}
}
return html;
}


ChatUserHandler.prototype.repopulateCurrentChatters = function () {
this._currentChatters = new Array();
return this._populateCurrentChatters();
}


ChatUserHandler.prototype.getChatter = function (userName) {
var found = false;

var searchList = function (theList) {
for (var index in theList) {
var user = theList[index];

if (userName.toLowerCase() === user.getName().toLowerCase()) {
found = user;
break;
}
}
};

var tableRoomJoined = chatController.roomHandler.multiplayerTableRoomJoined();



if (this._currentChatters.length === 0) {
this.repopulateCurrentChatters();
}
searchList(this._currentChatters);

if (!found && tableRoomJoined) {

if (this._currentTableChatters.length === 0) {
this.repopulateCurrentTableChatters();
}
searchList(this._currentTableChatters);
}
return found;
}


ChatUserHandler.prototype.addChatter = function (javaUserObject) {

if (this._currentChatters.length != 0 && javaUserObject) {

var theName = javaUserObject.getName();

for (var chatterIndex in this._currentChatters) {
var user = this._currentChatters[chatterIndex];

if (theName == user.getName()) {
break;
}
}

var chatUserObject = new ChatUser(javaUserObject);
this._currentChatters.splice(chatterIndex, 0, chatUserObject);

return chatUserObject;
}
return false;
}

ChatUserHandler.prototype.removeChatter = function (javaUserObject) {

if (this._currentChatters.length != 0 && javaUserObject) {

var theName = javaUserObject.getName();

for (var chatterIndex in this._currentChatters) {
var user = this._currentChatters[chatterIndex];

if (theName == user.getName()) {
break;
}
}
this._currentChatters.splice(chatterIndex, 1);
return user;
}
return false;
}

ChatUserHandler.prototype.replaceChatter = function (javaUserObject) {

if (this._currentChatters.length != 0 && javaUserObject) {

var theName = javaUserObject.getName();

for (var chatterIndex in this._currentChatters) {
var user = this._currentChatters[chatterIndex];

if (theName == user.getName()) {
break;
}
}
var chatUserObject = new ChatUser(javaUserObject);
this._currentChatters.splice(chatterIndex, 1, chatUserObject);
}
}


ChatUserHandler.prototype.getNumTableChatters = function () {
return this._currentTableChatters.length;
}


ChatUserHandler.prototype.repopulateCurrentTableChatters = function () {
this._currentTableChatters = new Array();
return this._populateCurrentTableChatters();
}




ChatUserHandler.prototype._populateCurrentChatters = function () {

var theController = chatController;
var javaRoomObject = theController.roomHandler.getCurrent();

this._currentChatters = new Array();

if (javaRoomObject) {

var javaUsersList = theController.getUsersInRoom(javaRoomObject.getName());
if (javaUsersList != null) {


var javaUsersListSize = javaUsersList.getSize();
for (var index = 0 ; index < javaUsersListSize ; index++) {
var javaUserObject = javaUsersList.get(index);
var chatUserObject = new ChatUser(javaUserObject);
if (chatUserObject) {

this._currentChatters[index] = chatUserObject;
}
}
}
}
return this._currentChatters;
}


ChatUserHandler.prototype._populateCurrentTableChatters = function () {

var theController = chatController;

var javaRoomObject = theController.roomHandler.getCurrentTableRoom();
var multiplayerTableJoined = (chatSettings.isMultiplayerChat() && theController.roomHandler.multiplayerTableRoomJoined());

this._currentTableChatters = new Array();

if (javaRoomObject != null && multiplayerTableJoined) {

try {


var numAtTable = javaRoomObject.numChatters();
for (var index = 0; index < numAtTable; index++) {
var javaUserObject = javaRoomObject.getChatterAtIndex(index);

if (javaUserObject) {
this._currentTableChatters[index] = new ChatUser(javaUserObject);;
}
}

} catch(e) {
theController._sendError('Exception77: - ChatUserHandler._populateCurrentTableChatters - error name:' + e.name + ',  error message: ' + e.message + ' Room name: ' + javaRoomObject.getName());
}
}
return this._currentTableChatters;
}


ChatUserHandler.prototype.requestUserGameRatings = function () {

if (document.gameObject) {
this.userGameRatings = {};

var tableChatters = this.populateChatters();
for (var index in tableChatters) {
var theChatter = tableChatters[index];


var func = 'document.gameObject.' + chatVars.funcRequestUser + '("' + theChatter.getName() + '");';
eval(func);
}
}
}

ChatUserHandler.prototype.flushAllChatters = function () {
this._currentChatters = new Array();
this._currentTableChatters = new Array();
}




ChatUserHandler.prototype.isTabUserListEmpty = function () {
return (this._currentChatterUsernames == null || this._currentChatterUsernames.length == 0);
}


ChatUserHandler.prototype.getTabUserList = function () {
return this._currentChatterUsernames;
}

ChatUserHandler.prototype.flushTabUserList = function () {
this._currentChatterUsernames = null;
}


ChatUserHandler.prototype.buildTabUserList = function (partialUsername) {

var currentChatterUsernames = new Array();
var currentJavaRoomObject = chatController.roomHandler.getCurrentlyViewedRoom();
var chattersJavaObject = currentJavaRoomObject.getChattersStartingWith(partialUsername);

var index = 0;
for (index ; index < chattersJavaObject.getSize() ; index++) {
currentChatterUsernames[index] = chattersJavaObject.getAlphabetically(index).getName();
}

this._currentChatterUsernames = currentChatterUsernames;
}




ChatUserHandler.prototype._currentTableEmpty = function () {
return this._currentTableChatters.length == 0;
}




ChatUserHandler.prototype.addProfileInfoUser = function (chatProfileInfoUser) {
if (chatProfileInfoUser) {
var newIndex = chatProfileInfoUser.getProfileObjectId();
this._profileInfoUserObjects[newIndex] = chatProfileInfoUser;
}
}




ChatUserHandler.prototype.getLinkClassFromGender = function (isMale) {

if (chatVars.isSimpleVersion) {
return 'size11grey';
}
return (isMale ?  'size11profileblue' : 'size11profilered');
}




ChatUserHandler.prototype.userlistRedrawBlocked = function() {
return (this._userlistRedrawBlocked != false);
}


ChatUserHandler.prototype.blockUserlistRedraw = function(howManySecs) {

this._userlistRedrawBlocked = true;

howManySecs = (undefined == howManySecs ? this._DEFAULT_BLOCK_TIME : howManySecs);
howManySecs = howManySecs * 1000;

globalUserHandlerCopy = this;
window.setTimeout('globalUserHandlerCopy.unblockUserlistRedraw();', howManySecs);
}


ChatUserHandler.prototype.unblockUserlistRedraw = function() {
this._userlistRedrawBlocked = false;
}




ChatUserHandler.prototype.profileInfoRedrawBlocked = function() {
return (this._profileInfoRedrawBlocked != false);
}


ChatUserHandler.prototype.blockProfileInfoRedraw = function(howManySecs) {

this._profileInfoRedrawBlocked = true;

howManySecs = (undefined == howManySecs ? this._DEFAULT_BLOCK_TIME : howManySecs);
howManySecs = howManySecs * 1000;

globalUserHandlerCopy = this;
window.setTimeout('globalUserHandlerCopy.unblockProfileInfoRedraw();', howManySecs);
}


ChatUserHandler.prototype.unblockProfileInfoRedraw = function() {
this._profileInfoRedrawBlocked = false;
}






ChatSmiley.prototype._chars;
ChatSmiley.prototype._dir;
ChatSmiley.prototype._filename;
ChatSmiley.prototype._imageObject;
ChatSmiley.prototype._vipOnly;
ChatSmiley.prototype._nickname;
ChatSmiley.prototype._html;


function ChatSmiley(typeSetting, chars, filename, vipOnly, nickname) {
this._chars = chars;
this._encodedChars = chatTools._encodeString(this._chars);

this._dir = ((typeSetting == 'static' && filename.indexOf('stu_') == -1) ? 'static' : 'animated');
this._filename = filename;
this._vipOnly = vipOnly;
this._nickname = nickname;

this.remakePublicHtml();
}


ChatSmiley.prototype.getDir = function () {
return this._dir;
}

ChatSmiley.prototype.getChars = function () {
return this._chars;
}

ChatSmiley.prototype.getEncodedChars = function () {
return this._encodedChars;
}

ChatSmiley.prototype.getNickname = function () {
return this._nickname;
}

ChatSmiley.prototype.isVIPOnly = function() {
return this._vipOnly;
}


ChatSmiley.prototype.getFilename = function (greyVersion) {

if (greyVersion) {


var greyFilename = this._filename.replace('.gif', '_grey.gif');
return greyFilename;
}
return this._filename;
}


ChatSmiley.prototype.remakePublicHtml = function (typeSetting) {

this._dir = ((typeSetting == 'static' && this.getFilename().indexOf('stu_') == -1) ? 'static' : 'animated');

var smileyStrAr = new Array('<img src="' + chatVars.absroot + '/images/smileys/', this.getDir(), '/', this.getFilename(), '" class="smiley" alt="smiley" align="top" width="18" height="18" />');
this._html = smileyStrAr.join('');
}
ChatSmiley.prototype.getHtml = function () {
return this._html;
}








ChatSmileyHandler.prototype._smileys = new Array();
ChatSmileyHandler.prototype._smileyCounter = 100;




ChatSmileyHandler.prototype.drawStuffBoxes = function (vipVersion) {
return this.smileyBoxesGenerator('stuff', vipVersion);
}


ChatSmileyHandler.prototype.drawSmileyBoxes = function (vipVersion) {
return this.smileyBoxesGenerator('smiley', vipVersion);
}


ChatSmileyHandler.prototype.remakeSmileyHtml = function (typeSetting) {
var smileys = this.getAllSmileys();
if (smileys != false) {

for (var nickname in smileys) {
var theSmiley = this.getSmiley(nickname);
theSmiley.remakePublicHtml(typeSetting);
}
}
}


ChatSmileyHandler.prototype.smileyBoxesGenerator = function (category, vipVersion) {

var categoryWord = (category == 'stuff' ? 'stuff' : 'smiley');
var theAbsroot = chatVars.absroot;

var stringArray = new Array();


var smileys = this.getAllSmileys();
for (var nickname in smileys) {

var smileyObject = this.getSmiley(nickname);
if (smileyObject != false) {

var greyVersion = (smileyObject.isVIPOnly() && !vipVersion);

var smileyFilename = smileyObject.getFilename(greyVersion);
if (smileyFilename.indexOf(categoryWord) == 0) {

var smileyDir = smileyObject.getDir();
var smileyNickname = smileyObject.getNickname();
stringArray[stringArray.length] = '<img alt="' + smileyNickname + '" class="smiley" src="' + theAbsroot + '/images/smileys/' + smileyDir + '/' + smileyFilename + '" width="18" height="18" />';
}
}
}

stringArray[++stringArray.length] = '<div style="clear:both"></div>';
return stringArray.join('');
}


ChatSmileyHandler.prototype.getSmileyClicked = function (nickname) {
return this.getSmiley(nickname);
}


ChatSmileyHandler.prototype._addSmiley = function (typeSetting, chars, filename, vipOnly, nickname) {

var nickname = '¿' + this._smileyCounter++;
this._smileys[nickname] = new ChatSmiley(typeSetting, chars, filename, vipOnly, nickname);
}

ChatSmileyHandler.prototype.getSmiley = function (nickname) {
return this._smileys[nickname];
}

ChatSmileyHandler.prototype.getAllSmileys = function () {
return this._smileys;
}



ChatSmileyHandler.prototype.swapSmileyPlaceholders = function (theMessage, backToSmileyChars) {

if (backToSmileyChars) {

var typeSetting = chatSettings.getSmileyType();

var smileyPositions = theMessage.split('¿');
var length = smileyPositions.length;
for (var index = 0 ; index < length ; index++) {


var chunk = smileyPositions[index];
if (index > 0) {

var smileyNickname =  '¿' + chunk.substr(0, 3);
var smiley = this.getSmiley(smileyNickname);

if (smiley != undefined) {
var smileyHtml = (typeSetting == 'text' ? smiley.getChars() : smiley.getHtml());
smileyPositions[index] = smileyHtml + chunk.substr(3);
}
}
}
theMessage = smileyPositions.join('');

} else {



var selfIsVip = chatVars.selfIsVip;
var maxSmileyCap = 5;
var maxSmileyCount = 0;

var smileys = this.getAllSmileys();
for (var nickname in smileys) {

var theSmiley = this.getSmiley(nickname);
var smileyChars = theSmiley.getChars();

var changedMessage = theMessage;


while (changedMessage.indexOf(nickname) != -1) {
changedMessage = changedMessage.replace(nickname, smileyChars);

if (changedMessage != theMessage) {
theMessage = changedMessage;
}
}

while (changedMessage.indexOf(smileyChars) != -1) {

if (maxSmileyCount >= maxSmileyCap || (theSmiley.isVIPOnly() && !selfIsVip)) {

changedMessage = changedMessage.replace(smileyChars, '');
theMessage = changedMessage;

} else {

changedMessage = changedMessage.replace(smileyChars, theSmiley.getNickname());

if (changedMessage != theMessage) {
maxSmileyCount++;
theMessage = changedMessage;
}
}
}
}
}
return $.trim(theMessage);
}




function ChatSmileyHandler() {

var typeSetting = chatSettings.getSmileyType();

this._addSmiley(typeSetting,':-)','smiley_smile_ani.gif', false, 'Smiling');

this._addSmiley(typeSetting,':-D','smiley_bigsmile_ani.gif',false, 'Smiling big');
this._addSmiley(typeSetting,':-O','smiley_frightened_ani.gif',false, 'Frightened');
this._addSmiley(typeSetting,':-P','smiley_tongue_ani.gif',false, 'Tongue');
this._addSmiley(typeSetting,';-)','smiley_wink_ani.gif',false, 'Winking');
this._addSmiley(typeSetting,':-(','smiley_unhappy_ani.gif',false, 'Unhappy');
this._addSmiley(typeSetting,':-S','smiley_discomfort_ani.gif',false, 'Discomfort');
this._addSmiley(typeSetting,':-|','smiley_stunned_ani.gif',false, 'Stunned');
this._addSmiley(typeSetting,':`(','smiley_crying_ani.gif',false, 'Crying');
this._addSmiley(typeSetting,':-$','smiley_shy_ani.gif',false, 'Shy');
this._addSmiley(typeSetting,'(h)','smiley_cool_ani.gif',false, 'Cool');
this._addSmiley(typeSetting,':-@','smiley_angry_ani.gif',false, 'Angry');
this._addSmiley(typeSetting,':-#','smiley_mute_ani.gif',false, 'Mute');
this._addSmiley(typeSetting,'8o|','smiley_rage_ani.gif',false, 'Rage');
this._addSmiley(typeSetting,':-/','smiley_thinking_ani.gif',false, 'Thinking');
this._addSmiley(typeSetting,'<:)','smiley_party_ani.gif',false, 'Party');
this._addSmiley(typeSetting,'8-|','smiley_nerd_ani.gif',false, 'Nerd');
this._addSmiley(typeSetting,'*-)','smiley_wondering_ani.gif',false, 'Wondering');
this._addSmiley(typeSetting,'8-)','smiley_looking_ani.gif',false, 'Looking');
this._addSmiley(typeSetting,'|-0','smiley_sleepy_ani.gif',false, 'Sleepy');
this._addSmiley(typeSetting,'(A)','smiley_angel_ani.gif',false, 'Angel');
this._addSmiley(typeSetting,'(hh)','smiley_cool2_ani.gif',true, 'Cool2');
this._addSmiley(typeSetting,'8|D','smiley_loon_ani.gif',true, 'Loon');
this._addSmiley(typeSetting,'|-H','smiley_yelling_ani.gif',true, 'Yelling');
this._addSmiley(typeSetting,'|-)','smiley_ninja_ani.gif',true, 'Ninja');
this._addSmiley(typeSetting,'.-)','smiley_pirate_ani.gif',true, 'Pirate');
this._addSmiley(typeSetting,'v-|','smiley_sad_ani.gif',true, 'Sad');
this._addSmiley(typeSetting,'o_O','smiley_wierd_ani.gif',true, 'Wierd');
this._addSmiley(typeSetting,'><|','smiley_realsad_ani.gif',true, 'Realsad');
this._addSmiley(typeSetting,'O->','smiley_alien_ani.gif',true, 'Alien');
this._addSmiley(typeSetting,':<>','smiley_duck_ani.gif',true, 'Duck');


this._addSmiley(typeSetting,'(yes)','smiley_yes_ani.gif',true, 'Yes');
this._addSmiley(typeSetting,'(no)','smiley_no_ani.gif',true, 'No');
this._addSmiley(typeSetting,'(old)','smiley_granddaddy_ani.gif',true, 'Granddaddy');
this._addSmiley(typeSetting,'(spin)','smiley_spinaround_ani.gif',true, 'Spinaround');
this._addSmiley(typeSetting,'(tmnt)','smiley_ninjaturtle_ani.gif',true, 'TNMT');


this._addSmiley(typeSetting,'(music)','smiley_musiclistning_ani.gif',true, 'Musiclistning');
this._addSmiley(typeSetting,'(hair)','smiley_hair_ani.gif',true, 'Hair');
this._addSmiley(typeSetting,'(excited)','smiley_excited_ani.gif',true, 'Excited');
this._addSmiley(typeSetting,'(hugesmile)','smiley_hugesmile_ani.gif',true, 'Hugesmile');
this._addSmiley(typeSetting,'(hugeeyes)','smiley_hugeeyes_ani.gif',true, 'Hugeeyes');


this._addSmiley(typeSetting,'(clown)','smiley_clown_ani.gif',true, 'Clown');
this._addSmiley(typeSetting,'(devil)','smiley_devil_ani.gif',true, 'Devil');
this._addSmiley(typeSetting,'(lol)','smiley_lol_ani.gif',true, 'Laughingoutloud');
this._addSmiley(typeSetting,'(sleep)','smiley_sleeping_ani.gif',true, 'Sleeping');
this._addSmiley(typeSetting,'(waving)','smiley_waving_ani.gif',true, 'Waving');


this._addSmiley(typeSetting,'(dumb)','smiley_dumb_ani.gif',true, 'DumbAss');
this._addSmiley(typeSetting,'(eyebrow)','smiley_eyebrow_ani.gif',true, 'Eyebrows');
this._addSmiley(typeSetting,'(police)','smiley_police_ani.gif',true, 'Policeman');
this._addSmiley(typeSetting,'(freeze)','smiley_freeze_ani.gif',true, 'Freezing');
this._addSmiley(typeSetting,'(zip)','smiley_zip_ani.gif',true, 'Zipit');



this._addSmiley(typeSetting,'(Y)','stuff_thumbsup_ani.gif',false, 'Thumbsup');
this._addSmiley(typeSetting,'(N)','stuff_thumbsdown_ani.gif',false, 'Thumbsdown');
this._addSmiley(typeSetting,'(yn)','stuff_fingerscrossed_ani.gif',false, 'CrossedFingers');
this._addSmiley(typeSetting,'(clap)','stuff_clapinghands_ani.gif',true, 'Clapinghands');
this._addSmiley(typeSetting,'(peace)','stuff_peacefingers_ani.gif',true, 'PeaceFingers');
this._addSmiley(typeSetting,'(point)','stuff_pointfinger_ani.gif',true, 'Pointingfinger');
this._addSmiley(typeSetting,'(wave)','stuff_wavinghand_ani.gif',true, 'Wavinghand');

this._addSmiley(typeSetting,'(L)','stuff_heart_ani.gif',false, 'Heart');
this._addSmiley(typeSetting,'(U)','stuff_heartbroken_ani.gif',false, 'Heart broken');
this._addSmiley(typeSetting,'(Z)','stuff_man_ani.gif',false, 'Man');
this._addSmiley(typeSetting,'(X)','stuff_woman_ani.gif',false, 'Woman');
this._addSmiley(typeSetting,'({)','stuff_manhug_ani.gif',false, 'Manhug');
this._addSmiley(typeSetting,'(})','stuff_womanhug_ani.gif',false, 'Womanhug');
this._addSmiley(typeSetting,'(K)','stuff_kiss_ani.gif',false, 'Kiss');

this._addSmiley(typeSetting,'(&)','stuff_dog_ani.gif',false, 'Dog');
this._addSmiley(typeSetting,'(@)','stuff_cat_ani.gif',false, 'Cat');
this._addSmiley(typeSetting,':-[','stuff_bat_ani.gif',false, 'Bat');
this._addSmiley(typeSetting,'(bah)','stuff_sheep_ani.gif',false, 'Sheep');
this._addSmiley(typeSetting,'(tu)','stuff_turtle_ani.gif',false, 'Turtle');
this._addSmiley(typeSetting,'(sn)','stuff_snail_ani.gif',false, 'Snail');
this._addSmiley(typeSetting,'(ch)','stuff_chicken_ani.gif',true, 'Chicken');

this._addSmiley(typeSetting,'(D)','stuff_drink_ani.gif',false, 'Drink');
this._addSmiley(typeSetting,'(B)','stuff_beer_ani.gif',false, 'Beer');
this._addSmiley(typeSetting,'(C)','stuff_coffee_ani.gif',false, 'Coffee');

this._addSmiley(typeSetting,'(^)','stuff_birthdaycake_ani.gif',false, 'Birthdaycake');
this._addSmiley(typeSetting,'(pi)','stuff_pizza_ani.gif',false, 'Pizza');


this._addSmiley(typeSetting,'(bu)','stuff_burger_ani.gif',true, 'Burger');
this._addSmiley(typeSetting,'(dn)','stuff_doughnut_ani.gif',true, 'Doughnut');
this._addSmiley(typeSetting,'(fr)','stuff_frenchfries_ani.gif',true, 'Frenchfries');
this._addSmiley(typeSetting,'(ic)','stuff_icecream_ani.gif',true, 'Icecream');
this._addSmiley(typeSetting,'(sd)','stuff_softdrink_ani.gif',true, 'Softdrink');

this._addSmiley(typeSetting,'(||)','stuff_bowl_ani.gif',false, 'Bowl');
this._addSmiley(typeSetting,'(pl)','stuff_plate_ani.gif',false, 'Plate');

this._addSmiley(typeSetting,'(g)','stuff_gift_ani.gif',false, 'Gift');
this._addSmiley(typeSetting,'(o)','stuff_time_ani.gif',false, 'Watch');
this._addSmiley(typeSetting,'(8)','stuff_music_ani.gif',false, 'Music');
this._addSmiley(typeSetting,'(I)','stuff_lightbulp_ani.gif',false, 'Lightbulb');
this._addSmiley(typeSetting,'(F)','stuff_rose_ani.gif',false, 'Rose');
this._addSmiley(typeSetting,'(W)','stuff_rosedying_ani.gif',false, 'Rosedead');
this._addSmiley(typeSetting,'(ci)','stuff_cigarette_ani.gif',false, 'Cigarette');
this._addSmiley(typeSetting,'(T)','stuff_telephone_ani.gif',false, 'Telephone');
this._addSmiley(typeSetting,'(mp)','stuff_mobile_ani.gif',false, 'Cellphone');
this._addSmiley(typeSetting,'(P)','stuff_camera_ani.gif',false, 'Camera');
this._addSmiley(typeSetting,'(e)','stuff_letter_ani.gif',false, 'Letter');
this._addSmiley(typeSetting,'(~)','stuff_filmscroll_ani.gif',false, 'MovieRoll');
this._addSmiley(typeSetting,'(um)','stuff_umbrella_ani.gif',false, 'Umbrella');

this._addSmiley(typeSetting,'(%)','stuff_handcuffs_ani.gif',false, 'Handcuffs');

this._addSmiley(typeSetting,'(so)','stuff_football_ani.gif',false, 'Football');
this._addSmiley(typeSetting,'(nba)','stuff_basketball_ani.gif',true, 'Basketball');
this._addSmiley(typeSetting,'(bb)','stuff_beachball_ani.gif',true, 'Beachball');

this._addSmiley(typeSetting,'(ip)','stuff_palms_ani.gif',false, 'Island');
this._addSmiley(typeSetting,'(au)','stuff_car_ani.gif',false, 'Car');
this._addSmiley(typeSetting,'(ap)','stuff_plane_ani.gif',false, 'Plane');

this._addSmiley(typeSetting,'(r)','stuff_rainbow_ani.gif',false, 'Rainbow');
this._addSmiley(typeSetting,'(st)','stuff_rain_ani.gif',false, 'Rain');
this._addSmiley(typeSetting,'(#)','stuff_sun_ani.gif',false, 'Sun');
this._addSmiley(typeSetting,'(*)','stuff_star_ani.gif',false, 'Star');
this._addSmiley(typeSetting,'(S)','stuff_moon_ani.gif',false, 'Moon');
this._addSmiley(typeSetting,'(gl)','stuff_world_ani.gif',true, 'World');

this._addSmiley(typeSetting,'(fl)','stuff_flag' + chatVars.langshort  + '_ani.gif',true, 'Flag');

this._addSmiley(typeSetting,'(d1)','stuff_dice1_ani.gif',true, 'Dice1');
this._addSmiley(typeSetting,'(d2)','stuff_dice2_ani.gif',true, 'Dice2');
this._addSmiley(typeSetting,'(d3)','stuff_dice3_ani.gif',true, 'Dice3');
this._addSmiley(typeSetting,'(d4)','stuff_dice4_ani.gif',true, 'Dice4');
this._addSmiley(typeSetting,'(d5)','stuff_dice5_ani.gif',true, 'Dice5');
this._addSmiley(typeSetting,'(d6)','stuff_dice6_ani.gif',true, 'Dice6');


this._addSmiley(typeSetting,'(candy)','stuff_candy_ani.gif',true, 'Candy');
this._addSmiley(typeSetting,'(chgift)','stuff_christmasgift_ani.gif',true, 'Christmas Gift');
this._addSmiley(typeSetting,'(chtree)','stuff_christmastree_ani.gif',true, 'Christmas Tree');
this._addSmiley(typeSetting,'(duck)','stuff_duck_ani.gif',true, 'Duck');
this._addSmiley(typeSetting,'(fw)','stuff_fireworks_ani.gif',true, 'Fireworks');
this._addSmiley(typeSetting,'(ice)','stuff_icecube_ani.gif',true, 'Icecube');
this._addSmiley(typeSetting,'(orange)','stuff_orange_ani.gif',true, 'Orange');
this._addSmiley(typeSetting,'(snow)','stuff_snow_ani.gif',true, 'Snow');
this._addSmiley(typeSetting,'(pin)','stuff_pinguin_ani.gif',true, 'Penguin');
this._addSmiley(typeSetting,'(santa)','stuff_santa_ani.gif',true, 'Santa');
this._addSmiley(typeSetting,'(snowman)','stuff_snowman_ani.gif',true, 'Snowman');

this._addSmiley(typeSetting,'(cas)','stuff_cancer_ani.gif',false, 'Cancer Awareness Support');
}







ChatController.prototype._KICK_DURATION = (60 * 2);
ChatController.prototype._BAN_DURATION = (60 * 60 * 24 * 1);


function ChatController() {

var theController = this;

theController.graphics = new ChatGraphics();

theController.appletHandler = new ChatAppletHandler();
theController.messageHandler = new ChatMessageHandler();
theController.roomHandler = new ChatRoomHandler();
theController.userHandler = new ChatUserHandler();
theController.smileyHandler = new ChatSmileyHandler();

theController.lang = language;
theController.lang.setPage('chat');

$.subscribe('html5Game.heightChanged', function (newHeight) {
theController.graphics.updateParentHeight(newHeight).setBoxDimensions();
});

$.subscribe('connection.chat.initialized',function () {});
$.subscribe('connection.chat.loggingIn',theController.connect);
$.subscribe('connection.chat.finished',theController.loginSuccess);

$.subscribe('connection.chat.retrying',function () {
theController._isReconnecting = true;
theController.setRoomNameLeft(theController.roomHandler.getCurrentlyViewedRoomName());

var ownUser = theController.userHandler.getCurrent();
if (ownUser !== false) {

var isStaff = ownUser.getUser().isStaff(true);
if (isStaff) {
theController.graphics.addChatRow(theController.messageHandler.buildInfoMessage('Connection lost. Reconnecting..'));
}
}
});

$.subscribe('connection.chat.fastReconnectFailed',function () {
var errorMessage = theController.lang.getText('F18') + theController.lang.getText('F16');
theController.graphics.addChatRow(theController.messageHandler.buildInfoMessage(errorMessage));



theController.tableLeft();
});

$.subscribe('connection.chat.stopped',function () {
var errorMessage = theController.lang.getText('F19');
theController.graphics.addChatRow(theController.messageHandler.buildInfoMessage(errorMessage));
});

$.subscribe('applet.chat.loginError',theController.loginError);
$.subscribe('applet.doNotReconnect',function () {
this.userHandler.flushAllChatters();
});
};


ChatController.prototype.graphics = null;
ChatController.prototype.messageHandler = null;
ChatController.prototype.appletHandler = null;
ChatController.prototype.roomHandler = null;
ChatController.prototype.userHandler = null;
ChatController.prototype.smileyHandler = null;

ChatController.prototype.tabUsernameCycleIndex = 0;

ChatController.prototype.prizeshareTicketsUsed = new Array();

ChatController.prototype.roomrowsDrawTimer;
ChatController.prototype.chatNewsItemDrawTimer;

ChatController.prototype._savedUserChaticonSetting = null;
ChatController.prototype._isLoggedOut = false;
ChatController.prototype._roomNameLeft = null;

ChatController.prototype._emailErrors = true;
ChatController.prototype._eventListeners = new Array();
ChatController.prototype._isReconnecting = false;


ChatController.prototype.getCurrentGameName = function () {

var javaRoomObject = this.roomHandler.getCurrent();
if (javaRoomObject) {

var theName = this.roomHandler.removeRoomNum(javaRoomObject.getName());
return theName;
}
return null;
};


ChatController.prototype.replaceParentWindow = function (userurl, keepFocusOnChild) {


var parentWindow = this.getParentWindow();

if (!parentWindow) {
parentWindow = window.self.open(userurl);
} else {
parentWindow.location = userurl;
}

if (keepFocusOnChild !== undefined) {
window.self.focus();
} else {
parentWindow.window.focus();
}
};

ChatController.prototype.refreshParentWindow = function () {
var parentWindow = this.getParentWindow();

if (parentWindow) {
parentWindow.location.reload();
}
};

ChatController.prototype.refreshParentTokenshopWindow = function () {
var parentWindow = this.getParentWindow();

if (parentWindow && (parentWindow.location.href.indexOf('tokenshop') > 0)) {
this.refreshParentWindow();
}
};


ChatController.prototype.getParentWindow = function () {
var parentWindow = self.opener;

if (parentWindow !== null && parentWindow !== undefined && (parentWindow.location.href.indexOf('playgame.php') > 0)) {
parentWindow = parentWindow.opener;
}
if (parentWindow === null || parentWindow === undefined || !parentWindow || parentWindow.closed) {
parentWindow = false;
}
return parentWindow;
};


ChatController.prototype.requestPersistentRoomSwitch = function (roomRowElem) {

if (roomRowElem != undefined) {

var theRoomHandler = this.roomHandler;


var destinationRoomName = roomRowElem.find('div.origRoomName:first').text();
if (destinationRoomName != undefined) {


if (theRoomHandler.roomExists(destinationRoomName) || chatSettings.isMultiplayerChat()) {

this.setRoomNameLeft(theRoomHandler.getCurrentlyViewedRoomName());
this.switchToPersistentRoom(destinationRoomName);
}
}
}
};


ChatController.prototype.switchToPersistentRoom = function (roomName) {

var theRoomHandler = this.roomHandler;


if (theRoomHandler.isAdminsOnlyRoom(roomName) && !(this.userHandler.getCurrent()._chatUserObject.isBanAdm())) {
alert('Admins Only!');
return;

} else if (theRoomHandler.isAdultRoom(roomName) && !confirm(this.lang.getText('F227'))) {
return;
}

if (roomName === undefined) {
roomName = chatVars.defaultRoomName;

} else {


var currentRoom = this.roomHandler.getCurrent();
if (currentRoom !== null) {
this.appletHandler.leaveRoom(currentRoom.getName());
}


var currentTableRoom = this.roomHandler.getCurrentTableRoom();
if (currentTableRoom !== null) {

this.appletHandler.leaveRoom(currentTableRoom.getName());
theRoomHandler.flushCurrentTableRoom();
this.hideMultiplayerUserlist();
}

this.graphics.hideProfileTab();
}
this.appletHandler.enterRoom(roomName);
};


ChatController.prototype.leaveAllRooms = function () {
var theRoomHandler = this.roomHandler;

var roomNameLeft = false;





if (theRoomHandler.multiplayerTableRoomJoined()) {

var currentTableRoom = theRoomHandler.getCurrentTableRoom();
if (currentTableRoom != null) {
roomNameLeft = currentTableRoom.getName();
}


} else {
var currentRoom = theRoomHandler.getCurrent();
if (currentRoom != null) {
roomNameLeft = currentRoom.getName();
} else {
roomNameLeft = chatVars.defaultRoomName;
}
}


if (roomNameLeft && roomNameLeft.length) {
this.setRoomNameLeft(roomNameLeft);
this.appletHandler.leaveRoom(roomNameLeft);
}


var thePrivateRooms = theRoomHandler.getPrivateRooms();
for (var index in thePrivateRooms) {
var roomObject = thePrivateRooms[index];
var javaRoomObject = roomObject._javaRoomObject;

this.appletHandler.leaveRoom(javaRoomObject.getName());
}

theRoomHandler.flushCurrent();
theRoomHandler.flushCurrentTableRoom();


this.hideMultiplayerUserlist();
};


ChatController.prototype.getRoomNameLeft = function () {

if (this._roomNameLeft) {
return this._roomNameLeft;
}
return chatVars.defaultRoomName;
};
ChatController.prototype.getRoomNameLeftRaw = function () {
return this._roomNameLeft;
};


ChatController.prototype.setRoomNameLeft = function (roomName) {
this._roomNameLeft = roomName;
};

ChatController.prototype.getJavaRoomObject = function (roomName) {
return this.appletHandler.getJavaRoomObject(roomName);
};


ChatController.prototype.beginPrivateChat = function (otherUserName, privateRoomName) {

var theRoomHandler = this.roomHandler;

if (!theRoomHandler.hasPrivateChatWith(otherUserName)) {


if (typeof(theRoomHandler.getPrivateRoom(privateRoomName)) != 'object') {
var roomName = theRoomHandler.createPrivateRoomName(otherUserName);
}


if (privateRoomName === undefined) {

this.appletHandler.invite(roomName, otherUserName);


} else {
var roomName = privateRoomName;
}


this.appletHandler.enterRoom(roomName);



var theGraphics = this.graphics;
var numchatPrivateTabs = $('#chatPrivateTabWrapper > div.chatPrivateTab', theGraphics.chatBoxContentElem).length;


if (numchatPrivateTabs == 0) {
theGraphics.addPrivateChatTab();
}

theGraphics.addPrivateChatTab(otherUserName, roomName);
theGraphics.addChatArea(roomName);


if (privateRoomName == undefined) {

theGraphics.toggleCurrentChatIcon(roomName);

theGraphics.switchToChatArea(roomName);

toggleToChatBox();

} else {
theGraphics.toggleCurrentChatIcon();
}

numchatPrivateTabs = null;

return roomName;
}
return false;
};


ChatController.prototype.endPrivateChat = function (privateRoomName) {


var privateRoom = this.roomHandler.getPrivateRoom(privateRoomName);


if (privateRoom) {

this.roomHandler.removePrivateRoom(privateRoom);
this.appletHandler.leaveRoom(privateRoom.getName());
}



var theGraphics = this.graphics;
var numchatPrivateTabs = $('#chatPrivateTabWrapper > div.chatPrivateTab', theGraphics.chatBoxContentElem).length;
if (numchatPrivateTabs == 2) {

theGraphics.removePrivateChatTab();
} else {
theGraphics.removePrivateChatTab(privateRoomName);
}

theGraphics.removeChatArea(privateRoomName);

theGraphics.switchToChatArea();
toggleToChatBox();

numchatPrivateTabs = null;
};


ChatController.prototype.replaceUserList = function () {

var theGraphics = this.graphics;
var theUserhandler = this.userHandler;


if (!theUserhandler.userlistRedrawBlocked()) {


theUserhandler.blockUserlistRedraw();


theGraphics.showFriendsWaitBar();


var theUsers = theUserhandler.populateChatters();
var replacements = theUserhandler.drawUserlist(theUsers);
theGraphics.replaceUsers(replacements);

replacements = null;
}
};


ChatController.prototype.replaceMultiplayerUserlist = function () {

var theController = this;
var theGraphics = theController.graphics;

var tableJoined = theController.roomHandler.multiplayerTableRoomJoined();


var timeout = (tableJoined ? 1000 : 0);


window.self.clearTimeout(theGraphics.replaceTableUsersTimer);
theGraphics.replaceTableUsersTimer = window.self.setTimeout(function() {


var replacements = theController.userHandler.drawCurrentTableChatters();
if (replacements !== '') {

theGraphics.replaceTableUsers(replacements);
theGraphics.setBoxDimensions();


var visibleChatSubarea = $('div.subareaContainer > div.subareaChatTab:visible', theGraphics.chatBoxContentElem);
if (visibleChatSubarea.length > 0) {

var hiddenWrappers = $('div.tableuserswrapper', theGraphics.chatBoxElem);
hiddenWrappers.show();
hiddenWrappers = null;
}

replacements = null;
visibleChatSubarea = null;
}
}, timeout);
};


ChatController.prototype.hideMultiplayerUserlist = function () {
var theGraphics = this.graphics;

theGraphics.replaceTableUsers('');

var visibleWrappers = $('div.tableuserswrapper', theGraphics.chatBoxElem);
visibleWrappers.hide();
visibleWrappers = null;

theGraphics.setBoxDimensions();
};


ChatController.prototype.updateMultiplayerUserlistRating = function (javaProfileInfoUserObject) {

if (chatSettings.isMultiplayerChat() && this.roomHandler.multiplayerTableRoomJoined()) {

var theChatter = this.userHandler.getChatter(javaProfileInfoUserObject.getName());
if (theChatter) {

var theRating = eval('javaProfileInfoUserObject.' + chatVars.funcGetRating + '()');
theChatter.setGameRating(theRating);

this.replaceMultiplayerUserlist();
}
}
};



ChatController.prototype.cacheProfileAndCallFunction = function (userNameOrId, theFunction, usingId) {
var theUserHandler = chatController.userHandler;
var cachedProfileInfoObject = theUserHandler.getNongameProfileInfo(userNameOrId, usingId);


if (typeof(cachedProfileInfoObject) != 'object') {


var data = (usingId !== undefined ? {userId : userNameOrId} : {userName : userNameOrId});
$.get(chatVars.absroot + '/ajax/chat_ajax_profileinfo.js.php', data, function () {
 if (profileInfoObject !== undefined) {

theUserHandler.cacheNongameProfileInfoObject(profileInfoObject);

if (typeof(theFunction) === 'function') {
theFunction(profileInfoObject);
}

profileInfoObject = null;
}
}, 'script');

} else if (typeof(theFunction) === 'function') {
theFunction(cachedProfileInfoObject);
}
cachedProfileInfoObject = null;
};


ChatController.prototype.cacheProfilesAndCallFunction = function (theArray, theFunction) {
if ($.isArray(theArray) && theArray.length > 0) {
var theUserHandler = chatController.userHandler;
var uncachedUsernamesAr = [];


var theUsername = false;
for (var key in theArray) {
theUsername = theArray[key];
if (typeof(theUsername) === 'object' || typeof(theUsername) === 'function'){
theUsername = theUsername.getName();
}

if (theUserHandler.getNongameProfileInfo(theUsername) === false) {
uncachedUsernamesAr.push(theUsername);
}
}

if (uncachedUsernamesAr.length > 0) {

$.get(chatVars.absroot + '/ajax/chat_ajax_profileinfo.js.php', {findMore : true, usernameArray : uncachedUsernamesAr} , function () {
if (profileInfoArray !== undefined && (profileInfoArray.length > 0)) {

var lastProfile = profileInfoArray.pop();
if (profileInfoArray.length > 0) {

for (var key in profileInfoArray) {
profileInfoObject = profileInfoArray[key];
theUserHandler.cacheNongameProfileInfoObject(profileInfoObject);
}
}

theUserHandler.cacheNongameProfileInfoObject(lastProfile);
profileInfoArray.push(lastProfile);

if (typeof(theFunction) === 'function') {
theFunction(profileInfoArray);
}
}
}, 'script');
}
}
};


ChatController.prototype.showUpdatedProfileSubarea = function (username) {


if (username.length > 0 && !this.userHandler.profileInfoRedrawBlocked()) {

var theController = this;
var theGraphics = theController.graphics;


toggleToProfileBox();


theGraphics.showProfileWaitBar();

this.cacheProfileAndCallFunction(username, function (profileInfoObject) {
theGraphics.drawNongameProfileInfo(profileInfoObject);
});
}
};


ChatController.prototype.replaceImPopupProfilePicUrl = function (username, imPopupWrapper) {

if (username.length > 0) {
this.cacheProfileAndCallFunction(username, function (profileInfoObject) {
$('div.profilePicBorder > img', imPopupWrapper).attr({src : profileInfoObject.profileImage, alt : profileInfoObject.username});
});
}
};

ChatController.prototype.requestIconPopupProfile = function (mouseoverElem, userId) {
var theGraphics = this.graphics;

this.cacheProfileAndCallFunction(userId, function (profileInfoObject) {

var newHtml = theGraphics.drawProfilePopup(profileInfoObject);
if (newHtml !== false) {
theGraphics.replaceIconPopupHtml(mouseoverElem, newHtml);
}
}, true);
};




ChatController.prototype.handleIgnore = function (targetUsername) {
if (targetUsername) {

var targetJavaUserObject  = this.appletHandler.getJavaUserObject(targetUsername);
if (targetJavaUserObject) {

if (targetJavaUserObject.isBanAdm()) {
this.graphics.addChatRow(this.messageHandler.buildInfoMessage(this.lang.getText('F44')));
} else {
this.graphics.addChatRow(this.messageHandler.buildInfoMessage(this.lang.getText('F62') + ' ' + targetUsername));
this.userHandler.getCurrent().ignore(targetJavaUserObject);
}
return true;
}
}
return false;
};


ChatController.prototype.handleMute = function (targetUsername) {
if (targetUsername) {

if(confirm(this.lang.getText('F36') + '?')) {

var roomName = this.roomHandler.getCurrentlyViewedRoomName();

this.graphics.addChatRow(this.messageHandler.buildInfoMessage(this.lang.getText('F65') + ' ' + targetUsername), roomName);

var focusMsg = '/javascript ' + targetUsername + ' window.self.focus()';
var alertMsg = '/javascript ' + targetUsername + " alert(\"" + this.lang.getText('F113') + "\")";

this.appletHandler.sendOutgoingMessage(focusMsg, roomName);
this.appletHandler.sendOutgoingMessage(alertMsg, roomName);
this.appletHandler.mute(targetUsername);

return true;
}
}
return false;
};

ChatController.prototype.handleKick = function (targetUsername) {
if (targetUsername) {

if(confirm(this.lang.getText('F35') + '?')) {

alert(this.lang.getText('F64') + ' ' + targetUsername);



var roomName = this.roomHandler.getCurrentlyViewedRoomName();
var focusMsg = '/javascript ' + targetUsername + ' receiverKicked';

this.appletHandler.sendOutgoingMessage(focusMsg, roomName);
this.appletHandler.ban(targetUsername, this._KICK_DURATION);

return true;
}
}
return false;
};

ChatController.prototype.handleBan = function (targetUsername) {
if (targetUsername) {

if(confirm(this.lang.getText('F34') + '?')) {

alert(this.lang.getText('F63') + ' ' + targetUsername);



var roomName = this.roomHandler.getCurrentlyViewedRoomName();
var focusMsg = '/javascript ' + targetUsername + ' receiverBanned';

this.appletHandler.sendOutgoingMessage(focusMsg, roomName);
this.appletHandler.ban(targetUsername, this._BAN_DURATION);

return true;
}
}
return false;
};


ChatController.prototype.handlePrizeShareRequest = function (userTicket) {

var theController = this;

if (theController.prizeshareTicketsUsed[userTicket] !== 1) {
$.get(chatVars.absroot + '/ajax/chat_ajax_misc.php', {what : 'processPrizeshare', ticket : userTicket}, function (callbackData) {



if (callbackData >= -3) {
theController.prizeshareTicketsUsed[userTicket] = 1;

theController.graphics.updatePrizeShareLink(callbackData, userTicket);
}
});
}
};


ChatController.prototype.handleSignup = function (theUsername, thePassword, theEmail, theGender) {

var theController = this;

$.getJSON(chatVars.absroot + "/ajax/chat_ajax_signup.php", {action : 'signup', guestUsername : chatVars.mbp, username : theUsername, password : thePassword, email : theEmail, gender : theGender}, function (resultArray) {

if (resultArray.hasError === true) {

var usernameValid = true;
var passwordValid = true;
var emailValid = true;
var genderValid = true;
var termsValid = true;
var altNames = new Array();

if (resultArray.usernameError.length > 0) {
usernameValid = resultArray.usernameError;
}
if (resultArray.passwordError.length > 0) {
passwordValid = resultArray.passwordError;
}
if (resultArray.emailError.length > 0) {
emailValid = resultArray.emailError;
}
if (resultArray.genderError.length > 0) {
genderValid = resultArray.genderError;
}
if (resultArray.altUsernames.length > 0) {
altNames = resultArray.altUsernames;
}
theController.graphics.replaceGuestSignupErrors(usernameValid, passwordValid, emailValid, genderValid, termsValid, altNames);

} else {

theController.switchUser(theUsername, thePassword);
theController.refreshParentWindow();
}
});
};


ChatController.prototype.requestBadgeMessage = function () {
var theController = this;

$.get(chatVars.absroot + '/ajax/chat_ajax_misc.php', {what : 'getBadge', userid : chatVars.uid, gamename : chatVars.gameName, gid : chatVars.gameId}, function (callbackBadgeHtml) {
theController.graphics.replaceBadgeBox(callbackBadgeHtml);
});
};


ChatController.prototype.requestTokenshopDrawingMessage = function () {
var theController = this;

$.getJSON(chatVars.absroot + '/ajax/chat_ajax_misc.php', {what : 'getNextTokenshopDrawing'}, function (infoArray) {
if (infoArray !== false ) {


theController.graphics.replaceTokenshopDrawingMessage(infoArray['productId'], infoArray['drawingId'], infoArray['headline'], infoArray['description'], infoArray['price'], infoArray['tokenPrice'], infoArray['tokensOwned'], infoArray['ticketsOwned'], infoArray['imageUrl'], infoArray['drawingTime'], infoArray['serverTime']);


var secondsLeft = (parseInt(infoArray['serverTime']) - parseInt(infoArray['drawingTime']));
if (secondsLeft < (11*60)) {

var plusThreeMins = ((secondsLeft + (3*60))*1000);

window.self.setTimeout(function () {

$.getJSON(chatVars.absroot + '/ajax/chat_ajax_misc.php', {what : 'getTokenshopWinner', drawingId : infoArray['drawingId']}, function (winnerInfoArray) {
if (winnerInfoArray !== null && winnerInfoArray !== false) {


chatController.graphics.replaceTokenshopWinnerMessage(winnerInfoArray['headline'], winnerInfoArray['profileImage'], winnerInfoArray['username'], winnerInfoArray['isMale']);
}
});
}, plusThreeMins);
}
}
});
};

ChatController.prototype.requestFriendship = function (fromUserId) {
if (fromUserId > 0) {

var theController = this;
$.getJSON(chatVars.absroot + '/ajax/chat_ajax_misc.php', {what : 'requestFriendship', otherUserId : fromUserId}, function (wasSuccess) {
theController.graphics.disableFriendRequestButton((wasSuccess ? theController.lang.getText('F220') : theController.lang.getText('F219')));
});
}
};
ChatController.prototype.handleFriendRequestAccepted = function (fromUserId) {
$.getJSON(chatVars.absroot + "/ajax/chat_ajax_misc.php", {what : 'acceptFriendship', otherUserId : fromUserId});
};
ChatController.prototype.handleFriendRequestDeclined = function (fromUserId) {
$.getJSON(chatVars.absroot + "/ajax/chat_ajax_misc.php", {what : 'rejectFriendship', otherUserId : fromUserId});
};


ChatController.prototype.handleFriendshipRequestCallback = function (requestIsIncoming, userObject, requestStatus) {
var theController = chatController;

var closeProfileArea = function () {
if (theController.graphics.profileTabIsUser(userObject.getId())) {
theController.graphics.hideProfileTab();
toggleToChatBox();
}
};
var theHtml = false;

theController.userHandler.uncacheNongameProfileInfoObject(userObject.getName());


if (requestIsIncoming) {

closeProfileArea();

switch (requestStatus) {
case 'requested':

var theMessage = theController.lang.getText('F221') + ' ' + userObject.getName() + '?';
theHtml = theController.messageHandler.buildChatNewsItem (theMessage, ['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-501px -19px;"></div></div>'], ['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -271px;"></div></div>', '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-61px -271px;"></div></div>'], ['newsitemFriendDeclined uid' + userObject.getId(), 'newsitemFriendAccepted uid' + userObject.getId()]);
break;

case 'accepted':
var theMessage = theController.lang.getText('F222') + ' ' + userObject.getName();
theHtml = theController.messageHandler.buildClosableChatNewsItem (theMessage, ['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-61px -271px;"></div></div>']);
break;

case 'rejected':
var theMessage = theController.lang.getText('F223') + ' ' + userObject.getName();
theHtml = theController.messageHandler.buildClosableChatNewsItem (theMessage, ['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -271px;"></div></div>']);
break;

case 'deleted':
case 'regretted':
theController.graphics.removeFriendRequestSent(userObject.getId());
break;
}


} else {

switch (requestStatus) {
case 'requested':

theController.graphics.disableFriendRequestButton(theController.lang.getText('F218'));
break;

case 'accepted':
var theMessage = theController.lang.getText('F222') + ' ' + userObject.getName();
theController.graphics.disableFriendRequestButton(theMessage);
theHtml = theController.messageHandler.buildClosableChatNewsItem (theMessage, ['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-61px -271px;"></div></div>']);
break;

case 'rejected':
break;

case 'deleted':
case 'regretted':
closeProfileArea();
break;
}
}

if (theHtml !== false) {
theController.graphics.addChatNewsItem(theHtml);
}
};





ChatController.prototype.saveUserChaticonSetting = function (newValue) {
this._savedUserChaticonSetting = newValue;
};


ChatController.prototype.requestChatIconIdchange = function () {

var newValue = this._savedUserChaticonSetting;
if (typeof(newValue) == 'string' && newValue.substr(0,8) == 'chatIcon') {
this.appletHandler.requestSettingChange('chosenChatIconId', newValue);
this._savedUserChaticonSetting = null;
}
};


ChatController.prototype.setChatIconId = function (javaUserObject) {

var theController = chatController;
this.overwriteUserObject(javaUserObject, function (javaUserObject) {

var chatIconId = theController.userHandler.getChatIconId(javaUserObject);
theController.graphics.replaceCurrentChatIconHtml(chatIconId);
});
};


ChatController.prototype.overwriteUserObject = function (javaUserObject, onOwnUser) {

if (javaUserObject) {
var theUserHandler = this.userHandler;

var isYourself = (javaUserObject.getName() == chatVars.mbp);
if (isYourself) {

var currentUser = theUserHandler.setCurrent(javaUserObject);


if (currentUser !== false && (typeof(onOwnUser) === 'function') ) {

onOwnUser(javaUserObject);
}
}
theUserHandler.replaceChatter(javaUserObject);
}
};



ChatController.prototype.logout = function () {

if (chatSettings.isInstantMessenger()) {

var rowHtml = this.messageHandler.buildInfoMessage(this.lang.getText('F169'), true);
this.graphics.addChatRow(rowHtml);

} else if (!this._isLoggedOut) {


this.graphics.enterLogoutMode();


this.leaveAllRooms();


this.switchToPersistentRoom('LoggedOutOfChat', true);


this._isLoggedOut = true;


}
};
ChatController.prototype.isLoggedOut = function () {
return this._isLoggedOut;
};
ChatController.prototype.cancelLogout = function () {
this._isLoggedOut = false;


toggleToChatBox();


var theController = chatController;
var roomNameToJoin = this.getRoomNameLeft();
if (roomNameToJoin && roomNameToJoin.length) {

if (theController.roomHandler.isMultiplayerTableName(roomNameToJoin)) {

theController.tableJoined(null, roomNameToJoin);

} else {

theController.switchToPersistentRoom(roomNameToJoin);
}
}
};




ChatController.prototype.requestRoomsList = function () {
if (!this.isLoggedOut() && !this.roomHandler.roomlistRedrawBlocked()) {

var theGraphics = this.graphics;

theGraphics.showRoomsWaitBar();

if (!chatSettings.isMultiplayerChat()) {
this.appletHandler.requestPersistentRoomList();

} else {

var lobbyRoom = chatController.roomHandler.getCurrent();
if (lobbyRoom) {


this.appletHandler.requestRoomsMatching('^[a-zA-Z0-9]+_[A-Za-z]{2}_[0-9]{1,3}');
}
}
}
};


ChatController.prototype.requestTournamentRoomsList = function () {

alert(3);

};


ChatController.prototype.connect = function() {
var theController = chatController;
var theGraphics = theController.graphics;

try {

theGraphics.flushAllEvents();
theGraphics.setupBasicChat();

} catch (e) {
theController._sendError('Exception1.0 - chat connect - error name:' + e.name + ',  error message: ' + e.message);
}







};


ChatController.prototype.loginSuccess = function (javaUserObject) {
var theController = chatController;


var ownUserObject = theController.userHandler.setCurrent(javaUserObject);
if (ownUserObject !== false) {

var theGraphics = theController.graphics;

var isVip = ownUserObject.getUser().isVip();

if (!chatVars.isSimpleVersion) {
theGraphics.setupSettingsUsersAndRooms(isVip);
}


if (ownUserObject.isGuestUser()) {


theGraphics.enterGuestMode();


theController.switchToPersistentRoom(chatVars.defaultRoomName, false);

} else {

if (chatSettings.isMultiplayerChat() && ownUserObject._chatUserObject.isBanAdm()) {

theGraphics.enableRoomSwitching();
}


if (!ownUserObject._chatUserObject.isBanAdm()) {
var chatAdminIconsWrapper = $('#chatAdminIconsWrapper', this.chatBoxContentElem);
chatAdminIconsWrapper.hide();
chatAdminIconsWrapper = null;
}

//theController.cacheProfilesAndCallFunction(chatVars.friendsArray);



theController.switchToPersistentRoom(theController.getRoomNameLeft());
}
}
};

ChatController.prototype.switchUser = function (username, password) {

$.getJSON(chatVars.absroot + '/ajax/chat_ajax_misc.php?what=getUserSelfInfo&username=' + username, function (userInfoAr) {
if (userInfoAr && (userInfoAr.uid > -1)) {
eval(chatTools.chromeRims("Ø£ð÷Î¤¡C±çÎð±¬¬¡ð÷=÷§¤£ÎC±çÎð±¬¬¡ð-Ø£ð÷Î¤¡Gð£¼¤ü§¾÷=÷Î¤¡C±çÎð±¬¬¡ðÐþð£¼¤ü§¾-§¤£ÎV£ð¾Ðßüñ÷=÷ß¾¡ðIç¢±AðÐßüñ-§¤£ÎV£ð¾Ðê¦¼÷=÷ß¾¡ðç£ê¡-§¤£ÎV£ð¾Ð¾¡¬¢U¾¡ðç£ê¡Uð¬ð¡£ñå÷=÷ß¾¡ðç£ê¡-§¤£ÎV£ð¾Ð¾¡¬¢I¾Vü¼÷=÷÷ß¾¡ðIç¢±AðÐ¾¡¬¢I¾Vü¼-§¤£ÎV£ð¾Ð¢ðü¡çñ¾Aðð£å÷=÷ß¾¡ðIç¢±AðÐ¢ðü¡çñ¾Aðð£å-§¤£ÎV£ð¾Ðüþç±ð¡Aðð£å÷=÷ß¾¡ðIç¢±AðÐüþç±ð¡Aðð£å-Î¤¡C±çÎð±¬¬¡ðÐß¾¡ðH£çñ¬¡ðÐ¢¬ß¾¤A¬¬C¤£ÎÎ¡ð¾()-ü¢÷(Î¤¡Gð£¼¤ü§¾Ð¤£¾Süþçß¼T£¦())÷*Î¤¡Gð£¼¤ü§¾Ð¾¤±wS¡ÎÎüçþ¾T£¦()-Î¤¡Gð£¼¤ü§¾Ð¤üñ¡Süþçß¼T£¦()-Î¤¡Gð£¼¤ü§¾Ð¾¤±wC¤£ÎT£¦()-Î±þþ¬¡T±C¤£ÎB±Ù()-Î¤¡Gð£¼¤ü§¾Ð¤£¾Vü¾ü¦¬¡Süþçß¼T£¦÷=÷¢£¬¾¡-Î¤¡Gð£¼¤ü§¾Ð£ññR±±êT£¦EØ¡çÎ()-Î¤¡Gð£¼¤ü§¾Ð£ññR±±êR±wEØ¡çÎ¾()-Î¤¡Gð£¼¤ü§¾Ð£ññU¾¡ðT£¦EØ¡çÎ()-Î¤¡Gð£¼¤ü§¾Ð£ññU¾¡ðR±wEØ¡çÎ¾()-+('#¾ß¦£ð¡£R±±ê¾T£¦',÷Î¤¡Gð£¼¤ü§¾Ð§¤£ÎB±ÙE¬¡ê)Ð£ññ('#¾ß¦£ð¡£Fðü¡çñ¾T£¦',÷Î¤¡Gð£¼¤ü§¾Ð§¤£ÎB±ÙE¬¡ê)Ðð¡ê±Ø¡C¬£¾¾('¾üï¡91¬üþ¤Îþð¡å')Ð£ññC¬£¾¾('¾üï¡91ñ£ð¿þð¡å')-Î¤¡Gð£¼¤ü§¾Ð§£ç§¡¬Gß¡¾ÎW¡¬§±ê¡M¡¾¾£þ¡()-<¼¬£åþ£ê¡Kü¬¬Süþçß¼Pð±ê¼Î()-+Ð¼ß¦¬ü¾¤('§±çç¡§Îü±çÐñ±R¡§±çç¡§Î')-"));
}
});
};


ChatController.prototype.loginError = function (errorNumber) {
errorNumber = '' + errorNumber;

var LOGIN_RESULT_OK        = '0';
var LOGIN_RESULT_BAD_LOGIN = '1';
var LOGIN_RESULT_BAN       = '2';

var theMessage = this.lang.getText('F20') + ': ';

switch(errorNumber) {

case LOGIN_RESULT_BAD_LOGIN:
theMessage += this.lang.getText('F21');break;

case LOGIN_RESULT_BAN:
theMessage += this.lang.getText('F22');break;

$('#gameObject').remove();

case LOGIN_RESULT_OK:
default:
theMessage += this.lang.getText('F23');break;
}

this.graphics.addChatRow(this.messageHandler.buildInfoMessage(theMessage));
};


ChatController.prototype.roomJoined = function(javaRoomObject) {

var theRoomHandler = this.roomHandler;
var theUserHandler = this.userHandler;
var theSettings = chatSettings;
var theGraphics = this.graphics;

var roomName = javaRoomObject.getName();


if (theRoomHandler.isPrivate(roomName)) {


var roomObject = theRoomHandler.createPrivateRoom(javaRoomObject);
theRoomHandler.addPrivateRoom(roomObject);


} else if (theSettings.isMultiplayerChat() && theRoomHandler.isMultiplayerTable(javaRoomObject)) {

try {
theRoomHandler.setCurrentTableRoom(javaRoomObject);


theUserHandler.repopulateCurrentTableChatters();


theUserHandler.requestUserGameRatings();

window.self.clearInterval(theUserHandler.requestUserGameRatingsTimer);
theUserHandler.requestUserGameRatingsTimer = window.self.setInterval(function () {

theUserHandler.requestUserGameRatings();
}, (60*1000));


this.replaceMultiplayerUserlist();

} catch (e) {
this._sendError('Exception18.0.0: - error name:' + e.name + ',  error message: ' + e.message + ' Room name: ' + roomName);
}


} else {


theRoomHandler.setCurrent(javaRoomObject);





theUserHandler.resetCurrentChatters();
theUserHandler.resetCurrentTableChatters();


if (theGraphics.privateChatTabsVisible()) {

var publicRoomNameElem = $('#chatPrivateTabWrapper > div.chatPrivateTabPublic', this.chatBoxContentElem).find('a.otherUserName');
if (publicRoomNameElem.length) {
publicRoomNameElem.text(theRoomHandler.getPrettyRoomName(javaRoomObject));
}
}
}

try {


theGraphics.hideSmileyContainer();

if (!this.isLoggedOut()) {
theGraphics.adaptSubareaCSS();
theGraphics.switchToSubarea('subareaChatTab');
}


if (!chatSettings.isInstantMessenger()) {

if (!this.isLoggedOut() && !chatVars.isSimpleVersion) {

var theMessageHandler = this.messageHandler;



if (!this._isReconnecting || theRoomHandler.isMultiplayerTableName(roomName)) {
theGraphics.emptyChatbox(roomName, true);

var theMessage = theMessageHandler.buildInfoMessage(theRoomHandler.getPrettyRoomName(javaRoomObject));
theGraphics.addChatRow(theMessage, roomName);

this.requestBadgeMessage();
}


if (theRoomHandler.isAdminsOnlyRoom(roomName)) {

var theMessage = theMessageHandler.buildInfoMessage(this.lang.getText('F189'), true);
theGraphics.addChatRow(theMessage, roomName);
}

theGraphics.showLogoutLink();

if (!chatVars.isSimpleVersion && !this._isReconnecting) {

var userIsAlone = theRoomHandler.currentChatterIsAlone();


if (userIsAlone) {
theGraphics.addChatRow(theMessageHandler.buildInfoMessage(this.lang.getText('F37')), roomName);
}


if (!theRoomHandler.isPrivate(roomName)) {


if (theSettings.isSingleplayerChat()) {
var categoryIconHtml = theRoomHandler.getIconHtml(javaRoomObject);
theGraphics.replaceCurrentMainMenuitemIcon(categoryIconHtml);
}


var theChatters = theUserHandler.populateChatters();
var ownUser = theUserHandler.getCurrent();


if (ownUser.hasFriends() && (theSettings.wantsInfoTextFriends() || theSettings.wantsInfoText())) {
var theFriends = theUserHandler.getFriends(ownUser, theChatters);

if (theFriends.length > 0) {
theGraphics.addChatRow(theMessageHandler.buildFriendsInRoomMessage(theFriends), roomName, function () {
theGraphics.switchToSubarea('subareaFriendsTab');
});
}
}
}
}
}


} else {

theGraphics.hideLogoutLink();


var receiverUsername = theUserHandler.getCurrent()._chatUserObject.getName();
imChatController.checkForCachedMessages(receiverUsername, roomName, true);
}

} catch (e) {
this._sendError('Exception18.0.1: - error name:' + e.name + ',  error message: ' + e.message);
}


var roomNameToJoin = this.getRoomNameLeft();
if (roomNameToJoin && roomNameToJoin.length) {

if (
this.roomHandler.isMultiplayerTableName(roomNameToJoin) &&
!this.roomHandler.isMultiplayerTableName(javaRoomObject.getName())
) {
this.tableJoined(null, roomNameToJoin);
}
}

this._isReconnecting = false;
};


ChatController.prototype.chatterJoined = function (javaRoomObject, javaUserObject) {

if (!this.isLoggedOut() && javaRoomObject != null && javaUserObject != null) {

var theSettings = chatSettings;
var theRoomHandler = this.roomHandler;
var theUserHandler = this.userHandler;
var theRoomName = javaRoomObject.getName();

var newChatUser = false;

if (!theRoomHandler.isPrivate(theRoomName)) {

newChatUser = theUserHandler.addChatter(javaUserObject);



try {


if (theSettings.isMultiplayerChat()) {

theUserHandler.repopulateCurrentTableChatters();

if (theRoomHandler.multiplayerTableRoomJoined()) {

this.replaceMultiplayerUserlist();

}
}

} catch (e) {
this._sendError('Exception18.2.1: - chatterJoined - error name:' + e.name + ', error message: ' + e.message);
}
} else {


newChatUser = theUserHandler.getChatter(javaUserObject.getName());
}



if (!chatSettings.isInstantMessenger() && !this.chatterInfoBlocked(javaUserObject.getName() + 'chatterJoined')) {

this.blockChatterInfo(javaUserObject.getName() + 'chatterJoined');

var currentUser = theUserHandler.getCurrent();
if (currentUser && currentUser.hasAsFriend) {

var settingsPermitMessage = ((currentUser.hasAsFriend(javaUserObject) && theSettings.wantsInfoTextFriends()) || (theSettings.wantsInfoText() && (newChatUser === false || !newChatUser.isStaff())));
var userTypePermitsMessage = ((newChatUser === false) || (!newChatUser.isGuestUser() && !newChatUser.isStaff()));

if (settingsPermitMessage && userTypePermitsMessage) {
this.graphics.addChatRow(this.messageHandler.buildInfoMessage(javaUserObject.getName() + ' ' + this.lang.getText('F27')), theRoomName);
}
}
}
}
};


ChatController.prototype.chatterLeft = function (javaRoomObject, javaUserObject) {

if (!this.isLoggedOut() && javaRoomObject != null && javaUserObject != null) {

var theSettings = chatSettings;
var theRoomHandler = this.roomHandler;
var theUserHandler = this.userHandler;
var theRoomName = javaRoomObject.getName();

var newChatUser = false;

if (!theRoomHandler.isPrivate(theRoomName)) {

newChatUser = theUserHandler.removeChatter(javaUserObject);

try {

if (theSettings.isMultiplayerChat()) {

theUserHandler.repopulateCurrentTableChatters();

if (theRoomHandler.multiplayerTableRoomJoined()) {
this.replaceMultiplayerUserlist();
}
}

} catch (e) {
this._sendError('Exception18.6.2.1: - chatterLeft - error name:' + e.name + ',  error message: ' + e.message + ' Room name: ' + javaRoomObject.getName());
}
}



if (!chatSettings.isInstantMessenger() && !this.chatterInfoBlocked(javaUserObject.getName() + 'chatterLeft')) {

this.blockChatterInfo(javaUserObject.getName() + 'chatterLeft');


var currentUser = theUserHandler.getCurrent();
if (currentUser && currentUser.hasAsFriend) {

var settingsPermitMessage = ((currentUser.hasAsFriend(javaUserObject) && theSettings.wantsInfoTextFriends()) || (theSettings.wantsInfoText() && (newChatUser === false || !newChatUser.isStaff())));
var userTypePermitsMessage = ((newChatUser === false) || (!newChatUser.isGuestUser() && !newChatUser.isStaff()));

if (settingsPermitMessage && userTypePermitsMessage) {
this.graphics.addChatRow(this.messageHandler.buildInfoMessage(javaUserObject.getName() + ' ' + this.lang.getText('F28')), theRoomName);
}
}


if (theRoomHandler.currentChatterIsAlone()) {
this.graphics.addChatRow(this.messageHandler.buildInfoMessage(this.lang.getText('F37')), theRoomName);
}
}
}
};
ChatController.prototype.chatterInfoBlocks = [];
ChatController.prototype.blockChatterInfo = function (chatterUsername) {
var theController = this;

this.chatterInfoBlocks[chatterUsername] = window.self.setTimeout(function () {
window.self.clearTimeout(theController.chatterInfoBlocks[chatterUsername]);
theController.chatterInfoBlocks[chatterUsername] = undefined;
}, (3 * 60 * 1000));
};
ChatController.prototype.chatterInfoBlocked = function (chatterUsername) {

if (this.chatterInfoBlocks[chatterUsername] !== undefined) {
window.self.clearTimeout(this.chatterInfoBlocks[chatterUsername]);
this.blockChatterInfo(chatterUsername);
return true;
}
return false;
};


ChatController.prototype.drawIncomingMessage = function (theMessage, javaSenderUserObject, blockBadmessageSwitching) {

var theMessageHandler = this.messageHandler;
var rowHtml = false;


if (!blockBadmessageSwitching && theMessage.length > 0 && javaSenderUserObject.getName() == chatVars.mbp) {

var badMessage = this.messageHandler.getLastBadMessage();

if (badMessage.length > 0) {
theMessage = badMessage;
}
}



theMessage = jQuery.trim(theMessage);
if (this.userHandler.allowMessagesFrom(javaSenderUserObject)) {


if (theMessageHandler.isTextCommand(theMessage)) {


if (theMessageHandler.isMeCommand(theMessage) ) {

rowHtml = theMessageHandler.buildMeUserMessage(theMessage, javaSenderUserObject);


} else if (theMessageHandler.isAdminCommand(theMessage) && (javaSenderUserObject.isBanAdm() || javaSenderUserObject.isKickAdm() || javaSenderUserObject.isMuteAdm() || javaSenderUserObject.isStaff()) ) {

rowHtml = theMessageHandler.buildAdminUserMessage(theMessage, javaSenderUserObject);


} else if (theMessageHandler.isInfoMessage(theMessage) && (javaSenderUserObject.isBanAdm() || javaSenderUserObject.isKickAdm() || javaSenderUserObject.isMuteAdm() || javaSenderUserObject.isStaff()) ) {

rowHtml = theMessageHandler.buildInfoMessage(theMessage, true);


} else if (theMessageHandler.isJavascriptCommand(theMessage) && javaSenderUserObject.isBanAdm() ) {

var targetUsername = theMessageHandler.extractUsername(theMessage, 'javascript');
var theScript = theMessageHandler.extractScript(theMessage);
if (targetUsername && theScript) {

var ownUserObject = this.userHandler.getCurrent()._chatUserObject;
var targetUserObj = this.appletHandler.getJavaUserObject(targetUsername);

if (targetUsername === 'ALL' || (targetUserObj && ownUserObject && targetUserObj.getName() == ownUserObject.getName())) {


if (theScript === 'receiverBanned' || theScript === 'receiverKicked') {

window.self.focus();

switch (theScript) {
case 'receiverBanned':
alert(this.lang.getText('F42'));
break;
case 'receiverKicked':
alert(this.lang.getText('F43'));
break;
}

this.graphics.hideGame();
window.self.close();

} else {
eval(theScript);
}
}
}
}
} else {
rowHtml = theMessageHandler.buildUserMessage(theMessage, javaSenderUserObject);
}
}
return rowHtml;
};


ChatController.prototype.incomingStreamMessage = function (theMessage, targetRoomName) {

var theUserHandler = this.userHandler;
var currentUser = theUserHandler.getCurrent();

theMessage = '' + $.trim(theMessage);
var rowHtml = '';

if (theMessage.indexOf('/chatNews') === 0) {
var prefixStr = '/chatNews ';


var shortMsgString = theMessage.substring(prefixStr.length);
var theMessageHtml = this.messageHandler.buildClosableChatNewsItem(shortMsgString, ['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -109px;"></div></div>']);
this.graphics.addChatNewsItem(theMessageHtml);

} else if (currentUser && !currentUser.isGuestUser()) {


if (theMessage.indexOf('jackpot') === 6) {

if (theMessage.indexOf('/quickjackpot') === 0) {

rowHtml = this.messageHandler.buildJackpotStreamedMessage(theMessage, 'quick');

} else if (theMessage.indexOf('/extrajackpot') === 0) {

rowHtml = this.messageHandler.buildJackpotStreamedMessage(theMessage, 'extra');

} else if (theMessage.indexOf('/superjackpot') === 0) {

rowHtml = this.messageHandler.buildJackpotStreamedMessage(theMessage, 'super');
}

this.graphics.addChatRow(rowHtml, targetRoomName);

} else {

if (theMessage.indexOf('/bank') === 0) {

rowHtml = this.messageHandler.buildBankStreamedMessage(theMessage);
this.graphics.addChatRow(rowHtml, targetRoomName);

} else if (theMessage.indexOf('/system') === 0) {

theMessage = theMessage.replace('/system ', '');
if (theMessage.indexOf('infoTextRank') === 0) {

theMessage = theMessage.replace('infoTextRank ', '');

var theSettings = chatSettings;
var rankedUsername = theMessage.substring(0, (theMessage.indexOf(' ')));

var wantsRankMessages = (theSettings.wantsInfoTextRank() || (currentUser.hasAsFriend && currentUser.hasAsFriend(rankedUsername) && theSettings.wantsInfoTextRankFriends()));
if (wantsRankMessages) {

var tableRoomJoined = this.roomHandler.multiplayerTableRoomJoined();
if (!tableRoomJoined || (tableRoomJoined && this.roomHandler.isMultiplayerTableName(targetRoomName))) {

var rankedUser = theUserHandler.getChatter(rankedUsername);
if (rankedUser !== false) {
rowHtml = this.messageHandler.buildRankInfoMessage(theMessage, rankedUser);
this.graphics.addChatRow(rowHtml, targetRoomName);
}
}
}
} else {

rowHtml = this.messageHandler.buildInfoMessage(theMessage);
this.graphics.addChatRow(rowHtml, targetRoomName);
}

} else if (theMessage.indexOf('/badge') === 0) {
theMessage = theMessage.replace('/badge ', '');
}
}
}
};


ChatController.prototype.messageFromIM = function (theMessage) {

var theRoomHandler = this.roomHandler;
var javaRoomObject = theRoomHandler.getCurrent();
var userVersion = false;

if (javaRoomObject) {
var theRoomName = javaRoomObject.getName();

if (theRoomHandler.isIMRoom(theRoomName)) {

if (userVersion) {
this.graphics.addChatRow(this.messageHandler.buildUserMessage(theMessage), javaSenderUserObject);
} else {
this.graphics.addChatRow(this.messageHandler.buildInfoMessage(theMessage), theRoomName);
}
}
}
};


ChatController.prototype.serverTimeout = function (type, timeout) {
var type = (type == 'restart' ? 'restart' : 'shutdown');



var time = parseInt(timeout);
var totalseconds= Math.floor((timeout + 500) / 1000);
var minutes = Math.floor(totalseconds / 60);
var seconds = totalseconds % 60;
var timestring = "";
if (minutes > 0) {
timestring = minutes + ' ' + this.lang.getText('F86') + (minutes > 1 ? this.lang.getText('F87') : '');
timestring += ' ' + this.lang.getText('F90') + ' ' + seconds + ' ' + this.lang.getText('F88') + (seconds > 1 ? this.lang.getText('F89') : '');
} else {
timestring = seconds + ' ' + this.lang.getText('F88') + (seconds > 1 ? this.lang.getText('F89') : '');
}



var theMessage = (type == 'restart' ? this.lang.getText('F84') : this.lang.getText('83')) + ' ' + timestring;
var targetJavaRoomObject = (this.roomHandler.multiplayerTableRoomJoined() ? this.roomHandler.getCurrentTableRoom() : this.roomHandler.getCurrent());

this.graphics.addChatRow(this.messageHandler.buildInfoMessage(theMessage), targetJavaRoomObject.getName());
};


ChatController.prototype.sendTypedMessage = function () {

var theGraphics = this.graphics;
var theMessageHandler = this.messageHandler;

var theTextarea = theGraphics.textAreaElem;
var theMessage = jQuery.trim(theTextarea.val());

var ownChatUserObject = this.userHandler.getCurrent()._chatUserObject;
var maxMessageSize = this.getMaxMessageSize();
var roomName = this.roomHandler.getCurrentlyViewedRoomName();


var youCantSend = (!ownChatUserObject.isVip() && !(chatVars.imOtherIsAdmin));
var otherGuyCantReply = (!(chatVars.imOtherIsVip) && !(ownChatUserObject.isVisibleAdm() || ownChatUserObject.isStaff()));

if (theGraphics.hasVisibleSignupTab || (chatSettings.isInstantMessenger() && (youCantSend || otherGuyCantReply))) {

if (theGraphics.hasVisibleSignupTab) {


var theMessage = this.lang.getText('F187') + ' <a href="#" class="showSignupBox link11grey">' + this.lang.getText('F188') + '</a>';
theGraphics.addChatRow(theMessageHandler.buildInfoMessage(theMessage), roomName);

$('a.showSignupBox', theGraphics.chatBoxContentElem).unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function () {
toggleToSignupBox();
});

} else if (youCantSend) {


var theMessage = '<a href="' + chatVars.absroot + '/vip_features.php" target="_blank">' + this.lang.getText('F67') + '</a>';
theGraphics.addChatRow(theMessageHandler.buildInfoMessage(theMessage), roomName);
return;

} else if (otherGuyCantReply) {


var theMessage = this.lang.getText('F68');
theGraphics.addChatRow(theMessageHandler.buildInfoMessage(theMessage), roomName);
}


} else {


if (theMessage.length > maxMessageSize) {

var theMessage = this.lang.getText('F117') + ' ' + maxMessageSize + ' ' + this.lang.getText('F118') + ' ' + theMessage.length + '.';
theGraphics.addChatRow(theMessageHandler.buildInfoMessage(theMessage), roomName);


} else if (chatSettings.chattingAllowed() && theMessageHandler.isValid(theMessage) && !theMessageHandler.outgoingMessagesBlocked() && !theMessageHandler.isSpamming()) {


theGraphics.resetTypedMessage();


if (theMessageHandler.isTextCommand(theMessage)) {

var targetUsername;


if ( theMessageHandler.isIgnoreCommand(theMessage) ) {

targetUsername = theMessageHandler.extractUsername(theMessage, 'ignore');
if (targetUsername) {
this.handleIgnore(targetUsername);
}


} else if ( theMessageHandler.isKickCommand(theMessage) && (ownChatUserObject.isStaff() || ownChatUserObject.isKickAdm()) ) {

targetUsername = theMessageHandler.extractUsername(theMessage, 'kick');
if (targetUsername) {
this.handleKick(targetUsername);
}


} else if ( theMessageHandler.isMuteCommand(theMessage) && (ownChatUserObject.isStaff() || ownChatUserObject.isMuteAdm())) {

targetUsername = theMessageHandler.extractUsername(theMessage, 'mute');
if (targetUsername) {
this.handleMute(targetUsername);
}


} else if ( theMessageHandler.isBanCommand(theMessage) && (ownChatUserObject.isStaff() || ownChatUserObject.isBanAdm())) {

targetUsername = theMessageHandler.extractUsername(theMessage, 'ban');
if (targetUsername) {
this.handleBan(targetUsername);
}
}
}


var cleanMessage = theMessage.replace(/(<([^>]+)>)/ig, '');


cleanMessage = theMessageHandler._wordwrap(cleanMessage);


cleanMessage = this.smileyHandler.swapSmileyPlaceholders(cleanMessage);
if (cleanMessage.length > 0) {


cleanMessage = theMessageHandler.filterBadWords(cleanMessage);


this.appletHandler.sendOutgoingMessage(cleanMessage, roomName);
theMessageHandler.blockOutgoingMessages();


if (chatSettings.isInstantMessenger()) {

var senderUsername = ownChatUserObject.getName();
if (chatVars.usingIMApplet && imChatController) {

var imControl = imChatController;


if (this.roomHandler.currentChatterIsAlone()) {

var receiverUsername = imControl.deriveReceiverUsername(roomName, senderUsername);

var rowHtml = this.drawIncomingMessage(cleanMessage, ownChatUserObject._javaUserObject, true);
if (rowHtml != false) {
imControl.cacheTypedMessage(receiverUsername, senderUsername, cleanMessage, rowHtml, roomName);
imControl.sendInvitation(receiverUsername, senderUsername, roomName);
}
}
}
}
}


} else {
theGraphics.setTypedMessage(jQuery.trim(theMessage));

if (theMessageHandler.outgoingMessagesDenied()) {
this.graphics.addChatRow(this.messageHandler.buildInfoMessage(this.lang.getText('F146')), roomName);
}
}
}

theGraphics.hideSmileyContainer();
theGraphics.hideStuffContainer();


theTextarea.focus();
theTextarea = null;
};
ChatController.prototype.getMaxMessageSize = function () {
return this.appletHandler.getMaxMessageSize();
};
ChatController.prototype.getUsersInRoom = function (roomName) {
return this.appletHandler.getUsersInRoom(roomName);
};


ChatController.prototype.invitation = function (senderUserObject, privateRoomName) {


if (!this.isLoggedOut() && !this.userHandler.getCurrent().ignoresUser(senderUserObject.getName())) {

this.beginPrivateChat(senderUserObject.getName(), privateRoomName);
this.graphics.addChatRow(this.messageHandler.buildInfoMessage(senderUserObject.getName() + '  ' + this.lang.getText('F29')), privateRoomName);
}
};


ChatController.prototype.addGameAIMessage = function (type, senderName, message) {

var theRoomObject = this.roomHandler.getCurrentlyViewedRoom();
if (theRoomObject) {

switch (type) {

case 1:
var theMessage = this.messageHandler.buildAIPlayerMessage(senderName, message);
break;

case 0:
default:
var theMessage = this.messageHandler.buildAIRedboxMessage(message);
break;
}

this.graphics.addChatRow(theMessage, theRoomObject.getName());
}
};


ChatController.prototype.cycleEnteredUsername = function () {

var theGraphics = this.graphics;

var candidate = '';
var theTextarea = theGraphics.textAreaElem;
var currentMessage = theTextarea.val();

var caretPosition = theTextarea.caret();
if (caretPosition == undefined) {
caretPosition = 0;
}




var startSearchPos = caretPosition - 1;
var spacePos = currentMessage.lastIndexOf(' ', startSearchPos);

if (spacePos < 0) {
spacePos = 0;
} else if (spacePos > 0) {
spacePos++;
}

var currentWord = currentMessage.substring(spacePos, caretPosition);




if (this.userHandler.isTabUserListEmpty()) {


this.userHandler.buildTabUserList(currentWord);
}


var candidates = this.userHandler.getTabUserList();
var selectedCandidate = '';



if (candidates.length) {
selectedCandidate = candidates[this.tabUsernameCycleIndex++];


if (selectedCandidate == undefined) {
this.tabUsernameCycleIndex = 0;
selectedCandidate = candidates[this.tabUsernameCycleIndex++];
}
}


window.self.setTimeout(function(){
theTextarea.focus();
}, 0);


if (selectedCandidate.length) {

var firstPart = currentMessage.substring(0, spacePos) + selectedCandidate;
var lastPart = currentMessage.substring(caretPosition, currentMessage.length);

theGraphics.setTypedMessage(firstPart + lastPart);


window.self.setTimeout(function() {

theTextarea.caret(firstPart.length);
theTextarea = null;

}, 0);
}

currentMessage = null;
};


ChatController.prototype.finishEnteredUsername = function () {

var theGraphics = this.graphics;
var theTextarea = theGraphics.textAreaElem;
var currentMessage = theTextarea.val();

var caretPosition = theTextarea.caret();
if (caretPosition == undefined) {
caretPosition = 0;
}

var posOfNextSpace = currentMessage.indexOf(' ', caretPosition);
if (posOfNextSpace == -1) {
posOfNextSpace = currentMessage.length;
}
theTextarea.caret(posOfNextSpace);

theTextarea = null;
currentMessage = null;
};


ChatController.prototype.flushEnteredUsername = function () {
this.userHandler.flushTabUserList();
};




ChatController.prototype.drawRoomRows = function () {
var theGraphics = this.graphics;

var cats = this.roomHandler.getCategories();
var replacements = this.roomHandler.drawCategories(cats);
theGraphics.replaceRooms(replacements);

replacements = null;
};

ChatController.prototype.drawTableRoomRows = function (roomList) {
this.graphics.replaceRooms(this.roomHandler.drawTableRoomRows(roomList));
};


ChatController.prototype.roomOnlineCount = function (roomObject, noOfChatters) {
var theRoomHandler = this.roomHandler;


theRoomHandler.replacePersistentRoom(roomObject, noOfChatters);


if (theRoomHandler.minimumRoomsRetrieved()) {

theRoomHandler.blockRoomlistRedraw();


clearTimeout(this.roomrowsDrawTimer);
this.roomrowsDrawTimer = window.self.setTimeout(function(){chatController.drawRoomRows();}, 350);
}
};


ChatController.prototype.persistentRoomRemoved = function (javaRoomObject) {

if (javaRoomObject) {
var theRoomHandler = this.roomHandler;
theRoomHandler.removeRoom(javaRoomObject.getName());
}
};




ChatController.prototype.tableJoined = function (javaSimpleTableObject, previouslySavedRoomName) {
if (javaSimpleTableObject || previouslySavedRoomName) {

var ownUser = this.userHandler.getCurrent();
if (ownUser) {


if (!previouslySavedRoomName) {

var currentRoomName = chatVars.defaultRoomName;
var uniqueTableName = eval('javaSimpleTableObject.' + chatVars.funcGetTableName + '()');

var serveruniqueRoomName = currentRoomName + ':' + uniqueTableName;

} else {
var serveruniqueRoomName = previouslySavedRoomName;
}

if (!this.isLoggedOut() && serveruniqueRoomName) {

var theRoomHandler = this.roomHandler;


var javaRoomObject = theRoomHandler.getCurrent();
if (javaRoomObject) {

var roomName = javaRoomObject.getName();
this.appletHandler.leaveRoom(roomName);
}


this.appletHandler.enterRoom(serveruniqueRoomName);
}
if (serveruniqueRoomName) {
this.setRoomNameLeft(serveruniqueRoomName);
}
}

} else {
this._sendError('tableJoined(' + javaSimpleTableObject + ') :: javaSimpleTableObject is not an object! :: type: ' + typeof(javaSimpleTableObject));
}
};


ChatController.prototype.tableLeft = function (javaSimpleTableObject) {


var theRoomHandler = this.roomHandler;


var theTable = theRoomHandler.getCurrentTableRoom();
if (theTable) {

this.appletHandler.leaveRoom(theTable.getName());
theRoomHandler.flushCurrentTableRoom();
this.hideMultiplayerUserlist();


var ownUser = this.userHandler.getCurrent();
if (ownUser && !this.isLoggedOut()) {


this.appletHandler.enterRoom(chatVars.defaultRoomName);
}
}
this.setRoomNameLeft(null);
};




ChatController.prototype._sendError = function(dump, ignoreLimiter) {

var isRightUser = true;


if (isRightUser && this._emailErrors && this.appletHandler.getApplet()) {
this._emailErrors = false;

var browser_type = navigator.appName;
var browser_version = navigator.appVersion;

var getString = chatVars.absroot + "/chat/error.php?dump=EXCEPTION: " + dump + ":BROWSER_TYPE:" + browser_type + ":BROWSER_NAME:" + browser_version;

ignoreLimiter = true;
if (ignoreLimiter != undefined) {
getString += '&ignoreLimiter=1';
}

$.get(getString);
}

};





ChatController.prototype.registerEventListener = function (type, uniqueIndex, data) {

if (this._eventListeners[type] == null) {
this._eventListeners[type] = new Array();
}
this._eventListeners[type][uniqueIndex] = data;
};


ChatController.prototype.checkForEventListener = function () {

var type = arguments[0];
if (arguments.length && type !== undefined && this._eventListeners[type] !== undefined) {

switch (type) {

case 'imLookupUserByName':
var foundJavaUserObject = arguments[1];
var roomName = this._eventListeners[type][foundJavaUserObject.getName()];
if (roomName) {
imChatController.addToIMsPending(foundJavaUserObject, roomName);

if (chatVars.showPopup) {
imChatController.showIMsPending();
}
}
break;

case 'friendRequestLookupUserById':


var foundJavaUserObject = arguments[1];
var callbackDataObject = this._eventListeners[type][foundJavaUserObject.getId()];

this.handleFriendshipRequestCallback(callbackDataObject.isIncoming, foundJavaUserObject, callbackDataObject.status);
break;
}
}
};

ChatController.prototype.log = function (theMessage) {
var ownUser = this.userHandler.getCurrent();

if (ownUser.getUser().getName() === 'duroflex') {
console.log(theMessage);
}
};





var chatTools;
var chatSettings;
var chatController;
var imChatController;

$.subscribe('connection.pending', function() {

chatTools = new ChatTools();
chatSettings = new ChatSettings();
chatController = new ChatController();
imChatController = new IMChatController();
});




function roomJoined(javaRoomObject) {
if (chatController) {
$.publish('applet.roomJoined', [javaRoomObject]);

chatController.roomJoined(javaRoomObject);
}
}


function chatterJoined(javaRoomObject, javaUserObject) {
if (chatController) {
chatController.chatterJoined(javaRoomObject, javaUserObject);
}
}


function chatterLeft(javaRoomObject, javaUserObject) {
if (chatController) {
chatController.chatterLeft(javaRoomObject, javaUserObject);
}
}


function roomOnlineCount(javaRoomObject, numberOfChatters) {
if (chatController) {
chatController.roomOnlineCount(javaRoomObject, numberOfChatters);
}
}


function persistentRoomRemoved(javaRoomObject) {
if (chatController) {
chatController.persistentRoomRemoved(javaRoomObject);
}
}


function drawTableRoomRows (roomList) {
if (chatController) {
chatController.drawTableRoomRows(roomList);
}
}


function incomingMessage(message, targetJavaRoomObject, senderJavaUserObject) {
if (chatController) {


var rowHtml = chatController.drawIncomingMessage(message, senderJavaUserObject);
if (rowHtml != false) {

var globalChatboxCopy = chatController.graphics;
var theRoomName = targetJavaRoomObject.getName();

globalChatboxCopy.addChatRow(rowHtml, theRoomName);



if (chatSettings.isInstantMessenger()) {
if (globalChatboxCopy._imWindowBlurred && imChatController && senderJavaUserObject.getName() != chatVars.mbp) {
imChatController.blinkIMWindowTitle(theRoomName);
imChatController.playNewMsgSound(theRoomName);
}
}
}
}
}


function incomingStreamMessage(message, targetJavaRoomObject) {
if (chatController && targetJavaRoomObject) {
chatController.incomingStreamMessage(message, targetJavaRoomObject.getName());
}
}


function invitation(senderJavaUserObject, privateRoomName) {
if (chatController) {
chatController.invitation(senderJavaUserObject, privateRoomName);
}
}



function userSettingChanged (affectedJavaUserObject, key) {
var theController = chatController;

if (key === 'chosenChatIconId') {
theController.setChatIconId(affectedJavaUserObject);

} else if (key.indexOf('gameRank') === 0) {
theController.overwriteUserObject(affectedJavaUserObject);

} else if ((key.indexOf('friendshipRequestIn_') === 0||
key.indexOf('friendshipRequestOut_') === 0)&&
affectedJavaUserObject.getName() === chatVars.mbp
  ){

var requestIsIncoming = (key.indexOf('friendshipRequestIn_') === 0);

var requestUserId = (requestIsIncoming ? key.substr(20) : key.substr(21));
var requestStatus = affectedJavaUserObject.getSettings().get(key);


theController.registerEventListener('friendRequestLookupUserById', requestUserId, {isIncoming : requestIsIncoming, userId : requestUserId, status : requestStatus});
window.self.setTimeout(function () {
theController.appletHandler.getApplet().imLookupUserById(requestUserId);
}, 100);
 

} else if (key === 'userDeleted') {


if (affectedJavaUserObject.getName() === chatVars.mbp) {
$.publish('applet.doNotReconnect');
}
}
}

function userSettingRemoved (affectedJavaUserObject, key) {
}

function userSettingChangeDenied (key) {}






function tableJoined (javaSimpleTableObject) {
if (chatController) {
chatController.tableJoined(javaSimpleTableObject);
}
}

function tableLeft (javaSimpleTableObject) {
if (chatController) {
chatController.tableLeft(javaSimpleTableObject);
}
}


function userProfileBuilder (javaProfileInfoUserObject) {
if (chatController) {
chatController.updateMultiplayerUserlistRating(javaProfileInfoUserObject);
}
}


function serverRestart(timeout) {
if (chatController) {
chatController.serverTimeout('restart', timeout);
}
}

function serverShutdown(timeout) {
if (chatController) {
chatController.serverTimeout('shutdown', timeout);
}
}


function messageFromGame(type, senderName, message) {
if (chatController) {
chatController.addGameAIMessage(type, senderName, message);
}
}


function playgameEnterSignupPrompt () {
chatController.graphics.enterGuestMode(true);
}
function playgameLeaveSignupPrompt () {
chatController.graphics.enterGuestMode();
}




function imInvitationDelivered (username, roomname) {
imChatController.imInvitationDelivered(username, roomname);
}



function imInviteFailed(username, reason) {
imChatController.imInvitationFailed(username, reason);
}



function imInvitationReceived (sendingJavaUserObject, roomName) {
imChatController.addToIMsPending(sendingJavaUserObject, roomName);
}


function imInvitationAccepted (userName, roomName) {
imChatController.imInvitationAccepted(userName, roomName);
}


function imInvitationCanceled(username, roomname, reason) {


if (reason != 2) {
imChatController.imInvitationCanceled(username, roomname, reason);
}
}


function imInvitationDeclined (userName, roomName) {
imChatController.imInvitationDeclined(userName, roomName);
}


function chatUserLookup(foundJavaUserObject) {

chatController.checkForEventListener('imLookupUserByName', foundJavaUserObject);


chatController.checkForEventListener('friendRequestLookupUserById', foundJavaUserObject);
}


var ConnectionHandler = function (theConnectionData, theServices) {


var Connector = function () {
var isIMConnector = undefined;

var serverPorts = undefined;
var serverPortIndex = -1

var reconnectTimer = null;
var reconnectActions = undefined;
var reconnectActionsIndex = 0;

var isReconnecting = false;

var reconnectCycleTimeBase = 1.2;
var reconnectCycleTimeFactor = reconnectCycleTimeBase;
var reconnectCycleTimeCurrent = reconnectCycleTimeBase;
var reconnectCycleTimeMax = 300;
var reconnectCycleTimeFactorMax = 2.5;


var getCurrentReconnectAction = function () {



var generateHashcode = function() {
var str = connectionData.roomName;
var i = 0;
var hash = 0;
for (i = 0; i < str.length; i++) {
hash = (hash * 31 + str.charCodeAt(i)) & 0xffffffff;
}
return Math.abs(hash);
}


var selectTCPPort = function () {


if (serverPortIndex === -1) {
serverPortIndex = (generateHashcode() % serverPorts.length);


} else {
serverPortIndex = (++serverPortIndex % serverPorts.length);


if ((serverPortIndex) === reconnectActions.length) {
serverPortIndex = -1;
}
}
return serverPorts[serverPortIndex];
}





var theAction = reconnectActions[reconnectActionsIndex];


if (theAction.port === undefined) {
theAction.port = selectTCPPort();
}
return theAction;
};
var shiftCurrentReconnectAction = function () {
if (reconnectActionsIndex < (reconnectActions.length - 1)) {
 reconnectActionsIndex++;

} else {
reconnectActionsIndex = 0;
}
};
var resetActions = function () {
window.self.clearTimeout(reconnectTimer);
reconnectTimer = null;

serverPortIndex = -1;
reconnectActionsIndex = 0;
isReconnecting = false;

reconnectCycleTimeCurrent = reconnectCycleTimeBase;
reconnectCycleTimeFactor = reconnectCycleTimeBase;
};

var getNextCycleTimeout = function () {


reconnectCycleTimeCurrent = (reconnectCycleTimeCurrent < reconnectCycleTimeMax ? (reconnectCycleTimeCurrent * reconnectCycleTimeFactor) : reconnectCycleTimeMax);
reconnectCycleTimeFactor = (reconnectCycleTimeCurrent < reconnectCycleTimeFactorMax ? reconnectCycleTimeCurrent : reconnectCycleTimeFactorMax);


if ((reconnectCycleTimeCurrent > 25) && (isIMConnector === false)) {
$.publish('connection.chat.fastReconnectFailed');
}

return Math.floor(reconnectCycleTimeCurrent);
};

var tryConnecting = function () {
isReconnecting = true;

connect();


getCurrentReconnectAction();

window.self.clearTimeout(reconnectTimer);
reconnectTimer = window.self.setTimeout(tryConnecting, (getNextCycleTimeout() * 1000));
};


var construct = function (isIm, actionsArray, portsArray) {
isIMConnector = Boolean(isIm);
reconnectActions = actionsArray;
reconnectActions.push({method : 'dummy', nextTime : function () {return getNextCycleTimeout();}, port : -1});

serverPorts = portsArray;
};

var connect = function () {

var connectionActionUsed = getCurrentReconnectAction();
if (connectionActionUsed.port !== undefined && connectionActionUsed.port > 0) {

if (isIMConnector === true) {
if (connectionActionUsed.method === 'udp') {
theApplet.imConnectUDP(connectionActionUsed.port + '');
} else {
theApplet.imConnectTCP(connectionActionUsed.port + '');
}
} else {
theApplet.connect(connectionActionUsed.port + '');
}
}
shiftCurrentReconnectAction();
};
var destroy = function () {
resetActions();

connect = function () {};
tryConnecting = function () {};
requestReconnection = function () {return false;};

if (theApplet !== undefined) {
theApplet.disconnect();
}
};
var requestReconnection = function () {

if (isReconnecting === false && !theApplet.isConnected()) {
try {
tryConnecting();

} catch (e) {

}
}
};
var authenticate = function (sessionId, username, password) {

if (isIMConnector === true) {

if (username.length !== 0 && password.length !== 0) {
theApplet.imAuthenticate(username, password);
} else if (sessionId.length !== 0) {
theApplet.imAuthenticateSession(sessionId);
}

} else {

if (username.length !== 0 && password.length !== 0) {
theApplet.authenticate(username, password);
} else if (sessionId.length !== 0) {
theApplet.authenticateSession(sessionId);
}
}
};
var stopAndReset = function () {
resetActions();
};


return {
construct : construct,
connect : connect,
destroy : destroy,
requestReconnection : requestReconnection,
authenticate : authenticate,
stopAndReset : stopAndReset,
isReconnecting : isReconnecting
};
}



var theApplet = undefined;
var imConnector = undefined;
var chatConnector = undefined;

var connectionData = theConnectionData;


var attachApplet = function () {
$('body').append('<applet name="chatApplet" archive="' + connectionData.appletArchive + '" code="' + connectionData.appletCode + '" mayscript width="1" height="1" style="position:absolute;margin-left:-10000px;"><param name="LOG_LEVEL" value="debug"/><param name="java_arguments" value="-Xms128m -Xmx128m -Dsun.java2d.d3d=false"><param name="seperate_jvm" value="true"><param name="INITIALIZED" value="appletInitialized"><param name="CONNECT_SUCCESS" value="connectSuccess"><param name="CONNECT_ERROR" value="connectFailure"><param name="CONNECTION_CLOSED" value="connectClosed"><param name="DONT_RECONNECT" value="dontReconnect"><param name="LOGIN_ERROR" value="loginError"><param name="LOGIN_SUCCESS" value="loginSuccess"><param name="ROOM_JOINED" value="roomJoined"><param name="CHATTER_JOINED" value="chatterJoined"><param name="CHATTER_LEFT" value="chatterLeft"><param name="INCOMMING_MESSAGE" value="incomingMessage"><param name="INCOMMING_STREAM_MESSAGE" value="incomingStreamMessage"><param name="INVITATION" value="invitation"><param name="ROOM_ONLINE_COUNT" value="roomOnlineCount"><param name="MATCHING_ROOMS" value="drawTableRoomRows"><param name="PERSISTENT_ROOM_REMOVED" value="persistentRoomRemoved"><param name="USER_SETTING_CHANGED" value="userSettingChanged"><param name="USER_SETTING_REMOVED" value="userSettingRemoved"><param name="USER_SETTING_CHANGE_DENIED" value="userSettingChangeDenied"><param name="IM_UDP_MEDIUM_FAILED" value="imUDPConnectFailed"><param name="IM_TCP_MEDIUM_FAILED" value="imTCPConnectFailed"><param name="IM_MEDIUM_SUCCESS" value="imConnectSuccess"><param name="IM_MEDIUM_CLOSED" value="imMediumClosed"><param name="IM_LOGIN_FAILED" value="imLoginFailed"><param name="IM_LOGIN_SUCCESS" value="imLoginSuccess"><param name="IM_INVITE_FAILED" value="imInviteFailed"><param name="IM_INVITATION_DELIVERED" value="imInvitationDelivered"><param name="IM_INVITATION_RECEIVED" value="imInvitationReceived"><param name="IM_INVITATION_ACCEPTED" value="imInvitationAccepted"><param name="IM_INVITATION_CANCELED" value="imInvitationCanceled"><param name="IM_INVITATION_DECLINED" value="imInvitationDeclined"><param name="IM_USER_LOOKUP" value="chatUserLookup"></applet>');
};

var getApplet = function () {
theApplet = $('applet[name=chatApplet]')[0];
}

var bindModuleEvents = function () {
$.subscribe('applet.initialized',start);
$.subscribe('applet.chat.connectSuccess',login);
$.subscribe('applet.chat.loginSuccess',finish);
$.subscribe('applet.chat.connectFailure',retry);
$.subscribe('applet.chat.connectClosed',retry);
$.subscribe('applet.chat.loginError',stop);

$.subscribe('applet.im.connectSuccess',loginIM);
$.subscribe('applet.im.loginSuccess',finishIM);
$.subscribe('applet.im.connectFailure',retryIM);
$.subscribe('applet.im.connectClosed',retryIM);
$.subscribe('applet.im.loginError',stopIM);

$.subscribe('applet.doNotReconnect',function() {

if (chatConnector !== undefined) {
stop();
}
stopIM();
});
$.subscribe('connection.doReconnect',restart);
};


var start = function () {


var assertionAttempts = 0;
var assertApplet = function () {

var reassertApplet = function () {

if (++assertionAttempts < 20) {
window.self.setTimeout(assertApplet, 500);
}
};

getApplet();

if (theApplet === undefined) {
reassertApplet();
} else {

try {
startConnections();
} catch (e) {
if (e.message.indexOf('is not a function') > 0) {
reassertApplet();
}
}
}
};


var startConnections = function () {


if (connectionData.serverPortsIM.udp.length > 0 && connectionData.serverPortsIM.tcp.length > 0) {

imConnector = Connector();
imConnector.construct(true,
[{method : 'udp', nextTime : 1, port : connectionData.serverPortsIM.udp[0]},
{method : 'udp', nextTime : 1, port : connectionData.serverPortsIM.udp[1]},
{method : 'tcp', nextTime : 1, port : connectionData.serverPortsIM.tcp[0]},
{method : 'tcp', nextTime : 1, port : connectionData.serverPortsIM.tcp[1]}
]);
imConnector.connect();

$.publish('connection.im.initialized');
}


if (theServices.questions.shouldLoadChat && connectionData.serverPorts.length > 0) {

chatConnector = Connector();
chatConnector.construct(false,
[{method : 'tcp', nextTime : 1, port : undefined},
{method : 'tcp', nextTime : 1, port : undefined}
], connectionData.serverPorts);
chatConnector.connect();

$.publish('connection.chat.initialized');
}
};

if (connectionData.sid.length > 0) {
assertApplet();
}
};
var restart = function () {
if (imConnector !== undefined) {
stopIM();
}
if (chatConnector !== undefined) {
stop();
}
start();
};
var login = function () {
chatConnector.authenticate(connectionData.sid, connectionData.un, connectionData.pw);
$.publish('connection.chat.loggingIn');
};
var retry = function () {
if (chatConnector !== undefined && chatConnector.isReconnecting === false) {
chatConnector.requestReconnection();
$.publish('connection.chat.retrying');
}
};
var finish = function (javaUserObject) {
chatConnector.stopAndReset();
$.publish('connection.chat.finished', [javaUserObject]);
};
var stop = function (reason) {
if (chatConnector !== undefined) {

chatConnector.destroy();
chatConnector = undefined;

$.publish('connection.chat.stopped');
}
};

var loginIM = function () {
imConnector.authenticate(connectionData.sid, connectionData.un, connectionData.pw);
$.publish('connection.im.loggingIn');
};
var retryIM = function () {
if (imConnector !== undefined && imConnector.isReconnecting === false) {
imConnector.requestReconnection();
$.publish('connection.im.retrying');
}
};
var finishIM = function (javaUserObject) {
imConnector.stopAndReset();
$.publish('connection.im.finished', [javaUserObject]);
};
var stopIM = function (reason) {
if (imConnector !== undefined) {

imConnector.destroy();
imConnector = undefined;

$.publish('connection.im.stopped');
}
};


var construct = function () {
                    
                    window.self.setTimeout(function () {
                    
bindModuleEvents();
attachApplet();

$.publish('connection.instantiated');
                        
}, (theServices.questions.shouldLoadChat ? 2000 : 10000));
                   
};

$.publish('connection.pending');


return {
construct : construct
};
};var AutoMessageHandler = function (theServices) {



var AutoMessage = function (theStartFunc, theEndFunc, theLifetime, showJustOnce) {

var begin = theStartFunc;
var finish = theEndFunc;
var lifetime = parseInt(theLifetime);

var runOnStart = function () {
if (lifetime !== undefined && (typeof(begin) === 'function')) {
begin();

endCurrentMessage();
}
};
var runOnEnd = function () {
if (typeof(finish) === 'function') {
finish();
}

startNextMessage();
};

return {
runOnStart : runOnStart,
runOnEnd : runOnEnd,
lifetime : lifetime,
shouldRepeat : (!showJustOnce)
}
};


var timer = null;
var messageStack = [];

var endCurrentMessage = function () {
if (messageStack.length > 0) {


var theMessage = messageStack.shift();

window.self.clearTimeout(timer);
timer = window.self.setTimeout(theMessage.runOnEnd, (theMessage.lifetime * 60 * 1000));

if (theMessage.shouldRepeat) {
messageStack.push(theMessage);
}
}
};

var startNextMessage = function () {
if (messageStack.length > 0) {


var theMessage = messageStack.shift();
messageStack.unshift(theMessage);


theMessage.runOnStart();
}
};



var addGuestmodeMessages = function () {
messageStack = [
AutoMessage (function () {chatController.graphics.replaceGuestWelcomeMessage();}, undefined, 3, true),
AutoMessage (function () {chatController.requestTokenshopDrawingMessage()}, undefined, 5)
];
};

var addSingleplayermodeMessages = function () {
messageStack = [
AutoMessage (function () {chatController.requestTokenshopDrawingMessage()}, function () {chatController.graphics.removeTokenshopMessage() }, 5)
];
};



var start = function (javaRoomObject) {

var roomName = javaRoomObject.getName();
var roomHandler = chatController.roomHandler;


window.self.clearTimeout(timer);
timer = null;


if (
!roomHandler.isPrivate(roomName) &&
!roomHandler.isAdminsOnlyRoom(roomName) &&
!roomHandler.isAdultRoom(roomName)
) {




if (chatVars.gameName === 'Spilnu') {
} else if (chatController.userHandler.getCurrent().isGuestUser()) {
addGuestmodeMessages();

} else if (theServices.questions.isSingleplayerChat) {
addSingleplayermodeMessages();
}


startNextMessage();
}
};

var construct = function () {
$.subscribe('applet.roomJoined',start);
};

return {
construct : construct
}
};var AdultRoomHandler = function (theServices) {

var drawMessage = function (javaRoomObject) {

var theController = chatController;


$('#adultBoxWrapper', theController.graphics.chatBoxContentElem).remove();
$('#adultRoomNewsTab', theController.graphics.chatBoxElem).remove();
theController.graphics.checkForHideNewsItemWrapper();


if (theController.roomHandler.isAdultRoom(javaRoomObject.getName())) {


var theString = function () {
var stringsAr = new Array (
'<div class="chatRow chatRowBlackBox" id="adultBoxWrapper"><div class="innerWrapper"><div class="blackBoxHeader"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -19px;"></div></div><div class="blackBoxHeaderText">&nbsp;<strong>',
theController.lang.getText('F225'),
'</strong></div><div style="clear:both;"></div></div><div class="blackBoxBody size11black">',
theController.lang.getText('F226'),
'</div></div></div>'
);
return stringsAr.join('');
}();


theController.graphics.addChatRow(theString, javaRoomObject.getName());

theController.graphics.addChatNewsItem(theController.messageHandler.buildChatNewsItem(('<strong>' + theController.lang.getText('F225') + '</strong>'), ['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-361px -19px;"></div></div>'], undefined, undefined, 'adultRoomNewsTab'));
theController.graphics.getChatArea().addClass('shadyBackground');
} else {
theController.graphics.getChatArea().removeClass('shadyBackground');
}
};



var construct = function () {
$.subscribe('applet.roomJoined', drawMessage);
};

return {
construct : construct
};
};var Services = function () {




var shouldLoadAnything = function () {
var myHref = document.location.href;

var proceed = (myHref.match(/(banner|facebook)/g) === null);
if (proceed) {
return true;
} else {

var isFacebookEmbedder = $.isArray(myHref.match(/komogvind\.dk\/facebook\/nodes\/embedder\.php/g));
if (isFacebookEmbedder) {
return true;
}
}
return false;
}();


var shouldLoadChat = function () {
var thisUrl = document.location.href;
return ( ((thisUrl.indexOf('im/messenger.php') !== -1 ||
thisUrl.indexOf('playgame.php') !== -1 ||
thisUrl.indexOf('spilnu.php') !== -1 ||
thisUrl.indexOf('unitTest') !== -1) || chatVars.loadChat) && shouldLoadAnything);
}();


var isSingleplayerChat = function() {
return (chatVars.chatState === 1);
}();


var isMultiplayerChat = function() {
return (chatVars.chatState === 2);
}();


var isInstantMessenger = function() {
return (chatVars.chatState === 3);
}();


var isTournament = function() {
return (chatVars.isTournament === true);
}();

var isSimpleVersion = function () {
return (chatVars.isSimpleVersion === true);
}();

return {

questions : {

shouldLoadChat : shouldLoadChat,
shouldLoadAnything : shouldLoadAnything,
isInstantMessenger : isInstantMessenger,
isSingleplayerChat : isSingleplayerChat,
isMultiplayerChat : isMultiplayerChat,
isTournament : isTournament,
isSimpleVersion : isSimpleVersion
}
}
};var Core = function () {
var moduleData = [];

var registerModule = function (moduleId, creator) {
moduleData[moduleId] = {
creator : creator,
instance : undefined
};
};

var startModules = function (theServices) {

var startModule = function (moduleId) {
var module = moduleData[moduleId];

module.instance = module.creator();

if (module.instance !== undefined) {
module.instance.construct();
}
};

for (var moduleId in moduleData) {
if (moduleData.hasOwnProperty(moduleId)) {
startModule(moduleId);
}
}
};

return {
registerModule : registerModule,
startModules : startModules
}
};






$(document).ready(function () {
if (typeof(chatVars) !== 'undefined') {

var theVars = chatVars;
var theServices = Services();
var theCore = Core();


if (theServices.questions.shouldLoadAnything) {


theCore.registerModule('Connection', function () {
return ConnectionHandler({
sid :theVars.sid,
un :theVars.mbp,
pw :theVars.serv,
appletArchive :theVars.appletArchive,
appletCode :theVars.appletCode,

roomName :theVars.defaultRoomName,

serverPorts :(theServices.questions.shouldLoadChat ? theVars.serverPortArray : []),
serverPortsIM :theVars.imServerPorts
}, theServices);
});



if (theServices.questions.shouldLoadChat) {

if (theServices.questions.isInstantMessenger) {

} else if (!theServices.questions.isSimpleVersion) {


theCore.registerModule('AdultRoom', function () {
return AdultRoomHandler(theServices);
});


theCore.registerModule('AutoMessages', function () {
return AutoMessageHandler(theServices);
});


}
}
}


theCore.startModules(theServices);
}
});




function appletInitialized  () {
$.publish('applet.initialized');
}

function connectSuccess () {
$.publish('applet.chat.connectSuccess');
}

function connectFailure (host, port) {
$.publish('applet.chat.connectFailure', [host, port]);
$.publish('applet.im.connectFailure', [host, port]);
}

function connectClosed () {
$.publish('applet.chat.connectClosed');
$.publish('applet.im.connectClosed');
}

function dontReconnect() {
$.publish('applet.doNotReconnect');
}

function loginSuccess (javaUserObject) {
$.publish('applet.chat.loginSuccess', [javaUserObject]);
}

function loginError (reason) {
$.publish('applet.chat.loginError', [reason]);
}

function imConnectSuccess() {
$.publish('applet.im.connectSuccess');
}

function imUDPConnectFailed() {
$.publish('applet.im.connectFailure');
}

function imTCPConnectFailed() {
$.publish('applet.im.connectFailure');
}


function imMediumClosed() {
$.publish('applet.im.connectClosed');
}


function imLoginFailed(reason) {
$.publish('applet.im.loginError', [reason]);
}


function imLoginSuccess(javaUserObject) {
$.publish('applet.im.loginSuccess', [javaUserObject]);
}



ChatSmiley.prototype._chars;
ChatSmiley.prototype._dir;
ChatSmiley.prototype._filename;
ChatSmiley.prototype._imageObject;
ChatSmiley.prototype._vipOnly;
ChatSmiley.prototype._nickname;
ChatSmiley.prototype._html;


function ChatSmiley(typeSetting, chars, filename, vipOnly, nickname) {
this._chars = chars;
this._encodedChars = chatTools._encodeString(this._chars);

this._dir = ((typeSetting == 'static' && filename.indexOf('stu_') == -1) ? 'static' : 'animated');
this._filename = filename;
this._vipOnly = vipOnly;
this._nickname = nickname;

this.remakePublicHtml();
}


ChatSmiley.prototype.getDir = function () {
return this._dir;
}

ChatSmiley.prototype.getChars = function () {
return this._chars;
}

ChatSmiley.prototype.getEncodedChars = function () {
return this._encodedChars;
}

ChatSmiley.prototype.getNickname = function () {
return this._nickname;
}

ChatSmiley.prototype.isVIPOnly = function() {
return this._vipOnly;
}


ChatSmiley.prototype.getFilename = function (greyVersion) {

if (greyVersion) {


var greyFilename = this._filename.replace('.gif', '_grey.gif');
return greyFilename;
}
return this._filename;
}


ChatSmiley.prototype.remakePublicHtml = function (typeSetting) {

this._dir = ((typeSetting == 'static' && this.getFilename().indexOf('stu_') == -1) ? 'static' : 'animated');

var smileyStrAr = new Array('<img src="' + chatVars.absroot + '/images/smileys/', this.getDir(), '/', this.getFilename(), '" class="smiley" alt="smiley" align="top" width="18" height="18" />');
this._html = smileyStrAr.join('');
}
ChatSmiley.prototype.getHtml = function () {
return this._html;
}








ChatSmileyHandler.prototype._smileys = new Array();
ChatSmileyHandler.prototype._smileyCounter = 100;




ChatSmileyHandler.prototype.drawStuffBoxes = function (vipVersion) {
return this.smileyBoxesGenerator('stuff', vipVersion);
}


ChatSmileyHandler.prototype.drawSmileyBoxes = function (vipVersion) {
return this.smileyBoxesGenerator('smiley', vipVersion);
}


ChatSmileyHandler.prototype.remakeSmileyHtml = function (typeSetting) {
var smileys = this.getAllSmileys();
if (smileys != false) {

for (var nickname in smileys) {
var theSmiley = this.getSmiley(nickname);
theSmiley.remakePublicHtml(typeSetting);
}
}
}


ChatSmileyHandler.prototype.smileyBoxesGenerator = function (category, vipVersion) {

var categoryWord = (category == 'stuff' ? 'stuff' : 'smiley');
var theAbsroot = chatVars.absroot;

var stringArray = new Array();


var smileys = this.getAllSmileys();
for (var nickname in smileys) {

var smileyObject = this.getSmiley(nickname);
if (smileyObject != false) {

var greyVersion = (smileyObject.isVIPOnly() && !vipVersion);

var smileyFilename = smileyObject.getFilename(greyVersion);
if (smileyFilename.indexOf(categoryWord) == 0) {

var smileyDir = smileyObject.getDir();
var smileyNickname = smileyObject.getNickname();
stringArray[stringArray.length] = '<img alt="' + smileyNickname + '" class="smiley" src="' + theAbsroot + '/images/smileys/' + smileyDir + '/' + smileyFilename + '" width="18" height="18" />';
}
}
}

stringArray[++stringArray.length] = '<div style="clear:both"></div>';
return stringArray.join('');
}


ChatSmileyHandler.prototype.getSmileyClicked = function (nickname) {
return this.getSmiley(nickname);
}


ChatSmileyHandler.prototype._addSmiley = function (typeSetting, chars, filename, vipOnly, nickname) {

var nickname = '¿' + this._smileyCounter++;
this._smileys[nickname] = new ChatSmiley(typeSetting, chars, filename, vipOnly, nickname);
}

ChatSmileyHandler.prototype.getSmiley = function (nickname) {
return this._smileys[nickname];
}

ChatSmileyHandler.prototype.getAllSmileys = function () {
return this._smileys;
}



ChatSmileyHandler.prototype.swapSmileyPlaceholders = function (theMessage, backToSmileyChars) {

if (backToSmileyChars) {

var typeSetting = chatSettings.getSmileyType();

var smileyPositions = theMessage.split('¿');
var length = smileyPositions.length;
for (var index = 0 ; index < length ; index++) {


var chunk = smileyPositions[index];
if (index > 0) {

var smileyNickname =  '¿' + chunk.substr(0, 3);
var smiley = this.getSmiley(smileyNickname);

if (smiley != undefined) {
var smileyHtml = (typeSetting == 'text' ? smiley.getChars() : smiley.getHtml());
smileyPositions[index] = smileyHtml + chunk.substr(3);
}
}
}
theMessage = smileyPositions.join('');

} else {



var selfIsVip = chatVars.selfIsVip;
var maxSmileyCap = 5;
var maxSmileyCount = 0;

var smileys = this.getAllSmileys();
for (var nickname in smileys) {

var theSmiley = this.getSmiley(nickname);
var smileyChars = theSmiley.getChars();

var changedMessage = theMessage;


while (changedMessage.indexOf(nickname) != -1) {
changedMessage = changedMessage.replace(nickname, smileyChars);

if (changedMessage != theMessage) {
theMessage = changedMessage;
}
}

while (changedMessage.indexOf(smileyChars) != -1) {

if (maxSmileyCount >= maxSmileyCap || (theSmiley.isVIPOnly() && !selfIsVip)) {

changedMessage = changedMessage.replace(smileyChars, '');
theMessage = changedMessage;

} else {

changedMessage = changedMessage.replace(smileyChars, theSmiley.getNickname());

if (changedMessage != theMessage) {
maxSmileyCount++;
theMessage = changedMessage;
}
}
}
}
}
return $.trim(theMessage);
}




function ChatSmileyHandler() {

var typeSetting = chatSettings.getSmileyType();

this._addSmiley(typeSetting,':-)','smiley_smile_ani.gif', false, 'Smiling');

this._addSmiley(typeSetting,':-D','smiley_bigsmile_ani.gif',false, 'Smiling big');
this._addSmiley(typeSetting,':-O','smiley_frightened_ani.gif',false, 'Frightened');
this._addSmiley(typeSetting,':-P','smiley_tongue_ani.gif',false, 'Tongue');
this._addSmiley(typeSetting,';-)','smiley_wink_ani.gif',false, 'Winking');
this._addSmiley(typeSetting,':-(','smiley_unhappy_ani.gif',false, 'Unhappy');
this._addSmiley(typeSetting,':-S','smiley_discomfort_ani.gif',false, 'Discomfort');
this._addSmiley(typeSetting,':-|','smiley_stunned_ani.gif',false, 'Stunned');
this._addSmiley(typeSetting,':`(','smiley_crying_ani.gif',false, 'Crying');
this._addSmiley(typeSetting,':-$','smiley_shy_ani.gif',false, 'Shy');
this._addSmiley(typeSetting,'(h)','smiley_cool_ani.gif',false, 'Cool');
this._addSmiley(typeSetting,':-@','smiley_angry_ani.gif',false, 'Angry');
this._addSmiley(typeSetting,':-#','smiley_mute_ani.gif',false, 'Mute');
this._addSmiley(typeSetting,'8o|','smiley_rage_ani.gif',false, 'Rage');
this._addSmiley(typeSetting,':-/','smiley_thinking_ani.gif',false, 'Thinking');
this._addSmiley(typeSetting,'<:)','smiley_party_ani.gif',false, 'Party');
this._addSmiley(typeSetting,'8-|','smiley_nerd_ani.gif',false, 'Nerd');
this._addSmiley(typeSetting,'*-)','smiley_wondering_ani.gif',false, 'Wondering');
this._addSmiley(typeSetting,'8-)','smiley_looking_ani.gif',false, 'Looking');
this._addSmiley(typeSetting,'|-0','smiley_sleepy_ani.gif',false, 'Sleepy');
this._addSmiley(typeSetting,'(A)','smiley_angel_ani.gif',false, 'Angel');
this._addSmiley(typeSetting,'(hh)','smiley_cool2_ani.gif',true, 'Cool2');
this._addSmiley(typeSetting,'8|D','smiley_loon_ani.gif',true, 'Loon');
this._addSmiley(typeSetting,'|-H','smiley_yelling_ani.gif',true, 'Yelling');
this._addSmiley(typeSetting,'|-)','smiley_ninja_ani.gif',true, 'Ninja');
this._addSmiley(typeSetting,'.-)','smiley_pirate_ani.gif',true, 'Pirate');
this._addSmiley(typeSetting,'v-|','smiley_sad_ani.gif',true, 'Sad');
this._addSmiley(typeSetting,'o_O','smiley_wierd_ani.gif',true, 'Wierd');
this._addSmiley(typeSetting,'><|','smiley_realsad_ani.gif',true, 'Realsad');
this._addSmiley(typeSetting,'O->','smiley_alien_ani.gif',true, 'Alien');
this._addSmiley(typeSetting,':<>','smiley_duck_ani.gif',true, 'Duck');


this._addSmiley(typeSetting,'(yes)','smiley_yes_ani.gif',true, 'Yes');
this._addSmiley(typeSetting,'(no)','smiley_no_ani.gif',true, 'No');
this._addSmiley(typeSetting,'(old)','smiley_granddaddy_ani.gif',true, 'Granddaddy');
this._addSmiley(typeSetting,'(spin)','smiley_spinaround_ani.gif',true, 'Spinaround');
this._addSmiley(typeSetting,'(tmnt)','smiley_ninjaturtle_ani.gif',true, 'TNMT');


this._addSmiley(typeSetting,'(music)','smiley_musiclistning_ani.gif',true, 'Musiclistning');
this._addSmiley(typeSetting,'(hair)','smiley_hair_ani.gif',true, 'Hair');
this._addSmiley(typeSetting,'(excited)','smiley_excited_ani.gif',true, 'Excited');
this._addSmiley(typeSetting,'(hugesmile)','smiley_hugesmile_ani.gif',true, 'Hugesmile');
this._addSmiley(typeSetting,'(hugeeyes)','smiley_hugeeyes_ani.gif',true, 'Hugeeyes');


this._addSmiley(typeSetting,'(clown)','smiley_clown_ani.gif',true, 'Clown');
this._addSmiley(typeSetting,'(devil)','smiley_devil_ani.gif',true, 'Devil');
this._addSmiley(typeSetting,'(lol)','smiley_lol_ani.gif',true, 'Laughingoutloud');
this._addSmiley(typeSetting,'(sleep)','smiley_sleeping_ani.gif',true, 'Sleeping');
this._addSmiley(typeSetting,'(waving)','smiley_waving_ani.gif',true, 'Waving');


this._addSmiley(typeSetting,'(dumb)','smiley_dumb_ani.gif',true, 'DumbAss');
this._addSmiley(typeSetting,'(eyebrow)','smiley_eyebrow_ani.gif',true, 'Eyebrows');
this._addSmiley(typeSetting,'(police)','smiley_police_ani.gif',true, 'Policeman');
this._addSmiley(typeSetting,'(freeze)','smiley_freeze_ani.gif',true, 'Freezing');
this._addSmiley(typeSetting,'(zip)','smiley_zip_ani.gif',true, 'Zipit');



this._addSmiley(typeSetting,'(Y)','stuff_thumbsup_ani.gif',false, 'Thumbsup');
this._addSmiley(typeSetting,'(N)','stuff_thumbsdown_ani.gif',false, 'Thumbsdown');
this._addSmiley(typeSetting,'(yn)','stuff_fingerscrossed_ani.gif',false, 'CrossedFingers');
this._addSmiley(typeSetting,'(clap)','stuff_clapinghands_ani.gif',true, 'Clapinghands');
this._addSmiley(typeSetting,'(peace)','stuff_peacefingers_ani.gif',true, 'PeaceFingers');
this._addSmiley(typeSetting,'(point)','stuff_pointfinger_ani.gif',true, 'Pointingfinger');
this._addSmiley(typeSetting,'(wave)','stuff_wavinghand_ani.gif',true, 'Wavinghand');

this._addSmiley(typeSetting,'(L)','stuff_heart_ani.gif',false, 'Heart');
this._addSmiley(typeSetting,'(U)','stuff_heartbroken_ani.gif',false, 'Heart broken');
this._addSmiley(typeSetting,'(Z)','stuff_man_ani.gif',false, 'Man');
this._addSmiley(typeSetting,'(X)','stuff_woman_ani.gif',false, 'Woman');
this._addSmiley(typeSetting,'({)','stuff_manhug_ani.gif',false, 'Manhug');
this._addSmiley(typeSetting,'(})','stuff_womanhug_ani.gif',false, 'Womanhug');
this._addSmiley(typeSetting,'(K)','stuff_kiss_ani.gif',false, 'Kiss');

this._addSmiley(typeSetting,'(&)','stuff_dog_ani.gif',false, 'Dog');
this._addSmiley(typeSetting,'(@)','stuff_cat_ani.gif',false, 'Cat');
this._addSmiley(typeSetting,':-[','stuff_bat_ani.gif',false, 'Bat');
this._addSmiley(typeSetting,'(bah)','stuff_sheep_ani.gif',false, 'Sheep');
this._addSmiley(typeSetting,'(tu)','stuff_turtle_ani.gif',false, 'Turtle');
this._addSmiley(typeSetting,'(sn)','stuff_snail_ani.gif',false, 'Snail');
this._addSmiley(typeSetting,'(ch)','stuff_chicken_ani.gif',true, 'Chicken');

this._addSmiley(typeSetting,'(D)','stuff_drink_ani.gif',false, 'Drink');
this._addSmiley(typeSetting,'(B)','stuff_beer_ani.gif',false, 'Beer');
this._addSmiley(typeSetting,'(C)','stuff_coffee_ani.gif',false, 'Coffee');

this._addSmiley(typeSetting,'(^)','stuff_birthdaycake_ani.gif',false, 'Birthdaycake');
this._addSmiley(typeSetting,'(pi)','stuff_pizza_ani.gif',false, 'Pizza');


this._addSmiley(typeSetting,'(bu)','stuff_burger_ani.gif',true, 'Burger');
this._addSmiley(typeSetting,'(dn)','stuff_doughnut_ani.gif',true, 'Doughnut');
this._addSmiley(typeSetting,'(fr)','stuff_frenchfries_ani.gif',true, 'Frenchfries');
this._addSmiley(typeSetting,'(ic)','stuff_icecream_ani.gif',true, 'Icecream');
this._addSmiley(typeSetting,'(sd)','stuff_softdrink_ani.gif',true, 'Softdrink');

this._addSmiley(typeSetting,'(||)','stuff_bowl_ani.gif',false, 'Bowl');
this._addSmiley(typeSetting,'(pl)','stuff_plate_ani.gif',false, 'Plate');

this._addSmiley(typeSetting,'(g)','stuff_gift_ani.gif',false, 'Gift');
this._addSmiley(typeSetting,'(o)','stuff_time_ani.gif',false, 'Watch');
this._addSmiley(typeSetting,'(8)','stuff_music_ani.gif',false, 'Music');
this._addSmiley(typeSetting,'(I)','stuff_lightbulp_ani.gif',false, 'Lightbulb');
this._addSmiley(typeSetting,'(F)','stuff_rose_ani.gif',false, 'Rose');
this._addSmiley(typeSetting,'(W)','stuff_rosedying_ani.gif',false, 'Rosedead');
this._addSmiley(typeSetting,'(ci)','stuff_cigarette_ani.gif',false, 'Cigarette');
this._addSmiley(typeSetting,'(T)','stuff_telephone_ani.gif',false, 'Telephone');
this._addSmiley(typeSetting,'(mp)','stuff_mobile_ani.gif',false, 'Cellphone');
this._addSmiley(typeSetting,'(P)','stuff_camera_ani.gif',false, 'Camera');
this._addSmiley(typeSetting,'(e)','stuff_letter_ani.gif',false, 'Letter');
this._addSmiley(typeSetting,'(~)','stuff_filmscroll_ani.gif',false, 'MovieRoll');
this._addSmiley(typeSetting,'(um)','stuff_umbrella_ani.gif',false, 'Umbrella');

this._addSmiley(typeSetting,'(%)','stuff_handcuffs_ani.gif',false, 'Handcuffs');

this._addSmiley(typeSetting,'(so)','stuff_football_ani.gif',false, 'Football');
this._addSmiley(typeSetting,'(nba)','stuff_basketball_ani.gif',true, 'Basketball');
this._addSmiley(typeSetting,'(bb)','stuff_beachball_ani.gif',true, 'Beachball');

this._addSmiley(typeSetting,'(ip)','stuff_palms_ani.gif',false, 'Island');
this._addSmiley(typeSetting,'(au)','stuff_car_ani.gif',false, 'Car');
this._addSmiley(typeSetting,'(ap)','stuff_plane_ani.gif',false, 'Plane');

this._addSmiley(typeSetting,'(r)','stuff_rainbow_ani.gif',false, 'Rainbow');
this._addSmiley(typeSetting,'(st)','stuff_rain_ani.gif',false, 'Rain');
this._addSmiley(typeSetting,'(#)','stuff_sun_ani.gif',false, 'Sun');
this._addSmiley(typeSetting,'(*)','stuff_star_ani.gif',false, 'Star');
this._addSmiley(typeSetting,'(S)','stuff_moon_ani.gif',false, 'Moon');
this._addSmiley(typeSetting,'(gl)','stuff_world_ani.gif',true, 'World');

this._addSmiley(typeSetting,'(fl)','stuff_flag' + chatVars.langshort  + '_ani.gif',true, 'Flag');

this._addSmiley(typeSetting,'(d1)','stuff_dice1_ani.gif',true, 'Dice1');
this._addSmiley(typeSetting,'(d2)','stuff_dice2_ani.gif',true, 'Dice2');
this._addSmiley(typeSetting,'(d3)','stuff_dice3_ani.gif',true, 'Dice3');
this._addSmiley(typeSetting,'(d4)','stuff_dice4_ani.gif',true, 'Dice4');
this._addSmiley(typeSetting,'(d5)','stuff_dice5_ani.gif',true, 'Dice5');
this._addSmiley(typeSetting,'(d6)','stuff_dice6_ani.gif',true, 'Dice6');


this._addSmiley(typeSetting,'(candy)','stuff_candy_ani.gif',true, 'Candy');
this._addSmiley(typeSetting,'(chgift)','stuff_christmasgift_ani.gif',true, 'Christmas Gift');
this._addSmiley(typeSetting,'(chtree)','stuff_christmastree_ani.gif',true, 'Christmas Tree');
this._addSmiley(typeSetting,'(duck)','stuff_duck_ani.gif',true, 'Duck');
this._addSmiley(typeSetting,'(fw)','stuff_fireworks_ani.gif',true, 'Fireworks');
this._addSmiley(typeSetting,'(ice)','stuff_icecube_ani.gif',true, 'Icecube');
this._addSmiley(typeSetting,'(orange)','stuff_orange_ani.gif',true, 'Orange');
this._addSmiley(typeSetting,'(snow)','stuff_snow_ani.gif',true, 'Snow');
this._addSmiley(typeSetting,'(pin)','stuff_pinguin_ani.gif',true, 'Penguin');
this._addSmiley(typeSetting,'(santa)','stuff_santa_ani.gif',true, 'Santa');
this._addSmiley(typeSetting,'(snowman)','stuff_snowman_ani.gif',true, 'Snowman');

this._addSmiley(typeSetting,'(cas)','stuff_cancer_ani.gif',false, 'Cancer Awareness Support');
}







IMChatController.prototype._emailErrors = true;

IMChatController.prototype._invitationDelivered = false;
IMChatController.prototype._IMsPending = new Array();

IMChatController.prototype._newIMSoundPlayed = new Array();
IMChatController.prototype._newMsgSoundPlayed = new Array();
IMChatController.prototype._imMsgBlinkTimers = new Array();
IMChatController.prototype._imWindowBlurred = false;
IMChatController.prototype._imOrigTitle = '';

IMChatController.prototype._IMWindows = new Array();

function IMChatController() {
var theController = this;
var loginSuccess = function (javaUserObject) {



if (chatVars.showPopup) {


theController.checkForCachedMessages(javaUserObject.getName());


window.self.setInterval(function () {
theController.checkForCachedMessages(javaUserObject.getName());
}, 1000*60*60);

window.self.setInterval(function () {
theController.showIMsPending();
}, 6500);
}

}


$.subscribe('connection.im.finished', loginSuccess);
}

IMChatController.prototype.sendInvitation = function (receiverUsername, senderUsername, roomName) {
chatController.appletHandler.getApplet().imInvite(receiverUsername, roomName);


}

IMChatController.prototype.imInvitationDelivered = function (username, roomname) {


this._invitationDelivered = true;


}



IMChatController.prototype.imDisplayPopup = function (sendingJavaUserObject, roomName) {

try {

var senderUsername = sendingJavaUserObject.getName();
var senderIsMale = sendingJavaUserObject.isMale();
var senderIsVip = sendingJavaUserObject.isVip();

var theChatVars = chatVars;
var theIMController = this;

if (senderUsername != undefined) {

var msgHolder = $('#msgHolder');

if (msgHolder.length) {

var myPopupWrapper = $('#chatIMPopup' + roomName, msgHolder);

if (!myPopupWrapper.length) {
msgHolder.append('<div id="chatIMPopup' + roomName + '" class="chatIMPopup"></div>');

myPopupWrapper = $('#chatIMPopup' + roomName, msgHolder);
if (myPopupWrapper.length) {

myPopupWrapper.html('<div class="themewrapper" id="ThemedBox1" style="width:280px;"><div class="outerbox" style="width:280px;"><div class="headerbar header_blue"></div><div class="header_blue_leftside"></div><div class="header_blue_rightside"></div><div class="lightborder"><div class="darkborder"><!--INNER CONTENT  - START--><div class="contentwrapper_blue innerwrapper"><div class="topgradient"></div><div id="ThemedBox1ContentWrapper"> <!--Formerly ID was "boxthemecontainer", which was no good, since many boxes may exist...--><div class="popupBody"><div class="profilePicWrapper"><div class="profilePicBorder"><img src="http://www.spielmit.com/images/profiles/noimage200x150_male.gif" width="64" height="49" alt="" /></div><div class="profilePicBottomBorder"></div></div><div class="iconWrapper"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -109px;"></div></div></div><div class="chatIMPopupMessage textWrapper size12white"></div></div><div style="clear:both;"></div></div></div><!--INNER CONTENT  - END--><div style="clear:both;"></div></div></div><!--TABBED MENU - START--><div class="headerbar menu_blue"><div class="lefticon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -19px;"></div></div></div><div class="iconpad topmargin"><div class="popudHeader"><div class="size11white popudHeaderUsername"><strong></strong></div><div class="popupHeaderCloseIcon"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-21px -271px;"></div></div></div><div style="clear:both;"></div></div><div style="clear:both"></div></div><!--[if IE 6]><style></style><![endif]--></div><!--TABBED MENU - END--></div></div>');





var chatIconHtml = '';
if (chatController) {
chatIconHtml = chatController.userHandler.getChatIconHtml(sendingJavaUserObject);
}
$('div.lefticon', myPopupWrapper).html(chatIconHtml);


$('div.popupHeaderCloseIcon', myPopupWrapper).unbind('click.chatBoxIMEvents').bind('click.chatBoxIMEvents', function() {

chatController.appletHandler.getApplet().imDeclineInvitation(sendingJavaUserObject, roomName);
myPopupWrapper.hide();



theIMController.removeFromIMsPending(roomName);
theIMController.uncacheMessages(theChatVars.selfUsernameUrlready, roomName);
theIMController.showIMsPending();
});


$('div.popudHeaderUsername > strong', myPopupWrapper).text(senderUsername);




if (chatController) {

var theController = chatController;
theController.replaceImPopupProfilePicUrl(senderUsername, myPopupWrapper);



var replacementText = senderUsername + ' ' + theController.lang.getText('F140') + ' <span class="underlined">' + theController.lang.getText('F141') + '</span>';
$('div.chatIMPopupMessage', myPopupWrapper).html(replacementText).unbind('click.chatBoxIMEvents').bind('click.chatBoxIMEvents', function() {

theIMController.openImWindow(senderUsername, theChatVars.selfUsernameUrlready);
chatController.appletHandler.getApplet().imAcceptInvitation(sendingJavaUserObject, roomName);

myPopupWrapper.slideUp(300);



theIMController.removeFromIMsPending(roomName);
theIMController.showIMsPending();
});
}
}
}

if (myPopupWrapper.length) {

myPopupWrapper.slideDown(1500);

}

} else {
if (chatController) {
chatController.graphics.showIMInviteBox(sendingJavaUserObject, senderUsername, senderIsMale, senderIsVip, roomName);
}
}
}
} catch (e) {


}
}


IMChatController.prototype.openImWindow = function (senderUsername, receiverUsername) {
$(document).ready(function() {
if (chatVars.showPopup) {
senderUsername = senderUsername + '';
receiverUsername = receiverUsername + '';


var namesArray = new Array(senderUsername, receiverUsername);
namesArray.sort();

var roomname = 'IM' + namesArray[0] + namesArray[1];



var w= 510;
var h = 430;
if (screen.width) { 
var winl = (screen.width-w)/2;
var wint = (screen.height-h)/2;
} else {
winl = 0;
wint = 0;
}
if (winl < 0) {
winl = 0;
}
if (wint < 0) {
wint = 0;
}
settings = 'scrollbars = 0,resizable = 0,width=' + w + ',height=' + h + ',top=' + wint + ',left=' + winl + ',status=1';



var theIMController = imChatController;

if (theIMController._IMWindows.length) {

for (var index = 0; index < theIMController._IMWindows.length ; index++) {

var theWindow = theIMController._IMWindows[index];

if (theWindow.closed) {

theWindow = null;
break;

} else if (theWindow.name == roomname) {
break;

} else {
theWindow = null;
}
}
} else {
var theWindow = null;
}

if (theWindow == null) {
theIMController._IMWindows[theIMController._IMWindows.length] = window.self.open('/im/messenger.php?receiverid=' + receiverUsername + '&room=' + roomname + '', roomname, settings);
} else {
theWindow.focus();
}

} else {
alert(chatController.lang.getText('F91'));
}
});
}

IMChatController.prototype.showIMsPending = function () {

if (this._IMsPending.length > 0) {

var msgHolder = $('#msgHolder');
msgHolder.show();

for (var key in this._IMsPending) {

var theElem = this._IMsPending[key];
if (theElem != null && typeof(theElem) == 'object' && theElem.theUserObject && theElem.theRoomName) {

this.imDisplayPopup(theElem.theUserObject, theElem.theRoomName);
}
}


this.playNewIMSound(msgHolder);
} else {
this.resetNewIMSoundCounter();
}
}
IMChatController.prototype.removeFromIMsPending = function (roomName) {
for (var index in this._IMsPending) {
if (this._IMsPending[index] != null && this._IMsPending[index].theRoomName == roomName) {
this._IMsPending[index] = null;
}
}
}
IMChatController.prototype.addToIMsPending = function (sendingJavaUserObject, roomName) {


if (!(chatTools.inArray(chatVars.ignoreArray, sendingJavaUserObject.getName()))) {


for (var index in this._IMsPending) {
if (this._IMsPending[index] != null && this._IMsPending[index].theRoomName == roomName) {
return;
}
}


var theObject = {theUserObject : sendingJavaUserObject, theRoomName : roomName};
this._IMsPending.unshift(theObject);
this.resetNewIMSoundCounter();
}
}



IMChatController.prototype.playNewIMSound = function(htmlElem) {

if (chatSettings.playIMSounds()) {

var noOfPlays = 1;

if (this._newIMSoundPlayed['roomName'] == undefined) {
this.resetNewIMSoundCounter();
}
if (this._newIMSoundPlayed['roomName'] < noOfPlays) {
this._newIMSoundPlayed['roomName']++;

var soundHtml = '<bgsound class="imPopupSound" src="' + chatVars.absroot + '/sounds/online01.wav">';
htmlElem.after(soundHtml);
}
}
}

IMChatController.prototype.resetNewIMSoundCounter = function() {
this._newIMSoundPlayed['roomName'] = 0;
}

IMChatController.prototype.playNewMsgSound = function(roomName) {
if (chatSettings.playIMSounds() && this._newMsgSoundPlayed[roomName] != true) {
this._newMsgSoundPlayed[roomName] = true;

$('html').append('<bgsound class="imPopupSound" src="' + chatVars.absroot + '/sounds/message02.wav">');
}
}
IMChatController.prototype.resetNewMsgSoundPlayed = function(roomName) {

if (chatSettings.playIMSounds()) {
this._newMsgSoundPlayed[roomName] = null;
}
}




IMChatController.prototype.blinkIMWindowTitle = function (roomName, unblink) {

if (roomName.length) {
var usableTimerKey = roomName;

if (!this._imOrigTitle.length) {
this._imOrigTitle = document.title;
}

if (unblink == true) {


var timeoutId = this._imMsgBlinkTimers[usableTimerKey];
if (timeoutId != undefined) {
window.self.clearTimeout(timeoutId);

document.title = this._imOrigTitle;
}
} else {


var timeoutId = this._imMsgBlinkTimers[usableTimerKey];
if (timeoutId != undefined) {
window.self.clearTimeout(timeoutId);
}



if (document.title == this._imOrigTitle) {
document.title = chatController.lang.getText('F148');
} else {
document.title = this._imOrigTitle;
}


this._imMsgBlinkTimers[usableTimerKey] = window.self.setTimeout('imChatController.blinkIMWindowTitle("' + roomName + '")', 1000);
}
}
}



IMChatController.prototype.acceptInvitation = function (sendingJavaUserObject, roomName) {
chatController.appletHandler.imAcceptInvitation(sendingJavaUserObject, roomName);
}
IMChatController.prototype.declineInvitation = function (sendingJavaUserObject, roomName) {
chatController.appletHandler.imDeclineInvitation(sendingJavaUserObject, roomName);
}
IMChatController.prototype.imInvitationAccepted = function (username, roomName) {

}


IMChatController.prototype.imInvitationCanceled = function (username, roomName, reason) {

var msgHolder = $('#chatIMPopup' + roomName);

if (msgHolder.length) {
msgHolder.slideUp(300);
}

this.removeFromIMsPending(roomName);

this.showIMsPending();
}

IMChatController.prototype.imInvitationDeclined = function (username, roomName) {




}

IMChatController.prototype.imInvitationFailed = function (username, reason) {

if (chatController) {

if (reason == 1) {
chatController.messageFromIM(chatController.lang.getText('F71'));
} else if (reason == 0) {



}
}

}




IMChatController.prototype.cacheTypedMessage = function (receiverUsername, senderUsername, cleanMessage, messageRowHtml, roomName) {

if (chatController) {

$.get(chatVars.absroot + "/ajax/chat_ajax_msgcaching.php",
{
theSenderUsername : senderUsername,
theReceiverUsername : receiverUsername,
theRoomName : roomName,
theMessage : encodeURI(cleanMessage),
theRowHtml : encodeURI(messageRowHtml),
theAction : 'imCacheMessage',
trigger : 'ChatIMHandling'
}
);
}
}
IMChatController.prototype.uncacheMessages = function (receiverUsername, roomName) {

if (chatController) {

$.get(chatVars.absroot + "/ajax/chat_ajax_msgcaching.php",
{
theReceiverUsername : receiverUsername,
theRoomName : roomName,
theAction : 'imUncacheMessages',
trigger : 'ChatIMHandling'
}
);
}
}


IMChatController.prototype.checkForCachedMessages = function (receiverUsername, roomName, returnMessages) {

var theIMController = this;
var returnMessages = (returnMessages == undefined ? false : true);

$.getJSON(chatVars.absroot + "/ajax/chat_ajax_msgcaching.php",
{
theReceiverUsername : receiverUsername,
theRoomName : (roomName == undefined ? '' : roomName),
theAction : 'imGetCachedMessages',
flushAndGet : (returnMessages ? 1 : 0),
trigger : 'ChatIMHandling'
},


function (data) {

if (data && data.length) {
$.each(data, function(index, messageObject) {


var receiverUsername = messageObject.run;
var senderUsername = messageObject.sun;
var cleanMessage = messageObject.cm;
var rowHtml = decodeURI(messageObject.rml);
var roomName = messageObject.r;

var currentSenderUsername = '';


if (!returnMessages && currentSenderUsername != senderUsername && chatController) {
currentSenderUsername = senderUsername;


chatController.registerEventListener('imLookupUserByName', currentSenderUsername, roomName);

var theApplet = chatController.appletHandler.getApplet();
theApplet.imLookupUserByName(currentSenderUsername);


} else if (returnMessages && chatController && rowHtml.length) {


chatController.graphics.addChatRow(rowHtml, roomName);
}
});
}
}
);
}




IMChatController.prototype.deriveReceiverUsername = function (roomName, senderUsername) {


var receiverUsername = roomName.substr(2);


var receiverUsername = receiverUsername.replace(senderUsername, '');


return receiverUsername;
}


IMChatController.prototype._sendError = function(dump) {


if (this._emailErrors) {
var version = chatController.appletHandler.getApplet().getSystemProperty("java.version");
var vendor = chatController.appletHandler.getApplet().getSystemProperty("java.vendor");
var browser_type = navigator.appName;
var browser_version = navigator.appVersion;

$.get(chatVars.absroot + "/chat/error.php?dump=EXCEPTION: " + dump + ":BROWSER_TYPE:" + browser_type + ":BROWSER_NAME:" + browser_version);
this._emailErrors = false;


}
}


