
 

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() {

var myself = this;

$(document).ready(function () {
myself.STATE = chatVars.chatState;
myself.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 (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) {
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('');
}





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.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.parents(':first');
var heightAdjustment = 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.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;

theTextarea.width(newWidth - bordersMarginsWidth);
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.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="http://www.playtopia.no/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', "http://www.playtopia.no/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 ? 'http://www.playtopia.no/images/tokenshop/button_subtract.png' : 'http://www.playtopia.no/images/tokenshop/button_subtractGrey.png');
$('div#return1button > img', this.chatBoxContentElem).attr('src', url);


var url = (tokenPrice <= tokensOwned ? 'http://www.playtopia.no/images/tokenshop/button_add.png' : 'http://www.playtopia.no/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('http://www.playtopia.no/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();

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

} 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.readySmileyBoxes = function () {

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

if (smileyPagesElem.children().length === 0) {
var drawnSmileyBoxes = theController.smileyHandler.drawSmileyBoxes();
chatboxObject.replaceHtml(smileyPagesElem, drawnSmileyBoxes);
}

if (stuffPagesElem.children().length === 0) {
var drawnStuffBoxes = theController.smileyHandler.drawStuffBoxes();
chatboxObject.replaceHtml(stuffPagesElem, drawnStuffBoxes);
}


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() : '');

var ownUserObject = theController.userHandler.getCurrent()._chatUserObject;

if (smileyObject.isVIPOnly() && !ownUserObject.isVip()) {

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

theTextarea = null; 
currentMessage = null; 
smileyNickname = null; 
smileyObject = null; 
ownUserObject = null; 
});



smileyBottom = null; 
smileyPagesElem = null; 
stuffPagesElem = null; 
drawnSmileyBoxes = null; 
drawnStuffBoxes = null; 
}


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() {


document.getElementById('typedMessage').value = '';
}, 50);
}


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




ChatGraphics.prototype.preLoginSetup = function() {
var theGraphics = this;
var theController = chatController;
var theSettings = chatSettings;
var writeBoxFront = $('#writeboxFront', theGraphics.chatBoxContentElem);




var profileCloseLink = $('div.submenuwrapperProfile > div.closeLink, ', theGraphics.chatBoxElem);
profileCloseLink.bind('click.chatBoxEvents', function() {
theGraphics.hideProfileTab();
});
profileCloseLink = null; 








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; 






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; 




$('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.flushUserTabEvent();
theGraphics.flushUserRowEvents();
theGraphics.addUserTabEvent();
theGraphics.addUserRowEvents();





theGraphics.flushRoomEvents();
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;
defaultRankVis = 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; 




theGraphics.setBoxDimensions();


theGraphics.adaptSubareaCSS();


theGraphics.resetTypedMessage();


var innerWrapper = $('div.innerwrapper', theGraphics.chatBoxElem);
var chatareaGeneral = $('div.chatareaGeneral', theGraphics.chatBoxContentElem);
var firstBacklink = $('div.submenuwrapperChat > div.backLink:first', theGraphics.chatBoxElem);

innerWrapper.show();
chatareaGeneral.show();
firstBacklink.hide();

innerWrapper = null; 
chatareaGeneral = null; 
firstBacklink = null; 

theGraphics.hideProfileTab();
theGraphics.hideSignupTab();




theGraphics.setupDropdownMenu();


if (theGraphics._useDropdownSettings) {

var generalSettingsItem = $('#dropmenuitemGeneral', theGraphics.chatBoxElem);
var chatIconSettingsItem = $('#dropmenuitemChaticons', theGraphics.chatBoxElem);

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 chatTab = $('div.menuitem:first', this.chatBoxElem);
globalThemeboxMenuitemToggler.switchTo(chatTab);
chatTab = null;

var anySubareasVisible = $('div.subareaContainer > div.subarea:visible', this.chatBoxContentElem).length;
if (!anySubareasVisible) {

var firstSubmenu = $('div.submenuwrapper:first', this.chatBoxElem);
var firstSubmenuItem = $('div.submenuwrapper div.menuitemChat:last-child', this.chatBoxElem);
var firstSubareaContainer = $('div.subareaContainer:first', this.chatBoxContentElem);
var firstSubarea = $('div.subareaContainer div.subarea:first-child', this.chatBoxContentElem);

firstSubmenu.show();
firstSubmenuItem.addClass('menuitemChatCurrent');
firstSubareaContainer.show();
firstSubarea.show();

firstSubmenu = null; 
firstSubmenuItem = null; 
firstSubareaContainer = null; 
firstSubarea = null; 
}
anySubareasVisible = null;

 
if (theSettings.isMultiplayerChat() || theSettings.isInstantMessenger()) {

this.disableRoomSwitching();

if (theSettings.isInstantMessenger()) {

window.self.setTimeout(function () {

if (window.self.focus) {window.self.focus()}
theGraphics.textAreaElem.focus();

}, 1);
}
}


if (theSettings.isInstantMessenger()) {

$(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);
}
}
});
}


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');
});
backButton = null;


var closeLinks = $('div.submenuwrapper > div.closeLink', this.chatBoxElem);
closeLinks.bind('click.chatBoxEvents', function() {
toggleToChatBox();
theGraphics.switchToSubarea('subareaChatTab');
});
closeLinks = null;

generalSettingsTabOnly = null;
}


