var chatUI = function (e) { function t(e, t) { var n, i = t || 200; return function () { var t = this, c = arguments; clearTimeout(n), n = setTimeout(function () { e.apply(t, Array.prototype.slice.call(c)) }, i) } } var n = {}; return n.container = e.append('
'), n.config = null, n.bubbles = [], n.ID = 0, n.keys = {}, n.types = {}, n.inputState = !1, n.height = 0, n.scroll = n.container.append(''), n.flow = n.scroll.append(''), n.input = n.container.append(''), n.input.append(''), n.input.append(""), n.updateContainer = function () { n.height = n.container.outerHeight(), n.flow.css("padding-top", n.height + "px"), n.scroll.css("height", n.height - (1 == n.inputState ? 77 : 0) + "px"), n.scrollTo("end") }, n.addBubble = function (e, t) { if (t = t || function () { }, e.type in n.types) { n.ID++; var i = n.ID; n.bubbles.push({id: i, type: e.type}), n.keys[i] = n.bubbles.length - 1; var c = n.flow.append(''); c.append(''); var l = c.append('" + t.value + "
").animate({ width: "auto", opacity: 1 }, 200), chat.scrollTo("end"), n() }, n.showInput = function (e, t) { n.inputState = !0, t ? n.input.find("input").on("change", function () { t($(this).val()) }) : n.input.find("input").on("change", function () { }), n.input.find("input").on("keyup", function (t) { 13 == t.keyCode && (e(n.input.find("input").val()), n.input.find("input").val("")) }), n.input.find("button").on("click", function () { e(n.input.find("input").val()), n.input.find("input").val("") }), n.input.css("display", "block"), n.updateContainer(), n.input.find("input").focus(), n.scrollTo("end") }, n.hideInput = function () { n.input.find("input").blur(), n.input.css("display", "none"), n.inputState = !1, n.updateContainer(), n.scrollTo("end") }, n.removeBubble = function (e) { n.flow.find("#cb-segment-" + e).remove(), n.bubbles.splice(n.keys[e], 1), delete n.keys[e] }, n.removeBubbles = function (e) { for (var t = n.bubbles.length - 1; t >= n.keys[e]; t--) n.removeBubble(n.bubbles[t].id) }, n.getBubble = function (e) { return {el: n.flow.find("#cb-segment-" + e), obj: n.bubbles[n.keys[e]]} }, n.scrollTo = function (e) { var t = 0; "end" == e && (t = document.getElementById("cb-flow").scrollHeight - (window.innerHeight - 77)), $("#cb-flow").stop().animate({scrollTop: t}, 300) }, $(window).on("resize", t(function () { n.updateContainer() }, 200)), n.updateContainer(), n };