var Jolt=function(){function a(){if(o().host)config.host=o().host;if(o().port)config.port=window.parseInt(o().port,10);t.failure=setTimeout(d,8E3);o().extensions!="disable"&&setTimeout(h,100);Joules.init()}function b(){UI.sidebar.empty();UI.view.empty().unbind();UI.composer.value("").disable();UI.login.show().note().enable().clear().focus();UI.controls.show_indicator();$(".topic").hide();Joules.embed_flash();UI.title.set("Login");UI.channellist.disable();UI.login.focus();UI.onresize()}function d(){UI.notifications.show({title:"Unsupported Browser",
content:'Unable to connect to the server, this suggests that you do not have Flash installed. <a href="http://get.adobe.com/flashplayer/" target="_blank">Click here</a> to download the latest version of Flash.'});UI.controls.hide_indicator()}function h(c){function e(){i++==f&&Events.emit("Jolt:extensions:loaded")}if(typeof c==="string")j(c,function(){});else{Events.emit("Jolt:extensions:loading");if(config.extensions.length===0)Events.emit("Jolt:extensions:loaded");else{var f=config.extensions.length,
i=0;$.each(config.extensions,function(n,p){typeof p=="string"&&j(this,e)})}}}function j(c,e){$.getScript("extensions/"+c+".js",e)}function m(){var c=new Date,e=c.getHours(),f=c.getMinutes();c=c.getSeconds();if(e<10)e="0"+e;if(f<10)f="0"+f;if(c<10)c="0"+c;return e+":"+f+":"+c}function g(c){c=c.toString();if(c.indexOf("http")>-1){if(c.indexOf("youtube")>-1){var e=' <a class="chat-link youtube-link" title="Watch inline" href="#youtube&$2">watch inline</a> http://youtube.com/watch?v=$2 ';c=c.replace(new RegExp("http\\:\\/\\/(www\\.)?youtube\\.com\\/watch\\?v=([A-Za-z0-9._%-]*)[&\\w;=\\+_\\-]*",
"gi"),e)}e='<a href="$1" title="Link: $1" target="_blank">$1</a>';c=c.replace(new RegExp("(http(s?)://((w){3}|([a-zA-Z0-9-.]+))([a-zA-Z0-9]+)(/?([a-zA-Z0-9-_@!$%#&?=+/.,:;~]+)?))","g"),e)}if(c.indexOf("{emote\t\t")>-1){e=c.match(new RegExp("\\{emote\t\t([^\t]+)\t([^\t]+)\t\t}","gi"));if(e===null)return c;for(var f=0,i=e.length;f<i;f++){var n=e[f].substr(8).split("\t").slice(0,2),p=unescape(n[0]);c=c.replace(e[f],'<img src="images/'+n[1]+'.png" class="emoticon" alt="'+p+'" title="Emoticon: '+p+'" />')}}if(c.indexOf("#")>
-1)c=c.replace(new RegExp("(^|\\s)(#[A-Z1-9_-]{1,})($|\\s)","gi"),' <a class="chat-link channel-link" title="Join: $2" href="#channel&$2">$2</a> ');return c.toString()}function q(c){for(var e in config.emoticons){var f=config.emoticons[e],i=e.replace(/([.?*+^$[\]\\(){}-])/g,"\\$1");c=c.replace(new RegExp(i,"g"),"{emote\t\t"+escape(e)+"\t"+f+"\t\t}")}return c.toString()}function l(c,e,f,i){e=e||false;f=f||";";i=i||",";c=c.split(f);if(e)return c;var n={};$.each(c,function(){var p=this.split(i);if(p[1])n[p[0]]=
p[1]});return n}function o(){var c=window.location.hash.substr(1);return l(c,false,";","=")}var t={users:{},privclasses:{},channels:[],failure:null,guest:false,disconnect:{count:0,autoreconnecting:false,timeout:null},client_string:"Jolt,v2.8b"},r={ds:{},start:function(c){if(c)r.ds[c]=(new Date).getTime()},stop:function(c){if(c in r.ds){var e=(new Date).getTime(),f=r.ds[c];r.clear(c);return e-f}return null},clear:function(c){delete r.ds[c]}},k={list:{},arr:[],chain:function(c){return{add_help:k.add_help(c),
add_usage:k.add_usage(c)}},register:function(c,e){if(k.list[c])throw new Error("Command cannot be registered, already exists.");if(c.indexOf(" ")>-1)throw new Error("Command names cannot contain spaces, use underscores, dashes or argument switches.");var f=function(){try{e.call(this)}catch(i){UI.notifications.show({title:"Command Error",content:i.message,buttons:UI.notifications.DISMISS})}};k.list[c]={func:f};k.arr.push(c);Events.clear("Jolt:command:"+c).listen("Jolt:command:"+c,f);return k.chain(c)},
add_help:function(c){return function(e){if(!k.list[c])throw new Error("Command does not exist, help cannot be added.");k.list[c].help=e;return k.chain(c)}},add_usage:function(c){return function(e){if(!k.list[c])throw new Error("Command does exist, usage cannot be added.");k.list[c].usage=e;return k.chain(c)}},get_help:function(c){return k.list[c].help||null},get_usage:function(c){return k.list[c].usage||null},exists:function(c){return k.list[c]?true:false},parser:function(c){var e={command:false,
args:[]};if(c.substr(0,1)!="/")return false;var f=c.substr(1).split(" ");e.command=f.shift();e.channels=t.channels;e.mode=UI.sidebar.current_type();e.name=UI.sidebar.current_name();e.create=Joules.create_packet;e.send=Joules.send;e.args=f;e.arg=function(i,n){n=n||false;return f[i]?f[i]:n};e.argumentsFromOffset=function(i){i=i||0;return f.slice(i)};return e}},s={list:{},chain:function(){return{}},register:function(c,e){if(c.indexOf(" ")>-1)throw new Error("Packet names cannot contain spaces.");var f=
function(){this.create=Joules.create_packet;this.send=Joules.send;this.channels=t.channels;this.mode=UI.sidebar.current_type();this.name=UI.sidebar.current_name();e.call(this)};s.list[c]||(s.list[c]={func:[]});s.list[c].func.push(f);Events.listen("Joules:packet:"+c,f);return{}}};window.Extensions={loaded:{},is_loaded:function(c){return!!Extensions.loaded[c]},list:function(){var c=[];for(var e in Extensions.loaded)Extensions.loaded.hasOwnProperty(e)&&c.push(e+" v"+Extensions.loaded[e].version);if(c.length===
0)return false;return c},register:function(c,e){if(!e.version)throw new Error("No version given for extension "+c);if(!e.author)throw new Error("No author given for extension "+c);if(!e.description)throw new Error("No description given for extension "+c);Extensions.loaded[c]=e;Events.emit("Jolt:extensions:registered:"+c,e);return{meta:e,command:k,packet:s,controls:UI.controls,composer:UI.composer,window:UI.window,notifications:UI.notifications,dropdown:UI.dropdown,title:UI.title}}};return{version:"2.8b",
datastore:t,init:a,reconnect:b,browser_fail:d,load_extensions:h,timestamp:m,parse_incoming_msg:g,parse_outgoing_msg:q,deep_parse:l,hash_parser:o,time:r,command:k,packet:s}}();
$(function(){UI.composer.disable();UI.console.log("log","Welcome to Jolt "+Jolt.version+"!");UI.console.log("log","Use this console for the forces of good, not evil!");$(".controls .spinner").bind("ajaxStart",UI.controls.show_indicator).bind("ajaxComplete",UI.controls.hide_indicator);Events.listen("Joules:onpacket",function(){UI.console.log("incoming",Joules.create_packet(this),true)});Events.listen("Joules:send",function(){UI.console.log("outgoing",this,true)});Events.listen("Joules:connect",function(){if(Jolt.datastore.disconnect.count>
0)Jolt.datastore.disconnect.count=0;clearTimeout(Jolt.datastore.failure);UI.controls.hide_indicator()});Events.listen("Joules:disconnect",function(){if(++Jolt.datastore.disconnect.count<5){UI.notifications.empty_queue();UI.notifications.hide()}else UI.notifications.show({title:"Disconnect",content:"You have been disconnect from the chat server.",buttons:[{label:"Reconnect",onclick:Jolt.reconnect},{label:"Dismiss"}],soundfx:true})});Events.listen("Joules:onerror",function(){UI.notifications.show({title:"Error Occured",
content:"An error occured and you might no longer be connected to the server.",buttons:[{label:"Reload",onclick:function(){window.location.reload()}},{label:"Dismiss"}],soundfx:true})});Jolt.packet.register("ping",function(){this.parameters.e!="ok"&&this.parameters.e!="timeout"&&Packet("pong")});Jolt.packet.register("credentials",function(){this.parameters.guest.toLowerCase()=="false"&&UI.login.hide_guest();this.parameters.login.toLowerCase()=="false"&&UI.notifications.show({title:"Server Disabled",
content:"This chat server has been temporarily disabled. At this time you cannot login. Please try again later.",soundfx:true});UI.preferences.load();var a=UI.storage.load("username")||false,b=UI.storage.load("authtoken")||false;if(a!==false&&b!==false){Jolt.datastore.username=a;Packet(["login","u="+a,"t="+b])}else{Packet("mod list");UI.login.show().enable().focus();UI.title.set("Login")}});Jolt.packet.register("disconnect",function(){var a=this.parameters.e,b=false;if(a=="quit")setTimeout(Jolt.reconnect,
200);else if(a=="closed")setTimeout(Jolt.reconnect,200);else{if(a=="killed")b={title:"Disconnected",content:"You have to kicked from the server by an server administrator, with the reason: "+(this.parameters.r||"no reason given"),soundfx:true,buttons:[{label:"Reconnect",onclick:Jolt.reconnect}]};if(a=="timeout"){b={title:"Disconnected",content:"Connection to the server has been lost, trying to reconnect..",hide:1E3,soundfx:true};setTimeout(Jolt.reconnect,1100)}if(a=="db disconnected"){b={title:"Disconnected",
content:"The server is currently offline, trying to reconnect...",hide:1E3,soundfx:true};setTimeout(Jolt.reconnect,1100)}if(a=="tempban"){b=parseInt(this.parameters.t,10);a=b*1E3+200;b={title:"Disconnected",content:"You have been temporarily banned from the server, for "+b+" seconds.",hide:a,soundfx:true};Jolt.datastore.disconnect.timeout&&clearTimeout(Jolt.datastore.disconnect.timeout);Jolt.datastore.disconnect.timeout=setTimeout(Jolt.reconnect,a)}b&&UI.notifications.show(b)}});Jolt.packet.register("login",
function(){if(this.parameters.e=="welcome"){UI.login.hide().clear().enable();Jolt.datastore.guest=false;if(this.parameters.t){UI.storage.save("authtoken",this.parameters.t);UI.storage.save("username",Jolt.datastore.username)}if(Jolt.hash_parser().hide_channellist=="true"){UI.channellist.disable();var a=Jolt.hash_parser().channel||"MainChannel";Packet(["join","ns="+a]);return}else{UI.channellist.enable();UI.channellist.focus()}}this.parameters.e=="login invalid"&&UI.login.show().note("Invalid username or password.").enable();
if(this.parameters.e=="token invalid"){UI.storage.clear("authtoken");UI.login.clear().show().enable();$('input[name="login[user]"]',".login-inset").val(UI.storage.load("username")||"")}this.parameters.e=="loggedin"&&UI.login.clear().show().note("You're already logged in to another client.").enable();this.parameters.e=="disabled"&&UI.login.show().note("This account has been disabled.").enable();this.parameters.e=="blocked"&&UI.login.show().note("This account has been blocked.").enable();this.parameters.e==
"bad"&&UI.login.show().note("Bad username, Letters and numbers only, between 4 and 12 characters.").enable()});Jolt.packet.register("guest",function(){if(this.parameters.e=="ok"){UI.login.hide().clear().enable();Jolt.datastore.guest=true;if(Jolt.hash_parser().hide_channellist=="true"){UI.channellist.disable();var a=Jolt.hash_parser().channel||"MainChannel";Packet(["join","ns="+a]);return}else{UI.channellist.enable();UI.channellist.focus()}}this.parameters.e=="disabled"&&UI.login.show("user").note("Guest logins are disabled on this server.").enable();
this.parameters.e=="in use"&&UI.login.show("guest").note("Someone else is currently using this name.").enable();this.parameters.e=="registered"&&UI.login.show("guest").note("This name has already been registered").enable();this.parameters.e=="bad"&&UI.login.show("guest").note("Bad name, Letters and numbers only, between 4 and 12 characters.").enable()});Jolt.packet.register("join",function(){var a=this.parameters.ns;if(this.parameters.e=="ok"){UI.channel.add(a);Jolt.datastore.channels.push(a);setTimeout(UI.channel.focus,
10,a)}this.parameters.e=="nonexistant"&&UI.notifications.show({title:"Join Channel",content:"This channel has not been created and therefore does not exist.",hide:2E3});this.parameters.e=="not privileged"&&UI.notifications.show({title:"Join Channel",content:"You don't have the privileges to join this channel.",hide:2E3});if(this.parameters.u&&this.parameters.ns){var b=this.parameters.u;UI.channel.add_message(a,"server",b,b+" joined #"+a)}});Jolt.packet.register("part",function(){var a=this.parameters.ns;
if(this.parameters.e=="ok"){var b=Jolt.datastore.channels.indexOf(a);Jolt.datastore.channels.splice(b,1);UI.channel.remove(a)}if(this.parameters.u){b=this.parameters.u;UI.channel.add_message(a,"server",b,b+" left ["+(this.parameters.r||"quit")+"]")}});Jolt.packet.register("server",function(){});Jolt.packet.register("property",function(){var a=this.parameters.ns;if(this.subcommand=="topic"){var b=Jolt.parse_incoming_msg(this.parameters.t);UI.channel.set_topic(a,b);UI.sidebar.current_type()=="channel"&&
UI.sidebar.current_name()==a&&$(".topic .wrap").html(b)}if(this.subcommand=="privclass"){b=Jolt.deep_parse(this.parameters.privclasses,true);var d=Jolt.deep_parse(this.parameters.users,true);Jolt.datastore.users[a]=[];Jolt.datastore.privclasses[a]=[];var h={},j={},m={};UI.channel.privclass.clear(a);Util.each(b,function(g){g=g.split(",");h[g[1]]=g[0];m[g[0]]={label:g[1],users:[]};UI.channel.privclass.add(a,g[1]);Jolt.datastore.privclasses[a][g[0]]=g[1]});Util.each(d,function(g){g=g.split(",");j[g[1]]=
g[0];m[g[0]].users.push(g[1]);UI.channel.privclass.add_user(a,m[g[0]].label,g[1]);Jolt.datastore.users[a].push(g[1])})}});Jolt.packet.register("topic",function(){this.parameters.e=="bad"&&UI.notifications.show({title:"Topic",content:"Topic malformed, please try again.",buttons:UI.notifications.DISMISS})});Jolt.packet.register("msg",function(){var a=this.parameters.ns,b=this.parameters.u,d;if(this.subcommand=="main"){d=Jolt.parse_incoming_msg(this.content);UI.channel.add_message(a,"main",b,d)}if(this.subcommand==
"action"){d=Jolt.parse_incoming_msg(this.content);UI.channel.add_message(a,"action",b,d)}if(this.subcommand=="server"){this.parameters.e=="spam"&&UI.notifications.show({title:"Spam Filter",content:"Your last message was ignored by our spam filter.",buttons:UI.notifications.DISMISS});if(this.parameters.e=="kicked"){d=b+" was kicked ["+(this.parameters.r||"no reason")+"]";UI.channel.add_message(a,"server",null,d)}if(this.parameters.e=="banned"){d=b+" was banned.";UI.channel.add_message(a,"server",null,
d)}if(this.parameters.e=="unbanned"){d=b+" was unbanned.";UI.channel.add_message(a,"server",null,d)}}});Jolt.packet.register("kick",function(){var a=this.parameters.ns,b=this.parameters.u,d;if(this.parameters.e=="kicked"){d="You where kicked from #"+a+" ["+(this.parameters.r||"no reason")+"]";UI.channel.add_message(a,"server",null,d)}else{if(this.parameters.e=="invalid")d="Unable to kick "+b+" from #"+a+", invalid user.";if(this.parameters.e=="owner")d="Unable to kick "+b+" from #"+a+", channel owner.";
UI.notifications.show({title:"Error Kicking User",content:d,hide:2E3,soundfx:true})}});Jolt.packet.register("ban",function(){var a=this.parameters.ns,b,d=this.parameters.u;if(this.parameters.e=="banned"){b="You where banned from #"+a;UI.channel.add_message(a,"server",null,b)}else{if(this.parameters.e=="invalid")b="Unable to ban "+d+" in #"+a+", invalid user.";if(this.parameters.e=="owner")b="Unable to ban "+d+" in #"+a+", channel owner.";this.parameters.e!="ok"&&UI.notifications.show({title:"Error Banning User",
content:b,hide:2E3,soundfx:true})}});Jolt.packet.register("unban",function(){});Jolt.packet.register("kill",function(){var a;if(this.parameters.e=="not privileged")a="You are not privileged to use this command.";if(this.parameters.e=="bad user")a="Unable to kill this user, bad user.";this.parameters.e!="ok"&&UI.notifications.show({title:"Error Killing User",content:a,hide:2E3,soundfx:true})});Jolt.packet.register("set",function(){this.subcommand=="topic"&&this.parameters.e=="ok"||this.subcommand==
"topic"&&this.parameters.e=="changed"&&UI.channel.add_message(this.parameters.ns,"server",null,this.parameters.u+" changed the channel topic.")});Jolt.packet.register("pchat:join",function(){var a=this.parameters.u,b;this.parameters.e=="request"&&UI.notifications.show({title:"Private Chat",content:"The user "+a+" is requesting a private chat. Do you want to Accept?",buttons:[{label:"Decline",onclick:function(){Packet(["pchat join","u="+a,"e=decline"])}},{label:"Accept",onclick:function(){Packet(["pchat join",
"u="+a,"e=accept"]);UI.pchat.add(a);b="Private chat started with "+a+".";UI.pchat.add_message(a,"server",null,b);setTimeout(UI.pchat.focus,10,a)}}],soundfx:true});if(this.parameters.e=="accepted"){UI.pchat.add(a);b="Private chat started with "+a+".";UI.pchat.add_message(a,"server",null,b);setTimeout(UI.pchat.focus,10,a);delete UI.datastore.empty_pchat_rooms[a]}this.parameters.e=="declined"&&UI.notifications.show({title:"Private Chat",content:"The user "+a+" declined the invite for a private chat.",
buttons:UI.notifications.DISMISS,soundfx:true})});Jolt.packet.register("pchat:part",function(){var a=this.parameters.u;this.parameters.e=="ok"&&UI.pchat.remove(a);if(this.parameters.e=="parted"){UI.pchat.add_message(a,"server",null,a+" has left the private chat.");UI.datastore.empty_pchat_rooms[a]=1}});Jolt.packet.register("pchat:msg",function(){var a=this.parameters.from||"",b=Jolt.parse_incoming_msg(this.content);this.parameters.e=="spam"&&UI.notifications.show({title:"Spam Filter",content:"Your last message was ignored by our spam filter.",
buttons:UI.notifications.DISMISS});this.parameters.e=="msg"&&UI.pchat.add_message(a,"main",a,b);this.parameters.e=="action"&&UI.pchat.add_message(a,"action",a,b)});Jolt.packet.register("block",function(){var a=this.parameters.u,b;if(this.parameters.e=="ok")b=a+" was blocked.";if(this.parameters.e=="blocked")b=a+" was already blocked.";UI.notifications.show({title:"User Management",content:b,buttons:UI.notifications.DISMISS})});Jolt.packet.register("unblock",function(){var a=this.parameters.u;this.parameters.e==
"ok"&&UI.notifications.show({title:"User Management",content:a+" was unblocked.",buttons:UI.notifications.DISMISS})});Jolt.packet.register("request",function(){var a=this.parameters.ns;if(this.subcommand=="pclass"){var b=Jolt.deep_parse(this.parameters.p,false,";","|"),d=[];for(var h in b)b.hasOwnProperty(h)&&d.push(Jolt.datastore.privclasses[a][h])}if(this.subcommand=="userlist"){b=Jolt.deep_parse(this.parameters.users,true,";");d={};for(var j in b)if(b.hasOwnProperty(j)){h=b[j].split(",");if(d[Jolt.datastore.privclasses[a][h[0]]])d[Jolt.datastore.privclasses[a][h[0]]].push(h[1]);
else d[Jolt.datastore.privclasses[a][h[0]]]=[h[1]]}}});Jolt.packet.register("list",function(){for(var a={},b=this.content.split("\n"),d=0,h=b.length;d<h;d++){var j=b[d].split(",");a[j.shift()]={users:j.shift(),topic:j.join(",")}}UI.channellist.add_channels(a)});Jolt.packet.register("promote",function(){var a=this.parameters.ns,b;if(this.parameters.e=="invalid class"){b="Unable to promote user, invalid privclass specified.";UI.channel.add_message(a,"server",null,b)}if(this.parameters.e=="promoted"){b=
this.parameters.u;b=b+" was promoted to "+this.parameters.c+"";UI.channel.add_message(a,"server",null,b)}if(this.parameters.e=="bad"){b=this.parameters.u;b="Could not promote "+b+", user does not exist.";UI.channel.add_message(a,"server",null,b)}});Jolt.packet.register("demote",function(){var a=this.parameters.ns,b;if(this.parameters.e=="invalid class"){b="Unable to demote user, invalid privclass specified.";UI.channel.add_message(a,"server",null,b)}if(this.parameters.e=="demoted"){b=this.parameters.u;
b=b+" was demoted to "+this.parameters.c+"";UI.channel.add_message(a,"server",null,b)}if(this.parameters.e=="bad"){b=this.parameters.u;b="Could not demote "+b+", user does not exist.";UI.channel.add_message(a,"server",null,b)}});Jolt.packet.register("whois",function(){var a;if(this.parameters.e=="unavailable")a={title:"Whois Lookup",content:"This username is unavailable (offline).",buttons:UI.notifications.DISMISS};else{a=this.parameters.u;var b=this.parameters.ip||false,d=this.parameters.ns;d=d==
"null"?["No channels"]:d.split(",");d="Channels: "+d.join(", ");if(b!==false)d+="<br />IP: "+b;a={title:"Whois Lookup for "+a,content:d,buttons:UI.notifications.DISMISS}}UI.notifications.show(a)});Jolt.packet.register("broadcast",function(){this.parameters.e==="not privileged"?UI.notifications.show({title:"Broadcast",content:"You do not have the privileges to broadcast",buttons:UI.notifications.DISMISS}):UI.channel.add_message(true,"server","","<b>Broadcast:</b> "+this.content)});Jolt.command.register("help",
function(){var a=this.arg(0,false),b;if(a===false)b="Help usage: /help [command name]";else if(Jolt.command.exists(a)===false)b="This command does not exist.";else{b=Jolt.command.get_help(a);if(b===null)b="No help provided.";b="<p>"+b+"</p>";a=Jolt.command.get_usage(a);if(a!==null)b+="<h3>Usage:</h3><p>"+a+"</p>"}UI.notifications.show({title:"Command Help",content:b,soundfx:true,buttons:UI.notifications.DISMISS})});Jolt.command.register("console",function(){UI.console.toggle()}).add_help("Toggles the packet console on and off.").add_usage("/console");
Jolt.command.register("me",function(){var a=this.args.join(" ");if(this.mode=="channel"){var b=this.name;UI.history.record("channel",b,a);Packet(["msg action","ns="+b,"",a])}if(this.mode=="pchat"){b=this.name;UI.history.record("pchat",b,a);Packet(["pchat msg","to="+b,"e=action","",a]);a!=""&&UI.pchat.add_message(b,"action",Jolt.datastore.username,a)}}).add_help("Sends an action message.").add_usage("/me [action you want to send]");Jolt.command.register("clear",function(){this.mode=="channel"&&UI.channel.clear(this.name);
this.mode=="pchat"&&UI.pchat.clear(this.name)}).add_help("Clears all the text from the chat window.").add_usage("/clear");Jolt.command.register("whois",function(){var a=this.arg(0,false);if(a===false)throw new Error("No user specified.");Packet(["whois","u="+a])}).add_help("Lookup users on the server").add_usage("/whois [username]");Jolt.command.register("broadcast",function(){Packet(["broadcast","",this.args.join(" ")])}).add_help("Broadcast messages to every user on every channel").add_usage("/broadcast [message]");
Jolt.command.register("join",function(){var a=this.arg(0,false);if(a.substr(0,1)=="#")a=a.substr(1);if(a===false)throw new Error("No channel specified.");Packet(["join","ns="+a])}).add_help("Join a specific channel").add_usage("/join [channel]");Jolt.command.register("part",function(){if(this.mode=="channel"){var a=this.arg(0,this.name);if(a.substr(0,1)=="#")a=a.substr(1);Packet(["part","ns="+a])}if(this.mode=="pchat"){a=this.arg(0,this.name);if(UI.datastore.empty_pchat_rooms[a]==1){delete UI.datastore.empty_pchat_rooms[a];
UI.pchat.remove(a)}else Packet(["pchat part","u="+a])}}).add_help("Part from a channel, if no channel is given, the current channel is parted.").add_usage("/part [channel]");Jolt.command.register("chat",function(){var a=this.arg(0,false);if(a===false)throw new Error("No user specified.");Packet(["pchat join","u="+a]);UI.notifications.show({title:"Private Chat",content:"A private chat request has been sent to "+a+".",hide:2E3})}).add_help("Request a private chat with a specific user.").add_usage("/chat [user]");
Jolt.command.register("kick",function(){if(this.mode==="channel"){var a=this.name,b=this.arg(0)||false,d=this.argumentsFromOffset(1).join(" ")||false;if(b===false)throw new Error("No user specified.");d!==false?Packet(["kick","ns="+a,"u="+b,"r="+d]):Packet(["kick","ns="+a,"u="+b])}}).add_help("Kicks specified user from the channel if you have privileges to do so.").add_usage("/kick [username] [reason]");Jolt.command.register("ban",function(){if(this.mode==="channel"){var a=this.name,b=this.arg(0,
false);if(b===false)throw new Error("No user specified.");Packet(["ban","ns="+a,"u="+b])}}).add_help("Bans specified user from the channel if you have the privileges to do so.").add_usage("/ban [username]");Jolt.command.register("unban",function(){if(this.mode==="channel"){var a=this.name,b=this.arg(0,false);if(b===false)throw new Error("No user specified.");Packet(["unban","ns="+a,"u="+b])}}).add_help("Unbans specified user from the channel if you have the privileges to do so.").add_usage("/unban [username]");
Jolt.command.register("kill",function(){var a=this.arg(0,false),b=this.argumentsFromOffset(1).join(" ")||false;if(a===false)throw new Error("No user specified.");b!==false?Packet(["kill","u="+a,"r="+b]):Packet(["kill","u="+a])}).add_help("Kills a specified user from the chat server if you are a network admin.").add_usage("/kill [username]");Jolt.command.register("block",function(){var a=this.arg(0,false);if(a===false)throw new Error("No user specified.");Packet(["block","u="+a])}).add_help("Blocks a login username from logging in.").add_usage("/block [user]");
Jolt.command.register("unblock",function(){var a=this.arg(0,false);if(a===false)throw new Error("No user specified.");Packet(["unblock","u="+a])}).add_help("Unblocks a login username from logging in.").add_usage("/unblock [user]");Jolt.command.register("promote",function(){if(this.mode!=="channel")return false;var a=this.arg(0,false),b=this.arg(1,false),d=this.name;if(a===false)throw new Error("No user specified.");if(b===false)throw new Error("No privclass specified.");Packet(["promote "+b,"u="+
a,"ns="+d])}).add_help("Promotes a user to a specific privclass.").add_usage("/promote [user] [privclass]");Jolt.command.register("demote",function(){if(this.mode!=="channel")return false;var a=this.arg(0,false),b=this.arg(1,false),d=this.name;if(a===false)throw new Error("No user specified.");if(b===false)throw new Error("No privclass specified.");Packet(["demote "+b,"u="+a,"ns="+d])}).add_help("Demotes a user to a specific privclass.").add_usage("/demote [user] [privclass]");Jolt.command.register("tempban",
function(){var a=this.arg(0,false),b=this.arg(1,6E4);if(a===false)throw new Error("No user specificed.");Packet(["tempban","u="+a,"t="+b])});Jolt.command.register("signout",function(){UI.storage.clear("authtoken");UI.storage.clear("username");Packet("disconnect")}).add_help("Signs you out from the chat server.").add_usage("/signout");Events.listen("UI:login",function(){var a=this.user,b=this.pass,d=window.location.href.split("#")[0];Jolt.datastore.username=a;Packet(["login","u="+a,"p="+b,"client="+
Jolt.datastore.client_string,"origin="+d]);UI.login.disable()});Events.listen("UI:guest",function(){var a=this.name,b=window.location.href.split("#")[0];Jolt.datastore.username=a;Packet(["guest","u="+a,"client="+Jolt.datastore.client_string,"origin="+b]);UI.login.disable()});Events.listen("UI:window:inputchange",function(){UI.preferences.set(this.id,this.value);var a=this.id.split("_");if(a[1]=="enabled"){a=a[0];$('input[id^="'+a+'"]:not(#'+this.id+'), select[id^="'+a+'"], textarea[id^="'+a+'"]',
".modal-windows").attr("disabled",this.value===true?"":"disabled")}});Events.listen("UI:preferences:timestamp_enabled",function(){this.value===true?UI.timestamp.enable():UI.timestamp.disable()});Events.listen("UI:preferences:timestamp_location",function(){this.value=="hover"&&UI.timestamp.hover_mode();this.value=="always"&&UI.timestamp.always_mode()});Events.listen("UI:preferences:composer_button",function(){this.value===true?$(".composer").addClass("with-button"):$(".composer").removeClass("with-button")});
Events.listen("UI:user",function(){function a(){UI.composer.focus().value("/chat "+l)}function b(){UI.composer.focus().value("/promote "+l+" [privclass]").select("[privclass]")}function d(){UI.composer.focus().value("/demote "+l+" [privclass]").select("[privclass]")}function h(){UI.composer.focus().value("/kick "+l+" [reason]").select("[reason]")}function j(){UI.composer.focus().value("/ban "+l)}function m(){UI.composer.focus().value("/kill "+l+" [reason]").select("[reason]")}function g(){UI.composer.focus().value("/whois "+
l)}var q=this.channel,l=this.user,o=$(this.click_event.target).offset();UI.dropdown.create({titles:["User Actions","Privileges","Channel Actions"],items:{"User Actions":[{label:"Private Chat",fn:a},{label:"Kill from Server",fn:m},{label:"Whois",fn:g}],Privileges:[{label:"Promote "+l,fn:b},{label:"Demote "+l,fn:d}],"Channel Actions":[{label:"Kick from "+q,fn:h},{label:"Ban from "+q,fn:j}]},top:o.top-15,left:o.left+150});$("#sidebar-channel-privclasses-"+q+" .user-"+l,".sidebar-list").addClass("current");
Events.listen("UI:dropdown:destroyed",function(){$("#sidebar-channel-privclasses-"+q+" .user-"+l,".sidebar-list").removeClass("current")})});Events.listen("UI:unread:update",function(){if(this.type=="channel"){$("#sidebar-channel-"+this.name+" span.counter",".sidebar-list").text(this.count).show();this.aimed&&$("#sidebar-channel-"+this.name+" span.counter",".sidebar-list").addClass("aimed")}if(this.type=="pchat"){$("#sidebar-pchat-"+this.name+" span.counter",".sidebar-list").text(this.count).show();
UI.title.start_toggle("New message from "+this.name)}if(this.aimed&&UI.preferences.get("sound_enabled")&&UI.preferences.get("sound_aimed"))UI.soundfx.play("aimed");else UI.preferences.get("sound_enabled")&&UI.preferences.get("sound_unread")&&UI.soundfx.play("unread")});Events.listen("UI:unread:clear",function(){this.type=="channel"&&$("#sidebar-channel-"+this.name+" span.counter",".sidebar-list").removeClass("aimed").text("0").hide();this.type=="pchat"&&$("#sidebar-pchat-"+this.name+" span.counter",
".sidebar-list").text("0").hide();UI.title.stop_toggle()});Events.listen("UI:tab",function(){function a(j){if(j=="")return-1;for(var m=0,g=this.length;m<g;m++)if(this[m].substr(0,j.length).toLowerCase()==j.toLowerCase())return m;return-1}if(this.mode=="channel"){var b=this.value.split(" "),d=b[b.length-1],h=UI.sidebar.current_name();h=Jolt.datastore.users[h];d=a.call(h,d);d=d>-1?h[d]:false;if(d!==false){b[b.length-1]=d+(b.length==1?": ":" ");UI.composer.value(b.join(" "))}}});Events.listen("UI:send",
function(){var a;this.mode=="console"&&Joules.send(this.value);if(this.mode=="channel"){a=Jolt.parse_outgoing_msg(this.value);var b=UI.sidebar.current_name();UI.history.record("channel",b,a);Packet(["msg main","ns="+b,"",a])}if(this.mode=="pchat"){a=Jolt.parse_outgoing_msg(this.value);b=UI.sidebar.current_name();UI.history.record("pchat",b,a);Packet(["pchat msg","to="+b,"e=msg","",a]);a=Jolt.parse_incoming_msg(a);a!=""&&UI.pchat.add_message(b,"main",Jolt.datastore.username,a)}});Events.listen("UI:history",
function(){var a;if(this.UP===true)a=UI.history.previous(this.mode,this.name);if(this.DOWN===true)a=UI.history.next(this.mode,this.name);a&&UI.composer.value(a)});setTimeout(Jolt.init,1)});