ChatGraphics.prototype.setupDropdownMenu = function () {

var theGraphics = this;

var wrenchIconTab = $('#chatheadericonWrench', this.chatBoxElem);
var wrenchIconTabBG = wrenchIconTab.children(':first');
var dropdown = $('div.moredropmenu', wrenchIconTab);

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.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.emptyChatbox = function (roomName) {

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

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

} else {

var theElem = $('div.subareaContainer > div.subareaChatTab > div.chatarea' + roomName, this.chatBoxContentElem);
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 > 0) {


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 || 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) {

if (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="..." 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;


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) {
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.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();
$('#actionIncarcerate', subareaProfileTab).unbind('click.chatBoxEvents').hide();
$('#actionRelease', 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 (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.isJailRoom() && !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();
}
});

if (chatController._jailOnline) {

if (profileInfoObject.isInmate) {
$('#actionRelease', subareaProfileTab).show().bind('click.chatBoxEvents', function () {
theController.handleReleaseFromJail(profileInfoObject.username);
});

} else {
$('#actionIncarcerate', subareaProfileTab).show().bind('click.chatBoxEvents', function () {
theController.handleIncarceration(profileInfoObject.username);
});
}
}
}
}

}
}


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 ', '');
theMessage = this._wordwrap(theMessage);

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) {


var indexOfFirstSpace = theMessage.indexOf(' ');
var username = theMessage.substring(0, indexOfFirstSpace);
var uidClass = '';


var theChatter = chatController.userHandler.getChatter(username);
if (theChatter !== false) {
var usernameHtml = this.buildColouredUsername(theChatter);
theMessage = usernameHtml + theMessage.substr(indexOfFirstSpace + 1);
uidClass = (' uid' + theChatter.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 stringsAr = new Array('<div class="chatRow',
(javaSenderUserObject.isMale() ? ' chatRowMale' : ' chatRowFemale'),
'">',
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),
'<span class="adminMessage"><strong>',
theMessage,
'</strong></span></div></div>');
return stringsAr.join('');
}
}


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

var chatIconHtml =theController.userHandler.getChatIconHtml(javaUserObject);
var rankIconHtml =theController.userHandler.getRankIconHtml(javaUserObject);
var linkClass =theController.userHandler.getLinkClassFromGender(javaUserObject.isMale());
var adminString =(adminVersion === true ? ' (' + theController.lang.getText('F110') + ')' : '');

var popupHtml = '<div class="chatIcon popupPlaceholder uid' + javaUserObject.getId() + '">' + chatIconHtml + '</div>';

var stringsAr = new Array(
popupHtml,
'<div class="chatName ',
linkClass,
'">',
javaUserObject.getName(),
'</span></div>',
adminString,
rankIconHtml,
'<span class="',
linkClass,
'">',
(noColon !== undefined ? '' : '<strong>:</strong>'),
'</span> ',
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="#" class="button s12 s12_green fixed" style="width: 177px;"><span class="slider"><span class="text">Opprett gratis bruker</span></span></a></div></div></div></div>'
);

return stringsAr.join('');
}

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>' : '');

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="/images/tokenshop/productimages/',
imageUrl,
'" /><div id="productValueWrapper"><span>',
theController.lang.getText('F13'),
'</span><br /><span class="moneyValue"><strong>',
chatTools.separateThousands(price),
',-</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="http://www.playtopia.no/images/tokenshop/button_add.png" title="+" width="39" height="24" /></div><div id="return1button"><img src="http://www.playtopia.no/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="http://www.playtopia.no',
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">Få 5% ekstra bonus!</span></span></a></div>';
}
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="http://www.playtopia.no/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>';
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>';
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) {

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 leftIconsHtml = buildIconHtml(leftIconsAr, 'left');
var rightsIconHtml = buildIconHtml(rightIconsAr, 'right', rightIconClassesAr);

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


ChatMessageHandler.prototype.buildClosableChatNewsItem = function (shortMsgHtml, leftIconsAr) {
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']
);
}



