User:SirRandoso/umtroçolegal.js

/*  * ChatHacks.js, by Monchoman45. * Version 5.0.3.stillHasSomeFails *  * Features: *  Ability to clear your chat window *  A host of slash commands (including /me and /afk) *  Ability to create multi user private chats *  Inline alerts every time your away status changes *  Icons next to messages by staff and chat mods in the room *  Pings when someone mentions your name or any other specified phrases */ if(wgCanonicalSpecialPageName == 'Chat') { window.hasFocus = true; window.dinged = false; window.ding = 0; window.titleorig = document.title; function Unding { //for fixing the title after you've been dinged document.getElementsByTagName('title')[0].innerHTML = window.titleorig; clearInterval(window.ding); window.dinged = false; } 	$(window).bind('focus', Unding); $(window).bind('focus', function {window.hasFocus = true;}); $(window).bind('blur', function {window.hasFocus = false;}); //Function for adding messages to the window NodeChatDiscussion.prototype.iconPing = function (chat) { var icon = ''; for(var i in this.model.users.models) { if(this.model.users.models[i].attributes.name == chat.attributes.name) { if(this.model.users.models[i].attributes.isStaff) { icon = ' '; } 				else if(this.model.users.models[i].attributes.isModerator) { icon = ' '; } 				break; } 		} 		if(icon) {this.chatUL.children.last.children('.username').html(this.chatUL.children.last.children('.username').html + icon);} if(mainRoom.isInitialized && chat.attributes.name != wgUserName && !chat.attributes.isInlineAlert) { window.dinged = true; //resolve HTML var text = document.createElement('span'); text.innerHTML = chat.attributes.text; text = text.textContent; var pings = document.getElementById('pings').value.removeTrailing('\n').split('\n'); for(var i = 0; i < pings.length; i++) { if(text.toLowerCase.indexOf(pings[i].toLowerCase) != -1 || this != mainRoom.viewDiscussion) { if(!window.hasFocus) { //Only annoy people if the window isn't focused $('#sound').html(''); if(!window.dinged) {window.ding = setInterval('FlashTitle', 500);} } 					this.scrollToBottom; if(this == mainRoom.viewDiscussion) { var ref = text.toLowerCase.indexOf(pings[i].toLowerCase); var phrase = text.slice(ref, ref + pings[i].length); this.chatUL.children.last.children('.message').html(text.replace(phrase, ' ' + phrase + ' ')); } 					break; } 			} 		} 		//Kill emoticons this.chatUL.children.last.children('.message').children('img').each(function {this.outerHTML = '' + this.title + ' ';}); } 	mainRoom.model.chats.bind('afteradd', $.proxy(mainRoom.viewDiscussion.iconPing, mainRoom.viewDiscussion)); //Away status functions NodeChatController.prototype.setAway = function (msg){ if(!msg) {var msg = '';} $.log("Attempting to go away with message: " + msg); var setStatusCommand = new models.SetStatusCommand({ 			statusState: STATUS_STATE_AWAY, 			statusMessage: msg 		}); this.inlineAlert('You are now away.'); this.socket.send(setStatusCommand.xport); } 	NodeChatController.prototype.setBack = function { if( ! this.comingBackFromAway ){ // if we have sent this command (but just haven't finished coming back yet), don't keep spamming the server w/this command $.log("Telling the server that I'm back."); this.comingBackFromAway = true; var setStatusCommand = new models.SetStatusCommand({ 				statusState: STATUS_STATE_PRESENT, 				statusMessage: '' 			}); this.inlineAlert('You are no longer away.'); this.socket.send(setStatusCommand.xport); } 	} 	//Send message function NodeChatController.prototype.sendMessage = function (event) { if(!this.active) { return true; } 		if (event.which == 13 && !event.shiftKey) { event.preventDefault; mainRoom.resetActivityTimer; var inputField = this.viewDiscussion.getTextInput; var send = Preparse.call(this, inputField.val); if (inputField.val && send) { var chatEntry = new models.ChatEntry({roomId: this.roomId, name: wgUserName, text: inputField.val}); if( this.isPrivate == true ) { //is prive if( this.afterInitQueue.length < 1 || this.model.users.length < 2 ){ this.mainController.socket.send( this.model.privateRoom.xport ); } 					if( !this.isInitialized ) { this.afterInitQueue.push(chatEntry.xport); //temp chat entry in case of slow connection time chatEntry.set({temp  : true, avatarSrc: wgAvatarUrl }); this.model.chats.add(chatEntry); } else { this.socket.send(chatEntry.xport); } 				} else { this.socket.send(chatEntry.xport); } 				event.preventDefault; } 			inputField.val( ''); $.log('submitting form'); inputField.focus; } 	} 	mainRoom.viewDiscussion.unbind('sendMessage'); mainRoom.viewDiscussion.bind('sendMessage', $.proxy(mainRoom.sendMessage, mainRoom)); //Functions that have to be changed for interwiki chat NodeChatController.prototype.openPrivateRoom = function(users) { users.push( wgUserName ); $.ajax({ 			type: 'POST', 			url: wgScript + '?action=ajax&rs=ChatAjax&method=getPrivateRoomID', 			data: { 				users  : users.join(',') 			}, 			success: $.proxy(function(data) { $.log("Attempting create private room with users " + users.join(',')); var data = new models.OpenPrivateRoom({roomId: data.id, users: users}); this.baseOpenPrivateRoom(data, true); this.showRoom(data.get('roomId') ); this.chats.privates[ data.get('roomId') ].isPrivate = true; this.chats.privates[ data.get('roomId') ].init; //this.socket.send(data.xport); }, this) 		}); this.viewUsers.hideMenu; } 	NodeRoomController.prototype.onJoin = function(message) { var joinedUser = new models.User; joinedUser.mport(message.joinData); var connectedUser = this.model.users.findByName(joinedUser.get('name')); if(typeof connectedUser == "undefined"){ this.model.users.add(joinedUser); this.fire('afterJoin', joinedUser); //TODO: move it to other class if( !this.isPrivate ) { // Create the inline-alert (on client side so that we only display it if the user actually IS new to the room and not just disconnecting/reconnecting). var newChatEntry = new models.InlineAlert({text: $.msg('chat-user-joined', [joinedUser.get('name')] ) }); this.model.chats.add(newChatEntry); } 			this.disableRoom(joinedUser, false); } else { // The user is already in the room... just update them (in case they have changed). this.model.users.remove(connectedUser); this.model.users.add(joinedUser); }		 	} 	NodeRoomController.prototype.onPart = function(message) { var partedUser = new models.User; partedUser.mport(message.data); var connectedUser = this.model.users.findByName(partedUser.get('name')); if(typeof connectedUser != "undefined"){ //TODO: move it to other class if( !this.isPrivate ) { var newChatEntry = new models.InlineAlert({text: $.msg('chat-user-parted', [connectedUser.get('name')] ) }); this.model.chats.add(newChatEntry); } 			this.model.users.remove(connectedUser); this.disableRoom(connectedUser, true); }		 	} 	NodeRoomController.prototype.disableRoom = function(user, flag) { if( this.isPrivate == false ) { //TODO: fix it for multiuser priv chat var privateUser = this.model.privateUsers.findByName(user.get('name')); if(typeof privateUser != "undefined"){ var roomId = privateUser.get('roomId'); if( typeof( this.chats.privates[roomId] ) != "undefined" ){ this.chats.privates[roomId].model.room.set({ 						'blockedMessageInput': flag 					}); } 				//try to reconnect if(flag === false && this.chats.privates[roomId].model.chats.length > 0) { this.socket.send( this.chats.privates[roomId].model.privateRoom.xport ); } 			} 		} 	} 	NodeChatController.prototype.showRoom = function(roomId) { $.log(roomId); if( this.activeRoom == roomId ) { return false; } 		this.activeRoom = roomId; if(roomId == 'main') { this.chats.main.setActive(true); } else { this.chats.main.setActive(false); } 		for(var i in this.chats.privates) { if(i == roomId) { this.chats.privates[i].setActive(true); } else { this.chats.privates[i].setActive(false); } 		} 		for(var i in this.chats.opens) { if(i == roomId) { this.chats.opens[i].setActive(true); } else { this.chats.opens[i].setActive(false); } 		} 		return true; } 	NodeChatController.prototype.openPublicRoom = function(roomId) { this.chats.opens[roomId] = new NodeRoomController(roomId); this.chats.opens[roomId].mainController = this; //set main controller for this chat room this.showRoom(roomId); this.chats.opens[roomId].init; } 	/*//For interwiki chatting, a merger of NodeRoomController's private management functions, and NodeChatController's public management functions. NodeInterwikiController = $.createClass(NodeRoomController, { 		constructor: function (roomId) { 			NodeInterwikiController.superclass.constructor.apply(this,arguments); 			this.socket.bind('updateUser', $.proxy(this.onUpdateUser, this)); //Check 			this.bind('afterJoin', $.proxy(this.afterJoin, this)); 			this.viewUsers = new NodeChatUsers({model: this.model, el: $('body')}); 			this.viewUsers.bind('showPrivateMessage', $.proxy(this.privateMessage, this) ); 			this.viewUsers.bind('kickBan', $.proxy(this.kickBan, this) ); 			this.viewUsers.bind('giveChatMod', $.proxy(this.giveChatMod, this) ); 			this.viewUsers.bind('blockPrivateMessage', $.proxy(this.blockPrivate, this) ); //Check 			this.viewUsers.bind('allowPrivateMessage', $.proxy(this.allowPrivate, this) ); //Check 			this.viewUsers.bind('mainListClick', $.proxy(this.mainListClick, this) ); //Check 			this.viewUsers.bind('privateListClick', $.proxy(this.privateListClick, this) ); //Check this.viewUsers.bind('clickAnchor', $.proxy(this.clickAnchor, this) ); //Check this.viewUsers.render; this.viewDiscussion.show; return this; } 	});*/ 	NodeChatController.prototype.inlineAlert = function(text) { 		for(var i in text.split('\n')) { 			this.viewDiscussion.chatUL.append(' ' + text.split('\n')[i] + ''); 		} 		this.viewDiscussion.scrollToBottom; 	} 	function FlashTitle { 		if(document.getElementsByTagName('title')[0].innerHTML == window.titleorig) { 			document.getElementsByTagName('title')[0].innerHTML = 'Activity - ' + wgSiteName + ' chat'; 		} 		else { 			document.getElementsByTagName('title')[0].innerHTML = window.titleorig; 		} 	} 	function Preparse(input) { //Parse slash commands. 		if(input.charAt(0) == '/') { 			var com = chat.text.split(' '); 			com[0] = com[0].substring(1, com[0].length); 			var ref = '.' + com[0].toLowerCase; 			if(window.commands[com[0].toLowerCase] == undefined) {return;} 			while(typeof eval('window.commands' + ref) != 'function') { 				if(typeof eval('window.commands' + ref) == 'string') { ref = ref.substring(0, ref.lastIndexOf('.')) + '.' + eval('window.commands' + ref).toLowerCase; continue; } 				if(typeof eval('window.commands' + ref) == 'object') { if(!com[1]) { if(typeof eval('window.commands' + ref).default == 'function') {eval('window.commands' + ref).default.call(this, '', chat);} return; } 					if(eval('window.commands' + ref)[com[1].toLowerCase]) {ref += '.' + com[1].toLowerCase;} else if(eval('window.commands' + ref).default) { ref += '.default'; if(typeof eval('window.commands' + ref) == 'function') {break;} } 					else {return;} com = com.slice(1, com.length); continue; } 			} 			com = com.slice(1, com.length); return eval('window.commands' + ref).call(this, com.join(' '), input); } 	} 	window.commands = { 'away': 'afk', 'afk': function(com, text) { if($('#ChatHeader .User').hasClass('away') == false) {toggleAway;} //if you're away, hitting enter has already sent you back }, 		'clear': function(com, text) { //Clear the active chat window this.clearWindow; }, 		'me': function(com, text) { //Emote if(com) {$('#Write [name="message"]').val('* ' + wgUserName + ' ' + com);} else {$('#Write [name="message"]').val('* ' + wgUserName);} return true; }, 		'nc': function(com, text) { //Nobody cares if(com) {$('#Write [name="message"]').val( + com + );} else {$('#Write [name="message"]').val('Nobody cares');} return true; }, 		'coppa': function(com, text) { //Too young if(com) {$('#Write [name="message"]').val('http://coppa.org ' + com);} else {$('#Write [name="message"]').val('http://coppa.org - You must be 13 or older to have an account on Wikia.')} return true; }, 		'kick': 'kickban', 'ban': 'kickban', 'kb': 'kickban', 'kickban': function(com, text) { //Kickban a user if(com) { var mod = new models.KickBanCommand({userToBan: com}); this.socket.send(mod.xport); } 			else {this.inlineAlert(text.split(' ')[0] + ' error: User must be specified');} }, 		'unban': function(com, text) { //Unban a user if(com) { api.newQuery(POST, 'action=userrights&user=' + com + '&remove=bannedfromchat', function(result) { 					if(result.userrights.removed[0] == 'bannedfromchat') { 						this.inlineAlert(com + ' was unbanned.'); 					} 					else { 						this.inlineAlert(com + ' is not banned.'); 					} 				}); api.send(0, true); } 			else {this.inlineAlert(text.split(' ')[0] + ' error: User must be specified');} }, 		'mod': function(com, text) { //Make a user a mod if(com) { var giveChatModCommand = new models.GiveChatModCommand({userToPromote: com}); this.socket.send(giveChatModCommand.xport); } 			else {this.inlineAlert(text.split(' ')[0] + ' error: User must be specified');} }, 		'demod': function(com, text) { //Remove a user's mod right if(com) { api.newQuery(POST, 'action=userrights&user=' + com + '&remove=chatmoderator', function(result) { 					if(result.userrights.removed[0] == 'chatmoderator') { 						this.inlineAlert(com + ' was demodded.'); 					} 					else { 						this.inlineAlert(com + ' is not a mod.'); 					} 				}); api.send(0, true); } 			else {this.inlineAlert(text.split(' ')[0] + ' error: User must be specified');} }, 		'block': function(com, text) { //Block a user from private chatting you if(com) {this.blockPrivate({name: com});} else {this.inlineAlert(text.split(' ')[0] + ' error: User must be specified');} }, 		'unblock': function(com, text) { //Unblock a user from private chatting you - should merge this into a toggle if(com) {this.allowPrivate({name: com});} else {this.inlineAlert(text.split(' ')[0] + ' error: User must be specified');} }, 		'chat': 'private', 'room': 'private', 'private': function(com, text) { //Invoke a private room if(com) { var arr = com.split('|'); for(var i in arr) {array[i] = arr[i].removeTrailing(' ');} mainRoom.openPrivateChat(arr); } 			else {this.inlineAlert(text.split(' ')[0] + ' error: Users must be specified');} }, 		'enter': 'join', 'join': function(com, text) { //Now for a command with chutzpah - join any chat on Wikia //Need to fix this so that joined rooms can be selected if(text[1]) { var data = new models.OpenPrivateRoom({roomId: text[1]}); mainRoom.baseOpenPrivateRoom(data, true); $('.private').before('  ' + com + ' 0 '); mainRoom.showRoom(com); mainRoom.chats.privates[com].init; } 			else {this.inlineAlert(text.split(' ')[0] + ' error: Room id must be specified');} }, 		'leave': 'part', 'part': function(com, text) { //Leave the room you're looking at, or the room you specify if(!com) {var id = this.roomId; var chat = this;} else {var id = com; var chat = mainRoom.chats.privates[com];} $('#Room_' + id).remove; chat.socket.autoReconnect = false; chat.socket.socket.disconnect; if(!com) {mainRoom.show('main');} }, 		'roomid': 'id', 'id': function(com, text) { this.inlineAlert('id: ' + this.roomId); }, 		'self': function(com, text) { //Send a message to yourself if(com) { newstr = ''; for(var i = 0; i < com.length; i++) { switch(com.charAt(i)) { case '[': if(com.charAt(i + 1) == '[') { var k = com.indexOf(']', i); if(com.charAt(k + 1) == ']') { var substr = com.substring(i + 2, k); if(substr.indexOf('|') != -1) { var link = substr.substring(0, substr.indexOf('|')); var linktext = substr.substring(substr.indexOf('|') + 1, substr.length); } 									else { var link = substr; var linktext = link; } 									var linkspl = link.split(' '); link = ''; for(var j in linkspl) {link += linkspl[j] + '_';} link = link.substring(0, link.length - 1); newstr += '' + linktext + ''; i = k + 1; } 							} 							else if(com.substring(i + 1, i + 8) == 'http://') { var k = com.indexOf(']', i); var splstr = com.substring(i + 1, k).split(' '); if(splstr == com.substring(i + 1, k)) { var linktext = '[1]'; } 								else { var linktext = build(splstr, 1); } 								newstr += '' + linktext + ''; i = k; 							} break; default: newstr += com.charAt(i); break; } 				} 				this.viewDiscussion.chatUL.append(' ' + wgUserName + ' (self) ' + newstr + ' '); } 			else { this.viewDiscussion.chatUL.append('<img class="avatar" src="' + $('#ChatHeader .User img').attr('src') + '"> ' + wgUserName + ' (self) </li>'); } 			this.viewDiscussion.scrollToBottom; }, 		'help': function(com, text) { if(text) { var ref = com.replace(/ /g, '.'); var str = ''; var subcoms = []; var subdirs = []; while(typeof eval('window.commands.' + ref) == 'string') {ref.substring(0, ref.lastIndexOf('.')) + '.' + eval('window.commands' + ref).toLowerCase;} var command = eval('window.commands.' + ref); if(command.help) {str += 'Help - /' + com + ': ' + command.help;} if(typeof command == 'object') { for(var i in command) { if(typeof command[i] == 'function') {subcoms.push(i);} if(typeof command[i] == 'object') {subdirs.push(i);} } 				} 				if(subcoms.length > 0) {str += '\nSubcommands: ' + subcoms.join(', ');} if(subdirs.length > 0) {str += '\nSubdirectories: ' + subdirs.join(', ');} str = str.removeTrailing('\n'); if(str) {this.inlineAlert(str);} else {this.inlineAlert('No help data found for /' + com);} } 			else { var str = []; for(var i in mainRoom.chats.commands) { if(typeof mainRoom.chats.commands[i] == 'function' || typeof mainRoom.chats.commands[i] == 'object') {str.push(i);} } 				this.inlineAlert('Commands: ' + str.join(', ')); } 		} 	}; 	window.commands.me = 'Emote yourself. Similar to IRC\'s /me.\nExample: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/me likes chat hacks\')">/me likes chat hacks '); 	window.commands.nc = 'Link your message to <a href="http://uncyclopedia.wikia.com/wiki/Nobody_cares">uncyclopedia:Nobody cares</a>.\nExample: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/nc This is totally important\')">/nc This is totally important '; 	window.commands.afk = 'Toggles your away status.\nExample: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/afk\')">/afk '; 	window.commands.clear = 'Clears the currently open chat window.\nExample: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/clear\')">/clear '; 	window.commands.room = 'Invokes a private room.\nNames must be separated by a pipe (|).\nExample: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/room ExampleUser\')">/room ExampleUser '; window.commands.mod = 'Gives the specified user chat mod status.\nExample: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/mod ExampleUser\')">/mod ExampleUser '; window.commands.block = this.inlineAlert('Blocks the specified user from private chatting you.'); this.inlineAlert('Example: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/block ExampleUser\')">/block ExampleUser '); break; case 'unblock': this.inlineAlert('Unblocks the specified user from private chatting you.'); this.inlineAlert('Example: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/unblock ExampleUser\')">/unblock ExampleUser '); break; case 'kick': case 'kickban': this.inlineAlert('Kickbans the specified user.'); this.inlineAlert('Example: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/kickban ExampleUser\')">/kickban ExampleUser '); break; case 'enter': case 'join': this.inlineAlert('Joins the chat room with the specified id.'); this.inlineAlert('Example: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/join 10\')">/join 10 '); break; case 'leave': case 'part': this.inlineAlert('Leaves the current chat room.'); this.inlineAlert('An id can also be specified for leaving a particular chat room.'); this.inlineAlert('Example: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/part\')">/part '); break; case 'roomid': case 'id': this.inlineAlert('Returns the room id of the room you\'re in.'); this.inlineAlert('Example: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/id\')">/id '); break; case 'help': this.inlineAlert('Displays information about other commands.'); this.inlineAlert('Example: <span onclick="mainRoom.viewDiscussion.getTextInput.val(\'/help\')">/help '); break; default: this.inlineAlert('Commands:'); this.inlineAlert('<span onclick="Preparse.call(active, \'/help me\')">me, <span onclick="Preparse.call(active, \'/help afk\')">afk , <span onclick="Preparse.call(active, \'/help clear\')">clear , <span onclick="Preparse.call(active, \'/help room\')">room , <span onclick="Preparse.call(active, \'/help mod\')">mod ,'); this.inlineAlert('<span onclick="Preparse.call(active, \'/help block\')">block, <span onclick="Preparse.call(active, \'/help unblock\')">unblock , <span onclick="Preparse.call(active, \'/help kickban\')">kickban , <span onclick="Preparse.call(active, \'/help join\')">join , <span onclick="Preparse.call(active, \'/help part\')">part , <span onclick="Preparse.call(active, \'/help id\')">id '); break; } 				break; default: return true; break; } 		return false; } 	//Parser helping function - takes an array of text created with .split(' '), //and an index number for where to start, then rebuilds the string. //Can also accept an index value for where to stop. function build(text, index, stop) { var newtext = ''; if(stop == undefined || stop == 0) {stop = text.length} else if(stop < 0) {stop += text.length} if(index == stop || index == text.length - 1) {return text[index];} for(var i = index; i < stop; i++) { newtext += text[i] + ' '; } 		return newtext; } 	function toggleAway(msg) { if(!msg) {var msg = '';} if($('#ChatHeader .User').hasClass('away') == true) { mainRoom.setBack; } 		else { mainRoom.setAway(msg); } 	} 	toggleAway.back = function { //Force back status if($('#ChatHeader .User').hasClass('away') == true) {mainRoom.setBack;} } 	toggleAway.away = function(msg) { //Force away status if(!msg) {var msg = '';} if($('#ChatHeader .User').hasClass('away') == false) {mainRoom.setAway(msg);} } 	NodeChatController.prototype.clearWindow = function { this.viewDiscussion.chatUL.html(''); this.inlineAlert('Window cleared.'); } 	function active { //Returns the NodeChatController for the active window if(mainRoom.activeRoom && mainRoom.activeRoom != 'main') {return mainRoom.chats.privates[mainRoom.activeRoom];} else {return mainRoom;} } 	String.prototype.removeTrailing = function(char) { //Remove extraneous characters var str = this; while(str.charAt(0) == char) {str = str.substring(1, str.length);} while(str.charAt(str.length - 1) == char) {str = str.substring(0, str.length - 1);} return str; } 	function createCookie(name,value,days) { if (days) { var date = new Date; date.setTime(date.getTime+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString; } 		else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } 	function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } 		return null; } 	$(function { 		if(!importScriptURI) {function importScriptURI(a){var b=document.createElement("script");b.setAttribute("src",a);b.setAttribute("type","text/javascript");document.getElementsByTagName("head")[0].appendChild(b);return b}} 		importScriptURI('http://c.wikia.com/index.php?title=User:Monchoman45/ChatHacks.js/i18n.js&action=raw&ctype=text/javascript'); 		importScriptURI('http://monchbox.wikia.com/index.php?title=MediaWiki:APIQuery.js&action=raw&ctype=text/javascript '); //APIQuery for /unban 		$('head').append(' <style type="text/css">\n.stafficon {\n\tmargin-bottom:-4px;\n}\n.modicon {\n\tmargin-bottom:-2px;\n}\n.UserStatsMenu {\n\tcolor:#000;\n}\n.Write [name="message"] {\n\twidth:93%;\n}\n.inline-alert span {\n\tcolor:#006CB0;\n\tcursor:pointer;\n}\n.inline-alert span:hover {\n\ttext-decoration:underline;\n}\n#pingspan {\n\tposition:absolute;\n\tz-index:5;\n\ttop:23px;\n\tmargin-left:15px;\n\tfont-size:15px;\n\tfont-weight:normal;\n\tline-height:15px;\n}\n#pings {\n\tresize:none;\n\tmargin-left:0;\n\tfont-size:12px;\n\theight:100px;\n\tdisplay:block;\n}\n#pingspan div span {\n\tfont-size:55%;\n}\n '); //Add a 'go afk' button and a 'clear chat' button $('#Write').append('<a class="wikia-button" href="javascript:toggleAway" style="position:absolute; right:0; top:0;">AFK</a><a class="wikia-button" href="javascript:active.clearWindow" style="position:absolute; right:0; bottom:2px;">Clear</a>'); //Unbind all of the window listeners that set your status to back $(window).unbind('mousemove').unbind('focus').unbind('keypress'); //Add the sound space $('body').append(' '); //Add the area for adding more pings $('#ChatHeader .wordmark').append(' Ping phrases <span title="If a user says one of these phrases (case insensitive), you will be pinged">(?) <textarea id="pings" style="display:none;">' + ((readCookie('pingphrases')) ? readCookie('pingphrases').split('\\n').join('\n')  : wgUserName) + ' '); document.getElementById('pingspan').onmouseover = function(event) {document.getElementById('pings').style.display = 'block';} document.getElementById('pingspan').onmouseout = function(event) {document.getElementById('pings').style.display = 'none'; createCookie('pingphrases', document.getElementById('pings').value.split('\n').join('\\n'), 99999);} }); } else { 	$(function { if(document.body.className.indexOf('skin-oasis') == -1) { var a = document.getElementsByTagName('a'); for(var i in a) { if(a[i].href && a[i].href.indexOf('/wiki/Special:Chat') != -1) { a[i].href = 'javascript:OpenChatWindow; return false;'; } 			} 		} 		else { window.chatcheck = setInterval('ChatCheck', 200); } 	}); 	function ChatCheck { 		if($('.chat-join button').length != 0) { 			$('.chat-join button').replaceWith('<a class="wikia-button" onclick="OpenChatWindow"><img src="http://images.wikia.com/common/__cb36140/extensions/wikia/Chat/images/chat_icon.png" style="margin-right:3px;">Join the Chat</a>'); 			clearInterval(window.chatcheck); 		} 	} 	function OpenChatWindow { 		window.chatwindow = window.open('/index.php?title=Special:Chat&useskin=wikia'); 		window.chatwindow.onload = function { 			//addOnloadHook, importScript, and importStylesheet 			window.chatwindow.$('body').prepend(' \nfunction importScript(b){var a=wgScript+"?title="+encodeURIComponent(b.replace(/ /g,"_")).replace(/%2F/ig,"/").replace(/%3A/ig,":")+"&action=raw&ctype=text/javascript";return importScriptURI(a)}\nfunction importScriptURI(a){var b=document.createElement("script");b.setAttribute("src",a);b.setAttribute("type","text/javascript");document.getElementsByTagName("head")[0].appendChild(b);return b}\nfunction importScriptPage(b,d){var a="/index.php?title="+encodeURIComponent(b.replace(/ /g,"_")).replace("%2F","/").replace("%3A",":")+"&action=raw&ctype=text/javascript";if(typeof d=="string"){if(d.indexOf("://")==-1){a="http://"+d+".wikia.com"+a}else{a=d+a}} return importScriptURI(a)}\nfunction importStylesheet(a){return importStylesheetURI(wgScript+"?action=raw&ctype=text/css&title="+encodeURIComponent(a.replace(/ /g,"_")))}\nfunction importStylesheetURI(b,d){var a=document.createElement("link");a.type="text/css";a.rel="stylesheet";a.href=b;if(d){a.media=d}document.getElementsByTagName("head")[0].appendChild(a);return a}\nfunction importStylesheetPage(b,d){var a="/index.php?title="+encodeURIComponent(b.replace(/ /g,"_")).replace("%2F","/").replace("%3A",":")+"&action=raw&ctype=text/css";if(typeof d=="string"){if(d.indexOf("://")==-1){a="http://"+d+".wikia.com"+a}else{a=d+a }} return importStylesheetURI(a)}\n//This isn\'t the same as the regular addOnloadHook, because the regular one runs from a script tag in the body that I don\'t feel like appending. It\'s easier to just make it $(function), which is essentially equivalent\nfunction addOnloadHook(func) {$(func);}\n '); 			//global.js 			window.chatwindow.importScriptURI('http://community.wikia.com/index.php?title=User: ' + wgUserName + '/global.js&action=raw&ctype=text/javascript'); 			//wikia.js 			window.chatwindow.importScriptURI(wgServer + '/index.php?title=User:' + wgUserName + '/wikia.js&action=raw&ctype=text/javascript'); 			//global.css 			window.chatwindow.importStylesheetURI(' http://community.wikia.com/index.php?title=User: ' + wgUserName + '/global.css&action=raw&ctype=text/css'); 			//wikia.css 			window.chatwindow.importStylesheetURI(wgServer + '/index.php?title=User:' + wgUserName + '/wikia.css&action=raw&ctype=text/css'); 		} 	} }