+qwebirc.ui.QUI = new Class({
+ Extends: qwebirc.ui.NewLoginUI,
+ initialize: function(parentElement, theme) {
+ this.parent(parentElement, qwebirc.ui.QUI.Window, "qui");
+ this.theme = theme;
+ this.parentElement = parentElement;
+ },
+ postInitialize: function() {
+ this.qjsui = new qwebirc.ui.QUI.JSUI("qwebirc-qui", this.parentElement);
+
+ this.qjsui.top.addClass("tabbar");
+
+ this.qjsui.bottom.addClass("input");
+ this.qjsui.right.addClass("nicklist");
+ this.qjsui.topic.addClass("topic");
+ this.qjsui.middle.addClass("lines");
+
+ this.tabs = this.qjsui.top;
+ this.origtopic = this.topic = this.qjsui.topic;
+ this.origlines = this.lines = this.qjsui.middle;
+ this.orignicklist = this.nicklist = this.qjsui.right;
+
+ this.input = this.qjsui.bottom;
+ this.reflow = this.qjsui.reflow.bind(this.qjsui);
+
+ this.createInput();
+ this.reflow();
+ },
+ createInput: function() {
+ var form = new Element("form");
+ this.input.appendChild(form);
+ form.addClass("input");
+
+ var inputbox = new Element("input");
+ form.appendChild(inputbox);
+ this.inputbox = inputbox;
+
+ form.addEvent("submit", function(e) {
+ new Event(e).stop();
+
+ if(inputbox.value == "")
+ return;
+
+ this.getActiveWindow().historyExec(inputbox.value);
+ inputbox.value = "";
+ }.bind(this));
+
+ inputbox.addEvent("keydown", function(e) {
+ var resultfn;
+ var cvalue = inputbox.value;
+
+ if(e.key == "up") {
+ resultfn = this.commandhistory.upLine;
+ } else if(e.key == "down") {
+ resultfn = this.commandhistory.downLine;
+ } else {
+ return;
+ }
+
+ if((cvalue != "") && (this.lastcvalue != cvalue))
+ this.commandhistory.addLine(cvalue, true);
+
+ var result = resultfn.bind(this.commandhistory)();
+
+ new Event(e).stop();
+ if(!result)
+ result = "";
+ this.lastcvalue = result;
+
+ inputbox.value = result;
+ qwebirc.util.setAtEnd(inputbox);
+ }.bind(this));
+ },
+ setLines: function(lines) {
+ this.lines.parentNode.replaceChild(lines, this.lines);
+ this.qjsui.middle = this.lines = lines;
+ },
+ setChannelItems: function(nicklist, topic) {
+ if(!$defined(nicklist)) {
+ nicklist = this.orignicklist;
+ topic = this.origtopic;
+ }
+ this.nicklist.parentNode.replaceChild(nicklist, this.nicklist);
+ this.qjsui.right = this.nicklist = nicklist;
+
+ this.topic.parentNode.replaceChild(topic, this.topic);
+ this.qjsui.topic = this.topic = topic;
+ }
+});
+
+qwebirc.ui.QUI.JSUI = new Class({
+ initialize: function(class_, parent, sizer) {
+ this.parent = parent;
+ this.sizer = $defined(sizer)?sizer:parent;
+
+ this.class_ = class_;
+ this.create();
+
+ this.reflowevent = null;
+
+ window.addEvent("resize", function() {
+ this.reflow(100);
+ }.bind(this));
+ },
+ applyClasses: function(pos, l) {
+ l.addClass("dynamicpanel");
+ l.addClass(this.class_);
+
+ if(pos == "middle") {
+ l.addClass("leftboundpanel");
+ } else if(pos == "top") {
+ l.addClass("topboundpanel");
+ l.addClass("widepanel");
+ } else if(pos == "topic") {
+ l.addClass("widepanel");
+ } else if(pos == "right") {
+ l.addClass("rightboundpanel");
+ } else if(pos == "bottom") {
+ l.addClass("bottomboundpanel");
+ l.addClass("widepanel");
+ }
+ },
+ create: function() {
+ var XE = function(pos) {
+ var element = new Element("div");
+ this.applyClasses(pos, element);
+
+ this.parent.appendChild(element);
+ return element;
+ }.bind(this);
+
+ this.top = XE("top");
+ this.topic = XE("topic");
+ this.middle = XE("middle");
+ this.right = XE("right");
+ this.bottom = XE("bottom");
+ },
+ reflow: function(delay) {
+ if(!delay)
+ delay = 1;
+
+ if(this.reflowevent)
+ $clear(this.reflowevent);
+ this.__reflow();
+ this.reflowevent = this.__reflow.delay(delay, this);
+ },
+ __reflow: function() {
+ var bottom = this.bottom;
+ var middle = this.middle;
+ var right = this.right;
+ var topic = this.topic;
+ var top = this.top;
+
+ var topicsize = topic.getSize();
+ var topsize = top.getSize();
+ var rightsize = right.getSize();
+ var bottomsize = bottom.getSize();
+ var docsize = this.sizer.getSize();
+
+ var mheight = (docsize.y - topsize.y - bottomsize.y - topicsize.y);
+ var mwidth = (docsize.x - rightsize.x);
+
+ topic.setStyle("top", topsize.y + "px");
+
+ middle.setStyle("top", (topsize.y + topicsize.y) + "px");
+ if(mheight > 0) {
+ middle.setStyle("height", mheight + "px");
+ right.setStyle("height", mheight + "px");
+ }
+
+ if(mwidth > 0)
+ middle.setStyle("width", mwidth + "px");
+ right.setStyle("top", (topsize.y + topicsize.y) + "px");
+ right.setStyle("left", mwidth + "px");
+
+ bottom.setStyle("top", (docsize.y - bottomsize.y) + "px");
+ },
+ showChannel: function(state) {
+ var display = "none";
+ if(state)
+ display = "block";
+
+ this.right.setStyle("display", display);
+ this.topic.setStyle("display", display);
+ },
+ showInput: function(state) {
+ this.bottom.setStyle("display", state?"block":"none");
+ }
+});
+
+qwebirc.ui.QUI.Window = new Class({
+ Extends: qwebirc.ui.Window,