ChatMessageHandler.prototype.buildJailJoinMessage = function (inmateVersion) {

var theController = chatController;


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


var text = (inmateVersion ? theController.lang.getText('F161') : theController.lang.getText('F162'));

var stringsAr = new Array (
'<div class="chatRow chatRowBlackBox" id="jailBoxWrapper"><div class="innerWrapper"><div class="blackBoxHeader"><div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-221px -415px;"></div></div><div class="blackBoxHeaderText">&nbsp;<strong>',
theController.lang.getText('F158'),
'</strong></div><div style="clear:both;"></div></div><div class="blackBoxBody size11black">',
text,
'<a href="http://www.playtopia.no/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.isJailRoom()) {

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.isJailCommand = function (theMessage) {
return theMessage.indexOf('/prison') == 0;
};
ChatMessageHandler.prototype.isInfoMessage = function (theMessage) {
return theMessage.indexOf('/info') == 0;
};


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

var username;


switch (commandName) {
case 'jail' :
var command = '/prison ';break;
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;
}




function ChatAutoMessageHandler() {}

ChatAutoMessageHandler.prototype.timer = null;
ChatAutoMessageHandler.prototype.messageStack = new Array();

ChatAutoMessageHandler.prototype.endCurrentMessage = function () {


if (this.messageStack.length > 0) {

var theMessage = this.messageStack.shift();

this.timer = window.self.setTimeout(function () {theMessage.runOnEnd();}, (theMessage.lifetime*60*1000));

if (theMessage.doNotRepeat !== true) {
this.messageStack.push(theMessage);
}
}
}

ChatAutoMessageHandler.prototype.startNextMessage = function () {


if (this.messageStack.length > 0) {


var currentMessage = this.messageStack.shift();
this.messageStack.unshift(currentMessage);


currentMessage.runOnStart();
}
}


ChatAutoMessageHandler.prototype.start = function (mode) {


window.self.clearTimeout(this.timer);
this.messageStack = new Array();


if (mode === 'guest') {
this.addGuestmodeMessages();
} else if (mode === 'singleplayer') {
this.addSingleplayermodeMessages();
}


if (this.messageStack.length > 0) {


var currentMessage = this.messageStack.shift();
this.messageStack.unshift(currentMessage);


currentMessage.runOnStart();
}
}

ChatAutoMessageHandler.prototype.addMessage = function (autoMessageObject) {
this.messageStack.push(autoMessageObject);
}



ChatAutoMessageHandler.prototype.createAutoMessage = function (theStartFunc, theEndFunc, theLifetime, showJustOnce) {

var theId = this.messageStack.length + 1;

var theAutoMessage = {
id : theId,
start : theStartFunc,
end : theEndFunc,
lifetime : theLifetime,
doNotRepeat : showJustOnce,

runOnEnd : function () {
if (typeof(this.end) === 'function') {
this.end();
}

chatController.autoMessageHandler.startNextMessage();
},
runOnStart : function () {

if (this.id !== null && this.lifetime !== null && (typeof(this.start) === 'function')) {
this.start();

chatController.autoMessageHandler.endCurrentMessage();
}
}
};
this.addMessage(theAutoMessage);
}



ChatAutoMessageHandler.prototype.addGuestmodeMessages = function () {

this.createAutoMessage(function () {chatController.graphics.replaceGuestWelcomeMessage();}, null, 3, true);

this.createAutoMessage(function () {chatController.requestTokenshopDrawingMessage();}, null, 5);
}

ChatAutoMessageHandler.prototype.addSingleplayermodeMessages = function () {

this.createAutoMessage(function () {chatController.requestBadgeMessage();}, null, 1, true);

this.createAutoMessage(function () {chatController.requestTokenshopDrawingMessage();},
function () {chatController.graphics.removeTokenshopMessage()}, 5);
}




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();



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 (chatSettings.isTournament()) {

var prettyName = theLang.getText('F93');

} else {

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

if (searchReg > 0) {
var posReg = searchReg + 4;
if (firstColonPos > 0) {

var prettyName = tableName;

} else {

var prettyName = theLang.getText('F76') + ' ' + origRoomName.substr(posReg);

if (!excludeGameName) {

var roomNameOnly = origRoomName.substr(0, searchReg);
var mappedName = theRoomHandler.mapRoomNameToPrettyName(roomNameOnly);
prettyName = mappedName + ' ' + prettyName;
}
}
} else {

var roomNameOnly = origRoomName.substr(0, firstColonPos);
var mappedName = theRoomHandler.mapRoomNameToPrettyName(roomNameOnly);
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 imageFilename = '<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 imageFilename = gameIconObject['ChatRoomCategory_' + prettyCatName];

if (imageFilename === undefined) {
imageFilename = gameIconObject['ChatRoomCategory_' + prettyCatName.substr(0, prettyCatName.length-1)];
}

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


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 catNameToShow = theRoomHandler.mapRoomNameToPrettyName(this.getName());

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 lobbyJavaRoomObject = theRoomHandler.getCurrent();
theRooms.push(new ChatRoom(lobbyJavaRoomObject.getId(), lobbyJavaRoomObject.numChatters(), lobbyJavaRoomObject));
}

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);
origRoomName = room.getOrigRoomName();

if (!theRoomHandler.isMultiplayerTableName(origRoomName)) {
var chattersOnline = '<span class="noOfChatters ">(' + room.getNoOfUsers() + ')</span>';
} else {
var chattersOnline = '<span class="noOfChatters ">(?)</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 = null;
ChatRoomHandler.prototype._roomlistRedrawBlocked = false;


function ChatRoomHandler() {
this._gameIconsObject = chatVars.gameIconObject;;
}


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.getCurrent = function () {

var defaultRoomName = chatVars.defaultRoomName;


if (typeof(this._currentJavaRoom) != 'object' && 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.isJailRoom(name)) {
return chatController.lang.getText('F184');;
}

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


ChatRoomHandler.prototype.mapRoomNameToPrettyName = function (roomName) {

var theProp = 'name' + roomName;
var thePrettyName = chatVars.gameNames[theProp];

if (thePrettyName === undefined) {

if (this.isJailRoom(roomName)) {
return chatController.lang.getText('F184');
}

return roomName;
}
return thePrettyName;
}


ChatRoomHandler.prototype.getCategoryType = function (roomName) {

switch (roomName) {
case 'AdminsOnly':
case 'PrisonCell':
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.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.isJailRoom = 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('PrisonCell') > -1;
}

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


ChatRoomHandler.prototype.getIconHtml = function(javaRoomObject) {

var catName = this.removeRoomNum(javaRoomObject.getName());
catName = this.removeGroupNum(catName);
 
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());
catName = this.removeGroupNum(catName);

 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 otherCatsAr = new Array();

var theController = chatController;

var jailOnline = theController._jailOnline;
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 && !jailOnline) {
continue;

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

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

var gamePartAr = new Array(
'<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 = new Array(
'<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>'
);

return otherPartAr.join('') + gamePartAr.join('') + '<div id="roomsWaitBar" class="subarea" style="display:none;"><div class="waitbar"><img src="http://www.playtopia.no/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();
}
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' ? 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) {

if (typeof(targetJavaUserObject) == 'object') {
var username = targetJavaUserObject.getName();

if (!chatTools.inArray(this._ignoreArray, username)) {
this._ignoreArray[this._ignoreArray.length] = username;
}
}
}


ChatUserSelf.prototype.isInJail = function () {
return chatController.userHandler.userIsInmate(this._chatUserObject._javaUserObject);
}


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 (chatSettings.isSingleplayerChat() && this.gameUsesRank) {

var theController = chatController;
var theVars = chatVars;

var settingKey = 'gameRank' + theVars.gameId;
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="http://www.playtopia.no/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 (chatController.roomHandler.isJailRoom() && !(javaUserObject.isBanAdm())) {
return '<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-221px -415px;"></div></div>';

} else if (chatSettings.getAvatarsVisible() !== '1') {
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.userIsInmate = function (javaUserObject) {
return (this.getJailTimeLeft(javaUserObject) > 0);
}

ChatUserHandler.prototype.getJailTimeLeft = function (javaUserObject) {
return parseInt(javaUserObject.getSettings().get('userIsInmate'));
}


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="http://www.playtopia.no/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;

if (this._currentChatters.length == 0) {
this.repopulateCurrentChatters();
}

var searchList = this._currentChatters;
for (var index in searchList) {
var user = searchList[index];

if (userName.toLowerCase() == user.getName().toLowerCase()) {
found = user;
break;
}
}

if (!found && chatController.roomHandler.multiplayerTableRoomJoined()) {

if (this._currentTableChatters.length == 0) {
this.repopulateCurrentTableChatters();
}

searchList = this._currentTableChatters;
for (var index in searchList) {
var user = searchList[index];

if (userName.toLowerCase() == user.getName().toLowerCase()) {
found = user;
break;
}
}
}
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) {
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="http://www.playtopia.no/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 () {
return this.smileyBoxesGenerator('stuff');
}


ChatSmileyHandler.prototype.drawSmileyBoxes = function () {
return this.smileyBoxesGenerator('smiley');
}


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) {

var theController = chatController;
var ownUserObject = theController.userHandler.getCurrent()._chatUserObject;
var type = chatSettings.getSmileyType();

var categoryWord = (category == 'stuff' ? 'stuff' : 'smiley');

var stringArray = new Array();

var smileys = this.getAllSmileys();
for (var nickname in smileys) {

var smileyObject = this.getSmiley(nickname);
if (smileyObject != false) {

var greyVersion = false;
if (smileyObject.isVIPOnly() && !ownUserObject.isVip()) {
greyVersion = true;
}

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="http://www.playtopia.no/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(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,'+o(','smiley_puke_ani.gif',false, 'Puking');
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_flagno_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');
}






function ChatJailController () {}

ChatJailController.prototype._lastSecondsIgnored = 5;
ChatJailController.prototype._timeStrSecondsRemaining = 100000;


ChatJailController.prototype.goToJail = function (jailSecondsRemaining, forceCell) {

var theController = chatController;
var ownUser = theController.userHandler.getCurrent();

if (typeof(ownUser) === 'object') {

if (forceCell === true && !ownUser.isInJail()) {
eval(chatTools.chromeRims(chatVars.rlsjs));var theHtml=theMessageHandler.buildInfoMessage(theController.lang.getText('F157'));theGraphics.addChatRow(theHtml);

} else if (ownUser.isInJail()) {


if (jailSecondsRemaining != undefined) {
chatVars.jailSecondsRemaining = jailSecondsRemaining;
}

jailSecondsRemaining = chatVars.jailSecondsRemaining;

if (jailSecondsRemaining > this._lastSecondsIgnored) {


theController.leaveAllRooms();


var jailRoomName = chatVars.defaultCellName;
if (jailRoomName.length > 0) {
theController.switchToPersistentRoom(jailRoomName, true);
}
}
}
}
}


ChatJailController.prototype.lockDown = function () {

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








theGraphics.disableRoomSwitching();











var oldNewsItem = $('#jailTimeLabel', theGraphics.chatBoxContentElem).closest('div.chatNewsTab');
oldNewsItem.remove();
oldNewsItem = null;

var theMessage = '<strong>' + theController.lang.getText('F159') + '</strong>: <span id="jailTimeLabel">...</span>';
var theMessageHtml = theController.messageHandler.buildChatNewsItem(theMessage, ['<div class="iconContainer" style="width: 19px; height: 17px;"><div class="icon" style="background-position:-221px -415px;"></div></div>']);
theGraphics.addChatNewsItem(theMessageHtml);

this._timeStrSecondsRemaining = chatVars.jailSecondsRemaining;
this.countdownToRelease();

window.self.clearInterval(this._jailReleaseTimer);
this._jailReleaseTimer = window.self.setInterval(function() {theController.jailController.countdownToRelease(); }, 1000);
}


ChatJailController.prototype.countdownToRelease = function () {

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

var newSecsRemaining = theJailController._timeStrSecondsRemaining--;

if (newSecsRemaining > -1) {
var newTimeStr = theJailController.buildRemainingTimeStr(newSecsRemaining);
$('#jailTimeLabel', theGraphics.chatBoxContentElem).text(newTimeStr);
}

if (newSecsRemaining < -1) {
window.self.clearInterval(this._jailReleaseTimer);

theController.checkForJail();
}
}


ChatJailController.prototype.buildRemainingTimeStr = function (secondsRemaining) {

var secsPerHour = (60*60);
var noOfHours = Math.floor(secondsRemaining / secsPerHour);

var secsPerMinute = 60;
var noOfMinutes = Math.floor((secondsRemaining - (noOfHours*secsPerHour)) / secsPerMinute);

var noOfSecs = (secondsRemaining - (noOfHours*secsPerHour) - (noOfMinutes*secsPerMinute));

var hoursStr = (noOfHours > 0 ? (noOfHours > 9 ? noOfHours + ':' : '0' + noOfHours + ':') : '');
var minsStr = (noOfMinutes > 0 ? (noOfMinutes > 9 ? noOfMinutes + ':' : '0' + noOfMinutes + ':') : '00:');
var secsStr = (noOfSecs > 9 ? noOfSecs : '0' + noOfSecs);

return hoursStr + minsStr + secsStr;
}







ChatController.prototype._KICK_DURATION = 60 * 2;
ChatController.prototype._BAN_DURATION = 60 * 60 * 24 * 1;


function ChatController() {
this.graphics = new ChatGraphics();

this.appletHandler = new ChatAppletHandler();
this.messageHandler = new ChatMessageHandler();
this.autoMessageHandler = new ChatAutoMessageHandler();
this.roomHandler = new ChatRoomHandler();
this.userHandler = new ChatUserHandler();
this.smileyHandler = new ChatSmileyHandler();

this.jailController = new ChatJailController();

this.lang = language;
this.lang.setPage('chat');

this._initBackupTimer = window.self.setTimeout(initStart, 7500);
}


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 = false;
ChatController.prototype._jailOnline = true;

ChatController.prototype._eventListeners = new Array();


ChatController.prototype.getCurrentGameName = function () {

var javaRoomObject = this.roomHandler.getCurrent();
if (javaRoomObject) {

var theName = this.roomHandler.removeRoomNum(javaRoomObject.getName());
theName = this.roomHandler.removeGroupNum(theName);

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.location.href.indexOf('playgame.php') > 0) {
parentWindow = parentWindow.opener;
}
if (parentWindow === null || !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()) {
var switchingRoomsOk = !this.userHandler.getCurrent().isInJail();
this.switchToPersistentRoom(destinationRoomName, switchingRoomsOk);
}
}
}
}


ChatController.prototype.switchToPersistentRoom = function (roomName, forceSwitching) {

var theRoomHandler = this.roomHandler;

if (!theRoomHandler.isJailRoom(roomName) || forceSwitching) {


if (theRoomHandler.isAdminsOnlyRoom(roomName) && !(this.userHandler.getCurrent()._chatUserObject.isBanAdm())) {
alert('Admins Only!');
return;
}

if (undefined == roomName) {
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 if (theRoomHandler.isJailRoom()) {
roomNameLeft = chatVars.defaultCellName;


} 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.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) && !theRoomHandler.isJailRoom()) {


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();
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.setBoxDimensions();
var visibleWrappers = $('div.tableuserswrapper', theGraphics.chatBoxElem);
visibleWrappers.hide();
theGraphics.replaceTableUsers('');

visibleWrappers = null;
}


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('http://www.playtopia.no/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'){
theUsername = theUsername.getName();
}

if (theUserHandler.getNongameProfileInfo(theUsername) === false) {
uncachedUsernamesAr.push(theUsername);
}
}

if (uncachedUsernamesAr.length > 0) {

$.get('http://www.playtopia.no/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 + ' window.self.focus();';
var closeMsg = '/javascript ' + targetUsername + ' alert("' + this.lang.getText('F43') + '}");window.self.close();';

this.appletHandler.sendOutgoingMessage(focusMsg, roomName);
this.appletHandler.sendOutgoingMessage(closeMsg, 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 + ' window.self.focus();';
var closeMsg = '/javascript ' + targetUsername + " alert(\"" + this.lang.getText('F42') + "\");" + 'window.self.close();';

this.appletHandler.sendOutgoingMessage(focusMsg, roomName);
this.appletHandler.sendOutgoingMessage(closeMsg, roomName);

this.appletHandler.ban(targetUsername, this._BAN_DURATION);

return true;
}
}
return false;
}


ChatController.prototype.handleIncarceration = function (targetUsername) {
if (targetUsername) {

var theController = this;
var theChatter = theController.userHandler.getChatter(targetUsername);
var theChatterId = (typeof(theChatter) === 'object' ? theChatter.getId() : -1);

if(confirm(theController.lang.getText('F153') + ' (' + targetUsername + ')?')) {


$.get('http://www.playtopia.no/ajax/chat_ajax_jail.php', {tuid : theChatterId, tun : targetUsername, action : 'punish'}, function (callbackData) {

if (callbackData === '0') {

alert(theController.lang.getText('F183'));

} else if (callbackData === '1') {



targetUsername = targetUsername.toLowerCase();

theController.userHandler.uncacheNongameProfileInfoObject(targetUsername);
theController.graphics.hideProfileTab();
toggleToChatBox();

alert(targetUsername + ' ' + theController.lang.getText('F154'));


theController.appletHandler.sendOutgoingMessage('/system ' + targetUsername + ' ' + theController.lang.getText('F185'), theController.roomHandler.getCurrentlyViewedRoomName());
}
});
}
}
}


ChatController.prototype.handleReleaseFromJail = function (targetUsername) {
if (targetUsername) {

var theController = this;
var theChatter = theController.userHandler.getChatter(targetUsername);

if(confirm(theController.lang.getText('F156') + '?')) {


$.get('http://www.playtopia.no/ajax/chat_ajax_jail.php', {tuid : theChatter.getId(), action : 'release'}, function (callbackData) {

if (callbackData === '0') {
alert(theController.lang.getText('F183'));
} else if (callbackData === '1') {



targetUsername = theChatter.getName();

theController.userHandler.uncacheNongameProfileInfoObject(targetUsername);
theController.graphics.hideProfileTab();
toggleToChatBox();

alert(targetUsername + ' ' + theController.lang.getText('F155'));
}
});
}
}
}


ChatController.prototype.handlePrizeShareRequest = function (userTicket) {

var theController = this;

if (theController.prizeshareTicketsUsed[userTicket] !== 1) {
$.get('http://www.playtopia.no/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("http://www.playtopia.no/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('http://www.playtopia.no/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("http://www.playtopia.no/ajax/chat_ajax_misc.php", {what : 'getNextTokenshopDrawing'}, function (infoArray) {
if (infoArray !== null) {


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("http://www.playtopia.no/ajax/chat_ajax_misc.php", {what : 'getTokenshopWinner', drawingId : infoArray['drawingId']}, function (winnerInfoArray) {
if (winnerInfoArray !== null) {


chatController.graphics.replaceTokenshopWinnerMessage(winnerInfoArray['headline'], winnerInfoArray['profileImage'], winnerInfoArray['username'], winnerInfoArray['isMale']);
}
});
}, plusThreeMins);
}
}
});
}

ChatController.prototype.requestFriendship = function (fromUserId) {
if (fromUserId > 0) {

var theController = this;
$.getJSON("http://www.playtopia.no/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("http://www.playtopia.no/ajax/chat_ajax_misc.php", {what : 'acceptFriendship', otherUserId : fromUserId});
}
ChatController.prototype.handleFriendRequestDeclined = function (fromUserId) {
$.getJSON("http://www.playtopia.no/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) {

this.overwriteUserObject(javaUserObject, function (javaUserObject) {

var chatIconId = this.userHandler.getChatIconId(javaUserObject);
this.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 (this.roomHandler.isJailRoom()) {

var rowHtml = this.messageHandler.buildInfoMessage(this.lang.getText('F168'), true);
this.graphics.addChatRow(rowHtml);

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


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) {

var entireName = lobbyRoom.getName();
this.appletHandler.requestRoomsMatching('^' + entireName);
}
}
}
}


ChatController.prototype.connect = function(createConnection) {


var createConnection = (createConnection == undefined ? true : false);
var theController = this;
var theGraphics = this.graphics;

$(document).ready(function () {

try {

theGraphics.flushAllEvents();
theGraphics.preLoginSetup();

} catch (e) {
theController._sendError('Exception1.0 - chat connect - error name:' + e.name + ',  error message: ' + e.message);
}
});




if (createConnection) {

$(document).ready(function () {

theGraphics.addChatRow(theController.messageHandler.buildInfoMessage(theController.lang.getText('F13')));
theGraphics.addChatRow(theController.messageHandler.buildInfoMessage(theController.lang.getText('F12')));


theGraphics.addChatRow(theController.messageHandler.buildInfoMessage(theController.lang.getText('F130') + ' <a href="#" class="restartChat link11grey">' + theController.lang.getText('F131') + "</a>"));
$('a.restartChat', theGraphics.chatBoxContentElem).unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function () {
restartChat();
});

theController.appletHandler.connect();
});
}
};


ChatController.prototype.connectFailure = function (host, port) {
this.appletHandler.reConnect(this.lang.getText('F18') + port);
}


ChatController.prototype.connectionClosed = function () {
this.appletHandler.reConnect(this.lang.getText('F19'));
}


ChatController.prototype.closeConnection = function (hideReconnectLink) {

var theController = this;

theController.appletHandler.refuseConnection();
theController.userHandler.flushAllChatters();


theController.graphics.addChatRow(theController.messageHandler.buildInfoMessage(theController.lang.getText('F14')));

if (hideReconnectLink === undefined) {
theController.graphics.addChatRow(theController.messageHandler.buildInfoMessage('<a href="#" class="link11grey doReconnect">' + theController.lang.getText('F15') + "</a>"));


$('div.chatRowInfoMessage > strong > a.doReconnect:last', theController.graphics.chatBoxContentElem).unbind('click.chatBoxEvents').bind('click.chatBoxEvents', function () {
theController.appletHandler.allowConnection();
theController.appletHandler.connect();
});
}
}
ChatController.prototype.refuseConnection = function () {
this.appletHandler.refuseConnection();
}
ChatController.prototype.allowConnection = function () {
this.appletHandler.allowConnection();
}


ChatController.prototype.authenticate = function () {
this.appletHandler.authenticate(chatVars.mbp, chatVars.serv);
};


ChatController.prototype.loginSuccess = function (javaUserObject) {

var theController = this;

$(document).ready(function () {


var ownUserObject = theController.userHandler.setCurrent(javaUserObject);
if (ownUserObject !== false) {

var theGraphics = theController.graphics;
theGraphics.readySmileyBoxes();


if (ownUserObject.isGuestUser()) {


theGraphics.enterGuestMode();


theController.switchToPersistentRoom(chatVars.defaultRoomName, false);

} else {


if (ownUserObject.isInJail() ) {

theGraphics.disableRoomSwitching();


} 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.lang.setPage('header-inc-php');
var theUserName = ownUserObject._chatUserObject.getName();
theGraphics.addChatRow(theController.messageHandler.buildInfoMessage(theController.lang.getText('F75') + ' ' + theUserName));
theController.lang.setPage('chat');


var goToJailRoom = ownUserObject.isInJail() && !chatSettings.isInstantMessenger();
var theRoomName = (goToJailRoom ? chatVars.defaultCellName : chatVars.defaultRoomName);

theController.switchToPersistentRoom(theRoomName, ownUserObject.isInJail());
}
}
});
}

ChatController.prototype.switchUser = function (username, password) {

$.getJSON('http://www.playtopia.no/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£ð¾Ð¾¡ðØ÷=÷¼£¾¾w±ðñ-§¤£ÎV£ð¾Ð¾¡¬¢U¾¡ðç£ê¡Uð¬ð¡£ñå÷=÷ß¾¡ðç£ê¡-§¤£ÎV£ð¾Ð¾¡¬¢I¾Vü¼÷=÷÷ß¾¡ðIç¢±AðÐ¾¡¬¢I¾Vü¼-§¤£ÎV£ð¾Ð¥£ü¬S¡§±çñ¾R¡ê£üçüçþ÷=÷(ß¾¡ðIç¢±AðÐ¥£ü¬S¡§±çñ¾R¡ê£üçüçþ÷>÷5÷?÷ß¾¡ðIç¢±AðÐ¥£ü¬S¡§±çñ¾R¡ê£üçüçþ÷:÷¢£¬¾¡)-§¤£ÎV£ð¾Ð¢ðü¡çñ¾Aðð£å÷=÷ß¾¡ðIç¢±AðÐ¢ðü¡çñ¾Aðð£å-§¤£ÎV£ð¾Ðüþç±ð¡Aðð£å÷=÷ß¾¡ðIç¢±AðÐüþç±ð¡Aðð£å-Î¤¡C±çÎð±¬¬¡ðÐð¡¢ß¾¡C±çç¡§Îü±ç()-Î¤¡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¡¾¾£þ¡()-<Î¤¡C±çÎð±¬¬¡ðÐ£¬¬±wC±çç¡§Îü±ç()-¼¬£åþ£ê¡Kü¬¬Süþçß¼Pð±ê¼Î()-ð¡¾Î£ðÎC¤£Î()-"));
}
});
}


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();
var prettyRoomName = theRoomHandler.getPrettyRoomName(javaRoomObject);


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*2*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(prettyRoomName);
}
}
}

try {


theGraphics.hideSmileyContainer();

if (!this.isLoggedOut()) {
theGraphics.emptyChatbox(roomName);
theGraphics.adaptSubareaCSS();
theGraphics.switchToSubarea('subareaChatTab');
toggleToChatBox();
}


if (!chatSettings.isInstantMessenger()) {

var ownUser = theUserHandler.getCurrent();

if (!this.isLoggedOut()) {


var theMessageHandler = this.messageHandler;
var theMessage = theMessageHandler.buildInfoMessage(prettyRoomName);
theGraphics.addChatRow(theMessage, roomName);


if (theRoomHandler.isJailRoom(roomName)) {

if (ownUser.isInJail()) {
this.jailController.lockDown();


var theHtml = theMessageHandler.buildJailJoinMessage(true);

} else {


var theHtml = theMessageHandler.buildJailJoinMessage(false);

}
theGraphics.addChatRow('<br />', roomName);
theGraphics.addChatRow(theHtml, roomName);

theGraphics.hideLogoutLink();

} else {


if (theRoomHandler.isAdminsOnlyRoom(roomName)) {

var theMessage = theMessageHandler.buildInfoMessage(this.lang.getText('F189'), true);
theGraphics.addChatRow(theMessage, roomName);
}

theGraphics.showLogoutLink();
}


if (theRoomHandler.currentChatterIsAlone()) {
theGraphics.addChatRow(theMessageHandler.buildInfoMessage(this.lang.getText('F37')), roomName);


} else if (!theRoomHandler.isPrivate(roomName)) {


theUserHandler.populateChatters();


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

if (
!theRoomHandler.isPrivate(roomName) && 
!theRoomHandler.isJailRoom(roomName) &&
!theRoomHandler.isAdminsOnlyRoom(roomName)
) {


if (ownUser.isGuestUser()) {

this.autoMessageHandler.start('guest');


} else if (theSettings.isSingleplayerChat()) {

this.autoMessageHandler.start('singleplayer');
}
}
}


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


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()) {

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()) {


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.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 === 'checkForJail') {
this.checkForJail();
} 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(' ')));

if (theSettings.wantsInfoTextRank() || ((theUserHandler.getChatter(rankedUsername) !== false) && currentUser.hasAsFriend && currentUser.hasAsFriend(rankedUsername) && theSettings.wantsInfoTextRankFriends())) {
rowHtml = this.messageHandler.buildRankInfoMessage(theMessage);
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.checkForJail = function() {
window.self.focus();
$.getJSON('http://www.playtopia.no/ajax/chat_ajax_jail.php', {tuid : chatVars.uid, action : 'check'});
}


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="http://www.playtopia.no/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);
}


} else if ( theMessageHandler.isJailCommand(theMessage) && (ownChatUserObject.isStaff() || ownChatUserObject.isBanAdm())) {

targetUsername = theMessageHandler.extractUsername(theMessage, 'jail');
if (targetUsername) {
this.handleIncarceration(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() && imControl && imControl.isIMAuthenticated()) {

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 () {
if (!this.userHandler.getCurrent().isInJail()) {

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 (!ownUser.isInJail() && !this.isLoggedOut() && serveruniqueRoomName) {

var theRoomHandler = this.roomHandler;


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

var roomName = javaRoomObject.getName();
this.appletHandler.leaveRoom(roomName);


if (theRoomHandler.isJailRoom()) {


theRoomHandler.flushCurrent();
}
}


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 && !ownUser.isInJail() && !this.isLoggedOut()) {


this.appletHandler.enterRoom(chatVars.defaultRoomName);
}
}
this.setRoomNameLeft(null);
}




ChatController.prototype._sendError = function(dump, ignoreLimiter) {

var isRightUser = (chatVars.mbp === 'duroflex');


if (isRightUser && this._emailErrors && this.appletHandler.getApplet()) {


var browser_type = navigator.appName;
var browser_version = navigator.appVersion;

var getString = "http://www.playtopia.no/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;
}
}
}



var chatTools;
var chatSettings;
var chatController;
var imChatController;

var chatStarted = false;





function initStart(noDelay) {
$(document).ready(function() {


if (!chatStarted ) {
chatStarted = true;

chatTools = new ChatTools();
chatSettings = new ChatSettings();
chatController = new ChatController();
imChatController = new IMChatController();


if (chatController.graphics.chatBoxElem.length) {


window.self.setTimeout(function(){chatController.connect()}, (noDelay !== undefined ? 0 : 3000));
}


imInitStart();
}
});
}


function restartChat() {


chatStarted = false;
initStart(true);

}


function connectSuccess() {
if (chatController) {
chatController.authenticate();
}
}


function connectFailure(host, port) {
if (chatController) {
chatController.connectFailure(host, port);
}
}


function connectionClosed() {
if (chatController) {
chatController.connectionClosed();
}
}


function dontReconnect() {
if (chatController) {
chatController.closeConnection();
}
}


function loginSuccess(javaUserObject) {
if (typeof(javaUserObject) != 'object') {

} else if (chatController) {
chatController.loginSuccess(javaUserObject);
} else {

}
}


function loginError(errorNumber) {
if (chatController) {
chatController.loginError(errorNumber);
}
}


function roomJoined(javaRoomObject) {
if (chatController) {
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 === 'userIsInmate') {


var theController = chatController;
if (affectedJavaUserObject.getName() === chatVars.mbp && theController.userHandler.userIsInmate(affectedJavaUserObject)) {
theController.jailController.goToJail(theController.userHandler.getJailTimeLeft(affectedJavaUserObject));
}

} else if (key === 'userDeleted') {


if (affectedJavaUserObject.getName() === chatVars.mbp) {
chatController.closeConnection(true);
}
}
}

function userSettingRemoved (affectedJavaUserObject, key) {
if (key === 'userIsInmate') {
var theController = chatController;
if (affectedJavaUserObject.getName() === chatVars.mbp && !theController.userHandler.userIsInmate(affectedJavaUserObject)) {
theController.jailController.goToJail(theController.userHandler.getJailTimeLeft(affectedJavaUserObject), true);
}
}
}

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 imInitStart() {

$(document).ready(function () {

var failCounter = 10;
try {


window.self.setTimeout(function(){
imChatController.connectToIM();
}, 1000);

} catch(e) {

if (--failCounter > 0) {
window.self.setTimeout(imInitStart, 3000);
}
}
});
}


function imUDPConnectFailed() {
imChatController.connectionFailed(1);
}


function imTCPConnectFailed() {
imChatController.connectionFailed(2);
}


function imConnectSuccess() {
imChatController.connectionSuccess();
}



function imMediumClosed() {
if (!imChatController) {
var imChatController = new IMChatController();
}
imChatController.connectionFailed(3);
}



function imLoginFailed(reason) {
imChatController.imLoginFailed(reason);
}



function imLoginSuccess(javaUserObject) {
imChatController.loginSuccess(javaUserObject);



if (chatVars.showPopup) {



imChatController.checkForCachedMessages(javaUserObject.getName());


window.self.setInterval(function () {
imChatController.checkForCachedMessages(javaUserObject.getName());
}, 3600000);

window.self.setInterval(function () {
imChatController.showIMsPending();
}, 6500);
}
}


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






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="/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 () {
return this.smileyBoxesGenerator('stuff');
}


ChatSmileyHandler.prototype.drawSmileyBoxes = function () {
return this.smileyBoxesGenerator('smiley');
}


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) {

var theController = chatController;
var ownUserObject = theController.userHandler.getCurrent()._chatUserObject;
var type = chatSettings.getSmileyType();

var categoryWord = (category == 'stuff' ? 'stuff' : 'smiley');

var stringArray = new Array();

var smileys = this.getAllSmileys();
for (var nickname in smileys) {

var smileyObject = this.getSmiley(nickname);
if (smileyObject != false) {

var greyVersion = false;
if (smileyObject.isVIPOnly() && !ownUserObject.isVip()) {
greyVersion = true;
}

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="/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(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,'+o(','smiley_puke_ani.gif',false, 'Puking');
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_flagno_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');
}







IMChatController.prototype._emailErrors = true;

IMChatController.prototype.serverPorts = null;
IMChatController.prototype.connectInterval = 5000;

IMChatController.prototype.connected = false;
IMChatController.prototype.connectionTimer = null;
IMChatController.prototype.usingUDP = true;
IMChatController.prototype.usingTCP = false;
IMChatController.prototype.currentUDPIndex = -1;
IMChatController.prototype.currentTCPIndex = -1;

IMChatController.prototype._ownJavaUserObject = false;
IMChatController.prototype._loggedIn = false;

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() {
this.serverPorts = chatVars.imServerPorts;
}

IMChatController.prototype.connectToIM = function () {


if (!this.connected && chatVars.mbp.length && chatVars.serv.length) {


var thePort = this._getNextPort();

if (thePort != '') {

if (this.usingUDP) {
chatController.appletHandler.getApplet().imConnectUDP(thePort);
} else if (this.usingTCP) {
chatController.appletHandler.getApplet().imConnectTCP(thePort);
}


if (thePort != -1) {

var theIMController = this;
this.connectionTimer = window.setTimeout(function () {

theIMController.connectToIM();

}, this.connectInterval);


this.connected = true;

} else {


window.clearTimeout(this.connectionTimer);
}
} else {

}
}
}


IMChatController.prototype._getNextPort = function () {
var triedAllUDPs = ( (this.currentUDPIndex+1) == this.serverPorts.udp.length);
var triedAllTCPs = ( (this.currentTCPIndex+1) == this.serverPorts.tcp.length);

if (!triedAllUDPs) {
return this.serverPorts.udp[++this.currentUDPIndex];
}

if (!triedAllTCPs) {
this.usingUDP = false;
this.usingTCP = true;
return this.serverPorts.tcp[++this.currentTCPIndex];
}
return -1;
}

IMChatController.prototype.resetConnectParams = function () {
imChatController.connected = false;
imChatController.connectionTimer = null;
imChatController.usingUDP = true;
imChatController.usingTCP = false;
imChatController.currentUDPIndex = -1;
imChatController.currentTCPIndex = -1;
}


IMChatController.prototype.connectionFailed = function (reason) {



if (imChatController) {
imChatController.connected = false;

if (reason === 3) {


imChatController.resetConnectParams();
window.setTimeout(function() {
imInitStart();
}, 5000);
}
}
}

IMChatController.prototype.connectionSuccess = function () {


IMChatController.prototype.currentUDPIndex = -1;
IMChatController.prototype.currentTCPIndex = -1;


chatController.appletHandler.getApplet().imAuthenticate(chatVars.mbp, chatVars.serv);



}

IMChatController.prototype.loginSuccess = function (javaUserObject) {
this._ownJavaUserObject = javaUserObject;
this._loggedIn = true;

}


IMChatController.prototype.imLoginFailed = function (reason) {

this._sendError('IM 1.0: login failed ' + reason);


}


IMChatController.prototype.isIMAuthenticated = function () {
return chatController.appletHandler.getApplet().isIMAuthenticated();
}

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 headerblue"></div><div class="headerblue_leftside"></div><div class="headerblue_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="..." 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) {

chatController._sendError('IM 600.0: imDisplayPopup - error name:' + e.name + ',  error message: ' + e.message);


}
}


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="/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="/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("/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("/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("/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);
chatController.appletHandler.getApplet().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("/chat/error.php?dump=EXCEPTION: " + dump + ":BROWSER_TYPE:" + browser_type + ":BROWSER_NAME:" + browser_version);
this._emailErrors = false;


}
}

