您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Complete and comprehensive CCTA mail client. Zmail is fast and easy to use mail client that allows you to send and receive messages.
// ==UserScript== // @name Command & Conquer TA Zmail // @description Complete and comprehensive CCTA mail client. Zmail is fast and easy to use mail client that allows you to send and receive messages. // @namespace http*://*.alliances.commandandconquer.com/* // @include http*://*.alliances.commandandconquer.com/* // @version 2015.11.08 // @grant none // @author zdoom // ==/UserScript== (function(){ var injectFunction = function() { function createClass() { qx.Class.define('zmail.data', { type: 'singleton', extend: qx.core.Object, construct: function() { try { if (typeof localStorage.ccta_zmail !== 'undefined') { var json = JSON.parse(localStorage.ccta_zmail); if (json.hasOwnProperty('archive')) this.archive = json.archive; } else { var sd = { 'folders': {'draft': {}, 'junk': [], 'trash': [[],[]], 'documents': []}, 'contacts': {'blocked': [], 'friends': [], 'groups': {}}, 'archive': {} }; localStorage['ccta_zmail'] = JSON.stringify(sd); console.log('zmail: starting zmail for the first time......'); this.firstTime = true; } var inbox = { folder: null, count: null, messages: [], newMessages: [], unRead: null }; var outbox = { folder: null, count: null, messages: [], newMessages: [] }; this.inbox = inbox; this.outbox = outbox; var data = ClientLib.Data.MainData.GetInstance(); var mail = data.get_Mail(); var root = this; var alliance = data.get_Alliance(); var allianceExists = alliance.get_Exists(); this.allianceExists = allianceExists; if (allianceExists) { var roles = alliance.get_Roles(); var relations = alliance.get_Relationships(); this.roles = roles; if (relations !== null) { var totalAllies = 0; for (var i = 0; i < relations.length; i++) if (relations[i].Relationship == 1) totalAllies++; for (var i = 0; i < relations.length; i++) { var type = relations[i].Relationship, id = relations[i].OtherAllianceId, name = relations[i].OtherAllianceName; if (type == 1) this.getAllianceMembers(id, name, totalAllies, true); } } else { this.allies = {}; this.status.allies = true; console.log('zmail: allies(0).......................... ready'); this.onReady(); } this.getMembers(true); } else console.log('zmail: ' + 'No alliance detected: ' + alliance.get_Exists()); var ownerName = data.get_Player().get_Name(); var ownerId = data.get_Player().get_Id(); this.ownerName = ownerName; this.ownerId = ownerId; var getPlayers = function(fi,li,ti) { ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("RankingGetData", { 'ascending': true, 'firstIndex': fi, 'lastIndex': li, 'rankingType': 0, 'sortColumn': 2, 'view': 0 }, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { if (data !== null) this.players = this.players.concat(data.p); if (this.players.length == ti) { this.status.playersList = true; console.log('zmail: ' + 'global players list.......................... ready'); this.onReady(); } }), null); }; var getList = function(count) { var pages = Math.ceil(count/4500); for (var i = 0; i < pages; i++) { var Min = i * 4500, Max = Math.min((((i + 1) * 4500) - 1), (count - 1)); getPlayers.apply(root, [Min, Max, count]); } }; ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("RankingGetCount", { 'rankingType': 0, 'view': 0 }, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { if (data !== null) getList(data); }), null); var getFolder = function(type) { var gmh = mail.GetMailHeaders.toString(); var prop = gmh.replace(/^.*?c=this\.(.*?)\.d\[a\].*?$/, '$1'); var folder = mail[prop].d[type].i; return folder; } ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand ("IGMGetFolders", {}, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { if (data !== null) { this.inbox.folder = data[0].i; this.outbox.folder = data[1].i; console.log('zmail: ' + 'folders ids.......................... ready'); } else { console.log('zmail: ' + 'Attempting folder ids fallback function'); this.inbox.folder = getFolder(0); this.outbox.folder = getFolder(1); console.log('zmail: ' + 'folders ids.......................... ready'); } ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("IGMGetMsgCount", {'folderId': this.inbox.folder}, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { console.log('zmail: inbox(' + data + ')'); this.inbox.count = data; if ((data !== null) && (this.outbox.count !== null)) { this.getMsgHeaders(this.inbox.folder, this.inbox.count, 0); this.getMsgHeaders(this.outbox.folder, this.outbox.count, 1); } }), null); ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("IGMGetMsgCount", {'folderId': this.outbox.folder}, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { console.log('zmail: outbox(' + data + ')'); this.outbox.count = data; if ((data !== null) && (this.inbox.count !== null)) { this.getMsgHeaders(this.inbox.folder, this.inbox.count, 0); this.getMsgHeaders(this.outbox.folder, this.outbox.count, 1); } }), null); this.status.folders = true; this.onReady(); }), null); this.timer = new qx.event.Timer(300); this.timer.addListener('interval', this.onMailSent, this); } catch(e) { console.log('zmail: ' + e.toString()) } }, destruct: function(){}, members: { inbox: null, outbox: null, update: null, archive: {}, inProgress: false, players: [], allianceExists: null, roles: null, allianceMembers: null, allianceCommanders: null, allianceOfficers: null, allies: {}, ownerName: null, ownerId: null, counter: 0, timer: null, isLoaded: false, firstTime: false, status: {'playersList': false, 'allianceMembers': false, 'allies': false, 'folders': false, 'messages': false}, callMethod: function(fn, args) { var root = this; root[fn].apply(root, args); }, update: function() { if(this.inProgress) return; this.inProgress = true; var data = ClientLib.Data.MainData.GetInstance(); var mail = data.get_Mail(); this.inbox.count = mail.GetMailCount(0); this.outbox.count = mail.GetMailCount(1); this.inbox.unRead = mail.GetUnreadCount();; this.getMsgHeaders(this.inbox.folder, this.inbox.count, 0); this.getMsgHeaders(this.outbox.folder, this.outbox.count, 1); }, markRead: function(id, flag) { ClientLib.Data.MainData.GetInstance().get_Mail().SetMailRead(id, flag); }, deleteMsgs: function(id, folder) { ClientLib.Data.MainData.GetInstance().get_Mail().DeleteMessages(id, folder); }, sendMail: function(to, alliance, subject, message) { ClientLib.Data.MainData.GetInstance().get_Mail().SendMail(to, alliance, subject, message); this.counter = 0; this.onMailSent(); this.timer.start(); }, onMailSent: function() { ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("IGMGetMsgCount", {'folderId': this.outbox.folder}, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { if ((data !== null) && (data > this.outbox.count)) { this.update(); this.timer.stop(); this.counter = 0; } else if (this.counter > 20) { alert('Error sending message'); this.timer.stop(); } else this.counter++; }), null); }, createBBCode: { 'coords': function(name,x,y) { return webfrontend.gui.util.BBCode.createCoordsLinkText(name,x,y).replace('#0d77bb', '#377395'); }, 'player': function(name) { return webfrontend.gui.util.BBCode.createPlayerLinkText(name).replace('#0d77bb', '#377395'); }, 'alliance': function(name) { return webfrontend.gui.util.BBCode.createAllianceLinkText(name).replace('#0d77bb', '#377395'); } }, getMembers: function(flag) { ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("AllianceGetMemberData", {}, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { var alliance = [], commanders = [], officers = []; for (var i = 0; i < data.length; i++) { var name = data[i].n, id = data[i].i, roleId = data[i].r, role = this.roles.d[roleId].Name; switch(role) { case 'Leader': role = 'Commander-in-Cheif'; break; case 'Newbie': role = 'Trial'; break; } var member = {'id': id, 'name': name, 'role': role, 'roleId': roleId}; if (role == 'Commander-in-Cheif' || role == 'Second Commander') commanders.push(member); if (role == 'Officer') officers.push(member); alliance.push(member); } this.allianceMembers = alliance; this.allianceCommanders = commanders; this.allianceOfficers = officers; var structure = zmail.structure.getInstance(); structure.applyMethod('updateContacts', [alliance, commanders, officers]); if (flag) { this.status.allianceMembers = true; console.log('zmail: ' + 'alliance members.......................... ready'); this.onReady(); } }), null); }, getAllianceMembers: function(aid, name, total, flag) { ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("GetPublicAllianceMemberList", {'id': aid }, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { this.allies[name] = data; var loaded = 0; for (var x in this.allies) loaded++; if (loaded == total) { var structure = zmail.structure.getInstance(); structure.applyMethod('updateAllies', [this.allies]); if (flag) { this.status.allies = true; console.log('zmail: ' + 'allies (' + total + ').......................... ready'); this.onReady(); } } }), null); }, _onAllianceChange: function() { var data = ClientLib.Data.MainData.GetInstance(); var alliance = data.get_Alliance(); var allianceExists = alliance.get_Exists(); this.allianceExists = allianceExists; this.allies = {}; if(allianceExists) { var relations = alliance.get_Relationships(); if (relations !== null) { var totalAllies = 0; for (var i = 0; i < relations.length; i++) if (relations[i].Relationship == 1) totalAllies++; for (var i = 0; i < relations.length; i++) { var type = relations[i].Relationship, id = relations[i].OtherAllianceId, name = relations[i].OtherAllianceName; if (type == 1) this.getAllianceMembers(id, name, totalAllies, false); } } else zmail.structure.getInstance().callMethod('updateAllies', null); this.getMembers(false); } else { console.log('zmail: ' + 'No alliance detected: ' + alliance.get_Exists()); var structure = zmail.structure.getInstance(); structure.applyMethod('updateContacts', [null, null, null]); structure.applyMethod('updateAllies', [null]); } }, getMsgHeaders: function(id, count, type) { type == 0 ? this.inbox.messages = [] : this.outbox.messages = []; type == 0 ? this.inbox.newMessages = [] : this.outbox.newMessages = []; var pages = Math.ceil(count/1000); for (var n = 0; n < pages; n++) { var start = n * 1000; var amount = (pages > 1) ? (n == pages - 1) ? (count - (n * 1000)) : 1000 : count; ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("IGMGetMsgHeader", {folder: id, ascending: false, skip: start, take: amount, sortColumn: 1}, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { for (var i = 0; i < data.length; i++) this.getMsgBody(data[i], type); }), null); } }, getMsgBody: function(msg, type) { if (this.archive.hasOwnProperty(msg.i)) { if (this.archive[msg.i].r != msg.r) this.archive[msg.i].r = msg.r; type == 0 ? this.inbox.messages.push(this.archive[msg.i]) : this.outbox.messages.push(this.archive[msg.i]); this.onCompleted(); } else { ClientLib.Net.CommunicationManager.GetInstance().SendSimpleCommand("IGMGetMsg", { mailId: msg.i }, phe.cnc.Util.createEventDelegate(ClientLib.Net.CommandResult, this, function(context, data) { var cm = msg; cm.b = data; type == 0 ? this.inbox.messages.push(cm) : this.outbox.messages.push(cm); if (type == 0) { if (this.isLoaded) this.inbox.newMessages.push(cm); else { if (!cm.r) this.inbox.newMessages.push(cm); } } else { if (this.isLoaded) this.outbox.newMessages.push(cm); } this.archive[msg.i] = cm; this.onCompleted(); }), null); } }, onCompleted: function() { var ti = this.inbox.count, to = this.outbox.count, ci = this.inbox.messages.length, co = this.outbox.messages.length; var structure = zmail.structure.getInstance(); if ((ti == ci) && (to == co)) { var json = JSON.parse(localStorage.ccta_zmail); json.archive = this.archive; localStorage.ccta_zmail = JSON.stringify(json); var received = this.inbox.newMessages, sent = this.outbox.newMessages; if (((received.length + sent.length) > 0) || !this.isLoaded) { if (this.firstTime) { structure.applyMethod('updateDownloads', [ci + co, ti + to]); } if (this.isLoaded) structure.callUpdate(this.inbox.messages, this.outbox.messages, received, sent); if (!this.isLoaded) { this.isLoaded = true; this.status.messages = true; console.log('zmail: ' + 'messages.......................... ready'); this.onReady(); } } if (this.firstTime) this.firstTime = false; this.inProgress = false; } else { if (this.firstTime) { var current = ci + co, total = ti + to; if (!structure.downloadsCont) structure.applyMethod('showDownloads', [total]); structure.applyMethod('updateDownloads', [current, total]); } } }, _onMailChange: function() { console.log('zmail: checking new messages'); this.update(); }, attachEvent: function() { if (typeof phe.cnc.Util.attachNetEvent == 'undefined') webfrontend.gui.Util.attachNetEvent.apply(null, arguments); else phe.cnc.Util.attachNetEvent.apply(null, arguments); }, onReady: function() { var status = this.status, ready = true, exists = this.allianceExists; if (exists == true) { for (var x in status) if (status[x] === false) ready = false; } else if (exists == false) { if (!status.playersList || !status.folders || !status.messages) ready = false; } else { ready = false; console.log('zmail: ' + 'alliance is null', exists); } if (ready) { var structure = zmail.structure.getInstance(), inbox = this.inbox, outbox = this.outbox; var data = ClientLib.Data, mainData = data.MainData.GetInstance(); structure.callUpdate(inbox.messages, outbox.messages, inbox.newMessages, outbox.newMessages); zmail.main.getInstance().initScriptButton(); this.attachEvent(mainData.get_Mail(), 'DataChange', data.MailDataChange, this, this._onMailChange); this.attachEvent(mainData.get_Alliance(), 'Change', data.AllianceChange, this, this._onAllianceChange); } } } }); qx.Class.define('zmail.main', { type: 'singleton', extend: qx.ui.container.Composite, construct: function() { this.base(arguments); var layout = new qx.ui.layout.Canvas(); this._setLayout(layout); var widget = new qx.ui.core.Widget(); widget.setPadding(3); widget.setHeight(546); var div = new qx.html.Element('div', null, {'id': 'zdoom_mail_container'}); widget.getContentElement().add(div); this.add(widget, {left: 0, top: 0}); this.widget = widget; this.wdgAnchor = new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_tl1.png").set({ width: 3, height: 32 }); this.__imgTopRightCorner = new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_tr.png").set({ width: 34, height: 35 }); this.__backgroundTop = new qx.ui.basic.Image(null); var cntBackgroundTop = new qx.ui.container.Composite(new qx.ui.layout.Canvas()).set({ height: 132 , maxHeight: 132 }); var cntBackgroundTopBackground = new qx.ui.container.Composite().set({ backgroundColor: "#000000" }); cntBackgroundTop.add(cntBackgroundTopBackground, { left: 0, top: 0, right: 0, bottom: 0 }); cntBackgroundTop.add(this.__backgroundTop, { left: 0, top: -10 }); this.__background = new qx.ui.basic.Image(null); var cntBackground = new qx.ui.container.Composite(new qx.ui.layout.Canvas()); cntBackground.add(this.__background, { left: 0, top: -10 }); this._add(cntBackground, { left: -114, top: 132-60 }); this._add(cntBackgroundTop, { left: -114, top: -60 }); this._add(this.__imgTopRightCorner, { right: 0, top: 0, bottom: 28 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_r.png").set({ width: 3, height: 1, allowGrowY: true, scale: true }), { right: 0, top: 35, bottom: 29 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_br.png").set({ width: 5, height: 28, allowGrowY: true, scale: true }), { right: 0, bottom: 0 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_b.png").set({ width: 1, height: 3, allowGrowX: true, scale: true }), { right: 5, bottom: 0, left: 5 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_bl.png").set({ width: 5, height: 29 }), { left: 0, bottom: 0 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_l.png").set({ width: 3, height: 1, allowGrowY: true, scale: true }), { left: 0, bottom: 29, top: 32 }); this._add(this.wdgAnchor, { left: 0, top: 0 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_tl2.png").set({ width: 25, height: 5 }), { left: 3, top: 0 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_t.png").set({ width: 1, height: 3, allowGrowX: true, scale: true }), { left: 28, right: 34, top: 0 }); this.__btnClose = new webfrontend.ui.SoundButton(null, "FactionUI/icons/icon_close_button.png").set({ appearance: "button-close", width: 23, height: 23, toolTipText: this.tr("tnf:close base view") }); this.__btnClose.addListener("execute", this._onClose, this); this._add(this.__btnClose, { top: 6, right: 5 }); var app = qx.core.Init.getApplication(); app.getDesktop().addListener('resize', this._onResize, this); }, destruct: function() { }, members: { isOpen: false, open: function() { this._onResize(); var root = this; var app = qx.core.Init.getApplication(); app.getDesktop().add(this); var mail = zmail.structure.getInstance(); var check = function() { var div = document.getElementById('zdoom_mail_container'); if(div) { div.appendChild(mail.dom.window.main); root.isOpen = true; } else setTimeout(check, 1000); }; check(); }, initScriptButton: function() { var init = function() { var app = qx.core.Init.getApplication(); var scriptMenu = app.getMenuBar().getScriptsButton(); var subMenu = new qx.ui.menu.Menu(); var btn = new qx.ui.menu.Button("Open Window", null, null); scriptMenu.getMenu().setWidth(94); btn.addListener("execute", this.open, this); subMenu.add(btn); scriptMenu.Add("Zmail", null, subMenu); } init.call(this); }, _onClose: function () { var app = qx.core.Init.getApplication(); app.getDesktop().remove(this); this.isOpen = false; }, _onResize: function() { var app = qx.core.Init.getApplication(); var mainOverlay = app.getMainOverlay(); var left = (app.getDesktop().getBounds().width - mainOverlay.getWidth()) / 2; this.setUserBounds(left, mainOverlay.getBounds().top, mainOverlay.getWidth(), 546); this.widget.setWidth(mainOverlay.getWidth()); }, center: function() { var parent = this.getLayoutParent(); if (parent) var bh = parent.getBounds(); if (bh) var bi = this.getSizeHint(); var bg = Math.round((bh.width - bi.width) / 2); var top = this.getBounds().top; this.moveTo(bg,top); } } }); qx.Class.define('zmail.compose', { type: 'singleton', extend: qx.ui.container.Composite, construct: function() { this.base(arguments); var layout = new qx.ui.layout.Canvas(); this._setLayout(layout); zmail.data.getInstance(); var widget = new qx.ui.core.Widget(); widget.setPadding(3); widget.setHeight(546); var div = new qx.html.Element('div', null, {'id': 'zdoom_newMail_container'}); widget.getContentElement().add(div); this.add(widget, {left: 0, top: 0}); this.widget = widget; this.wdgAnchor = new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_tl1.png").set({ width: 3, height: 32 }); this.__imgTopRightCorner = new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_tr.png").set({ width: 34, height: 35 }); this.__backgroundTop = new qx.ui.basic.Image(null); var cntBackgroundTop = new qx.ui.container.Composite(new qx.ui.layout.Canvas()).set({ height: 132 , maxHeight: 132 }); var cntBackgroundTopBackground = new qx.ui.container.Composite().set({ backgroundColor: "#000000" }); cntBackgroundTop.add(cntBackgroundTopBackground, { left: 0, top: 0, right: 0, bottom: 0 }); cntBackgroundTop.add(this.__backgroundTop, { left: 0, top: -10 }); this.__background = new qx.ui.basic.Image(null); var cntBackground = new qx.ui.container.Composite(new qx.ui.layout.Canvas()); cntBackground.add(this.__background, { left: 0, top: -10 }); this._add(cntBackground, { left: -114, top: 132-60 }); this._add(cntBackgroundTop, { left: -114, top: -60 }); this._add(this.__imgTopRightCorner, { right: 0, top: 0, bottom: 28 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_r.png").set({ width: 3, height: 1, allowGrowY: true, scale: true }), { right: 0, top: 35, bottom: 29 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_br.png").set({ width: 5, height: 28, allowGrowY: true, scale: true }), { right: 0, bottom: 0 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_b.png").set({ width: 1, height: 3, allowGrowX: true, scale: true }), { right: 5, bottom: 0, left: 5 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_bl.png").set({ width: 5, height: 29 }), { left: 0, bottom: 0 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_l.png").set({ width: 3, height: 1, allowGrowY: true, scale: true }), { left: 0, bottom: 29, top: 32 }); this._add(this.wdgAnchor, { left: 0, top: 0 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_tl2.png").set({ width: 25, height: 5 }), { left: 3, top: 0 }); this._add(new qx.ui.basic.Image("webfrontend/ui/common/frame_basewin/frame_basewindow_t.png").set({ width: 1, height: 3, allowGrowX: true, scale: true }), { left: 28, right: 34, top: 0 }); this.__btnClose = new webfrontend.ui.SoundButton(null, "FactionUI/icons/icon_close_button.png").set({ appearance: "button-close", width: 23, height: 23, toolTipText: this.tr("tnf:close base view") }); this.__btnClose.addListener("execute", this._onClose, this); this._add(this.__btnClose, { top: 6, right: 5 }); var app = qx.core.Init.getApplication(); app.getDesktop().addListener('resize', this._onResize, this); }, destruct: function() { }, members: { isOpen: false, open: function() { this._onResize(); var app = qx.core.Init.getApplication(); app.getDesktop().add(this); this.isOpen = true; var mail = zmail.structure.getInstance(); var check = function() { var div = document.getElementById('zdoom_newMail_container'); if(div) div.appendChild(mail.dom.window.compose); else setTimeout(check, 1000); }; check(); }, _onClose: function() { var app = qx.core.Init.getApplication(); app.getDesktop().remove(this); this.isOpen = false; }, _onResize: function() { var app = qx.core.Init.getApplication(); var mainOverlay = app.getMainOverlay(); var left = (app.getDesktop().getBounds().width - mainOverlay.getWidth()) / 2; this.setUserBounds(left, mainOverlay.getBounds().top, mainOverlay.getWidth(), 546); this.widget.setWidth(mainOverlay.getWidth()); }, center: function() { var parent = this.getLayoutParent(); if (parent) var bh = parent.getBounds(); if (bh) var bi = this.getSizeHint(); var bg = Math.round((bh.width - bi.width) / 2); var top = this.getBounds().top; this.moveTo(bg,top); } } }); qx.Class.define('zmail.structure', { type: 'singleton', extend: qx.core.Object, construct: function() { try { var root = this; var callUpdate = function() { root.update.apply(root, arguments); }; this.callUpdate = callUpdate; Element.prototype.zm_append = function (arr) { for (var i = 0; i < arr.length; i++) this.appendChild(arr[i]); }; Element.prototype.zm_empty = function() { while(this.firstChild) this.removeChild(this.firstChild); }; Element.prototype.zm_css = function(css) { var iterator = function(obj) { for(var x in obj) elm.style[x] = obj[x]; }; var elm = this; for (var key in css) { var prop = css[key]; switch(key) { case 'over': elm.onmouseover = function(){iterator(css['over'])}; break; case 'out': elm.onmouseout = function(){iterator(css['out'])}; break; case 'focus': elm.onfocus = function(){iterator(css['focus'])}; break; case 'blur': elm.onblur = function(){iterator(css['blur'])}; break; default: elm.style[key] = css[key]; } } }; Element.prototype.zm_prop = function (obj) { for (var key in object) this[key] = obj[key]; }; this.css.topBar.cont.backgroundImage = this.gradient('#5C5E62', '#3E4042'); this.css.searchResults.text.backgroundImage = this.gradient('#5a5a5a', '#4a4a4a'); var blueGrd = root.gradient('#3d7fa0', '#31678a'); var create = this.create, cssStyles = this.css, text = this.text; var winCont = create('div', cssStyles.window); var topBar = create('div', cssStyles.topBar.main); var topBarCont = create('div', cssStyles.topBar.cont); var leftBar = create('div', cssStyles.leftBar); var logo = create('div', cssStyles.topBar.logo); var tbMenu = create('div', cssStyles.topBar.menu); var middleBar = create('div', cssStyles.middleBar.cont); var rightBar = create('div', cssStyles.rightBar.main); var leftBarWrapper = create('div', cssStyles.tableCellWrapper); var rightBarWrapper = create('div', cssStyles.tableCellWrapper); var middleBarWrapper = create('div', cssStyles.tableCellWrapper); var msgMask = create('div', cssStyles.rightBar.msgMask); var msgCont = create('div', cssStyles.rightBar.msgCont); var msgSbc = create('div', cssStyles.rightBar.scrollBar.cont); var msgSb = create('div', cssStyles.rightBar.scrollBar.bar); var headersMask = create('div', cssStyles.middleBar.headers.mask); var headersSbc = create('div', cssStyles.middleBar.scrollBar.cont); var headersFooter = create('div', cssStyles.middleBar.footer.cont); var headersCont = create('div', cssStyles.middleBar.headers.scroll); var mailIcon = document.createElement('img'); var mailText = document.createTextNode('Z'+'MA'+'IL'); var expandCont = create('div', cssStyles.compose.rightBar.expand); mailIcon.style.display = 'inline-block'; mailIcon.style.verticalAlign = 'top'; expandCont.style.backgroundImage = 'url(' + this.res.expandDocument + ')'; expandCont.data = {'isExpanded': false, 'isFocused': false}; expandCont.onmouseover = function(){this.data.isFocused = true}; expandCont.onmouseout = function(){this.data.isFocused = false; this.style.visibility = 'hidden';}; expandCont.onclick = function() { var expanded = this.data.isExpanded; this.style.backgroundImage = (expanded) ? 'url('+root.res.expandDocument+')' : 'url('+root.res.contractDocument+')'; leftBar.style.display = (expanded) ? 'table-cell' : 'none'; middleBar.style.display = (expanded) ? 'table-cell' : 'none'; this.data.isExpanded = !expanded; }; mailIcon.src = this.res.mail; mailIcon.style.marginRight = '6px'; logo.zm_append([mailIcon, mailText]); topBarCont.zm_append([logo, tbMenu]); topBar.appendChild(topBarCont); msgMask.appendChild(msgCont); msgSbc.appendChild(msgSb); rightBarWrapper.zm_append([msgMask, msgSbc]); rightBar.appendChild(rightBarWrapper); headersMask.appendChild(headersCont); middleBarWrapper.zm_append([headersMask, headersSbc, headersFooter]); middleBar.appendChild(middleBarWrapper); winCont.zm_append([topBar, leftBar, middleBar, rightBar]); this.enableScroll(msgSb, msgSbc, msgCont); //middleBar Footer var pagesBar = create('div', cssStyles.middleBar.footer.pagesBar); var pagesInd = create('div', cssStyles.middleBar.footer.indicator); var pagesControlCont = create('div', cssStyles.middleBar.footer.pagesControls.cont); var pagesControlLabel = create('div', cssStyles.middleBar.footer.pagesControls.label); var selectAllCont = create('div', cssStyles.middleBar.footer.selectAll.span); var selectAllCheckBox = create('div', cssStyles.middleBar.footer.selectAll.checkBox); pagesBar.appendChild(pagesInd); selectAllCont.appendChild(selectAllCheckBox); headersFooter.zm_append([pagesBar, selectAllCont, pagesControlLabel, pagesControlCont]); headersFooter.onmouseover = function(){ pagesControlLabel.style.display = 'block' }; headersFooter.onmouseout = function(){ pagesControlLabel.style.display = 'none' }; var changePage = function(mode) { var f = root.selectedFolder, l = root.folders[f].msgs.length, t = Math.ceil(l / 30) - 1, p = root.selectedPage, np; var populate = function(){ root.populateHeaders.apply(root, arguments) } switch(mode) { case 'next': np = (p + 1 > t) ? t : p + 1; break; case 'previous': np = (p - 1 < 0) ? 0 : p - 1; break; case 'first': np = 0; break; case 'last': np = t; break; } if ( p == np) return; root.selectedPage = np; populate(); }; ['first', 'previous', 'next', 'last'].map(function(btn) { var controlBtn = create('div', cssStyles.middleBar.footer.pagesControls.icon); if (btn == 'previous') controlBtn.style.marginRight = '5px'; controlBtn.style.backgroundImage = 'url(' + root.res.controls[btn] + ')'; controlBtn.onclick = function(){ changePage(btn) }; pagesControlCont.appendChild(controlBtn); }); var selectAll = function(){ root.selectAll.apply(root, arguments) }; var addGroup = function(){ root.addGroupToSelection.apply(root, arguments) }; var removeGroup = function(){ root.removeGroupFromSelection.apply(root, arguments) }; selectAllCheckBox.data = {'isChecked': false}; selectAllCheckBox.onmousedown = function(){this.style.background = '#202020'}; selectAllCheckBox.onmouseup = function() { var isChecked = this.data.isChecked; var color = isChecked ? 'transparent' : '#9f9f9f'; this.style.background = color; this.data.isChecked = !isChecked; (root.selectedFolder) ? selectAll(!isChecked) : (isChecked) ? removeGroup() : addGroup(); }; /////////////////////////////////////////////////////////////////////////////////// //Search Messages var searchBox = create('textField', cssStyles.input.text.search); this.placeHolder(searchBox, 'Search...'); var resultsCont = create('div', cssStyles.searchResults.cont); var resultsUl = create('ul', cssStyles.searchResults.ul); var bySender = create('li', cssStyles.searchResults.li.main); var bySubject = create('li', cssStyles.searchResults.li.main); var bySenderCount = create('span', cssStyles.searchResults.count); var bySubjectCount = create('span', cssStyles.searchResults.count); var bySenderUl = create('ul', cssStyles.searchResults.ul); var bySubjectUl = create('ul', cssStyles.searchResults.ul); var bySenderTxt = create('p', cssStyles.searchResults.text); var bySubjectTxt = create('p', cssStyles.searchResults.text); text(bySenderTxt, 'From: '); text(bySubjectTxt, 'Subject: '); bySenderTxt.appendChild(bySenderCount); bySubjectTxt.appendChild(bySubjectCount); bySender.zm_append([bySenderTxt, bySenderUl]); bySubject.zm_append([bySubjectTxt, bySubjectUl]); resultsUl.zm_append([bySender, bySubject]); resultsCont.appendChild(resultsUl); resultsCont.data = {'isFocused': false}; var searchFolder = function(){ root.searchFolder.apply(root, arguments) }; resultsCont.onmouseover = function(){this.data.isFocused = true}; resultsCont.onmouseout = function(){this.data.isFocused = false}; searchBox.onkeyup = function() { var str = this.value; searchFolder(str); }; searchBox.onblur = function() { if (!resultsCont.data.isFocused) resultsCont.style.display = 'none'; this.value = 'Search...'; this.style.color = '#333333'; }; /////////////////////////////////////////////////////////////////////////////////// //folders & contacts var lbList = create('ul', cssStyles.ul.leftBar.main); var foldersLi = create('li', cssStyles.li.leftBar.main); var contactsLi = create('li', cssStyles.li.leftBar.main); var foldersUl = create('ul', cssStyles.ul.leftBar.sub); var contactsUl = create('ul', cssStyles.ul.leftBar.sub); var inboxLi = create('li', cssStyles.li.leftBar.subSelected); var outboxLi = create('li', cssStyles.li.leftBar.sub); var draftLi = create('li', cssStyles.li.leftBar.sub); var junkLi = create('li', cssStyles.li.leftBar.sub); var trashLi = create('li', cssStyles.li.leftBar.sub); var documentsLi = create('li', cssStyles.li.leftBar.sub); var friendsLi = create('li', cssStyles.li.leftBar.sub); var blockedLi = create('li', cssStyles.li.leftBar.sub); var allianceLi = create('li', cssStyles.li.leftBar.sub); var commandersLi = create('li', cssStyles.li.leftBar.sub); var officersLi = create('li', cssStyles.li.leftBar.sub); var alliesLi = create('li', cssStyles.li.leftBar.sub); var groupsLi = create('li', cssStyles.li.leftBar.sub); var inboxTxt = document.createTextNode('Inbox'); var outboxTxt = document.createTextNode('Outbox'); var draftTxt = document.createTextNode('Draft'); var junkTxt = document.createTextNode('Junk'); var trashTxt = document.createTextNode('Trash'); var documentsTxt = document.createTextNode('Documents'); var friendsTxt = document.createTextNode('Friends'); var blockedTxt = document.createTextNode('Blocked'); var allianceTxt = document.createTextNode('Alliance'); var commandersTxt = document.createTextNode('Commanders'); var officersTxt = document.createTextNode('Officers'); var alliesTxt = document.createTextNode('Allies'); var groupsTxt = document.createTextNode('Groups'); inboxLi.appendChild(inboxTxt); outboxLi.appendChild(outboxTxt); draftLi.appendChild(draftTxt); junkLi.appendChild(junkTxt); trashLi.appendChild(trashTxt); documentsLi.appendChild(documentsTxt); friendsLi.appendChild(friendsTxt); blockedLi.appendChild(blockedTxt); allianceLi.appendChild(allianceTxt); commandersLi.appendChild(commandersTxt); officersLi.appendChild(officersTxt); alliesLi.appendChild(alliesTxt); groupsLi.appendChild(groupsTxt); var changeFolder = function(folder) { if (root.selectedGroup) root.dom.leftBar.items[root.selectedGroup].zm_css(cssStyles.li.leftBar.sub); if (root.selectedFolder) root.dom.leftBar.items[root.selectedFolder].zm_css(cssStyles.li.leftBar.sub); root.dom.leftBar.items[folder].zm_css(cssStyles.li.leftBar.subSelected); root.selectedFolder = folder; root.selectedGroup = false; root.resetMsgCont(1); root.selectedPage = 0; root.populateHeaders(); searchBox.disabled = false; msgSb.data.update(); }; var changeGroup = function(group) { if (root.selectedGroup) root.dom.leftBar.items[root.selectedGroup].zm_css(cssStyles.li.leftBar.sub); if (root.selectedFolder) root.dom.leftBar.items[root.selectedFolder].zm_css(cssStyles.li.leftBar.sub); root.dom.leftBar.items[group].zm_css(cssStyles.li.leftBar.subSelected); root.selectedGroup = group; root.selectedFolder = false; root.populateContacts(); searchBox.disabled = true; msgSb.data.update(); }; [[inboxLi,'inbox'],[outboxLi,'outbox'],[draftLi,'draft'],[junkLi,'junk'],[trashLi,'trash'],[documentsLi,'documents']].map(function(Item) { Item[0].onclick = function(){ changeFolder(Item[1]) } }); [[friendsLi,'friends'],[blockedLi,'blocked'],[allianceLi,'alliance'],[commandersLi,'commanders'], [officersLi,'officers'], [alliesLi,'allies'], [groupsLi,'groups']].map(function(Item) { Item[0].onclick = function(){ changeGroup(Item[1]) } }); foldersUl.zm_append([inboxLi, outboxLi, draftLi, junkLi, trashLi, documentsLi]); contactsUl.zm_append([allianceLi, commandersLi, officersLi, alliesLi, friendsLi, blockedLi, groupsLi]); foldersLi.zm_append([document.createTextNode('Folders'), foldersUl]); contactsLi.zm_append([document.createTextNode('Contacts'), contactsUl]); lbList.zm_append([foldersLi, contactsLi]); leftBarWrapper.zm_append([searchBox, lbList, resultsCont]); leftBar.appendChild(leftBarWrapper); this.dom.leftBar.folders.inbox = inboxTxt; this.dom.leftBar.folders.outbox = outboxTxt; this.dom.leftBar.folders.junk = junkTxt; this.dom.leftBar.folders.trash = trashTxt; this.dom.leftBar.folders.draft = draftTxt; this.dom.leftBar.folders.documents = documentsTxt; this.dom.leftBar.contacts.friends = friendsTxt; this.dom.leftBar.contacts.blocked = blockedTxt; this.dom.leftBar.contacts.alliance = allianceTxt; this.dom.leftBar.contacts.commanders = commandersTxt; this.dom.leftBar.contacts.officers = officersTxt; this.dom.leftBar.contacts.allies = alliesTxt; this.dom.leftBar.contacts.groups = groupsTxt; this.dom.leftBar.items.inbox = inboxLi; this.dom.leftBar.items.outbox = outboxLi; this.dom.leftBar.items.junk = junkLi; this.dom.leftBar.items.trash = trashLi; this.dom.leftBar.items.draft = draftLi; this.dom.leftBar.items.documents = documentsLi; this.dom.leftBar.items.friends = friendsLi; this.dom.leftBar.items.blocked = blockedLi; this.dom.leftBar.items.alliance = allianceLi; this.dom.leftBar.items.commanders = commandersLi; this.dom.leftBar.items.officers = officersLi; this.dom.leftBar.items.allies = alliesLi; this.dom.leftBar.items.groups = groupsLi; this.dom.leftBar.searchBox = searchBox; /////////////////////////////////////////////////////////////////////////////////// //selected contacts container var sc_mainCont = document.createElement('div'); var sc_upperCont = create('div', cssStyles.rightBar.contacts.topWrapper); var sc_lowerCont = create('div', cssStyles.rightBar.contacts.bottomWrapper); var sc_header = create('div', cssStyles.message.subject); var sc_contactsMain = create('div', cssStyles.rightBar.contacts.main); var sc_contactsMask = create('div', cssStyles.rightBar.contacts.mask); var sc_contactsSbc = create('div', cssStyles.rightBar.contacts.scrollbar.cont); var sc_contactsSb = create('div', cssStyles.rightBar.contacts.scrollbar.bar); var sc_contactsCont = create('div', cssStyles.rightBar.contacts.cont); var sc_findPlayer = create('textField', cssStyles.rightBar.contacts.search); var sc_removeAll = create('div', cssStyles.rightBar.contacts.button.disabled); var sc_message = create('div', cssStyles.rightBar.contacts.button.disabled); var sc_addToSelection = create('div', cssStyles.rightBar.contacts.button.active); var sc_addAsFriend = create('div', cssStyles.rightBar.contacts.button.active); var sc_block = create('div', cssStyles.rightBar.contacts.button.active); var sc_resultsCont = create('div', cssStyles.rightBar.contacts.results.cont); var sc_resultsMask = create('div', cssStyles.rightBar.contacts.results.mask); var sc_resultsContentCont = create('div', cssStyles.rightBar.contacts.results.contentsCont); var sc_resultsSbc = create('div', cssStyles.rightBar.contacts.results.scrollbar.cont); var sc_saveGroup = create('div', cssStyles.rightBar.contacts.saveButton.cont.disabled); var sc_saveGroupOptions = create('span', cssStyles.rightBar.contacts.saveButton.span); var sc_saveNewGroup = create('div', cssStyles.rightBar.contacts.saveButton.sub); var sc_saveExistedGroup = create('div', cssStyles.rightBar.contacts.saveButton.sub); text(sc_header, 'No contacts selected.'); text(sc_removeAll, 'Remove all'); text(sc_message, 'Message'); text(sc_saveGroup, 'Save group'); text(sc_saveNewGroup, 'New group'); text(sc_saveExistedGroup, 'Existed group'); text(sc_addToSelection, 'Add to selection'); text(sc_addAsFriend, 'Add as friend'); text(sc_block, 'Block'); this.placeHolder(sc_findPlayer, 'Find player...'); sc_mainCont.style.overflow = 'hidden'; sc_removeAll.zm_css({'display': 'inline-block', 'verticalAlign': 'top', 'width': '101px'}); sc_message.zm_css({'display': 'inline-block', 'verticalAlign': 'top', 'marginLeft': '5px', 'width': '80px'}); [sc_addToSelection, sc_addAsFriend, sc_block].map(function(x){ x.zm_css({'width': '120px', 'margin': '0 auto 5px auto'}) }); root.enableScroll(sc_contactsSb, sc_contactsSbc, sc_contactsCont); sc_mainCont.style.height = '471px'; sc_lowerCont.style.display = 'none'; sc_saveGroupOptions.zm_append([sc_saveNewGroup, sc_saveExistedGroup]); sc_saveGroup.appendChild(sc_saveGroupOptions); sc_resultsMask.appendChild(sc_resultsContentCont); sc_resultsCont.zm_append([sc_resultsMask, sc_resultsSbc]); sc_contactsSbc.appendChild(sc_contactsSb); sc_contactsMask.appendChild(sc_contactsCont); sc_contactsMain.zm_append([sc_contactsMask, sc_contactsSbc]); sc_upperCont.zm_append([sc_contactsMain, sc_findPlayer, sc_removeAll, sc_message]); sc_lowerCont.zm_append([sc_addToSelection, sc_addAsFriend, sc_block]); sc_mainCont.zm_append([sc_header, sc_upperCont, sc_lowerCont, sc_resultsCont, sc_saveGroup]); this.dom.rightBar.contacts.main = sc_mainCont; this.dom.rightBar.contacts.lowerCont = sc_lowerCont; this.dom.rightBar.contacts.header = sc_header; this.dom.rightBar.contacts.cont = sc_contactsCont; this.dom.rightBar.contacts.bar = sc_contactsSb; this.dom.rightBar.contacts.search = sc_findPlayer; this.dom.rightBar.contacts.results = sc_resultsCont; this.dom.rightBar.contacts.scrollbarCont = sc_resultsSbc; this.dom.rightBar.contacts.contentsCont = sc_resultsContentCont; this.dom.rightBar.contacts.buttons.removeAll = sc_removeAll; this.dom.rightBar.contacts.buttons.message = sc_message; this.dom.rightBar.contacts.buttons.addToSelection = sc_addToSelection; this.dom.rightBar.contacts.buttons.addAsFriend = sc_addAsFriend; this.dom.rightBar.contacts.buttons.block = sc_block; this.dom.rightBar.contacts.buttons.saveGroup = sc_saveGroup; var addFriend = function(){ root.addFriend.apply(root, arguments) }; var removeFriend = function(){ root.removeFriend.apply(root, arguments) }; var blockContact = function(){ root.blockContact.apply(root, arguments) }; var unblockContact = function(){ root.unblockContact.apply(root, arguments) }; var removeAllSelectedContacts = function(){ root.removeAllSelectedContacts.apply(root, arguments) }; var addContact = function(){ root.addToSelection.apply(root, arguments) }; var removeContact = function(){ root.removeFromSelection.apply(root, arguments) }; var setContactOptions = function(){ root.setContactOptions.apply(root, arguments) }; var newMail = function(){ root.openNewMail.apply(root, arguments) }; var saveNewGroup = function(){ root.saveNewGroup.apply(root, arguments) }; var saveExistedGroup = function(){ root.saveExistedGroup.apply(root, arguments) }; sc_addToSelection.data = {'add':addContact, 'remove':removeContact, 'id':null, 'mode':null, 'update':setContactOptions}; sc_addAsFriend.data = {'add':addFriend, 'remove':removeFriend, 'id':null, 'mode':null, 'update':setContactOptions}; sc_block.data = {'block':blockContact, 'unblock':unblockContact, 'id':null, 'mode':null, 'update':setContactOptions}; sc_removeAll.data = {}; sc_message.data = {}; sc_saveGroup.data = {'isExpanded': false, 'isEnabled': false}; sc_saveGroupOptions.data = {'isFocused': false}; sc_addToSelection.onclick = function() { ((this.data.isEnabled)&&(this.data.mode == 'add')) ? this.data.add(this.data.id) : this.data.remove(this.data.id); this.data.update(this.data.id); }; sc_addAsFriend.onclick = function() { ((this.data.isEnabled)&&(this.data.mode == 'add')) ? this.data.add(this.data.id) : this.data.remove(this.data.id); this.data.update(this.data.id); }; sc_block.onclick = function() { ((this.data.isEnabled)&&(this.data.mode == 'block')) ? this.data.block(this.data.id) : this.data.unblock(this.data.id); this.data.update(this.data.id); }; sc_removeAll.onclick = removeAllSelectedContacts; sc_saveGroup.onclick = function() { var enabled = this.data.isEnabled; if (enabled) { var expanded = this.data.isExpanded; sc_saveGroupOptions.style.display = (expanded) ? 'none' : 'block'; this.data.isExpanded = !expanded; } }; sc_saveNewGroup.addEventListener('mouseover', function(){sc_saveGroupOptions.data.isFocused = true;}, false); sc_saveExistedGroup.addEventListener('mouseover', function(){sc_saveGroupOptions.data.isFocused = true;}, false); sc_saveGroupOptions.addEventListener('mouseout', function() { sc_saveGroupOptions.data.isFocused = false; setTimeout(function() { var expanded = sc_saveGroup.data.isExpanded, focused = sc_saveGroupOptions.data.isFocused; if (expanded && !focused) { sc_saveGroupOptions.style.display = 'none'; sc_saveGroup.data.isExpanded = false; } }, 50); }, false); sc_saveNewGroup.onclick = function() { sc_saveGroupOptions.style.display = 'none'; sc_saveGroupOptions.data.isFocused = false; sc_saveGroup.data.isExpanded = false; saveNewGroup(); }; sc_saveExistedGroup.onclick = function() { sc_saveGroupOptions.style.display = 'none'; sc_saveGroupOptions.data.isFocused = false; sc_saveGroup.data.isExpanded = false; saveExistedGroup(); }; sc_message.onclick = function(){ if(this.data.isEnabled) newMail(1) }; [sc_addToSelection, sc_addAsFriend, sc_block, sc_removeAll, sc_message, sc_saveGroup].map(function(btn) { var enable = function() { this.zm_css(cssStyles.rightBar.contacts.button.active); this.data.isEnabled = true; }; var disable = function() { this.zm_css(cssStyles.rightBar.contacts.button.disabled); this.data.isEnabled = false; } btn.data.enable = function(){ enable.call(btn) }; btn.data.disable = function(){ disable.call(btn) }; btn.data.isEnabled = (btn == sc_saveGroup) ? false : true; }); sc_resultsCont.onmouseover = function(){sc_findPlayer.data.isContFocused = true}; sc_resultsCont.onmouseout = function(){sc_findPlayer.data.isContFocused = false}; sc_lowerCont.onmouseover = function(){sc_findPlayer.data.isContFocused = true}; sc_lowerCont.onmouseout = function(){sc_findPlayer.data.isContFocused = false}; sc_findPlayer.data = {'results': [], 'selectedIndex': 0, 'selectedGroup': 'results', 'selectedButton': 0, 'isContOpen': false, 'isContFocused': false, 'buttons': [sc_addToSelection, sc_addAsFriend, sc_block]}; sc_findPlayer.onblur = function() { if (this.data.isContOpen && !this.data.isContFocused) { this.value = 'Find player...'; this.data.selectedGroup = 'results'; this.data.buttons[this.data.selectedButton].zm_css({'background': '#4e4e4e', 'color': '#8b8b8b'}); this.data.selectedButton = 0; this.data.selectedIndex = 0; sc_resultsCont.style.display = 'none'; sc_lowerCont.style.display = 'none'; sc_saveGroup.style.display = 'block'; } }; sc_findPlayer.onkeyup = function(event) { if(!event) event = window.event; root.preventDefaults(event); var populate = function(){ root.findContact.apply(root, arguments) }; var changeSelection = function(){ root.changeContactSelection.apply(root, arguments) }; var updateOptions = function(){ root.setContactOptions.apply(root, arguments) }; var group = this.data.selectedGroup, btns = this.data.buttons; var i = this.data.selectedButton, l = btns.length, parent = this; var changeButton = function(mode) { var getIndex = function(mode, x) { return (mode) ? ((i + x) % l) : ((i - x < 0) ? l - x : i - x); }; var n = (btns[getIndex(mode, 1)].data.isEnabled) ? getIndex(mode, 1) : getIndex(mode, 2); if(btns[i].data.isEnabled) btns[i].zm_css({'background': '#4e4e4e', 'color': '#8b8b8b'}); if(btns[n].data.isEnabled) btns[n].zm_css({'background': '#266589', 'color': '#c2c2c2'}); parent.data.selectedButton = n; } if([37, 38, 39, 40, 13, 9].indexOf(event.keyCode) == -1) { populate(this.value); } if(event.keyCode == 38 && this.data.isContOpen) { group == 'results' ? changeSelection(false) : changeButton(false); } if(event.keyCode == 40 && this.data.isContOpen) { group == 'results' ? changeSelection(true) : changeButton(true); } if(event.keyCode == 37 && this.data.isContOpen && group == 'buttons') { this.data.selectedGroup = 'results'; var selectedButton = this.data.buttons[this.data.selectedButton]; if(selectedButton.data.isEnabled) selectedButton.zm_css({'background': '#4e4e4e', 'color': '#8b8b8b'}); this.data.selectedButton = 0; } if(event.keyCode == 39 && this.data.isContOpen && group == 'results') { this.data.selectedGroup = 'buttons'; this.data.buttons[0].zm_css({'background': '#266589', 'color': '#c2c2c2'}); } if(event.keyCode == 13 && this.data.isContOpen) { if (group == 'buttons') { this.data.buttons[this.data.selectedButton].onclick(); updateOptions(this.data.results[this.data.selectedIndex].data.id); var button = this.data.buttons[this.data.selectedButton]; if (button.data.isEnabled) button.zm_css({'background': '#266589', 'color': '#c2c2c2'}); else { this.data.buttons[0].zm_css({'background': '#266589', 'color': '#c2c2c2'}); this.data.selectedButton = 0; } } } }; /////////////////////////////////////////////////////////////////////////////////// //tools bar var toolsConstructor = function() { var inboxMsg = create('ul', cssStyles.ul.toolbar.main); var newMsg = create('li', cssStyles.li.toolbar.withIcon); var reply = create('li', cssStyles.li.toolbar.withDrop); var mark = create('li', cssStyles.li.toolbar.withDrop); var trash = create('li', cssStyles.li.toolbar.textOnly); var restore = create('li', cssStyles.li.toolbar.textOnly); var empty = create('li', cssStyles.li.toolbar.textOnly); var del = create('li', cssStyles.li.toolbar.textOnly); var newMsgIcon = create('span', cssStyles.li.toolbar.newIcon); var junk = create('li', cssStyles.li.toolbar.textOnly); var notJunk = create('li', cssStyles.li.toolbar.textOnly); var markDrop = create('span', cssStyles.li.toolbar.drop); var replyDrop = create('span', cssStyles.li.toolbar.drop); var replyDropMenu = create('ul', cssStyles.ul.toolbar.sub); var markDropMenu = create('ul', cssStyles.ul.toolbar.sub); var replyTo = create('li', cssStyles.li.toolbar.sub); var replyToAll = create('li', cssStyles.li.toolbar.sub); var forwardTo = create('li', cssStyles.li.toolbar.sub); var read = create('li', cssStyles.li.toolbar.sub); var unread = create('li', cssStyles.li.toolbar.sub); var editDraft = create('li', cssStyles.li.toolbar.textOnly); var deleteDraft = create('li', cssStyles.li.toolbar.textOnly); var toDocuments = create('li', cssStyles.li.toolbar.textOnly); var notDocument = create('li', cssStyles.li.toolbar.textOnly); var fwdMsg = create('li', cssStyles.li.toolbar.textOnly); var tabs = [newMsg, reply, mark, del, junk, trash, notJunk, restore, empty, editDraft, deleteDraft, toDocuments, notDocument, fwdMsg]; tabs.map(function(key) { key.addEventListener('mouseover', function(){this.style.backgroundImage = blueGrd}, false); key.addEventListener('mouseout', function(){this.style.backgroundImage = 'none'}, false); key.addEventListener('click', function(){this.style.backgroundImage = 'none'}, false); }); text(newMsg, 'New'); text(reply, 'Reply'); text(del, 'Delete'); text(mark, 'Mark'); text(junk, 'Junk'); text(notJunk, 'Not Junk'); text(trash, 'Trash'); text(empty, 'Empty'); text(restore, 'Restore'); text(replyTo, 'Reply'); text(replyToAll, 'Reply all'); text(forwardTo, 'Forward'); text(read, 'Read'); text(unread, 'Unread'); text(editDraft, 'Edit'); text(deleteDraft, 'Delete'); text(toDocuments, 'Document'); text(notDocument, 'Move to Inbox'); text(fwdMsg, 'Forward'); markDrop.style.backgroundImage = 'url(' + root.res.drop + ')'; replyDrop.style.backgroundImage = 'url(' + root.res.drop + ')'; newMsgIcon.style.backgroundImage = 'url(' + root.res.compose + ')'; forwardTo.style.borderBottom = 'none'; unread.style.borderBottom = 'none'; replyDropMenu.zm_append([replyTo, replyToAll, forwardTo]); markDropMenu.zm_append([read, unread]); newMsg.appendChild(newMsgIcon); mark.zm_append([markDrop, markDropMenu]); reply.zm_append([replyDrop, replyDropMenu]); inboxMsg.appendChild(newMsg); newMsg.onclick = root.callMethod('openNewMail'); replyTo.onclick = root.callMethod('reply'); replyToAll.onclick = root.callMethod('replyToAll'); forwardTo.onclick = root.callMethod('forwardMsg'); junk.onclick = root.callMethod('toJunk'); notJunk.onclick = root.callMethod('notJunk'); trash.onclick = root.callMethod('toTrash'); restore.onclick = root.callMethod('notTrash'); del.onclick = root.callMethod('deleteMsg'); empty.onclick = root.callMethod('emptyFolder'); read.onclick = root.callMethod('markRead', true); unread.onclick = root.callMethod('markRead', false); editDraft.onclick = root.callMethod('editDraft'); deleteDraft.onclick = root.callMethod('deleteDraft'); toDocuments.onclick = root.callMethod('toDocuments'); notDocument.onclick = root.callMethod('notDocument'); fwdMsg.onclick = root.callMethod('forwardMsg'); var attachSub = function(btn, menu) { btn.data = {'isActive': false}; menu.data = {'isFocused': false}; btn.addEventListener('mouseover', function() { var isActive = this.data.isActive; menu.style.display = (isActive) ? 'none' : 'block'; this.data.isActive = !isActive; }, false); btn.addEventListener('mouseout', function() { setTimeout(function(){if(!menu.data.isFocused){menu.style.display = 'none'; btn.data.isActive = false;}}, 100); }, false); menu.addEventListener('mouseover', function(){this.data.isFocused = true;}, false); menu.addEventListener('mouseout', function() { this.data.isFocused = false; setTimeout(function(){if(!menu.data.isFocused){menu.style.display = 'none'; btn.data.isActive = false;}}, 100); }, false); menu.addEventListener('click', function() { this.data.isFocused = false; menu.style.display = 'none'; btn.data.isActive = false; }, false); } attachSub(replyDrop, replyDropMenu); attachSub(markDrop, markDropMenu); root.dom.toolBar.compose = newMsg; root.dom.topBar.toolbar.newMsg = newMsg; root.dom.topBar.toolbar.reply = reply; root.dom.topBar.toolbar.trash = trash; root.dom.topBar.toolbar.delMsg = del; root.dom.topBar.toolbar.junk = junk; root.dom.topBar.toolbar.notJunk = notJunk; root.dom.topBar.toolbar.restore = restore; root.dom.topBar.toolbar.empty = empty; root.dom.topBar.toolbar.mark = mark; root.dom.topBar.toolbar.editDraft = editDraft; root.dom.topBar.toolbar.deleteDraft = deleteDraft; root.dom.topBar.toolbar.toDocuments = toDocuments; root.dom.topBar.toolbar.notDocument = notDocument; root.dom.topBar.toolbar.forwardMsg = fwdMsg; this.inboxMsg = inboxMsg; }; var toolbars = new toolsConstructor(); tbMenu.appendChild(toolbars.inboxMsg); /////////////////////////////////////////////////////////////////////////////////// //create main dom tree this.dom.window.main = winCont; this.dom.rightBar.cont = rightBar; this.dom.rightBar.msgCont = msgCont; this.dom.rightBar.scrollBar.cont = msgSbc; this.dom.rightBar.scrollBar.bar = msgSb; this.dom.rightBar.expandCont = expandCont; this.dom.searchResults.cont = resultsCont; this.dom.searchResults.sender.count = bySenderCount; this.dom.searchResults.subject.count = bySubjectCount; this.dom.searchResults.sender.list = bySenderUl; this.dom.searchResults.subject.list = bySubjectUl; this.dom.middleBar.headersCont = headersCont; this.dom.middleBar.scrollBar.cont = headersSbc; this.dom.middleBar.footer.selectAll = selectAllCheckBox; this.dom.middleBar.footer.pagesCount = pagesControlLabel; this.dom.middleBar.footer.indicator = pagesInd; this.dom.middleBar.footer.controlCont = pagesControlCont; this.dom.topBar.logo = logo; this.dom.topBar.menu = toolbars.inboxMsg; /////////////////////////////////////////////////////////////////////////////////// //compose message container var composeCont = create('div', cssStyles.compose.window); var c_topBar = create('div', cssStyles.topBar.main); var c_topBarCont = create('div', cssStyles.topBar.cont); var c_leftBar = create('div', cssStyles.compose.leftBar.cont); var c_rightBar = create('div', cssStyles.compose.rightBar.cont); var c_leftBarWrapper = create('div', cssStyles.tableCellWrapper); var c_rightBarWrapper = create('div', cssStyles.tableCellWrapper); var c_logo = logo.cloneNode(true); var c_tbMenu = create('div', cssStyles.topBar.menu); var c_recipients = create('div', cssStyles.compose.leftBar.recipients.main); var c_recipientsMask = create('div', cssStyles.compose.leftBar.recipients.mask); var c_recipientsCont = create('div', cssStyles.compose.leftBar.recipients.cont); var c_recipientsSbc = create('div', cssStyles.compose.leftBar.recipients.scrollbar.cont); var c_recipientsSb = create('div', cssStyles.compose.leftBar.recipients.scrollbar.bar); var c_searchResults = create('div', cssStyles.compose.leftBar.recipients.searchBox.cont); var c_contacts = create('div', cssStyles.compose.leftBar.contacts.cont); var c_subject = create('textField', cssStyles.compose.rightBar.textField); var c_msgToolbar = create('div', cssStyles.compose.rightBar.toolbar.cont); var c_msgBody = create('iframe', cssStyles.compose.rightBar.textArea); var c_expandCont = create('div', cssStyles.compose.rightBar.expand); //table options var c_tableOptions = create('div', cssStyles.tableCellWrapper); var c_rowsCont = create('div', cssStyles.compose.leftBar.tableOptions.inputCont); var c_rowsInput = create('textField', cssStyles.compose.leftBar.tableOptions.input); var c_rowsLabel = create('div', cssStyles.compose.leftBar.tableOptions.label); var c_colsInput = create('textField', cssStyles.compose.leftBar.tableOptions.input); var c_colsCont = create('div', cssStyles.compose.leftBar.tableOptions.inputCont); var c_colsLabel = create('div', cssStyles.compose.leftBar.tableOptions.label); var c_headerCheckbox = create('div', cssStyles.compose.leftBar.tableOptions.checkbox); var c_headerLabel = create('span', cssStyles.compose.leftBar.tableOptions.span); var c_expandCheckbox = create('div', cssStyles.compose.leftBar.tableOptions.checkbox); var c_expandLabel = create('span', cssStyles.compose.leftBar.tableOptions.span); var c_addTable = create('div', cssStyles.compose.leftBar.tableOptions.button); var c_cancelTable = create('div', cssStyles.compose.leftBar.tableOptions.button); text(c_rowsLabel, 'Rows'); text(c_colsLabel, 'Columns'); text(c_headerLabel, 'Header'); text(c_expandLabel, 'Expand horizontally'); text(c_addTable, 'Add table'); text(c_cancelTable, 'Cancel'); c_tableOptions.data = {'isOpen': false}; c_headerCheckbox.data = {'isChecked': false}; c_expandCheckbox.data = {'isChecked': false}; c_tableOptions.style.paddingTop = '10px'; [c_expandCheckbox, c_headerCheckbox].map(function(checkBox) { checkBox.onmousedown = function(){this.style.background = '#202020'}; checkBox.onmouseup = function() { var isChecked = this.data.isChecked; this.style.background = (isChecked) ? 'transparent' : '#9f9f9f'; this.data.isChecked = !isChecked; }; }); c_rowsCont.zm_append([c_rowsInput, c_rowsLabel]); c_colsCont.zm_append([c_colsInput, c_colsLabel]); c_headerCheckbox.appendChild(c_headerLabel); c_expandCheckbox.appendChild(c_expandLabel); c_tableOptions.zm_append([c_rowsCont, c_colsCont, c_headerCheckbox, c_expandCheckbox, c_addTable, c_cancelTable]); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Compose contacts list var createComposeContacts = function() { try { var c_contactsCont = create('div', cssStyles.compose.leftBar.contacts.main); var c_mainUl = create('ul', cssStyles.compose.leftBar.contacts.ul.main); var c_subUl = create('ul', cssStyles.compose.leftBar.contacts.ul.sub); var c_contactsLi = create('li', cssStyles.compose.leftBar.contacts.li.main); var c_contLi = create('li', cssStyles.compose.leftBar.contacts.li.main); text(c_contactsLi, 'Contacts'); var c_contactsList = ['Alliance', 'Commanders', 'Officers', 'Allies', 'Friends', 'Groups']; c_contactsList.map(function(name) { var data = zmail.data.getInstance(); var li = create('li', cssStyles.compose.leftBar.contacts.li.sub); var div = create('div', cssStyles.compose.leftBar.contacts.select); var divText = document.createTextNode(name); var selectSpan = create('span', cssStyles.compose.leftBar.contacts.span.sub); var itemsCont = create('ul', cssStyles.compose.leftBar.contacts.ul.span); var selectSbc = create('div', cssStyles.compose.leftBar.contacts.scrollbar.cont); var selectSb = create('div', cssStyles.compose.leftBar.contacts.scrollbar.bar); var span = create('span', cssStyles.compose.leftBar.contacts.span.main); text(span, 'Add selected'); div.appendChild(divText); div.data = {'selected': null}; itemsCont.data = {'isFocused': false}; div.addEventListener('mouseover', function() { if (itemsCont.children.length > 0) { divText.nodeValue = '+ ' + divText.nodeValue; this.style.cursor = 'pointer'; } else this.style.cursor = 'default'; }, false); div.addEventListener('mouseout', function(){divText.nodeValue = divText.nodeValue.replace('+ ', '')}, false); div.onclick = function() { var isOpen = (selectSpan.style.display == 'block'); if ((itemsCont.children.length > 0) && !isOpen) selectSpan.style.display = 'block'; if (isOpen) selectSpan.style.display = 'none'; }; itemsCont.addEventListener('mouseout', function() { setTimeout(function(){if (!itemsCont.data.isFocused) selectSpan.style.display = 'none'}, 50); itemsCont.data.isFocused = false; }, false); li.addEventListener('mouseover', function(){if(div.data.selected !== null) span.style.display='block'}, false); li.addEventListener('mouseout', function() { span.style.display = 'none'; setTimeout(function(){if (!itemsCont.data.isFocused) selectSpan.style.display = 'none'}, 50); }, false); selectSbc.addEventListener('mouseover', function(){itemsCont.data.isFocused = true}, false); selectSb.addEventListener('mouseover', function(){itemsCont.data.isFocused = true}, false); var extractName = function(obj) { if (obj.hasOwnProperty('name')) return obj.name; else if(obj.hasOwnProperty('n')) return obj.n; else console.log('zmail: ' + 'Error: ' + obj + ' doesn\'t have property name'); }; var compareName = function(a,b) { return (a.toLowerCase() > b.toLowerCase()) ? 1 : (a.toLowerCase() < b.toLowerCase()) ? -1 : 0; }; var contacts = ((name == 'Allies')||(name == 'Groups')) ? {} : []; switch(name) { case 'Friends': root.contacts.friends.map(function(x){contacts.push(root.getPlayerNameById(x))}); break; case 'Allies': var arr = data.allies; if (arr) for (var x in arr) contacts[x] = arr[x].map(extractName); break; case 'Groups': var arr = root.contacts.groups; if (arr) for (var x in arr) contacts[x] = arr[x].map(extractName); break; case 'Alliance': if (data.allianceMembers) contacts = data.allianceMembers.map(extractName); break; case 'Commanders': if (data.allianceCommanders) contacts = data.allianceCommanders.map(extractName); break; case 'Officers': if (data.allianceOfficers) contacts = data.allianceOfficers.map(extractName); break; } span.onclick = function() { var con = div.data.selected; for (var i = 0; i < con.length; i++) root.addRecipient(con[i]); divText.nodeValue = name; div.data.selected = (name == 'Allies') ? null : contacts; }; var selectItem = function(a,b) { var fn = function() { divText.nodeValue = a; div.data.selected = b; selectSpan.style.display = 'none'; } return fn; }; if ((name != 'Allies') && (name != 'Groups') && contacts && (contacts.length > 0)) { contacts.sort(compareName); var All = create('li', cssStyles.compose.leftBar.contacts.li.span); text(All, 'All'); itemsCont.appendChild(All); All.onclick = selectItem(name, contacts); All.addEventListener('mouseover', function(){itemsCont.data.isFocused = true}, false); for(var i = 0; i < contacts.length; i++) { var Item = create('li', cssStyles.compose.leftBar.contacts.li.span); text(Item, contacts[i]); Item.onclick = selectItem(contacts[i], [contacts[i]]); Item.addEventListener('mouseover', function(){itemsCont.data.isFocused = true}, false); itemsCont.appendChild(Item); } div.data.selected = contacts; } else if ((name == 'Allies') && contacts && (root.size(contacts) > 0)) { for (var an in contacts) { var Item = create('li', cssStyles.compose.leftBar.contacts.li.span); text(Item, an); Item.onclick = selectItem(an, contacts[an].sort(compareName)); Item.addEventListener('mouseover', function(){itemsCont.data.isFocused = true}, false); itemsCont.appendChild(Item); } } else if ((name == 'Groups') && contacts && (root.size(contacts) > 0)) { for (var gn in contacts) { var Item = create('li', cssStyles.compose.leftBar.contacts.li.span); text(Item, gn); Item.onclick = selectItem(gn, contacts[gn].sort(compareName)); Item.addEventListener('mouseover', function(){itemsCont.data.isFocused = true}, false); itemsCont.appendChild(Item); } } else { if (contacts) console.log('zmail: ' + name + ' contacts empty'); else console.log('zmail: ' + name + 'contacts undefined'); } selectSbc.appendChild(selectSb); selectSpan.zm_append([itemsCont, selectSbc]); div.appendChild(selectSpan); li.zm_append([div, span]); c_subUl.appendChild(li); root.enableScroll(selectSb, selectSbc, itemsCont); var ch = itemsCont.children.length * 24, ph = Math.min(172, ch + 4); selectSpan.style.height = ph + 'px'; selectSb.style.height = ph * (ph - 20) / ch + 'px'; selectSbc.style.display = (ch < 168) ? 'none': 'block'; }); c_mainUl.zm_append([c_contactsLi, c_contLi]); c_contLi.appendChild(c_subUl); c_contactsCont.appendChild(c_mainUl); if(root.dom.compose.leftBar.contactsCont !== null) c_leftBar.removeChild(root.dom.compose.leftBar.contactsCont); c_leftBar.appendChild(c_contactsCont); root.dom.compose.leftBar.contactsCont = c_contactsCont; } catch(e) { console.log('zmail: ' + e.toString()); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// var c_search = create('textField', cssStyles.compose.leftBar.recipients.textField); var c_searchCont = create('p', cssStyles.compose.leftBar.recipients.textFieldCont); var c_toolBar = create('ul', cssStyles.ul.toolbar.main); var c_sendMsg = create('li', cssStyles.li.toolbar.withIcon); var c_sendMsgIcon = create('span', cssStyles.li.toolbar.newIcon); var c_cancelMsg = create('li', cssStyles.li.toolbar.textOnly); var c_saveDraft = create('li', cssStyles.li.toolbar.textOnly); text(c_sendMsg, 'Send'); text(c_cancelMsg, 'Cancel'); text(c_saveDraft, 'Save draft'); c_sendMsgIcon.style.backgroundImage = 'url(' + root.res.sendMail + ')'; c_sendMsg.appendChild(c_sendMsgIcon); c_toolBar.zm_append([c_sendMsg, c_cancelMsg, c_saveDraft]); c_tbMenu.appendChild(c_toolBar); c_topBarCont.zm_append([c_logo, c_tbMenu]); c_topBar.appendChild(c_topBarCont); c_searchCont.appendChild(c_search); c_recipientsMask.appendChild(c_recipientsCont); c_recipients.zm_append([c_recipientsMask, c_recipientsSbc]); c_recipientsSbc.appendChild(c_recipientsSb); this.enableScroll(c_recipientsSb, c_recipientsSbc, c_recipientsCont); c_msgBody.scrolling = 'no'; c_expandCont.style.backgroundImage = 'url(' + this.res.expandDocument + ')'; c_expandCont.data = {'isExpanded': false, 'isFocused': false}; c_expandCont.onmouseover = function(){this.data.isFocused = true}; c_expandCont.onmouseout = function(){this.data.isFocused = false; this.style.visibility = 'hidden';}; c_search.data = {'results': [], 'selectedIndex': 0, 'isContOpen': false, 'isContFocused': false}; [c_sendMsg, c_cancelMsg, c_saveDraft].map(function(key) { key.addEventListener('mouseover', function(){this.style.backgroundImage = blueGrd}, false); key.addEventListener('mouseout', function(){this.style.backgroundImage = 'none'}, false); key.addEventListener('click', function(){this.style.backgroundImage = 'none'}, false); }); var countMsgLength = function(){ root.getCharactersCount.apply(root, arguments) }; c_sendMsg.onclick = function() { root.sendMail.call(root); zmail.compose.getInstance()._onClose(); }; c_saveDraft.onclick = function() { root.saveDraft.call(root); zmail.compose.getInstance()._onClose(); }; c_cancelMsg.onclick = function() { zmail.compose.getInstance()._onClose(); }; c_expandCont.onclick = function() { var expanded = this.data.isExpanded; this.style.backgroundImage = (expanded) ? 'url('+root.res.expandDocument+')' : 'url('+root.res.contractDocument+')'; c_leftBar.style.display = (expanded) ? 'table-cell' : 'none'; this.data.isExpanded = !expanded; }; var c_searchResultsMask = create('div', cssStyles.compose.leftBar.recipients.searchBox.mask); var c_searchResultsSbc = create('div', cssStyles.compose.leftBar.recipients.searchBox.scrollbar.cont); var c_searchResultsCont = create('div', cssStyles.compose.leftBar.recipients.searchBox.itemsCont); var c_msgHeader = create('div', cssStyles.compose.rightBar.msgHeader); var c_msgMask = create('div', cssStyles.compose.rightBar.msgMask); var c_msgCont = create('div', cssStyles.compose.rightBar.msgCont); var c_msgSbc = create('div', cssStyles.compose.rightBar.scrollBar.cont); var c_msgSb = create('div', cssStyles.compose.rightBar.scrollBar.bar); var c_toText = create('div', cssStyles.compose.leftBar.recipients.toText); var c_charCount = create('div', cssStyles.compose.leftBar.recipients.count); text(c_toText, 'To:'); this.placeHolder(c_subject, 'Add Subject:'); c_recipientsCont.appendChild(c_searchCont); c_searchResultsMask.appendChild(c_searchResultsCont); c_searchResults.zm_append([c_searchResultsMask, c_searchResultsSbc]); c_leftBarWrapper.zm_append([c_toText, c_recipients, c_searchResults, c_contacts]); c_leftBar.appendChild(c_leftBarWrapper); c_msgCont.appendChild(c_msgBody); c_msgHeader.zm_append([c_subject, c_msgToolbar, c_expandCont]); c_msgMask.zm_append([c_msgCont, c_msgHeader, c_charCount]); c_rightBarWrapper.zm_append([c_msgMask, c_msgSbc]); c_rightBar.appendChild(c_rightBarWrapper); composeCont.zm_append([c_topBar, c_leftBar, c_rightBar]); c_searchResultsCont.onmouseover = function(){c_search.data.isContFocused = true}; c_searchResultsCont.onmouseout = function(){c_search.data.isContFocused = false}; c_msgSbc.appendChild(c_msgSb); root.enableScroll(c_msgSb, c_msgSbc, c_msgCont); c_msgSb.style.display = 'none'; c_subject.addEventListener('mouseover', function(){c_expandCont.style.visibility = 'visible';}, false); c_subject.addEventListener('mouseout', function() { setTimeout(function(){if (!c_expandCont.data.isFocused) c_expandCont.style.visibility = 'hidden'}, 50); }, false); this.dom.compose.leftBar.results.mainCont = c_searchResults; this.dom.compose.leftBar.results.resultsCont = c_searchResultsCont; this.dom.compose.leftBar.results.scrollbarCont = c_searchResultsSbc; this.dom.compose.leftBar.searchBox = c_search; this.dom.compose.leftBar.searchBoxCont = c_searchCont; this.dom.compose.leftBar.recipientsMainCont = c_recipients; this.dom.compose.leftBar.recipientsCont = c_recipientsCont; this.dom.compose.leftBar.recipientsSbc = c_recipientsSbc; this.dom.compose.leftBar.recipientsSb = c_recipientsSb; this.dom.compose.rightBar.iframe = c_msgBody; this.dom.compose.rightBar.msgCont = c_msgCont; this.dom.compose.rightBar.subject = c_subject; this.dom.compose.rightBar.charCount = c_charCount; this.dom.compose.rightBar.msgSb = c_msgSb; //find contact c_search.onblur = function() { if (this.data.isContOpen && !this.data.isContFocused) { var rest = function() { root.clearPlayersSearch.apply(root, arguments); }; var add = function() { root.addRecipient.apply(root, arguments); }; if( root.completePlayerMatch ) add(this.value); this.value = ''; rest(0); } }; c_search.onkeyup = function(event) { if(!event) event = window.event; event.preventDefault(); var add = function(){ root.addRecipient.apply(root, arguments); }; if([38, 40, 13, 9].indexOf(event.keyCode) == -1) { var populate = function(){ root.findPlayer.apply(root, arguments); }; populate(this.value); } if(event.keyCode == 40 && this.data.isContOpen) { var next = function(){ root.changePlayerSelection.apply(root, arguments); }; next(true); } if(event.keyCode == 38 && this.data.isContOpen) { var previous = function(){ root.changePlayerSelection.apply(root, arguments); }; previous(false); } if(event.keyCode == 13 && this.data.isContOpen) add(this.data.results[this.data.selectedIndex].data.name); }; ////////////////////////////////////////////////////////////////////////////// //IFRAME onload + compose message toolbar c_msgBody.onload = function() { createComposeContacts.call(root); c_msgToolbar.zm_empty(); c_msgCont.style.top = 0; var iframe = c_msgBody.contentWindow.document; var ibody = iframe.body; var updateMessage = function(doc) { var msg = this.encodeMsg(doc); var count = this.getCharactersCount(msg); c_charCount.innerHTML = 3000 - parseInt(count, 10); }; var updateScroll = function() { var h = c_msgBody.contentWindow.document.body.offsetHeight; var ph = c_msgMask.offsetHeight, ch = c_msgCont.offsetHeight; c_msgBody.style.height = Math.max(100, h + 10) + 'px'; c_msgSb.style.display = (ch > ph) ? 'block' : 'none'; c_msgSb.data.update(); if ((ch > ph) && (c_msgCont.offsetTop + (ch - ph) - 50 < 0)) c_msgSb.data.scrollToEnd(); }; var style = iframe.createElement("style"); var addCSSRule = function(sheet, selector, rules, index) { (sheet.insertRule) ? sheet.insertRule(selector + "{" + rules + "}", index) : sheet.addRule(selector, rules, index); }; style.appendChild(iframe.createTextNode("")); iframe.getElementsByTagName('head')[0].appendChild(style); var sheet = style.sheet; addCSSRule(sheet, "html", "color:#848585; font-family:vrinda; font-size:14px;", 0); addCSSRule(sheet, "body", "width:100%; margin:0; padding:0 0 10px 0; word-wrap:break-word; line-height: 18px;", 1); addCSSRule(sheet, "ul", "margin:0; color:#848585;", 2); addCSSRule(sheet, "ol", "margin:0; color:#848585;", 3); addCSSRule(sheet, "li", "font-family:vrinda; color:#848585;", 4); addCSSRule(sheet, "a", "font-family: vrinda", 5); addCSSRule(sheet, "div", "font-family:vrinda; color:#848585;", 6); addCSSRule(sheet, "blockquote", "font-family:vrinda; color:#848585;", 7); addCSSRule(sheet, "table", "border-color: #848585; color: #848585; font-family: vrinda; font-size: 14px;", 8); addCSSRule(sheet, "th", "background-color: #848585; color: #333; padding: 3px 15px; font-weight: normal; color: #292929; font-family: vrinda; font-size: 14px;", 9); addCSSRule(sheet, "td", "padding: 4px 15px; color: #848585; font-family: vrinda; font-size: 14px; word-wrap: break-word;", 10); addCSSRule(sheet, ".quote", "padding:10px; border:1px solid #5a5a5a; background:#303030; box-sizing:border-box; -moz-box-sizing:border-box; word-wrap:break-word", 11); addCSSRule(sheet, ".quote p", "padding: 0; margin: 0;", 12); iframe.designMode = 'on'; ibody.innerHTML = (root.iframeContent) ? root.iframeContent : 'Add Text'; c_charCount.innerHTML = 3000 - root.getCharactersCount(); c_msgBody.contentWindow.onfocus = function() { if (ibody.innerHTML == 'Add Text') ibody.innerHTML = '' if (c_tableOptions.data.isOpen) { c_leftBar.removeChild(c_tableOptions); c_leftBarWrapper.style.display = 'block'; c_tableOptions.data.isOpen = false; } this.document.body.style.color = '#848585'; }; c_msgBody.contentWindow.onblur = function() { if(ibody.innerHTML == '' || ibody.innerHTML == '<br>') { ibody.innerHTML = 'Add Text'; this.document.body.style.color = '#666'; } }; c_msgBody.contentWindow.onkeyup = function() { var clone = this.document.body.cloneNode(true); root.iframeContent = this.document.body.innerHTML; updateMessage.call(root, clone); this.document.body.style.display = 'inline-block'; updateScroll(); this.document.body.style.display = 'block'; }; var getSelectedText = function() { var sel, range, selectedText; if (c_msgBody.contentWindow.getSelection) { sel = c_msgBody.contentWindow.getSelection(); if (sel.rangeCount) selectedText = sel.getRangeAt(0).toString(); } else if (iframe.selection && iframe.selection.createRange) selectedText = iframe.selection.createRange().text + ""; return selectedText; }; var createLink = function(type) { var generateLink = function(txt) { var data = zmail.data.getInstance(), bb = data.createBBCode, a; switch(type) { case 'coords': a = (txt.match(/^\d+:\d+$/)) ? bb.coords(txt, txt.split(':')[0], txt.split(':')[1]) : false; break; case 'player': a = bb.player(txt); break; case 'alliance': a = bb.alliance(txt); break; } return a; }; var selectedText = getSelectedText(); var Link = generateLink(selectedText).replace('webfrontend', 'parent.webfrontend'); if(Link) return Link; }; var resetTableOptions = function() { c_rowsInput.value = ''; c_colsInput.value = ''; c_headerCheckbox.data.isChecked = false; c_expandCheckbox.data.isChecked = false; c_headerCheckbox.style.background = 'transparent'; c_expandCheckbox.style.background = 'transparent'; }; var addTable = function() { if (c_expandCont.data.isExpanded) c_expandCont.onclick(); if (c_tableOptions.data.isOpen) return; c_leftBarWrapper.style.display = 'none'; c_leftBar.appendChild(c_tableOptions); resetTableOptions(); c_addTable.onclick = function() { var rows = c_rowsInput.value; var cols = c_colsInput.value; var header = c_headerCheckbox.data.isChecked; var stretch = c_expandCheckbox.data.isChecked; var table = document.createElement('table'); var tbody = document.createElement('tbody'); table.rules = 'all'; table.border = '1'; table.className = 'table'; table.style.minWidth = cols * 40 + 'px'; table.cellpadding = 0; table.cellspacing = 0; if(stretch) table.width = '100%'; for(var r = 0; r < rows; r++) { var tr = document.createElement('tr'); for (var c = 0; c < cols; c++) { var td = (header && r == 0) ? document.createElement('th') : document.createElement('td'); td.innerText = '\u200B'; tr.appendChild(td); } tbody.appendChild(tr); } table.appendChild(tbody); c_msgBody.contentWindow.focus(); iframe.execCommand('insertHTML', false, table.outerHTML + '<br/>\u200B'); updateScroll(); }; c_cancelTable.onclick = function() { c_leftBar.removeChild(c_tableOptions); c_leftBarWrapper.style.display = 'block'; c_tableOptions.data.isOpen = false; }; c_tableOptions.data.isOpen = true; }; var insertLink = function() { var val = getSelectedText(); if (val == '') return; var a = create('a', cssStyles.link._14); text(a, val); a.href = val; a.target = 'blank'; iframe.execCommand('insertHTML', false, a.outerHTML + '<br/>\u200B'); }; var insertQuote = function() { var txt = getSelectedText(); if (txt == '') txt = '\u200B'; var html = '<div class="quote"><p>' + txt + '</p></div><br/>'; iframe.execCommand('insertHTML', false, html); }; for (var key in root.res.tools) { var div = create('div', cssStyles.compose.rightBar.toolbar.icon); div.onmousedown = function(event){ root.preventDefaults(event) }; var callback; switch(key) { case 'coords': callback = function(){iframe.execCommand('insertHTML', false, createLink('coords') + '\u200B')}; break; case 'player': callback = function(){iframe.execCommand('insertHTML', false, createLink('player') + '\u200B')}; break; case 'alliance': callback = function(){iframe.execCommand('insertHTML', false, createLink('alliance') + '\u200B')}; break; case 'table': callback = addTable; break; case 'link': callback = insertLink; break; case 'quote': callback = insertQuote; break; default: callback = function(){iframe.execCommand(this.data.id, false, null)}; } div.data = {'id': key, 'callback': callback}; div.onclick = function() { this.data.callback.call(this); if (key != 'table') c_msgBody.contentWindow.focus(); updateMessage.call(root, ibody.cloneNode(true)); }; div.style.backgroundImage = root.res.tools[key]; c_msgToolbar.appendChild(div); } var updateRecipientsHeight = function() { c_recipients.style.height = Math.max(28, Math.min(180, c_recipientsCont.offsetHeight)) + 'px'; if (c_recipientsCont.offsetHeight == 0 && root.recipients.length > 0) setTimeout(updateRecipientsHeight, 100); else { c_recipientsSbc.style.visibility = (c_recipientsCont.offsetHeight < 180) ? 'hidden' : 'visible'; c_recipientsSb.data.update(); c_recipientsSb.data.scrollToEnd(); } } c_msgBody.contentWindow.focus(); updateRecipientsHeight(); updateScroll(); } this.dom.window.compose = composeCont; ////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// } catch(e) { console.log('zmail: ' + e.toString()); } }, destruct: function(){}, members: { iframeContent: null, selectedFolder: 'inbox', selectedGroup: false, selectedMsgs: {'ids': [], 'headers': [], 'checkBoxes': []}, selectedHeader: null, selectedContacts: [], selectedPage: 0, selectedDraft: null, callUpdate: null, isLoaded: false, generatedHeaders: {}, generatedSections: [], recipients: [], completePlayerMatch: false, openNotificationsCount: 0, downloadsCont: null, folders: { 'inbox': {'ids': [], 'msgs': []}, 'outbox': {'ids': [], 'msgs': []}, 'junk': {'ids': [], 'msgs': []}, 'trash': [{'ids': [], 'msgs': []}, {'ids': [], 'msgs': []}], 'draft': {}, 'documents': {'ids': [], 'msgs': []} }, contacts: { 'friends': [], 'blocked': [], 'groups': {} }, callMethod: function (fn, args) { var root = this; var callback = function() { root[fn].call(root, args); } return callback; }, applyMethod: function (fn, args) { var root = this; root[fn].apply(root, args) }, create: function (type, css) { var elm; switch(type) { case 'textField': elm = document.createElement('input'); elm.type = 'text'; break; case 'checkBox': elm = document.createElement('input'); elm.type = 'checkBox'; break; default: elm = document.createElement(type); } var iterator = function(obj) { for(var x in obj) elm.style[x] = obj[x]; }; var onDown = function(down, over, out) { elm.addEventListener('mousedown', function(event) { var el = event.target; el.onmouseout = null; el.onmouseover = null; for (var x in down) el.style[x] = down[x]; var onUp = function() { el.onmouseout = function(){for (var x in out) el.style[x] = out[x]}; el.onmouseover = function(){for (var x in over) el.style[x] = over[x]}; for (var x in out) el.style[x] = out[x]; document.removeEventListener('mouseup', onUp, false); }; document.addEventListener('mouseup', onUp, false); }, false); }; if (css === null) return elm; for (var key in css) { var prop = css[key]; switch(key) { case 'over': elm.onmouseover = function(){iterator(css['over'])}; break; case 'out': elm.onmouseout = function(){iterator(css['out'])}; break; case 'focus': elm.onfocus = function(){iterator(css['focus'])}; break; case 'blur': elm.onblur = function(){iterator(css['blur'])}; break; case 'down': onDown(css['down'], css['up'], css['out']); break; case 'up': ; break; default: elm.style[key] = css[key]; } } return elm; }, gradient: function (stop1, stop2) { var browser = navigator.userAgent; if (browser.indexOf('Chrome') !== -1) browser = 'chrome'; else if (browser.indexOf('Firefox') !== -1) browser = 'firefox'; else browser = 'unsupported'; var grd = ''; switch (browser) { case 'chrome': grd = '-webkit-linear-gradient(top, ' + stop1 + ' 0%, ' + stop2 + ' 100%)'; break; case 'firefox': grd = '-moz-linear-gradient(top, ' + stop1 + ' 0%, ' + stop2 + ' 100%)'; break; default: alert('your Browser is not supported'); } return grd; }, text: function(elm, txt) { elm.appendChild(document.createTextNode(txt)); }, size: function(obj) { if(typeof obj !== 'object') return null; var s = 0; for (var key in obj) s++; return s; }, placeHolder: function(input, val) { input.value = val; input.addEventListener('focus', function(){if (input.value == val) input.value = ''}, false); input.addEventListener('blur', function(){if (input.value == '') input.value = val}, false); }, preventDefaults: function(e) { if (!e) e = window.event; e.preventDefault(); e.stopPropagation(); }, enableScroll: function(elm, parent, cont) { var pos, ph = parent.offsetHeight, ch = cont.offsetHeight, elmY, contY; var scale = ch / (ph - 20); var bh = ph / scale; elm.style.height = bh + 'px'; var update = function() { elmY = elm.offsetTop; contY = cont.offsetTop; ph = parent.offsetHeight; ch = cont.offsetHeight; scale = ch / (ph - 20); bh = ph / scale; if (ch <= ph) cont.style.top = 0; elm.style.height = bh + 'px'; elm.style.top = -contY / scale + 10 + 'px'; elm.style.display = (ch <= ph) ? 'none' : 'block'; }; var scrollToEnd = function() { if (ch > ph) { elm.style.top = ph - bh - 10 + 'px'; cont.style.top = ph - ch + 'px'; } }; elm.data = {'update': update, 'scrollToEnd': scrollToEnd}; var onMove = function(event) { var e = (event) ? event : window.event, dist = e.pageY - pos; if(elmY + dist < 10) { elm.style.top = '10px'; cont.style.top = 0; } else if(elmY + dist + bh > ph - 10) { elm.style.top = ph - bh - 10 + 'px'; cont.style.top = ph - ch + 'px'; } else { elm.style.top = elmY + dist + 'px'; cont.style.top = contY - scale * dist + 'px'; } }; var onUp = function() { document.removeEventListener('mousemove', onMove, false); document.removeEventListener('mouseup', onUp, false); }; elm.onmousedown = function(event) { var e = (event) ? event : window.event, y = e.pageY; e.preventDefault(); pos = y; update(); if (elm.offsetHeight != bh) elm.style.height = bh + 'px'; document.addEventListener('mousemove', onMove, false); document.addEventListener('mouseup', onUp, false); }; var onWheel = function(event){ var e = (event) ? event : window.event; e.preventDefault(); if (ch < ph) return; if (ch == 0) update(); var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail) )); var ct = cont.offsetTop, et = elm.offsetTop; var dist = delta * -20 / scale; if(et + dist < 10) { elm.style.top = '10px'; cont.style.top = 0; } else if(et + dist + bh > ph - 10) { elm.style.top = ph - bh - 10 + 'px'; cont.style.top = ph - ch + 'px'; } else { elm.style.top = et + dist + 'px'; cont.style.top = ct - scale * dist + 'px'; } }; if(cont.hasOwnProperty('removeMouseWheelListener')) cont.removeMouseWheelListener(); cont.onmousewheel = onWheel; cont.addEventListener('DOMMouseScroll', onWheel, false); cont.removeMouseWheelListener = function(){this.removeEventListener('DOMMouseScroll', onWheel, false);} }, showDownloads: function(total) { var create = this.create, css = this.css, text = this.text, root = this; var mailCont = zmail.main.getInstance(); var BBCode = zmail.data.getInstance().createBBCode; var cont = create('div', css.notification.cont); var header = create('div', css.notification.header.cont); var headerText = create('p', css.notification.header.text); var mail = create('div', css.notification.header.mail); var description = create('p', css.notification.from); var downloaded = create('p', css.notification.link); var count = create('span', {'position': 'absolute', 'right': 0, 'top': 0, 'height': '100%', 'lineHeight': '100%'}); var closeCont = create('div', css.notification.remove); text(headerText, 'Welcome to ZMail'); text(downloaded, 'Downloaded: '); text(count, '0/' + total); description.innerHTML = 'Downloading messages, please wait...<br/>This is one time process.' closeCont.innerHTML = 'X'; var removeCont = function() { if (cont.parentElement && cont.data.isOpen) { document.body.removeChild(cont); cont.data.isOpen = false; } } closeCont.onclick = removeCont; mail.style.backgroundImage = 'url(' + this.res.mail + ')'; description.style.lineHeight = '12px'; downloaded.style.position = 'relative'; downloaded.style.margin = '5px 0 0 0'; downloaded.appendChild(count); header.zm_append([mail, headerText]); cont.zm_append([header, description, downloaded, closeCont]); cont.data = {'count': count, 'isOpen': true}; cont.style.height = 'auto'; document.body.appendChild(cont); this.downloadsCont = cont; }, updateDownloads: function(c, t) { var cont = this.downloadsCont; if (cont && cont.data.isOpen) { var count = cont.data.count; if (c < t) { count.innerHTML = c + '/' + t; } else { document.body.removeChild(cont); cont.data.isOpen = false; this.downlodsCont = null; } } }, notify: function(msg, type) { var create = this.create, css = this.css, text = this.text, root = this; var mailCont = zmail.main.getInstance(); var BBCode = zmail.data.getInstance().createBBCode; var cont = create('div', css.notification.cont); var header = create('div', css.notification.header.cont); var headerTextCss = css.notification.header; var headerText = (type == 2) ? create('p', headerTextCss.textMultiple) : create('p', headerTextCss.text); var mail = create('div', css.notification.header.mail); var mailType = create('span', css.notification.header.type); var closeCont = create('div', css.notification.remove); var labelText = ['New mail received', 'Mail has been sent', 'You have (' + msg + ')<br/> new messages']; var label = labelText[type]; (type == 2) ? headerText.innerHTML = label : text(headerText, label); closeCont.innerHTML = 'X'; var removeCont = function() { if (cont.parentElement) { document.body.removeChild(cont); root.openNotificationsCount--; } } closeCont.onclick = removeCont; mail.style.backgroundImage = 'url(' + this.res.mail + ')'; mailType.style.backgroundImage = (type == 1) ? 'url(' + this.res.arrowRight + ')' : 'url(' + this.res.arrowLeft + ')'; mail.appendChild(mailType); header.zm_append([mail, headerText]); if (type == 2) { var openButton = create('div', css.notification.button); var cancelButton = create('div', css.notification.button); text(openButton, 'Open mail'); text(cancelButton, 'Cancel'); openButton.onclick = function() { if (!mailCont.isOpen) mailCont.open(); removeCont(); }; cancelButton.onclick = function() { removeCont(); }; openButton.style.left = '10px'; cancelButton.style.right = '10px'; cont.zm_append([header, openButton, cancelButton, closeCont]); } else { var from = create('p', css.notification.from); var subject = create('p', css.notification.subject); if (type == 0) { var subjectLink = create('a', css.notification.link); subjectLink.innerHTML = msg.s; var openMessage = function() { var searchBox = root.dom.leftBar.searchBox; var msgSb = root.dom.rightBar.scrollBar.bar; var generatedHeaders = root.generatedHeaders; if (!mailCont.isOpen) mailCont.open(); if (root.selectedGroup) root.dom.leftBar.items[root.selectedGroup].zm_css(root.css.li.leftBar.sub); if (root.selectedFolder) root.dom.leftBar.items[root.selectedFolder].zm_css(root.css.li.leftBar.sub); root.dom.leftBar.items.inbox.zm_css(root.css.li.leftBar.subSelected); root.selectedFolder = 'inbox'; root.selectedGroup = false; root.resetMsgCont(1); root.selectedPage = 0; root.populateHeaders(); searchBox.disabled = false; msgSb.data.update(); for (var i in generatedHeaders) { var id = generatedHeaders[i].msg.i; if (parseInt(id, 10) == parseInt(msg.i, 10)) { generatedHeaders[i].cont.onclick(); break; } } removeCont(); }; subjectLink.onclick = function(){openMessage.call(root)}; text(subject, 'Subject: '); subject.appendChild(subjectLink); from.innerHTML = 'From: ' + BBCode.player(msg.f); } else if(type == 1) { text(subject, 'Subject: ' + msg.s); if (msg.t.length == 1) from.innerHTML = 'To: ' + BBCode.player(msg.t[0]); else text(from, 'To: ' + msg.t.length + ' Players'); } cont.zm_append([header, from, subject, closeCont]); } cont.style.bottom = (this.openNotificationsCount * 103) + 30 + 'px'; cont.style.zIndex = 1000 - this.openNotificationsCount; document.body.appendChild(cont); root.openNotificationsCount++; setTimeout(removeCont, 30000); }, findPlayer: function(txt) { this.clearPlayersSearch(0); var str = txt.replace(/[^a-z A-Z 0-9 \-_]/g, '').toLowerCase(); if (str == '') return; var players = zmail.data.getInstance().players; var matches = [], completeMatch = false, count = 0; for(var i = 0; i < players.length; i++) { if ((players[i].pn.toLowerCase().substr(0,str.length) == str) && count < 21) { matches.push(players[i]); count++; } if (players[i].pn.toLowerCase() == txt.toLowerCase()) completeMatch = true; } this.completePlayerMatch = completeMatch; this.populatePlayersResultsCont(matches); }, changePlayerSelection: function(mode) { var searchBox = this.dom.compose.leftBar.searchBox; var mainCont = this.dom.compose.leftBar.results.mainCont; var resultsSbc = this.dom.compose.leftBar.results.scrollbarCont; var resultsCont = this.dom.compose.leftBar.results.resultsCont; var index = searchBox.data.selectedIndex; var results = searchBox.data.results; var length = results.length; var newIndex = (mode) ? (index + 1) % length : (index - 1 < 0) ? length - 1 : index - 1; var currentItem = results[index]; var newItem = results[newIndex]; currentItem.style.background = 'transparent'; currentItem.style.color = '#8e8e8e'; newItem.style.background = '#266589'; newItem.style.color = '#bcbcbc'; if (newIndex > 4 && length > 5) { var ch = resultsCont.offsetHeight, ph = resultsSbc.offsetHeight; resultsCont.style.top = -(newIndex - 4) * 49 + 'px'; resultsSbc.firstChild.style.top = (((ph - 20) / ch) * (newIndex - 4) * 49) + 10 +'px'; } if (newIndex < 4 && length > 5) { resultsCont.style.top = 0; resultsSbc.firstChild.style.top = '10px'; } searchBox.data.selectedIndex = newIndex; }, addRecipient: function(name) { if (this.recipients.indexOf(name) == -1) { var Item = this.create('div', this.css.compose.leftBar.recipients.recipient.cont); var remove = this.create('div', this.css.compose.leftBar.recipients.recipient.remove); var mainCont = this.dom.compose.leftBar.recipientsMainCont; var cont = this.dom.compose.leftBar.recipientsCont; var scrollCont = this.dom.compose.leftBar.recipientsSbc; var bar = this.dom.compose.leftBar.recipientsSb; var updateScroll = function() { scrollCont.style.visibility = (cont.offsetHeight > 0 && cont.offsetHeight < 180) ? 'hidden' : 'visible'; mainCont.style.height = Math.max(28, Math.min(180, cont.offsetHeight)) + 'px'; bar.data.update(); bar.data.scrollToEnd(); }; var root = this; this.text(Item, name); this.text(remove, 'X'); remove.data = {'name': name}; remove.onclick = function() { root.dom.compose.leftBar.recipientsCont.removeChild(Item); var player = this.data.name, index = root.recipients.indexOf(player); if(index > -1) root.recipients.splice(index, 1); updateScroll(); }; Item.appendChild(remove); this.dom.compose.leftBar.recipientsCont.insertBefore(Item, this.dom.compose.leftBar.searchBoxCont); this.clearPlayersSearch(1); this.recipients.push(name); updateScroll(); } }, clearPlayersSearch: function(type) { var searchBox = this.dom.compose.leftBar.searchBox; var mainCont = this.dom.compose.leftBar.results.mainCont; var resultsSbc = this.dom.compose.leftBar.results.scrollbarCont; var resultsCont = this.dom.compose.leftBar.results.resultsCont; if (type == 1) { searchBox.value = ''; searchBox.focus(); } resultsSbc.zm_empty(); resultsCont.zm_empty(); resultsCont.style.top = 0; mainCont.style.display = 'none'; searchBox.data.results = []; searchBox.data.selectedIndex = 0; searchBox.data.isContOpen = false; this.completePlayerMatch = false; }, populatePlayersResultsCont: function(arr) { var root = this; var resultsCont = this.dom.compose.leftBar.results.resultsCont; var cont = this.dom.compose.leftBar.results.mainCont; var recipientsCont = this.dom.compose.leftBar.recipientsMainCont; var scrollbarCont = this.dom.compose.leftBar.results.scrollbarCont; var searchBox = this.dom.compose.leftBar.searchBox; var add = function() { root.addRecipient.apply(root, arguments); }; var items = []; for(var i = 0; i < arr.length; i++) { var style = (i == 0) ? 'contSelected' : 'cont'; var Item = this.create('div', this.css.compose.leftBar.recipients.searchBox.item[style]); var player = this.create('p', this.css.compose.leftBar.recipients.searchBox.item.text); var alliance = this.create('p', this.css.compose.leftBar.recipients.searchBox.item.text); this.text(player, arr[i].pn); this.text(alliance, arr[i].an); Item.zm_append([player, alliance]); Item.data = {'name': arr[i].pn}; Item.onclick = function() { add(this.data.name); }; resultsCont.appendChild(Item); items.push(Item); } cont.style.display = 'block'; cont.style.height = Math.min(244, arr.length * 49) + 'px'; cont.style.top = recipientsCont.offsetTop + recipientsCont.offsetHeight + 3 + 'px'; if(arr.length > 5) { var bar = this.create('div', this.css.compose.leftBar.recipients.searchBox.scrollbar.bar); scrollbarCont.appendChild(bar); this.enableScroll(bar, scrollbarCont, resultsCont); } searchBox.data.isContOpen = true; searchBox.data.results = items; }, update: function(arr1, arr2, arr3, arr4) { if(!this.isLoaded) { var s = this.storage, j = s.get('junk'), t0 = s.get('trash0'), t1 = s.get('trash1'), d = s.get('draft'); var doc = s.get('documents'), b = s.get('blocked'), f = s.get('friends'), g = s.get('groups'); this.folders.junk.ids = j; this.folders.trash[0].ids = t0; this.folders.trash[1].ids = t1; this.folders.documents.ids = doc; this.folders.draft = d; this.contacts.friends = f; this.contacts.blocked = b; this.contacts.groups = g; this.isLoaded = true; } if(arr1 && arr2) { this.filter(arr1, 0); this.filter(arr2, 1); } if (arr4 && (arr4.length > 0)) this.notify(arr4[0], 1); if (arr3 && (arr3.length > 0)) { if(arr3.length == 1) this.notify(arr3[0], 0); else this.notify(arr3.length, 2); } var f = this.folders, c = this.contacts, root = this; var count = function(r) { var t = f.trash, d = f.draft, g = ['blocked', 'friends', 'groups'].indexOf(r); var len = function(a){return (!a) ? 0 : a.length;}; if (g == -1) length = (r == 'draft') ? root.size(d) : (r == 'trash') ? len(t[0].msgs) + len(t[1].msgs) : len(f[r].msgs); else length = (r == 'groups') ? root.size(c[r]) : len(c[r]); return (length == 0) ? '' : length; }; this.dom.leftBar.folders.inbox.nodeValue = 'Inbox ' + count('inbox'); this.dom.leftBar.folders.outbox.nodeValue = 'Outbox ' + count('outbox'); this.dom.leftBar.folders.draft.nodeValue = 'Draft ' + count('draft'); this.dom.leftBar.folders.junk.nodeValue = 'Junk ' + count('junk'); this.dom.leftBar.folders.trash.nodeValue = 'Trash ' + count('trash'); this.dom.leftBar.folders.documents.nodeValue = 'Documents ' + count('documents'); this.dom.leftBar.contacts.friends.nodeValue = 'Friends ' + count('friends'); this.dom.leftBar.contacts.blocked.nodeValue = 'Blocked ' + count('blocked'); this.dom.leftBar.contacts.groups.nodeValue = 'Groups ' + count('groups'); if (this.selectedFolder) this.populateHeaders(); if (this.selectedGroup) this.populateContacts(); }, resetMsgCont: function(type) { var expandCont = this.dom.rightBar.expandCont; var msgCont = this.dom.rightBar.msgCont; var selectedMsgs = this.getSelectedMsgsIds(); if (expandCont.data.isExpanded) expandCont.onclick(); msgCont.zm_empty(); msgCont.style.top = 0; if ((type == 1) && !this.selectedGroup) { var count = (selectedMsgs == null) ? 0 : selectedMsgs.length; var header = this.create('p', this.css.message.subject); header.innerHTML = (count > 0) ? count + ' messages selected.' : 'No messages selected.'; msgCont.appendChild(header); }; }, filter: function(arr, type) { var i = {'ids': [], 'msgs': []}, t = {'ids': [], 'msgs': []}, j = {'ids': [], 'msgs': []}, d = {'ids': [], 'msgs': []}; var trash = this.folders.trash[type].ids, junk = this.folders.junk.ids, draft = this.folders.draft; var documents = this.folders.documents.ids, blocked = this.contacts.blocked; for (var n = 0; n < arr.length; n++) { var id = arr[n].i, msg = arr[n], fid = arr[n].fi; if ((trash)&&(trash.indexOf(id) > -1)) { t.ids.push(id); t.msgs.push(msg); } else if ((type == 0)&&(junk)&&(junk.indexOf(id) > -1)) { j.ids.push(id); j.msgs.push(msg); } else if ((type == 0)&&(documents)&&(documents.indexOf(id) > -1)) { d.ids.push(id); d.msgs.push(msg); } else if ((type == 0)&&(blocked)&&(blocked.indexOf(fid) > -1)) { j.ids.push(id); j.msgs.push(msg); } else { i.ids.push(id); i.msgs.push(msg); } } if (type == 0) { this.folders.inbox = i; this.folders.trash[0] = t; this.folders.junk = j; this.folders.documents = d; } if (type == 1) { this.folders.outbox = i; this.folders.trash[1] = t; } }, updateContacts: function(alliance, commanders, officers) { var allianceTxt = this.dom.leftBar.contacts.alliance; var commandersTxt = this.dom.leftBar.contacts.commanders; var officersTxt = this.dom.leftBar.contacts.officers; var sg = this.selectedGroup; allianceTxt.nodeValue = (alliance && (alliance.length > 0)) ? 'Alliance ' + alliance.length : 'Alliance'; commandersTxt.nodeValue = (commanders && (commanders.length > 0)) ? 'Commanders ' + commanders.length : 'Commanders'; officersTxt.nodeValue = (officers && (officers.length > 0)) ? 'Officers ' + officers.length : 'Officers'; if (sg && (['commanders', 'officers', 'alliance'].indexOf(sg) > -1)) this.populateContacts(); }, updateAllies: function(allies) { console.log(allies); var alliesTxt = this.dom.leftBar.contacts.allies, sg = this.selectedGroup; alliesTxt.nodeValue = (allies && this.size(allies) > 0) ? 'Allies ' + this.size(allies) : 'Allies'; if (sg && sg == 'allies') this.populateContacts(); }, resetComposeContainer: function() { var recipientsCont = this.dom.compose.leftBar.recipientsCont; var msgCont = this.dom.compose.rightBar.msgCont; var iframe = this.dom.compose.rightBar.iframe; this.dom.compose.rightBar.subject.value = "Add Subject:"; this.iframeContent = ""; this.recipients = []; while (recipientsCont.children.length > 1) recipientsCont.removeChild(recipientsCont.firstChild); while (msgCont.children.length > 1) msgCont.removeChild(msgCont.lastChild); iframe.style.height = '100px'; }, addSections: function() { var iframe = this.dom.compose.rightBar.iframe; if(this.generatedSections != null && this.generatedSections.length > 0) { var msgCont = this.dom.compose.rightBar.msgCont; for (var i = 0; i < this.generatedSections.length; i++) msgCont.appendChild(this.generatedSections[i][0]); } }, openNewMail: function(type) { this.resetComposeContainer(); this.generatedSections = []; if (type == 1) { var contacts = this.selectedContacts; var playerSearchBox = this.dom.rightBar.contacts.search; for (var i = 0; i < contacts.length; i++) this.addRecipient(this.getPlayerNameById(contacts[i])); this.selectedContacts = []; this.addSelectedContacts(); this.populateContacts(); playerSearchBox.onblur(); } zmail.compose.getInstance().open(); }, replyToAll: function() { var msgCont = this.dom.compose.rightBar.msgCont; var msg = this.selectedHeader.data.msg; this.resetComposeContainer(); this.addSections(); this.addRecipient(msg.f); for (var i = 0; i < msg.t.length; i++) this.addRecipient(msg.t[i]); this.dom.compose.rightBar.subject.value = 'Re: ' + msg.s; zmail.compose.getInstance().open(); }, reply: function() { var msgCont = this.dom.compose.rightBar.msgCont; var msg = this.selectedHeader.data.msg; this.resetComposeContainer(); this.addSections(); this.dom.compose.rightBar.subject.value = 'Re: ' + msg.s; this.addRecipient(msg.f); zmail.compose.getInstance().open(); }, forwardMsg: function() { var msgCont = this.dom.compose.rightBar.msgCont; var msg = this.selectedHeader.data.msg; this.resetComposeContainer(); this.addSections(); this.dom.compose.rightBar.subject.value = 'Fwd: ' + msg.s; zmail.compose.getInstance().open(); }, sendMail: function() { var to = this.recipients.join('; '); var subject = this.dom.compose.rightBar.subject.value; var date = new Date(); var from = zmail.data.getInstance().ownerName; var clone = this.dom.compose.rightBar.iframe.contentWindow.document.body.cloneNode(true); var message = this.encodeMsg(clone); date = date.getTime(); if ((subject == '') || (subject == 'Add Subject:')) subject = 'No subject'; if (message.trim() == 'Add Text') message = ''; message = '<cnc><cncs>' + from + '</cncs><cncd>' + date + '</cncd><cnct>' + message + '</cnct></cnc>'; for (var i = 0; i < this.generatedSections.length; i++) { if(this.generatedSections[i][2] == 1) message += this.generatedSections[i][1]; } zmail.data.getInstance().callMethod('sendMail', [to, "", subject, message]); if (this.selectedDraft) { var id = parseInt(this.selectedDraft, 10), header = this.selectedHeader; if (header.data.msg.i == id) this.deleteDraft(); else { if (this.folders.draft.hasOwnProperty(id)) delete this.folders.draft[id]; this.update(); this.storage.save.call(this); } } }, saveDraft: function() { var subject = this.dom.compose.rightBar.subject.value; var date = new Date(); var from = zmail.data.getInstance().ownerName; var fromId = zmail.data.getInstance().ownerId; var clone = this.dom.compose.rightBar.iframe.contentWindow.document.body.cloneNode(true); var message = this.encodeMsg(clone); if ((subject == '') || (subject == 'Add Subject:')) subject = 'No subject'; date = date.getTime(); message = '<cnc><cncs>' + from + '</cncs><cncd>' + date + '</cncd><cnct>' + message + '</cnct></cnc>'; for (var i = 0; i < this.generatedSections.length; i++) { if(this.generatedSections[i][2] == 1) message += this.generatedSections[i][1]; } var id = (this.selectedDraft) ? parseInt(this.selectedDraft) : date; var msg = {'b':message,'r':true,'f':from,'fi':fromId,'t':this.recipients,'s':subject,'d':date,'i':id,'rm':clone.innerHTML}; if (this.folders.draft == null) this.folders.draft = {}; this.folders.draft[id] = msg; this.selectedDraft = null; this.update(); this.storage.save.call(this); }, editDraft: function() { if(this.selectedFolder == 'draft') { this.resetComposeContainer(); var id = this.selectedHeader.data.msg.i; var draft = this.folders.draft[id]; this.recipients = draft.t; this.dom.compose.rightBar.subject.value = draft.s; this.iframeContent = draft.rm; if(this.generatedSections && this.generatedSections.length > 1) { this.generatedSections.splice(0,1); this.addSections(); } this.selectedDraft = id; for (var i = 0; i < draft.t.length; i++) this.addRecipient(draft.t[i]); zmail.compose.getInstance().open(); } }, deleteDraft: function() { if (this.selectedFolder == 'draft') { var ids = this.getSelectedMsgsIds(); for (var i = 0; i < ids.length; i++) { if (this.folders.draft.hasOwnProperty(ids[i])) delete this.folders.draft[ids[i]]; } this.selectAll(false); this.update(); this.storage.save.call(this); } }, encodeMsg: function(cont) { try { var getMargin = function(a) { var m = 0, elm = a; while (elm.parentElement) { if (elm.nodeType == 1) m += parseInt(elm.style.marginLeft) || 0; elm = elm.parentElement; } return m; }; var getLinkType = function(a) { var type; if (a.match('webfrontend.gui.util.BBCode.openPlayerProfile')) type = 'player'; if (a.match('webfrontend.gui.util.BBCode.openAllianceProfile')) type = 'alliance'; if (a.match('webfrontend.gui.UtilView.centerCoordinatesOnRegionViewWindow')) type = 'coords'; return type; }; var getAttr = function(a) { var b = ''; switch(a.nodeName.toLowerCase()) { case 'p': case 'div': if (a.style.textAlign !== '') b = a.style.textAlign.charAt(0); else if (a.align !== '') b = a.align.charAt(0); break; case 'a': if (a.attributes.hasOwnProperty('href')) b = 'url'; if (a['onclick']) b = getLinkType(a.onclick.toString()); break; default: b = ''; } return b; }; var parseHTML = function(a) { var result = '', o = []; for(var i = 0; i < a.childNodes.length; i++) { var elm = a.childNodes[i], nodeName = elm.nodeName.toLowerCase(), nodeType = elm.nodeType; var attr = (nodeType == 1 && getAttr(elm) !== '') ? getAttr(elm) + ']' : ']'; var className = elm.className, nodeValue = elm.nodeValue; var nodeText = (elm.innerText) ? elm.innerText : elm.textContent; var isLineBreak = (elm.innerHTML == '<br>') ? true : false; if (nodeType == 1 && elm.children.length == 0) { if ((nodeName == 'div') && (attr == ']') && (className != 'quote')) result += nodeText + '\n'; else if ((nodeName == 'div') && (attr != ']')) result += '[d' + attr + nodeText + '[/d' + attr; else if ((nodeName == 'div') && (className == 'quote')) result += '[quote]' + nodeTExt + '[/quote]'; else if ((nodeName == 'p') && (attr == ']')) result += nodeText; else if ((nodeName == 'p') && (attr != ']')) result += '[d' + attr + nodeText + '[/d' + attr; else if (nodeName == 'blockquote') result += '[bq' + attr + nodeText + '[/bq' + attr; else if (nodeName == 'br') result += '\n'; else if (nodeName == 'a') result += '[' + attr + nodeText + '[/' + attr; else if (nodeName == 'font') result += nodeText; else if (nodeName == 'strike') result += '[s]' + nodeText + '[/s]'; else result += '[' + nodeName + attr + nodeText + '[/' + nodeName + ']'; } else if (nodeType == 1 && elm.children.length > 0) { o.push(elm); if ((nodeName == 'div') && (attr == ']') && (className != 'quote') && !isLineBreak) result += ''; else if ((nodeName == 'div') && (attr != ']') && !isLineBreak) result += '[d' + attr; else if ((nodeName == 'div') && isLineBreak) result += ''; else if ((nodeName == 'div') && (className == 'quote')) result += '[quote]'; else if ((nodeName == 'p') && (attr == ']')) result += ''; else if ((nodeName == 'p') && (attr != ']')) result += '[d' + attr; else if (nodeName == 'blockquote') result += '[bq' + attr; else if (nodeName == 'a') result += '[' + attr; else if (nodeName == 'font') result += ''; else if (nodeName == 'span') result += ''; else if (nodeName == 'strike') result += '[s]'; else result += '[' + nodeName + ']'; result += parseHTML(o[o.length - 1]); if ((nodeName == 'div') && (attr == ']') && (className != 'quote') && !isLineBreak) result += '\n'; else if ((nodeName == 'div') && (attr != ']') && !isLineBreak) result += '[/d' + attr; else if ((nodeName == 'div') && isLineBreak) result += ''; else if ((nodeName == 'div') && (className == 'quote')) result += '[/quote]'; else if ((nodeName == 'p') && (attr == ']')) result += ''; else if ((nodeName == 'p') && (attr != ']')) result += '[/d' + attr; else if (nodeName == 'blockquote') result += '[/bq' + attr; else if (nodeName == 'a') result += '[/' + attr; else if (nodeName == 'font') result += ''; else if (nodeName == 'span') result += ''; else if (nodeName == 'strike') result += '[/s]'; else result += '[/' + nodeName + ']'; } else if (nodeType == 3 && nodeValue && nodeValue.trim() !== '') result += nodeValue; } result.replace('\u200B', ''); return result; }; var encoded = parseHTML(cont); return encoded; } catch(e) { console.log('zmail: ' + e.toString()); return 'ERROR'; } }, getCharactersCount: function(msg) { var count = 0; if (this.generatedSections && this.generatedSections.length) { for (var i = 0; i < this.generatedSections.length; i++) { var cnct = this.generatedSections[i][1].replace(/.*?<cnct>([^<\/cnct>]*)<\/cnct>.*/, '$1'); if (cnct && this.generatedSections[i][2] == 1) count += cnct.length; } } if (msg) count += msg.length; return count; }, markRead: function(flag) { var ids = this.getSelectedMsgsIds(), style = (flag) ? 'cont' : 'contUnRead'; var headers = (this.selectedMsgs.headers.length == 0) ? [this.selectedHeader] : this.selectedMsgs.headers; for(var i = 0; i < headers.length; i++) { var isRead = headers[i].data.isRead; var id = headers[i].data.msg.i; var index = this.getMsgIndex(id, this.folders.inbox.msgs); headers[i].data.isRead = flag; headers[i].zm_css(this.css.header[style]); if (index > -1) this.folders.inbox.msgs[index].r = flag; else console.log('zmail: ' + 'Inbox doesn\'t contain id(' + id + ')'); } this.selectAll(false); zmail.data.getInstance().markRead(ids, flag); }, selectAll: function(n) { var selectAllCheckBox = this.dom.middleBar.footer.selectAll; var ids = [], headers = [], boxes = []; for(var key in this.generatedHeaders) { var checkBox = this.generatedHeaders[key].checkBox; var header = this.generatedHeaders[key].cont; header.style.background = (n) ? '#363636' : (header.data.isRead) ? 'transparent' : '#292929'; header.data.isSelected = n; checkBox.data.isChecked = n; checkBox.style.background = (n) ? '#9f9f9f' : 'transparent'; ids.push(parseInt(key)); headers.push(header); boxes.push(checkBox); } this.selectedMsgs.ids = (n) ? ids : []; this.selectedMsgs.headers = (n) ? headers : []; this.selectedMsgs.checkBoxes = (n) ? boxes : []; selectAllCheckBox.data.isChecked = n; selectAllCheckBox.style.background = (n) ? '#9f9f9f' : 'transparent'; this.selectedHeader = null; this.resetMsgCont(1); this.setToolbar(); }, getSelectedMsgsIds: function() { var smIds = this.selectedMsgs.ids, sh = this.selectedHeader; var ids = (smIds != null && smIds.length > 0) ? smIds : (sh != null) ? [sh.data.msg.i] : null; return ids; }, getMsgIndex: function(id, msgs) { var index = -1; for(var i = 0; i < msgs.length; i++) { if (msgs[i].i == id) { index = i; break; } } return index; }, removeMsgFromFolder: function(id, folder) { var idIndex = this.folders[folder].ids.indexOf(id); if (idIndex > -1) { if (this.folders[folder].msgs[idIndex].i == id) { var msg = this.folders[folder].msgs[idIndex]; this.folders[folder].ids.splice(idIndex, 1); this.folders[folder].msgs.splice(idIndex, 1); return msg; } else { var msgIndex = this.getMsgIndex(id, this.folders[folder].msgs); var msgId = this.folders[folder].msgs[msgIndex].i; if ((msgIndex > -1) && (msgId == id)) { var msg = this.folders[folder].msgs[msgIndex]; this.folders[folder].ids.splice(idIndex, 1); this.folders[folder].msgs.splice(msgIndex, 1); return msg; } else { if (msgIndex == -1) console.log('zmail: ' + 'Message with id: ' + id + ' could not be found in ' + folder + '!'); else if (msgId !== id) console.log('zmail: ' + 'id mismatch (' + id + ' - ' + msgId + ')'); else console.log('zmail: ' + 'something went terribly wrong'); return false; } } } else console.log('zmail: ' + 'id: ' + id + 'does not exist in folder ' + folder); }, toJunk: function() { var arr = this.getSelectedMsgsIds(); if (arr !== null) { for (var i = 0; i < arr.length; i++) { var id = arr[i], msg = this.removeMsgFromFolder(id, 'inbox'); if (msg && this.folders.junk.ids.indexOf(id) == -1) { this.folders.junk.ids.push(id); this.folders.junk.msgs.push(msg); } if (this.folders.junk.ids.indexOf(id) > -1) console.log('zmail: ' + 'Message with id: ' + id + 'already exists in Junk!'); } this.selectAll(false); this.update(); this.storage.save.call(this); } else console.log('zmail: ' + 'No messages selected!'); }, toDocuments: function() { var arr = this.getSelectedMsgsIds(); if (arr !== null) { for (var i = 0; i < arr.length; i++) { var id = arr[i], msg = this.removeMsgFromFolder(id, 'inbox'), index = this.folders.documents.ids.indexOf(id); if (msg && (index == -1)) { this.folders.documents.ids.push(id); this.folders.documents.msgs.push(msg); } if (index > -1) console.log('zmail: ' + 'Message (' + id + ') already exists in Documents!'); } this.selectAll(false); this.update(); this.storage.save.call(this); } else console.log('zmail: ' + 'No messages selected!'); }, toTrash: function() { var arr = this.getSelectedMsgsIds(); var folder = this.selectedFolder; var type = (folder == 'outbox') ? 1 : 0; if (arr !== null) { for (var i = 0; i < arr.length; i++) { var id = arr[i], msg = this.removeMsgFromFolder(id, folder), index = this.folders.trash[type].ids.indexOf(id); if (msg && (index == -1)) { this.folders.trash[type].ids.push(id); this.folders.trash[type].msgs.push(msg); } if (index > -1) console.log('zmail: ' + 'Message (' + id + ') already exists in trash[' + type + ']!'); } this.selectAll(false); this.update(); this.storage.save.call(this); } else console.log('zmail: ' + 'No messages selected!'); }, emptyFolder: function() { var data = zmail.data.getInstance(); if(this.selectedFolder == 'junk') { if (this.folders.junk.ids != null && this.folders.junk.ids.length > 0) { data.deleteMsgs(this.folders.junk.ids, 1); this.folders.junk.ids = []; this.folders.junk.msgs = []; } } if(this.selectedFolder == 'trash') { if (this.folders.trash[0].ids != null && this.folders.trash[0].ids.length > 0) { data.deleteMsgs(this.folders.trash[0].ids, 1); this.folders.trash[0].ids = []; this.folders.trash[0].msgs = []; } if (this.folders.trash[1].ids != null && this.folders.trash[1].ids.length > 0) { data.deleteMsgs(this.folders.trash[1].ids, 0); this.folders.trash[1].ids = []; this.folders.trash[1].msgs = []; } } this.update(); this.storage.save.call(this); }, notJunk: function() { var arr = this.getSelectedMsgsIds(); if(this.selectedFolder == 'junk' && arr !== null) { for (var i = 0; i < arr.length; i++) { var id = arr[i], msg = this.removeMsgFromFolder(id, 'junk'), index = this.folders.inbox.ids.indexOf(id); if (msg && (index == -1)) { this.folders.inbox.ids.push(id); this.folders.inbox.msgs.push(msg); } if (index > -1) console.log('zmail: ' + 'Message (' + id + ')already exists in inbox!'); } this.selectAll(false); this.update(); this.storage.save.call(this); } else console.log('zmail: ' + 'No messages selected!'); }, notTrash: function() { var arr = this.getSelectedMsgsIds(); if ((this.selectedFolder == 'trash') && (arr !== null)) { for (var i = 0; i < arr.length; i++) { var id = arr[i]; if (this.folders.trash[0].ids.indexOf(id) > -1) { var idIndex = this.folders.trash[0].ids.indexOf(id); var msgIndex = this.getMsgIndex(id, this.folders.trash[0].msgs); if (msgIndex > -1) { var msg = this.folders.trash[0].msgs[msgIndex]; this.folders.trash[0].ids.splice(idIndex, 1); this.folders.trash[0].msgs.splice(msgIndex, 1); if (this.folders.inbox.ids.indexOf(id) == -1) { this.folders.inbox.ids.push(id); this.folders.inbox.msgs.push(msg); } else console.log('zmail: ' + 'id(' + id + ') already exists in Inbox!'); } else console.log('zmail: ' + 'trash[inbox] doesn\'t contain message with id(' + id + ')'); } else if (this.folders.trash[1].ids.indexOf(id) > -1) { var idIndex = this.folders.trash[1].ids.indexOf(id); var msgIndex = this.getMsgIndex(id, this.folders.trash[1].msgs); if (msgIndex > -1) { var msg = this.folders.trash[1].msgs[msgIndex]; this.folders.trash[1].ids.splice(idIndex, 1); this.folders.trash[1].msgs.splice(msgIndex, 1); if (this.folders.outbox.ids.indexOf(id) == -1) { this.folders.outbox.ids.push(id); this.folders.outbox.msgs.push(msg); } else console.log('zmail: ' + 'id(' + id + ') already exists in Inbox!'); } else console.log('zmail: ' + 'trash[inbox] doesn\'t contain message with id(' + id + ')'); } else console.log('zmail: ' + 'trash folder doesn\'t contain id(' + id + ')'); } this.selectAll(false); this.update(); this.storage.save.call(this); } }, notDocument: function() { var arr = this.getSelectedMsgsIds(); if(this.selectedFolder == 'documents' && arr !== null) { for (var i = 0; i < arr.length; i++) { var id = arr[i], msg = this.removeMsgFromFolder(id, 'documents'), index = this.folders.inbox.ids.indexOf(id); if (msg && (index == -1)) { this.folders.inbox.ids.push(id); this.folders.inbox.msgs.push(msg); } if (index > -1) console.log('zmail: ' + 'Message (' + id + ')already exists in inbox!'); } this.selectAll(false); this.update(); this.storage.save.call(this); } else console.log('zmail: ' + 'No messages selected!'); }, deleteMsg: function() { var arr = this.getSelectedMsgsIds(); if (this.selectedFolder == 'trash' && arr !== null) { var data = zmail.data.getInstance(); var inbox = [], outbox = []; for (var i = 0; i < arr.length; i++) { var id = arr[i]; if (this.folders.trash[0].ids.indexOf(id) > -1) { var idIndex = this.folders.trash[0].ids.indexOf(id); var msgIndex = this.getMsgIndex(id, this.folders.trash[0].msgs); if(msgIndex > -1) { inbox.push(id); this.folders.trash[0].ids.splice(idIndex, 1); this.folders.trash[0].msgs.splice(msgIndex, 1); } else console.log('zmail: ' + 'trash[inbox] doesn\'t contain a message with id(' + id + ')'); } else if (this.folders.trash[1].ids.indexOf(id) > -1) { var idIndex = this.folders.trash[1].ids.indexOf(id); var msgIndex = this.getMsgIndex(id, this.folders.trash[1].msgs); if(msgIndex > -1) { outbox.push(id); this.folders.trash[1].ids.splice(idIndex, 1); this.folders.trash[1].msgs.splice(msgIndex, 1); } else console.log('zmail: ' + 'trash[outbox] doesn\'t contain a message with id(' + id + ')'); } else console.log('zmail: ' + 'trash folder doesn\'t contain id(' + id + ')'); } this.selectAll(false); this.update(); this.storage.save.call(this); if (inbox.length > 0) data.deleteMsgs(inbox, 1); if (outbox.length > 0) data.deleteMsgs(outbox, 0); } }, searchFolder: function(str) { var msgs = this.folders[this.selectedFolder].msgs; var m1 = [], m2 = [], sd = [], sb = [], root = this; var cont = this.dom.searchResults.cont; var fromUl = this.dom.searchResults.sender.list; var subjectUl = this.dom.searchResults.subject.list; var fromCount = this.dom.searchResults.sender.count; var subjectCount = this.dom.searchResults.subject.count; fromUl.zm_empty(); subjectUl.zm_empty(); cont.style.display = (str == '') ? 'none' : 'block'; for (var i = 0; i < msgs.length; i++) { var sender = msgs[i].f, subject = msgs[i].s.toLowerCase(), id = msgs[i].i, str = str.toLowerCase(); if ((sender.toLowerCase().match(str) !== null) && (sd.indexOf(sender) == -1)) { m1.push([sender, id]); sd.push(sender); } if ((subject.match(str) !== null) && (sb.indexOf(subject) == -1)) { m2.push([subject, id]); sb.push(subject); } } (fromCount.innerText) ? fromCount.innerText = m1.length : fromCount.textContent = m1.length; (subjectCount.innerText) ? subjectCount.innerText = m2.length : subjectCount.textContent = m2.length; var printMsg = function() { root.printMsg.apply(root, arguments); }; for (var a = 0; a < Math.min(5, m1.length); a++) { var li1 = this.create('li', this.css.searchResults.li.sub); var t1 = m1[a][0]; this.text(li1, (t1.length > 15) ? t1.substr(0, 15) + '...' : t1); fromUl.appendChild(li1); li1.data = {'sender': m1[a][0], 'folder': this.selectedFolder}; li1.onclick = function() { var f = this.data.folder, um = [], ui = []; var msgs = root.folders[f].msgs; if (!msgs) return; for (var m = 0; m < msgs.length; m++) if (msgs[m].f == this.data.sender) { um.push(msgs[m]); ui.push(msgs[m].i) }; root.selectedFolder = 'results'; root.folders.results = {'ids': ui, 'msgs': um}; root.populateHeaders(); root.selectedFolder = this.data.folder; cont.style.display = 'none'; } } for (var b = 0; b < Math.min(5, m2.length); b++) { var li2 = this.create('li', this.css.searchResults.li.sub); var t2 = m2[b][0]; this.text(li2, (t2.length > 15) ? t2.substr(0, 15) + '...' : t2); subjectUl.appendChild(li2); li2.data = {'id': m2[b][1], 'folder': this.selectedFolder}; li2.onclick = function() { var id = this.data.id, f = this.data.folder; var index = root.getMsgIndex(id, root.folders[f].msgs); var msg = root.folders[f].msgs[index]; root.selectedFolder = 'results'; root.folders.results = {'ids': [id], 'msgs': [msg]}; root.populateHeaders(); root.selectedFolder = this.data.folder; for (var h in root.generatedHeaders) { root.generatedHeaders[h].cont.click(); break; } cont.style.display = 'none'; } }; }, storage: { 'save': function() { var json = JSON.parse(localStorage.ccta_zmail), folders = {}, contacts = {}; folders.draft = this.folders.draft; folders.junk = this.folders.junk.ids; folders.trash = [this.folders.trash[0].ids, this.folders.trash[1].ids]; folders.documents = this.folders.documents.ids; contacts.friends = this.contacts.friends; contacts.blocked = this.contacts.blocked; contacts.groups = this.contacts.groups; localStorage.ccta_zmail = JSON.stringify({'folders': folders, 'contacts': contacts, 'archive': json.archive}); }, 'get': function(folder) { var json = JSON.parse(localStorage.ccta_zmail), folders = json.folders, contacts = json.contacts; var x = null; var size = function(obj) { if (typeof obj !== 'object') return null; var s = 0; for (var key in obj) s++; return s; }; switch(folder) { case 'draft': if (folders.draft !== null) x = folders.draft; break; case 'trash0': if (folders.trash !== null) x = folders.trash[0]; break; case 'trash1': if (folders.trash !== null) x = folders.trash[1]; break; case 'junk': if (folders.junk !== null) x = folders.junk; break; case 'draft': if (folders.draft !== null) x = folders.draft; break; case 'documents': if (folders.documents !== null) x = folders.documents; break; case 'friends': if (contacts.friends !== null) x = contacts.friends; break; case 'blocked': if (contacts.blocked !== null) x = contacts.blocked; break; case 'groups': if (contacts.groups !== null) x = contacts.groups; break; } x = (x) ? x : ((folder == 'draft')||(folder == 'groups')) ? {} : []; console.log('zmail: ' + x, folder); return x; } }, setToolbar: function() { var folder = this.selectedFolder, selection = this.selectedMsgs, header = this.selectedHeader; var type = (selection.ids == null || selection.ids.length == 0) ? (header == null) ? 'default' : 'single' : 'group'; var toolbarCont = this.dom.topBar.menu; var newMsg = this.dom.topBar.toolbar.newMsg; var trash = this.dom.topBar.toolbar.trash; var delMsg = this.dom.topBar.toolbar.delMsg; var junk = this.dom.topBar.toolbar.junk; var notJunk = this.dom.topBar.toolbar.notJunk; var restore = this.dom.topBar.toolbar.restore; var mark = this.dom.topBar.toolbar.mark; var reply = this.dom.topBar.toolbar.reply; var empty = this.dom.topBar.toolbar.empty; var editDraft = this.dom.topBar.toolbar.editDraft; var deleteDraft = this.dom.topBar.toolbar.deleteDraft; var toDocuments = this.dom.topBar.toolbar.toDocuments; var notDocument = this.dom.topBar.toolbar.notDocument; var forwardMsg = this.dom.topBar.toolbar.forwardMsg; var bars = { 'inbox': { 'single': [reply, trash, junk, toDocuments, mark], 'group': [trash, junk, toDocuments, mark], 'default': [] }, 'outbox': { 'single': [trash, forwardMsg], 'group': [trash], 'default': [] }, 'junk': { 'single': [notJunk, trash, empty], 'group': [notJunk, trash], 'default': [empty] }, 'trash': { 'single': [restore, delMsg, empty], 'group': [restore, delMsg], 'default': [empty] }, 'draft': { 'single': [editDraft, deleteDraft], 'group': [deleteDraft], 'default': [] }, 'documents': { 'single': [notDocument, forwardMsg, trash], 'group': [notDocument, forwardMsg, trash], 'default': [] } }; toolbarCont.zm_empty(); toolbarCont.appendChild(newMsg); if (bars.hasOwnProperty(folder)) toolbarCont.zm_append(bars[folder][type]); }, decodeMsg: function(m) { var match, f = m, create = this.create, cssStyles = this.css, text = this.text; var re = /(?:\[(url|player|alliance|coords)\])((?:.(?!\1))+.)(?:\[\/\1\])/g; var tags = ['ul','ol','tr','td','th','table','li','dr','dc','dl','tbody','bq','span','b','i','u','s','font','quote']; var data = zmail.data.getInstance(); var BBCode = data.createBBCode; var quoteCont = '<br/><div style="padding:10px; border:1px solid #5a5a5a; background:#303030; box-sizing:border-box; -moz-box-sizing:border-box; word-wrap:break-word;">'; var createLink = function(val) { var a = create('a', cssStyles.link._14); text(a, val); a.href = val; a.target = 'blank'; return a.outerHTML; }; var convertTag = function(tag) { var openTag, closeTag, op = new RegExp('\\[' + tag + '\\]', 'g'), cp = new RegExp('\\[\\/' + tag + '\\]', 'g'); switch(tag) { case 'dr': openTag = '<div style="text-align: right">'; closeTag = '</div>'; break; case 'dc': openTag = '<div style="text-align: center">'; closeTag = '</div>'; break; case 'dl': openTag = '<div style="text-align: left">'; closeTag = '</div>'; break; case 'bq': openTag = '<div style="margin-left: 40px">'; closeTag = '</div>'; break; case 'table': openTag = '<table rules="all" border="1" style="border-color: #999; margin: 10px 0;">'; closeTag = '</table>'; break; case 'td': openTag = '<td style="padding: 4px 15px">'; closeTag = '</td>'; break; case 'th': openTag = '<th style="background-color: #999; color: #333; padding: 3px 15px;">'; closeTag = '</th>'; break; case 'quote': openTag = quoteCont; closeTag = '</div>'; break; case 'font': openTag = ''; closeTag = ''; break; default: openTag = '<' + tag + '>'; closeTag = '</' + tag + '>'; } if (op.test(f)) f = f.replace(op, openTag); if (cp.test(f)) f = f.replace(cp, closeTag); }; while((match = re.exec(m)) !== null) { var code = match[1], val = match[2]; if(code == 'coords') val = val.split(':'); switch(code) { case 'url': f = f.replace(match[0], createLink(val)); break; case 'alliance': f = f.replace(match[0], BBCode.alliance(val)); break; case 'player': f = f.replace(match[0], BBCode.player(val)); break; case 'coords': f = f.replace(match[0], BBCode.coords(val.join(':'), val[0], val[1])); break; } } tags.map(convertTag); return f; }, formatDate: function(d,t) { var date = new Date(parseInt(d)); var day = date.getDate(), month = date.getMonth() + 1, year = date.getFullYear().toString().slice(2); var hours = date.getHours(), minutes = date.getMinutes(), fullYear = date.getFullYear(); var newDate = new Date(), today = newDate.getDate(), thisMonth = newDate.getMonth() + 1, thisYear = newDate.getFullYear(); var conv = function(n){ return (n > 9) ? n : '0' + n}; if(day == today && month == thisMonth && fullYear == thisYear && t == 'header') { return conv(hours) + ':' + conv(minutes); } else { var f = conv(day) + '/' + conv(month) + '/' + year; if (t == 'header') return f; if (t == 'msg') return (f + ' ' + conv(hours) + ':' + conv(minutes)); } }, printMsg: function(msg) { var b = msg.b, cssStyles = this.css, text = this.text, create = this.create, root = this; var msgSbc = this.dom.rightBar.scrollBar.cont, msgCont = this.dom.rightBar.msgCont; var sb = this.dom.rightBar.scrollBar.bar; var expandCont = root.dom.rightBar.expandCont; this.generatedSections = []; msgCont.zm_empty(); var createSection = function(f,d,m,i,c) { var s_cont = create('div', cssStyles.compose.rightBar.origionalMsg.cont); var s_remove = create('div', cssStyles.compose.rightBar.origionalMsg.close); var s_from = create('p', cssStyles.compose.rightBar.origionalMsg.from); var s_date = create('p', cssStyles.compose.rightBar.origionalMsg.date); var s_message = document.createElement('div'); var s_sender = f.cloneNode(true); text(s_from, 'From: '); text(s_date, d); text(s_remove, 'x'); s_message.innerHTML = m; s_remove.data = {'index': i, 'contents': c}; s_sender.style.fontSize = '14px'; s_sender.style.fontWeight = 'normal'; s_from.zm_append([s_sender, s_date]); s_cont.zm_append([s_from, s_message, s_remove]); s_remove.onclick = function() { var index = this.data.index, sections = root.generatedSections; var sb = root.dom.compose.rightBar.msgSb; if(sections[index] && sections[index][2] == 1) root.generatedSections[index][2] = 0; this.parentNode.remove(); sb.data.update(); }; root.generatedSections.push([s_cont, c, 1]); }; if(msg.fi === -1) { var subject = create('p', cssStyles.message.subject); var from = create('p', cssStyles.message.from); var to = create('p', cssStyles.message.from); var msgBody = create('p', cssStyles.message.body); var date = create('span', cssStyles.message.date); text(subject, msg.s); text(from, 'From: System'); text(to, 'To: You'); text(date, this.formatDate(msg.d, 'msg')); msgBody.innerHTML = this.decodeMsg(b); from.appendChild(date); msgCont.zm_append([subject, from, to, msgBody]); } if((msg.fi !== -1) && (/<cnc>/.test(b))) { str = b.replace(/[\t\r\n]/g, '</br>'); var sections = []; var cnc = str.match(/<cnc>.*?<\/cnc>/g); var re = /(?:<(cncs|cncd|cnct)>)((?:.(?!\1))+.)(?:<\/\1>)/g, match; for(var i = 0; i < cnc.length; i++) { var sd, dt, txt; while ((match = re.exec(cnc[i])) !== null) { var tag = match[1], val = match[2]; switch(tag) { case 'cncs': sd = val; break; case 'cncd': dt = parseInt(val); break; case 'cnct': txt = val; break; } }; sections.push([sd, dt, txt]); } for(var n = 0; n < sections.length; n++) { var subject = create('p', cssStyles.message.subject); var from = create('p', cssStyles.message.from); var msgBody = create('p', cssStyles.message.body); var date = create('span', cssStyles.message.date); var sender = create('a', cssStyles.link._12); text(subject, msg.s); text(from, 'From: '); text(date, this.formatDate(sections[n][1], 'msg')); text(sender, sections[n][0]); sender.data = {'name': sections[n][0]}; sender.onclick = function(){webfrontend.gui.util.BBCode.openPlayerProfile(this.data.name)}; sender.style.marginRight = 0; from.zm_append([sender, date]); if (sections[n][2]) msgBody.innerHTML = this.decodeMsg(sections[n][2]); if(n == 0) { var to = create('p', cssStyles.message.from); var expandBox = create('span', cssStyles.message.expand.wrapper); var expand = create('div', cssStyles.message.expand.cont); var addFriend = create('a', cssStyles.message.actionLink); var blockContact = create('a', cssStyles.message.actionLink); var add = function(){ root.addFriend.apply(root, arguments) }; var block = function(){ root.blockContact.apply(root, arguments) }; var isFriend = (this.contacts.friends) ? this.contacts.friends.indexOf(msg.fi) > -1 : false; var isBlocked = (this.contacts.blocked) ? this.contacts.blocked.indexOf(msg.fi) > -1 : false; text(to, 'To: '); text(addFriend, 'Add to contacts'); text(blockContact, 'Block'); to.style.paddingTop = 0; addFriend.data = {'id': msg.fi}; blockContact.data = {'id': msg.fi}; addFriend.onclick = function(){ add(this.data.id); addFriend.remove(); blockContact.remove(); }; blockContact.onclick = function(){ block(this.data.id); addFriend.remove(); blockContact.remove(); }; expand.style.backgroundImage = 'url(' + root.res.expand + ')'; expand.data = {'isCollapsed': true, 'cont': to, 'bar': null}; expand.onclick = function() { if (this.data.isCollapsed) { this.data.cont.style.whiteSpace = 'normal'; this.style.backgroundImage = 'url(' + root.res.collapse + ')'; } else { this.data.cont.style.whiteSpace = 'nowrap'; this.style.backgroundImage = 'url(' + root.res.expand + ')'; } root.dom.rightBar.scrollBar.bar.data.update(); this.data.isCollapsed = !this.data.isCollapsed; }; expandBox.appendChild(expand); if (!isFriend && !isBlocked) from.zm_append([addFriend, blockContact]); for(var a = 0; a < msg.t.length; a++) { var receiver = create('a', cssStyles.link._12); var s = (a == msg.t.length - 1) ? msg.t[a] : msg.t[a] + ','; receiver.data = {'name': msg.t[a]}; receiver.onclick = function(){webfrontend.gui.util.BBCode.openPlayerProfile(this.data.name)}; text(receiver, s); to.appendChild(receiver); } subject.addEventListener('mouseover', function(){expandCont.style.visibility = 'visible'}, false); subject.addEventListener('mouseout', function() { setTimeout(function(){if (!expandCont.data.isFocused) expandCont.style.visibility = 'hidden'}, 50); }, false); msgCont.zm_append([subject, from, to, msgBody]); if (to.scrollWidth > to.offsetWidth) to.appendChild(expandBox); } else msgCont.zm_append([from, msgBody]); createSection(sender, date.innerHTML, msgBody.innerHTML, n, cnc[n]); } } if (this.selectedFolder == 'inbox') msgCont.appendChild(expandCont); msgCont.style.top = 0; sb.data.update(); }, createHeader: function(msg) { var create = this.create, text = this.text, cssStyles = this.css, root = this; var selectAll = this.dom.middleBar.footer.selectAll; var headerCont = create('div', cssStyles.header.cont); var sender = create('a', cssStyles.header.sender); var date = create('span', cssStyles.header.date); var subject = create('p', cssStyles.header.subject); var checkBox = create('div', cssStyles.header.checkBox); var span = create('span', cssStyles.header.span); text(sender, msg.f); text(date, this.formatDate(msg.d, 'header')); text(subject, msg.s); sender.data = {'from': msg.f}; sender.onclick = function() { root.preventDefaults(event); webfrontend.gui.util.BBCode.openPlayerProfile(this.data.from) }; span.appendChild(checkBox); headerCont.zm_append([span, sender, date, subject]); headerCont.data = {'msg': msg, 'isSelected': false, 'isRead': msg.r}; if(!msg.r) { headerCont.zm_css(cssStyles.header.contUnRead); span.style.borderBottom = cssStyles.header.contUnRead.borderBottom; } headerCont.onmouseover = function(){this.style.background = '#363636'}; headerCont.onmouseout = function() { var isSelected = this.data.isSelected, isRead = this.data.isRead; var color = isSelected ? '#363636' : (isRead) ? 'transparent' : '#292929'; this.style.background = color; }; headerCont.onclick = function() { if(!this.data.isRead) { var id = this.data.msg.i; var index = root.getMsgIndex(id, root.folders.inbox.msgs); var data = zmail.data.getInstance(); data.markRead([id], true); this.data.isRead = true; if (index > -1) root.folders.inbox.msgs[index].r = true; } if(root.selectedHeader !== null) { root.selectedHeader.style.background = (root.selectedHeader.data.isRead) ? 'transparent' : '#292929'; root.selectedHeader.style.fontWeight = (root.selectedHeader.data.isRead) ? 'normal' : 'bold'; root.selectedHeader.data.isSelected = false; } root.selectedHeader = this; this.data.isSelected = true; this.style.background = '#363636'; root.printMsg(this.data.msg); root.setToolbar(); }; checkBox.data = {'id': msg.i, 'isChecked': false, 'cont': headerCont}; checkBox.onmousedown = function(){this.style.background = '#202020'}; checkBox.onmouseup = function() { var isChecked = this.data.isChecked, isRead = this.data.cont.data.isRead; var index = root.selectedMsgs.ids.indexOf(this.data.id); if(!isChecked) { if(index == -1) { root.selectedMsgs.ids.push(this.data.id); root.selectedMsgs.headers.push(this.data.cont); root.selectedMsgs.checkBoxes.push(this); } this.style.background = '#9f9f9f'; this.data.cont.style.background = '#363636'; this.data.cont.data.isSelected = true; } if(isChecked) { if(index > -1) { root.selectedMsgs.ids.splice(index, 1); root.selectedMsgs.headers.splice(index, 1); root.selectedMsgs.checkBoxes.splice(index, 1); } this.style.background = 'transparent'; this.data.cont.style.background = isRead ? 'transparent' : '#292929'; this.data.cont.data.isSelected = false; } this.data.isChecked = !isChecked; if (root.selectedMsgs.ids != null) { var th = root.size(root.generatedHeaders), sh = root.selectedMsgs.ids.length; selectAll.style.background = (sh < th) ? 'transparent': '#9f9f9f'; selectAll.data.isChecked = (sh == th); } root.selectedHeader = null; root.resetMsgCont(1); root.setToolbar(); }; checkBox.onclick = function(event) { root.preventDefaults(event); }; return {'cont': headerCont, 'checkBox': checkBox}; }, populateHeaders: function() { try { switch(this.selectedFolder) { case 'trash': var arr = this.folders.trash[0].msgs.concat(this.folders.trash[1].msgs); break; case 'draft': var arr = []; if (this.folders.draft != null || this.size(this.folders.draft) > 0) for (var key in this.folders.draft) { var msg = this.folders.draft[key]; arr.push(msg); }; break; default: var arr = this.folders[this.selectedFolder].msgs; } var compare = function(a,b) { return (a.d < b.d) ? 1 : (a.d > b.d) ? -1 : 0; }; arr = arr.sort(compare); var create = this.create, text = this.text, cssStyles = this.css, root = this; var headersCont = this.dom.middleBar.headersCont; var headersSbc = this.dom.middleBar.scrollBar.cont; headersSbc.zm_empty(); headersCont.zm_empty(); headersCont.style.top = 0; this.selectedHeader = null; this.selectedMsgs.ids = []; this.selectedMsgs.headers = []; this.selectedMsgs.checkBoxes = []; this.generatedHeaders = {}; this.resetMsgCont(1); this.setToolbar(); if(arr == null) return; var Min = this.selectedPage * 30, Max = (this.selectedPage + 1) * 30, pages = Math.ceil(arr.length / 30); for(var i = Min; i < Math.min(Max, arr.length); i++) { var msg = arr[i]; var header = this.createHeader(msg); headersCont.appendChild(header.cont); root.generatedHeaders[msg.i] = { 'cont': header.cont, 'checkBox': header.checkBox, 'msg': msg }; } var selectAll = this.dom.middleBar.footer.selectAll; var ind = this.dom.middleBar.footer.indicator; var controlCont = this.dom.middleBar.footer.controlCont; var pagesCount = this.dom.middleBar.footer.pagesCount; selectAll.style.background = 'transparent'; selectAll.data.isChecked = false; selectAll.style.display = (arr.length > 0) ? 'block' : 'none'; if(arr.length > 30) { var width = 197 / pages; controlCont.style.display = 'block'; ind.style.display = 'block'; ind.style.width = width + 'px'; ind.style.marginLeft = this.selectedPage * width + 'px'; var text = 'Page ' + (this.selectedPage + 1) + '/' + pages; (pagesCount.innerText) ? pagesCount.innerText = text : pagesCount.textContent = text; } if (arr.length < 30) { ind.style.display = 'none'; controlCont.style.display = 'none'; (pagesCount.innerText) ? pagesCount.innerText = '' : pagesCount.textContent = ''; } if (arr.length * 30 > headersSbc.offsetHeight) { headersSbc.zm_empty(); var sb = create('div', cssStyles.middleBar.scrollBar.bar); this.dom.middleBar.scrollBar.bar = sb; headersSbc.appendChild(sb); this.enableScroll(sb, headersSbc, headersCont); var div = document.getElementById('zdoom_mail_container'); if (!div) sb.style.height = 421 * 401 / (Math.min(arr.length, 30) * 60) + 'px'; } } catch(e) { console.log('zmail: ' + e.toString()); } }, findContact: function(txt) { var players = zmail.data.getInstance().players; var root = this; var resultsCont = this.dom.rightBar.contacts.contentsCont; var cont = this.dom.rightBar.contacts.results; var scrollbarCont = this.dom.rightBar.contacts.scrollbarCont; var searchBox = this.dom.rightBar.contacts.search; var lowerCont = this.dom.rightBar.contacts.lowerCont; var saveGroup = this.dom.rightBar.contacts.buttons.saveGroup; var arr = []; var str = txt.replace(/[^a-zA-Z0-9\-_]/g, '').toLowerCase(); if (str == '') { cont.style.display = 'none'; lowerCont.style.display = 'none'; saveGroup.style.display = 'block'; return; } else { for(var i = 0; i < players.length; i++) { if (players[i].pn.toLowerCase().substr(0,str.length) == str) arr.push(players[i]); if (arr.length >= 20) break; } if (arr.length == 0) { cont.style.display = 'none'; lowerCont.style.display = 'none'; saveGroup.style.display = 'block'; return; } } var activate = function() { root.changeContactSelection.apply(root, arguments); }; var items = []; resultsCont.zm_empty(); scrollbarCont.zm_empty(); searchBox.data.selectedIndex = 0; searchBox.data.isContOpen = true; searchBox.data.selectedGroup = 'results'; for(var i = 0; i < arr.length; i++) { var style = (i == 0) ? 'contSelected' : 'cont'; var Item = this.create('div', this.css.compose.leftBar.recipients.searchBox.item[style]); var player = this.create('p', this.css.compose.leftBar.recipients.searchBox.item.text); var alliance = this.create('p', this.css.compose.leftBar.recipients.searchBox.item.text); this.text(player, arr[i].pn); this.text(alliance, arr[i].an); Item.zm_append([player, alliance]); Item.data = {'id': arr[i].p, 'index': i}; Item.onclick = function() { activate(this.data.index); }; resultsCont.appendChild(Item); items.push(Item); } this.setContactOptions(arr[0].p); lowerCont.style.display = 'block'; saveGroup.style.display = 'none'; cont.style.display = 'block'; cont.style.height = Math.min(145, arr.length * 49) + 'px'; cont.style.top = searchBox.offsetTop + 30 + 'px'; if(arr.length > 5) { var bar = this.create('div', this.css.rightBar.contacts.results.scrollbar.bar); scrollbarCont.appendChild(bar); this.enableScroll(bar, scrollbarCont, resultsCont); } searchBox.data.isContOpen = true; searchBox.data.results = items; }, changeContactSelection: function(mode) { var searchBox = this.dom.rightBar.contacts.search; var mainCont = this.dom.rightBar.contacts.results; var resultsSbc = this.dom.rightBar.contacts.scrollbarCont; var resultsCont = this.dom.rightBar.contacts.contentsCont; var index = searchBox.data.selectedIndex; var results = searchBox.data.results; var length = results.length; var newIndex = (typeof mode === 'number') ? mode : (mode) ? (index + 1) % length : (index - 1 < 0) ? length - 1 : index - 1; var currentItem = results[index]; var newItem = results[newIndex]; currentItem.zm_css(this.css.compose.leftBar.recipients.searchBox.item.cont); newItem.zm_css(this.css.compose.leftBar.recipients.searchBox.item.contSelected); newItem.onmouseout = null; if (newIndex > 2 && length > 3) { var ch = resultsCont.offsetHeight, ph = resultsSbc.offsetHeight; resultsCont.style.top = -(newIndex - 2) * 49 + 'px'; resultsSbc.firstChild.style.top = (((ph - 20) / ch) * (newIndex - 2) * 49) + 10 +'px'; } if (newIndex < 3 && length > 3) { resultsCont.style.top = 0; resultsSbc.firstChild.style.top = '10px'; } searchBox.data.selectedIndex = newIndex; this.setContactOptions(newItem.data.id); }, setContactOptions: function(id) { var addToSelection = this.dom.rightBar.contacts.buttons.addToSelection; var addAsFriend = this.dom.rightBar.contacts.buttons.addAsFriend; var block = this.dom.rightBar.contacts.buttons.block; var isFriend = this.contacts.friends.indexOf(id) > -1; var isBlocked = this.contacts.blocked.indexOf(id) > -1; var isSelected = this.selectedContacts.indexOf(id) > -1; addToSelection.innerHTML = (isSelected) ? 'Remove' : 'Add to selection'; addToSelection.data.mode = (isSelected) ? 'remove' : 'add'; addAsFriend.innerHTML = (isFriend) ? 'Remove Friend' : 'Add Friend'; addAsFriend.data.mode = (isFriend) ? 'remove' : 'add'; block.innerHTML = (isBlocked) ? 'Unblock' : 'Block'; block.data.mode = (isBlocked) ? 'unblock' : 'block'; addAsFriend.data.id = id; addToSelection.data.id = id; block.data.id = id; (isBlocked) ? addAsFriend.data.disable() : addAsFriend.data.enable(); (isFriend) ? block.data.disable() : block.data.enable(); }, addFriend: function(id) { if(this.contacts.friends.indexOf(id) == -1) this.contacts.friends.push(id); this.dom.leftBar.contacts.friends.nodeValue = 'Friends ' + this.contacts.friends.length; if(this.selectedGroup == 'friends') this.populateContacts(); this.storage.save.call(this); }, blockContact: function(id) { if(this.contacts.blocked.indexOf(id) == -1) this.contacts.blocked.push(id); this.dom.leftBar.contacts.blocked.nodeValue = 'Blocked ' + this.contacts.blocked.length; if(this.selectedGroup == 'blocked') this.populateContacts(); this.storage.save.call(this); }, removeFriend: function(id) { if(this.contacts.friends.indexOf(id) > -1) this.contacts.friends.splice(this.contacts.friends.indexOf(id), 1); this.dom.leftBar.contacts.friends.nodeValue = 'Friends ' + (this.contacts.friends.length || ''); if(this.selectedGroup == 'friends') this.populateContacts(); this.storage.save.call(this); }, unblockContact: function(id) { if(this.contacts.blocked.indexOf(id) > -1) this.contacts.blocked.splice(this.contacts.blocked.indexOf(id), 1); this.dom.leftBar.contacts.blocked.nodeValue = 'Blocked ' + (this.contacts.blocked.length || ''); if(this.selectedGroup == 'blocked') this.populateContacts(); this.storage.save.call(this); }, addToSelection: function(id) { if(this.selectedContacts.indexOf(id) == -1) { this.selectedContacts.push(id); this.addSelectedContacts(); } }, removeFromSelection: function(id) { if(this.selectedContacts.indexOf(id) > -1) { this.selectedContacts.splice(this.selectedContacts.indexOf(id) , 1); this.addSelectedContacts(); } }, removeAllSelectedContacts: function() { var arr = this.selectedContacts, headers = this.generatedHeaders, group = this.selectedGroup; var selectAll = this.dom.middleBar.footer.selectAll; for (var id in headers) { headers[id].checkBox.style.background = 'transparent'; headers[id].cont.style.background = 'transparent'; headers[id].cont.data.isSelected = false; }; selectAll.style.background = 'transparent'; selectAll.data.isChecked = false; this.selectedContacts = []; this.addSelectedContacts(); }, saveNewGroup: function() { var create = this.create, text = this.text, css = this.css.confirm, root = this; var rootCont = this.dom.window.main; var groupsTxt = this.dom.leftBar.contacts.groups; var contacts = this.selectedContacts.map(function(x){return {'id': x, 'name': root.getPlayerNameById(x)}}); var wrapper = create('div', css.wrapper); var cont = create('div', css.cont); var title = create('p', css.subCont); var input = create('textField', css.input); var btnsCont = create('div', css.subCont); var saveBtn = create('div', css.button); var cancelBtn = create('div', css.button); text(title, 'Type the name of the new group:'); text(saveBtn, 'Save'); text(cancelBtn, 'Cancel'); btnsCont.zm_append([saveBtn, cancelBtn]); cont.zm_append([title, input, btnsCont]); title.style.textAlign = 'left'; var removeCont = function() { rootCont.removeChild(wrapper); rootCont.removeChild(cont); }; saveBtn.onclick = function() { var name = input.value; root.contacts.groups[name] = contacts; root.storage.save.call(root); groupsTxt.nodeValue = 'Groups ' + (root.size(root.contacts.groups) || ''); removeCont(); }; cancelBtn.onclick = removeCont; rootCont.appendChild(wrapper); rootCont.appendChild(cont); }, saveExistedGroup: function() { var create = this.create, text = this.text, css = this.css.confirm, root = this; var rootCont = this.dom.window.main; var groupsTxt = this.dom.leftBar.contacts.groups; var contacts = this.selectedContacts.map(function(x){return {'id': x, 'name': root.getPlayerNameById(x)}}); var wrapper = create('div', css.wrapper); var cont = create('div', css.cont); var subCont = create('div', css.subCont); var selectBox = create('div', css.select); var selectList = create('span', css.list.cont); var selectUl = create('ul', css.list.ul); var saveBtn = create('div', css.button); var cancelBtn = create('div', css.button); text(saveBtn, 'Update'); text(cancelBtn, 'Cancel'); selectBox.innerHTML = '+ Select a group'; selectBox.data = {'name': null}; selectList.data = {'isOpen': false, 'isFocused': false}; saveBtn.style.width = '85px'; cancelBtn.style.width = '85px'; cancelBtn.style.margin = 0; for (var group in this.contacts.groups) { var li = create('li', css.list.li); li.data = {'name': group}; text(li, group); li.onclick = function() { selectBox.innerHTML = '+ ' + this.data.name; selectBox.data.name = this.data.name; selectList.style.display = 'none'; selectList.data.isOpen = false; }; li.addEventListener('mouseover', function(){selectList.data.isOpen = true}, false); selectUl.appendChild(li); } selectList.appendChild(selectUl); selectBox.appendChild(selectList); subCont.zm_append([selectBox, saveBtn, cancelBtn]); cont.zm_append([subCont]); selectList.addEventListener('mouseout', function() { this.data.isFocused = false; setTimeout(function() { var isOpen = selectList.data.isOpen, isFocused = selectList.data.isFocused; if (isOpen && !isFocused) { selectList.style.display = 'none'; selectList.data.isOpen = false; } }); }, false); selectBox.onclick = function() { var isOpen = selectList.data.isOpen; selectList.style.display = (isOpen) ? 'none' : 'block'; }; var removeCont = function() { rootCont.removeChild(wrapper); rootCont.removeChild(cont); }; saveBtn.onclick = function() { var name = selectBox.data.name; if (name != null) { root.contacts.groups[name] = contacts; root.storage.save.call(root); removeCont(); } }; cancelBtn.onclick = removeCont; rootCont.appendChild(wrapper); rootCont.appendChild(cont); }, addGroupToSelection: function() { var arr = this.selectedContacts, headers = this.generatedHeaders; for (var id in headers) { if(arr.indexOf(parseInt(id, 10)) == -1) this.selectedContacts.push(parseInt(id, 10)); headers[id].checkBox.style.background = '#9f9f9f'; headers[id].cont.style.background = '#363636'; headers[id].cont.data.isSelected = true; }; this.addSelectedContacts(); }, removeGroupFromSelection: function() { var arr = this.selectedContacts, headers = this.generatedHeaders; for (var id in headers) { if(arr.indexOf(parseInt(id, 10)) > -1) this.selectedContacts.splice(this.selectedContacts.indexOf(parseInt(id, 10)), 1); headers[id].checkBox.style.background = 'transparent'; headers[id].cont.style.background = 'transparent'; headers[id].cont.data.isSelected = false; }; this.addSelectedContacts(); }, getPlayerNameById: function(id) { var data = zmail.data.getInstance(); var players = data.players; var name; for (var i = 0; i < players.length; i++) if (players[i].p == id) { name = players[i].pn; break; } return name; }, getPlayerDataById: function(id) { var data = zmail.data.getInstance(); var players = data.players; var playerData; for (var i = 0; i < players.length; i++) if (players[i].p == id) { playerData = players[i]; break; } return playerData; }, addSelectedContacts: function() { var cont = this.dom.rightBar.contacts.cont; var header = this.dom.rightBar.contacts.header; var contactsSb = this.dom.rightBar.contacts.bar; var root = this, sc = this.selectedContacts; var text = sc.length == 0 ? 'No contacts selected.' : sc.length + ' contacts selected'; (header.innerText) ? header.innerText = text : header.textContent = text; cont.zm_empty(); for(var i = 0; i < this.selectedContacts.length; i++) { var id = this.selectedContacts[i], name = this.getPlayerNameById(id); var Item = this.create('div', this.css.compose.leftBar.recipients.recipient.cont); var remove = this.create('div', this.css.compose.leftBar.recipients.recipient.remove); this.text(Item, name); this.text(remove, 'X'); remove.data = {'id': id, 'parent': Item}; remove.onclick = function() { cont.removeChild(this.data.parent) var pid = this.data.id, index = root.selectedContacts.indexOf(pid); if(index > -1) root.selectedContacts.splice(index, 1); }; Item.appendChild(remove); cont.appendChild(Item) } if(this.selectedContacts.length > 0) { this.dom.rightBar.contacts.buttons.removeAll.data.enable(); this.dom.rightBar.contacts.buttons.message.data.enable(); this.dom.rightBar.contacts.buttons.saveGroup.data.enable(); } else { this.dom.rightBar.contacts.buttons.removeAll.data.disable(); this.dom.rightBar.contacts.buttons.message.data.disable(); this.dom.rightBar.contacts.buttons.saveGroup.data.disable(); } contactsSb.data.update(); contactsSb.data.scrollToEnd(); }, populateContacts: function() { try { var data = zmail.data.getInstance(); var create = this.create, text = this.text, cssStyles = this.css var headersCont = this.dom.middleBar.headersCont; var headersSbc = this.dom.middleBar.scrollBar.cont, root = this; var selectAll = this.dom.middleBar.footer.selectAll; var ind = this.dom.middleBar.footer.indicator; var controlCont = this.dom.middleBar.footer.controlCont; var pagesCount = this.dom.middleBar.footer.pagesCount; var contactsSb = this.dom.rightBar.contacts.bar; var isAllContactsSelected = true; var group = this.selectedGroup; (pagesCount.innerText) ? pagesCount.innerText = '' : pagesCount.textContent = ''; ind.style.display = 'none'; controlCont.style.display = 'none'; headersSbc.zm_empty(); headersCont.zm_empty(); headersCont.style.top = 0; this.setToolbar(); this.resetMsgCont(); this.generatedHeaders = {}; this.dom.rightBar.msgCont.appendChild(this.dom.rightBar.contacts.main); switch(group) { case 'friends': var contacts = []; this.contacts.friends.map(function(x) { var c = root.getPlayerDataById(x); c.name = c.pn; contacts.push(c); }); break; case 'blocked': var contacts = []; this.contacts.blocked.map(function(x) { var c = root.getPlayerDataById(x); c.name = c.pn; contacts.push(c); }); break; case 'alliance': var contacts = data.allianceMembers; break; case 'commanders': var contacts = data.allianceCommanders; break; case 'officers': var contacts = data.allianceOfficers; break; case 'groups': var contacts = root.contacts.groups; break; case 'allies': var contacts = {}, allies = data.allies; for (var x in allies) { contacts[x] = allies[x].map(function(a){return{'id': a.i, 'name': a.n}}); } break; default: var contacts = false; } var compareRank = function(a,b) { return (a.roleId > b.roleId) ? 1 : (a.roleId < b.roleId) ? -1 : 0; }; var compareName = function(a,b) { return (a.name.toLowerCase() > b.name.toLowerCase()) ? 1 : (a.name.toLowerCase() < b.name.toLowerCase()) ? -1 : 0; }; if ((group == 'alliance')||(group == 'commanders')) contacts.sort(compareRank); else if ((group == 'firends')||(group == 'blocked')) contacts.sort(compareName); else contacts = contacts; if ((contacts)&&(group != 'allies')&&(group != 'groups')) { for (var i = 0; i < contacts.length; i++) { var contact = contacts[i]; var id = contact.p || contact.id; var playerName = contact.pn || contact.name; var contactCont = create('div', cssStyles.header.cont); var name = create('a', cssStyles.header.sender); var rank = create('p', cssStyles.header.subject); var checkBox = create('div', cssStyles.header.checkBox); var span = create('span', cssStyles.header.span); contactCont.data = {'id': id, 'name': playerName, 'isSelected': false, 'checkBox': checkBox}; if (this.selectedContacts.indexOf(id) > -1) { checkBox.style.background = '#9f9f9f'; contactCont.style.background = '#363636'; contactCont.data.isSelected = true; } else isAllContactsSelected = false; text(name, playerName); text(rank, (contact.an || contact.role) || ''); name.data = {'name': playerName}; name.onclick = function(event) { root.preventDefaults(event); webfrontend.gui.util.BBCode.openPlayerProfile(this.data.name); }; name.onmousedown = function(event){root.preventDefaults(event)}; name.onmouseup = function(event){root.preventDefaults(event)}; span.appendChild(checkBox); contactCont.zm_append([span, name, rank]); contactCont.onmouseover = function(){if (!this.data.isSelected) this.style.background = '#363636'}; contactCont.onmouseout = function(){if (!this.data.isSelected) this.style.background = 'transparent'}; contactCont.onmousedown = function(){this.data.checkBox.style.background = '#202020'}; contactCont.onclick = function() { var index = root.selectedContacts.indexOf(this.data.id); var isSelected = this.data.isSelected; if(isSelected) { this.data.checkBox.style.background = 'transparent'; this.style.background = 'transparent'; if (index > -1) root.selectedContacts.splice(index, 1); } else { this.data.checkBox.style.background = '#9f9f9f'; this.style.background = '#363636'; if (index == -1) root.selectedContacts.push(this.data.id); } this.data.isSelected = !isSelected; root.addSelectedContacts(); var th = root.size(root.generatedHeaders), sh = root.selectedContacts.length; selectAll.style.background = (sh == th) ? '#9f9f9f' : 'transparent'; selectAll.data.isChecked = (sh == th); }; if ((group == 'friends')||(group == 'blocked')) { var remove = create('div', cssStyles.notification.remove); remove.innerHTML = 'X'; remove.data = {'isFocused': false, 'cont': contactCont, 'id': id}; remove.onmousedown = function(event){root.preventDefaults(event)}; remove.onmouseup = function(event){root.preventDefaults(event)}; remove.onclick = function(event) { root.preventDefaults(event); var cont = this.data.cont, id = this.data.id, index = root.contacts[group].indexOf(id); var txt = (group == 'friends') ? 'Friends ' : 'Blocked '; if (index > -1) { root.contacts[group].splice(index, 1); delete root.generatedHeaders[id]; headersCont.removeChild(cont); root.dom.leftBar.contacts[group].nodeValue = txt + (root.contacts[group].length || ''); root.storage.save.call(root); } } contactCont.appendChild(remove); contactCont.data.remove = remove; remove.style.display = 'none'; contactCont.addEventListener('mouseover', function() { this.data.remove.data.isFocused = true; this.data.remove.style.display = 'block'; }, false); contactCont.addEventListener('mouseout', function() { var remove = this.data.remove; remove.data.isFocused = false; setTimeout(function(){if (!remove.data.isFocused) remove.style.display = 'none'}, 10); }, false); } headersCont.appendChild(contactCont); root.generatedHeaders[id] = {'cont': contactCont, 'checkBox': checkBox, 'name': playerName}; } selectAll.style.display = (contacts.length > 0) ? 'block' : 'none'; selectAll.style.background = (isAllContactsSelected && contacts.length > 0) ? '#9f9f9f' : 'transparent'; selectAll.data.isChecked = (isAllContactsSelected && contacts.length > 0); if (contacts.length * 60 > headersSbc.offsetHeight) { var sb = create('div', cssStyles.middleBar.scrollBar.bar); headersSbc.appendChild(sb); this.enableScroll(sb, headersSbc, headersCont); } contactsSb.data.update(); } else if ((contacts)&&((group == 'allies')||(group == 'groups'))) { for (var x in contacts) { var AllyName = x; var AllyMembers = contacts[x]; var contactCont = create('div', cssStyles.header.cont); var name = create('a', cssStyles.header.sender); var count = create('p', cssStyles.header.subject); var checkBox = create('div', cssStyles.header.checkBox); var span = create('span', cssStyles.header.span); text(name, AllyName); text(count, AllyMembers.length + ' Members'); contactCont.data = {'am': AllyMembers, 'an': name, 'isSelected': false, 'checkBox': checkBox}; var isAllMembersSelected = true; for (var member in AllyMembers) { if (this.selectedContacts.indexOf(AllyMembers[member].id) == -1) { isAllMembersSelected = false; break; } } if (isAllMembersSelected) { checkBox.style.background = '#9f9f9f'; contactCont.style.background = '#363636'; contactCont.data.isSelected = true; } name.data = {'name': AllyName}; name.onclick = function(event) { webfrontend.gui.util.BBCode.openAllianceProfile(this.data.name); root.preventDefaults(event); }; name.onmousedown = function(event){root.preventDefaults(event)}; name.onmouseup = function(event){root.preventDefaults(event)}; span.appendChild(checkBox); contactCont.zm_append([span, name, count]); contactCont.onmouseover = function(){if (!this.data.isSelected) this.style.background = '#363636'}; contactCont.onmouseout = function(){if (!this.data.isSelected) this.style.background = 'transparent'}; contactCont.onmousedown = function(){this.data.checkBox.style.background = '#202020'}; contactCont.onclick = function() { var isSelected = this.data.isSelected; if(isSelected) { this.data.checkBox.style.background = 'transparent'; this.style.background = 'transparent'; for (var member in this.data.am) { var id = this.data.am[member].id; var index = root.selectedContacts.indexOf(id); if (index > -1) root.selectedContacts.splice(index, 1); } } else { this.data.checkBox.style.background = '#9f9f9f'; this.style.background = '#363636'; for (var member in this.data.am) { var id = this.data.am[member].id; var index = root.selectedContacts.indexOf(id); if (index == -1) root.selectedContacts.push(id); } } this.data.isSelected = !isSelected; root.addSelectedContacts(); selectAll.style.display = 'none'; }; if ((group == 'groups')) { var remove = create('div', cssStyles.notification.remove); remove.innerHTML = 'X'; remove.data = {'isFocused': false, 'cont': contactCont, 'name': AllyName}; remove.onmousedown = function(event){root.preventDefaults(event)}; remove.onmouseup = function(event){root.preventDefaults(event)}; remove.onclick = function(event) { root.preventDefaults(event); var name = this.data.name, cont = this.data.cont; delete root.contacts.groups[name]; delete root.generatedHeaders[name]; headersCont.removeChild(cont); root.dom.leftBar.contacts.groups.nodeValue = 'Groups ' + (root.size(root.contacts.groups) || ''); root.storage.save.call(root); } contactCont.appendChild(remove); remove.style.display = 'none'; contactCont.data.remove = remove; contactCont.addEventListener('mouseover', function() { this.data.remove.style.display = 'block'; this.data.remove.data.isFocused = true; }, false); contactCont.addEventListener('mouseout', function() { var remove = this.data.remove; remove.data.isFocused = false; setTimeout(function(){if (!remove.data.isFocused) remove.style.display = 'none'}, 10); }, false); } root.generatedHeaders[AllyName] = {'cont': contactCont, 'checkBox': checkBox, 'name': AllyName}; headersCont.appendChild(contactCont); } selectAll.style.display = 'none'; if ((root.size(contacts) * 60) > headersSbc.offsetHeight) { var sb = create('div', cssStyles.middleBar.scrollBar.bar); headersSbc.appendChild(sb); this.enableScroll(sb, headersSbc, headersCont); } contactsSb.data.update(); } else selectAll.style.display = 'none'; } catch(e) { console.log('zmail: ' + e.toString()); } }, dom: { 'window': { 'main': null, 'compose': null }, 'leftBar': { 'folders': { 'inbox': null, 'outbox': null, 'draft': null, 'junk': null, 'trash': null }, 'items': { 'inbox': null, 'outbox': null, 'draft': null, 'junk': null, 'trash': null, 'documents': null, 'alliance': null, 'commanders': null, 'officers': null, 'allies': null, 'groups': null, 'friends': null, 'blocked': null }, 'contacts': { 'alliance': null, 'commanders': null, 'officers': null, 'allies': null, 'groups': null, 'friends': null, 'blocked': null }, 'searchBox': null }, 'rightBar': { 'cont': null, 'msgCont': null, 'expandCont': null, 'scrollBar': { 'cont': null, 'bar': null }, 'contacts': { 'main': null, 'lowerCont': null, 'header': null, 'cont': null, 'bar': null, 'search': null, 'results': null, 'contentsCont': null, 'scrollbarCont': null, 'buttons': { 'removeAll': null, 'message': null, 'addToSelection': null, 'addAsFriend': null, 'block': null, 'saveGroup': null } } }, 'middleBar': { 'headersCont': null, 'scrollBar': { 'cont': null, 'bar': null }, 'footer': { 'selectAll': null, 'pagesCount': null, 'indicator': null, 'controlCont': null } }, 'topBar': { 'logo': null, 'menu': null, 'toolbar': { 'newMsg': null, 'reply': null, 'trash': null, 'delMsg': null, 'junk': null, 'notJunk': null, 'restore': null, 'mark': null, 'empty': null, 'editDraft': null, 'deleteDraft': null, 'toDocuments': null, 'notDocument': null, 'forwardMsg': null } }, 'toolBar': { 'delete': null, 'moveToTrash': null, 'moveToJunk': null, 'moveToInbox': null, 'moveToOutbox': null, 'compose': null }, 'searchResults': { 'cont': null, 'sender': { 'count': null, 'list': null }, 'subject': { 'count': null, 'list': null } }, 'compose': { 'leftBar': { 'recipientsMainCont': null, 'recipientsCont': null, 'recipientsSbc': null, 'recipientsSb': null, 'searchBox': null, 'searchBoxCont': null, 'contactsCont': null, 'results': { 'mainCont': null, 'scrollbarCont': null, 'resultsCont': null } }, 'rightBar': { 'iframe': null, 'subject': null, 'msgCont': null, 'charCount': null, 'msgSb': null } } }, css: { 'window': { 'background': '#292929', 'width': '100%', 'height': '471px', 'paddingTop': '69px', 'position': 'relative', 'fontFamily': 'vrinda', 'display': 'table' }, 'topBar': { 'main': { 'width': '100%', 'position': 'absolute', 'top': 0, 'left': 0 }, 'cont': { 'backgroundImage': null, 'height': '68px', 'borderBottom': '1px solid rgba(0,0,0,0.56)', 'width': '100%' }, 'logo': { 'width': '126px', 'height': '24px', 'display': 'inline-block', 'verticalAlign': 'top', 'padding': '22px 0', 'textAlign': 'center', 'fontSize': '18px', 'fontWeight': 'bold', 'color': '#cacaca' }, 'menu': { 'display': 'inline-block', 'verticalAlign': 'top', 'height': '68px' } }, 'leftBar': { 'background': '#3a3b3b', 'minWidth': '126px', 'height': '471px', 'display': 'table-cell', 'verticalAlign': 'top', 'position': 'relative' }, 'rightBar': { 'main': { 'height': '471px', 'display': 'table-cell', 'verticalAlign': 'top', 'width': '100%', 'position': 'relative' }, 'msgMask': { 'overflow': 'hidden', 'position': 'relative', 'height': '471px' }, 'msgCont': { 'width': '394px', 'position': 'absolute', 'top': 0, 'padding': '0 30px 0 20px', 'overflow': 'hidden', 'width': '100%', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box', 'wordWrap': 'break-word', 'lineHeight': '18px' }, 'scrollBar': { 'cont': { 'width': '16px', 'position': 'absolute', 'background': '#333333', 'height': '471px', 'top': 0, 'right': 0 }, 'bar': { 'width': '16px', 'background': '#3b3b3b', 'position': 'absolute', 'top': '10px', 'over': {'background': '#424242'}, 'out': {'background': '#3b3b3b'}, 'down': {'background': '#707070'}, 'up': {'background': '#3d3d3d'}, 'pointer': 'cursor' } }, 'contacts': { 'topWrapper': { 'width': '100%', 'paddingBottom': '5px', 'borderBottom': '1px solid #434343' }, 'bottomWrapper': { 'marginLeft': '200px', 'width': 'auto', 'paddingTop': '33px', 'height': '125px' }, 'main': { 'width': 'auto', 'height': '193px', 'border': '1px solid #1f1f1f', 'background': '#323232', 'position': 'relative', 'margin': '5px 0 5px 0' }, 'mask': { 'height': '100%', 'position': 'relative', 'overflow': 'hidden' }, 'scrollbar': { 'cont': { 'position': 'absolute', 'top': 0, 'right': 0, 'width': '16px', 'height': '100%', 'overflow': 'hidden', 'background': '#363636' }, 'bar': { 'position': 'absolute', 'top': '10px', 'left': 0, 'width': '16px', 'background': '#3d3d3d' } }, 'cont': { 'position': 'absolute', 'width': '100%', 'padding': '5px 21px 0 5px', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box', 'lineHeight': '10px' }, 'search': { 'width': '188px', 'border': '1px solid #1f1f1f', 'background': '#323232', 'color': '#6c6d6d', 'fontSize': '12px', 'marginRight': '5px', 'paddingLeft': '10px', 'outline': 'none', 'focus': {'outline': 'none'}, 'blur': {'outline': 'none'}, 'height': '25px', 'lineHeigt': '25px', 'display': 'inline-block', 'verticalAlign': 'top' }, 'results': { 'cont': { 'position': 'absolute', 'width': '198px', 'left': '20px', 'border': '1px solid #1f1f1f', 'background': '#323232', 'display': 'none', 'maxHeight': '145px' }, 'mask': { 'position': 'relative', 'top': 0, 'left': 0, 'width': '186px', 'height': '100%', 'overflow': 'hidden' }, 'contentsCont': { 'position': 'relative', 'width': '100%' }, 'scrollbar': { 'cont': { 'position': 'absolute', 'top': 0, 'right': 0, 'width': '16px', 'height': '100%', 'background': '#363636' }, 'bar': { 'position': 'absolute', 'top': '10px', 'background': '#3d3d3d', 'width': '16px', 'over': {'background': '#424242'}, 'out': {'background': '#3d3d3d'}, 'down': {'background': '#707070'}, 'up': {'background': '#3d3d3d'} } } }, 'button': { 'active': { 'height': '25px', 'textAlign': 'center', 'background': '#4e4e4e', 'color': '#8b8b8b', 'fontSize': '12px', 'lineHeight': '25px', 'over': {'background': '#266589', 'color': '#c2c2c2'}, 'out': {'background': '#4e4e4e', 'color': '#8b8b8b'}, 'cursor': 'pointer', 'marginTop': '1px' }, 'disabled': { 'height': '25px', 'textAlign': 'center', 'background': '#3f3f3f', 'color': '#8b8b8b', 'fontSize': '12px', 'lineHeight': '25px', 'over': {'background': '#3f3f3f', 'color': '#8b8b8b'}, 'out': {'background': '#3f3f3f', 'color': '#8b8b8b'}, 'cursor': 'default', 'marginTop': '1px' } }, 'saveButton': { 'cont': { 'disabled': { 'position': 'absolute', 'bottom': '15px', 'right': '30px', 'height': '25px', 'width': '100px', 'textAlign': 'center', 'background': '#3f3f3f', 'color': '#8b8b8b', 'fontSize': '12px', 'lineHeight': '25px', 'over': {'background': '#3f3f3f', 'color': '#8b8b8b'}, 'out': {'background': '#3f3f3f', 'color': '#8b8b8b'}, 'cursor': 'default' } }, 'span': { 'position': 'absolute', 'bottom': '25px', 'left': 0, 'border': '2px solid #266589', 'border-bottom': 'none', 'width': '100%', 'height': '52px', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box', 'display': 'none' }, 'sub': { 'height': '25px', 'width': '100%', 'textAlign': 'center', 'background': '#3f3f3f', 'color': '#8b8b8b', 'fontSize': '12px', 'lineHeight': '25px', 'over': {'background': '#4e4e4e', 'color': '#c2c2c2'}, 'out': {'background': '#3f3f3f', 'color': '#8b8b8b'}, 'cursor': 'pointer' } } } }, 'middleBar': { 'cont': { 'background': '#2e2e2e', 'minWidth': '197px', 'height': '471px', 'display': 'table-cell', 'verticalAlign': 'top', 'position': 'relative' }, 'headers': { 'mask': { 'width': '180px', 'height': '422px', 'display': 'inline-block', 'verticalAlign': 'top', 'overflow': 'hidden', 'position': 'relative' }, 'scroll': { 'position': 'absolute' } }, 'scrollBar': { 'cont': { 'width': '16px', 'height': '421px', 'top': 0, 'right': 0, 'background': '#333333', 'borderRight': '1px solid rgba(0,0,0,0.2)', 'position': 'absolute' }, 'bar': { 'width': '16px', 'background': '#3b3b3b', 'position': 'absolute', 'top': '10px', 'over': {'background': '#424242'}, 'out': {'background': '#3b3b3b'}, 'down': {'background': '#707070'}, 'up': {'background': '#3d3d3d'}, 'pointer': 'cursor' } }, 'footer': { 'cont': { 'width': '197px', 'background': '#424343', 'borderRight': '1px solid rgba(0,0,0,0.3)', 'height': '48px', 'display': 'inline-block', 'verticalAlign': 'top', 'position': 'relative' }, 'pagesBar': { 'width': '100%', 'height': '2px', 'background': '#377395' }, 'indicator': { 'height': '2px', 'background': '#898989' }, 'selectAll': { 'checkBox': { 'border': '1px solid #5b5e5e', 'width': '10px', 'height': '10px', 'margin': '10px 0 0 5px', 'cursor': 'pointer' }, 'span': { 'width': '20px', 'height': '59px', 'position': 'absolute', 'left': '2px', 'top': '2px' } }, 'pagesControls': { 'cont': { 'width': '85px', 'height': '20px', 'position': 'absolute', 'right': '11px', 'top': '10px' }, 'label': { 'position': 'absolute', 'left': '30px', 'top': '10px', 'padding': 0, 'height': '20px', 'lineHeight': '20px', 'color': '#7f7f7f', 'display': 'none', 'fontSize': '12px' }, 'icon': { 'width': '20px', 'height': '20px', 'backgroundPosition': 'center', 'backgroundRepeat': 'no-repeat', 'display': 'inline-block', 'verticalAlign': 'top', 'margin': 0, 'padding': 0, 'cursor': 'pointer' } } } }, 'tableCellWrapper': { 'position': 'relative', 'display': 'block' }, 'ul': { 'leftBar': { 'main': { 'width': 'inherit', 'listStyleType': 'none', 'padding': 0, 'margin': '10px 0 0 0' }, 'sub': { 'width': 'inherit', 'listStyleType': 'none', 'padding': 0, 'margin': 0 } }, 'toolbar': { 'main': { 'listStyleType': 'none', 'margin': 0, 'padding': 0, 'height': '68px' }, 'sub': { 'border': '3px solid #404144', 'display': 'none', 'borderTop': 'none', 'background': '#266589', 'listStyleType': 'none', 'width': '100%', 'margin': 0, 'padding': 0, 'position': 'absolute', 'top': '69px', 'left': '-3px', 'zIndex': 1000 } } }, 'li': { 'leftBar': { 'main': { 'fontSize': '24px', 'color': '#999999', 'minHeight': '30px', 'textIndent': '14px' }, 'sub': { 'fontSize': '12px', 'color': '#909090', 'background': 'transparent', 'height': '20px', 'lineHeight': '20px', 'textIndent': '30px', 'cursor': 'pointer', 'over': { 'background': '#545555', 'color': '#aeaeae' }, 'out': { 'background': 'transparent', 'color': '#909090' } }, 'subSelected': { 'fontSize': '12px', 'color': '#aeaeae', 'height': '20px', 'lineHeight': '20px', 'textIndent': '30px', 'cursor': 'pointer', 'background': '#545555', 'over': { 'background': '#545555', 'color': '#aeaeae' }, 'out': { 'background': '#545555', 'color': '#aeaeae' } } }, 'toolbar': { 'textOnly': { 'height': '68px', 'display': 'inline-block', 'verticalAlign': 'top', 'textAlign': 'left', 'fontSize': '16px', 'lineHeight': '68px', 'color': '#cacaca', 'cursor': 'pointer', 'padding': '0 10px' }, 'withIcon': { 'height': '68px', 'display': 'inline-block', 'verticalAlign': 'top', 'textAlign': 'left', 'fontSize': '16px', 'lineHeight': '68px', 'color': '#cacaca', 'cursor': 'pointer', 'padding': '0 10px 0 45px', 'position': 'relative' }, 'withDrop': { 'height': '68px', 'display': 'inline-block', 'verticalAlign': 'top', 'textAlign': 'left', 'fontSize': '16px', 'lineHeight': '68px', 'color': '#cacaca', 'cursor': 'pointer', 'padding': '0 30px 0 10px', 'position': 'relative' }, 'icon': { 'width': '30px', 'height': '30px', 'position': 'absolute', 'top': '15px', 'left': '10px' }, 'drop': { 'width': '20px', 'position': 'absolute', 'right': 0, 'top': 0, 'height': '68px', 'lineHeight': '68px', 'fontWeight': 'bold', 'over': {'backgroundColor': '#266589'}, 'out': {'backgroundColor': 'transparent'}, 'backgroundPosition': '0 center', 'backgroundRepeat': 'no-repeat' }, 'newIcon': { 'width': '30px', 'height': '30px', 'position': 'absolute', 'top': '18px', 'left': '10px', 'padding': 0, 'margin': 0, 'backgroundPosition': 'center', 'backgroundRepeat': 'no-repeat' }, 'sub': { 'padding': '5px 10px', 'over': {'background': '#377395', 'color': '#cacaca'}, 'out': {'background': 'transparent', 'color': '#aeaeae'}, 'color': '#aeaeae', 'fontSize': '12px', 'height': '20px', 'lineHeight': '20px', 'textAlign': 'center', 'borderBottom': '1px solid #404040' } } }, 'input': { 'text': { 'search': { 'width': '87px', 'border': '1px solid #1f1f1f', 'height': '14px', 'margin': '10px 7px 0 7px', 'padding': '5px 15px 5px 10px', 'color': '#333333', 'fontSize': '12px', 'background': '#525252', 'focus': { 'color': '#aeaeae', 'outline': 'none' }, 'blur': { 'color': '#333333' } } } }, 'header': { 'sender': { 'fontSize': '14px', 'cursor': 'pointer', 'color': '#377395', 'height': '20px', 'lineHeight': '20px', 'margin': '2px 0 0 0', 'display': 'block', 'maxWidth': '96px', 'display': 'inline-block', 'textOverflow': 'ellipsis', 'overflow': 'hidden', 'whiteSpace': 'nowrap' }, 'date': { 'fontSize': '12px', 'color': '#4d4d4d', 'position': 'absolute', 'height': '15px', 'right': '10px', 'top': '8px', 'fontWeight': 'bold', 'cursor': 'default' }, 'subject': { 'fontSize': '14px', 'color': '#909090', 'width': '100%', 'height': '30px', 'margin': 0, 'padding': 0, 'textOverflow': 'ellipsis', 'overflow': 'hidden', 'whiteSpace': 'nowrap' }, 'cont': { 'width': '150px', 'height': '49px', 'borderBottom': '1px solid #292929', 'position': 'relative', 'padding': '5px 5px 5px 25px', 'fontWeight': 'normal', 'lineHeight': '22px' }, 'contUnRead': { 'width': '150px', 'height': '49px', 'fontWeight': 'bold', 'borderBottom': '1px solid #242424', 'position': 'relative', 'padding': '5px 5px 5px 25px', 'background': '#292929' }, 'checkBox': { 'border': '1px solid #5b5e5e', 'width': '10px', 'height': '10px', 'margin': '10px 0 0 5px' }, 'span': { 'width': '20px', 'height': '59px', 'position': 'absolute', 'left': '2px', 'top': 0, 'borderBottom': '1px solid #292929', 'cursor': 'pointer' } }, 'message': { 'subject': { 'color': '#6c6d6d', 'fontSize': '18px', 'fontWeight': 'bold', 'padding': '13px 0 2px 0', 'width': '100%', 'height': '24px', 'lineHeight': '24px', 'borderBottom': '2px solid #3f3e3e', 'margin': 0, 'overflow': 'hidden', 'textOverflow': 'ellipsis', 'whiteSpace': 'nowrap' }, 'date': { 'fontSize': '12px', 'color': '#6c6d6d', 'position': 'absolute', 'top': '5px', 'right': '10px' }, 'from': { 'position': 'relative', 'fontSize': '12px', 'color': '#6c6d6d', 'minHeight': '12px', 'padding': '5px 5% 0 0', 'margin': '0', 'display': 'block', 'whiteSpace': 'nowrap', 'overflow': 'hidden', 'maxWidth': '95%' }, 'expand': { 'wrapper': { 'width': '5%', 'height': '14px', 'padding': 0, 'display': 'block', 'position': 'absolute', 'bottom': '2px', 'background': '#292929', 'right': 0, 'cursor': 'pointer', }, 'cont': { 'lineHeight': '14px', 'backgroundPosition': 'center', 'backgroundRepeat': 'no-repeat', 'opacity': 0.7, 'width': '100%', 'height': '100%', 'over': {'opacity': 1}, 'out': {'opacity': 0.7} } }, 'actionLink': { 'display': 'inline-block', 'verticalAlign': 'top', 'color': '#b8b8b8', 'cursor': 'pointer', 'marginLeft': '20px', 'opacity': 0.8, 'over': {'opacity': 1}, 'out': {'opacity': 0.8} }, 'body': { 'fontSize': '14px', 'color': '#848585', 'margin': '30px 0 0 0', 'paddingBottom': '20px', 'borderBottom': '1px solid #3f3e3e' } }, 'link': { '_12': { 'fontSize': '12px', 'color': '#377395', 'textDecoration': 'none', 'cursor': 'pointer', 'marginRight': '10px', 'display': 'inline-block' }, '_14': { 'fontSize': '14px', 'color': '#377395', 'textDecoration': 'none', 'cursor': 'pointer' } }, 'searchResults': { 'cont': { 'border': '1px solid #1f1f1f', 'background': '#266589', 'position': 'absolute', 'top': '37px', 'left': '7px', 'width': '112px', 'display': 'none' }, 'li': { 'main': { 'margin': 0, 'padding': 0 }, 'sub': { 'color': '#969696', 'borderBottom': '#404040', 'textIndent': '15px', 'cursor': 'pointer', 'over': {'background': '#377395', 'color': '#b4b4b4'}, 'out': {'background': 'transparent', 'color': '#969696'}, 'fontSize': '12px', 'height': '19px', 'lineHeight': '20px', 'borderBottom': '1px solid #377395' } }, 'count': { 'color': '#919090', 'position': 'absolute', 'fontSize': '12px', 'right': '10px', 'top': '2px' }, 'ul': { 'listStyleType': 'none', 'margin': 0, 'padding': 0, 'width': '100%' }, 'text': { 'position': 'relative', 'backgroundImage': '', 'borderBottom': '1px solid rgba(0,0,0,0.30)', 'height': '24px', 'color': '#292929', 'fontSize': '12px', 'margin': 0, 'padding': '0 5px', 'lineHeight': '24px' } }, 'compose': { 'window': { 'background': '#292929', 'width': '100%', 'height': '471px', 'paddingTop': '69px', 'position': 'relative', 'fontFamily': 'vrinda', 'display': 'table' }, 'topBar': { }, 'leftBar': { 'cont': { 'minWidth': '256px', 'position': 'relative', 'background': '#3a3b3b', 'height': '471px', 'display': 'table-cell', 'verticalAlign': 'top' }, 'recipients': { 'toText': { 'color': '#8d8c8c', 'fontSize': '12px', 'margin': '10px 0 5px 15px' }, 'main': { 'position': 'relative', 'border': '1px solid #1f1f1f', 'background': '#323232', 'width': '238px', 'margin': '0 auto', 'minHeight': '20px', 'maxHeight': '180px' }, 'mask': { 'position': 'relative', 'overflow': 'hidden', 'width': '100%', 'height': '100%', 'maxHeight': '180px' }, 'cont': { 'padding': '5px 20px 0 5px', 'position': 'absolute', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box', 'width': '100%', 'lineHeight': '10px' }, 'count': { 'position': 'absolute', 'bottom': 0, 'left': 0, 'padding': '5px 30px 5px 0', 'color': '#999', 'fontSize': '12px', 'width': '100%', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box', 'background': '#292929', 'textAlign': 'right' }, 'scrollbar': { 'cont': { 'position': 'absolute', 'top': 0, 'right': 0, 'width': '16px', 'height': '100%', 'maxHeight': '180px', 'background': '#363636' }, 'bar': { 'position': 'absolute', 'top': '10px', 'background': '#3d3d3d', 'width': '16px', 'over': {'background': '#424242'}, 'out': {'background': '#3d3d3d'}, 'down': {'background': '#707070'}, 'up': {'background': '#3d3d3d'} } }, 'recipient': { 'cont': { 'margin': '0 5px 5px 0', 'background': '#266589', 'color': '#bcbcbc', 'fontSize': '12px', 'height': '20px', 'lineHeight': '20px', 'padding': '0 20px 0 10px', 'textOverflow': 'ellipsis', 'maxWidth': '100%', 'overflow': 'hidden', 'display': 'inline-block', 'position': 'relative' }, 'remove': { 'position': 'absolute', 'top': 0, 'right': 0, 'width': '15px', 'height': '20px', 'lineHeight': '20px', 'color': '#bcbcbc', 'over': {'background': '#377395'}, 'out': {'background': 'transparent'}, 'fontSize': '10px', 'textAlign': 'center', 'cursor': 'pointer' } }, 'textField': { 'height': '15px', 'lineHeight': '15px', 'maxWidth': '100%', 'minWidth': '20%', 'width': '90%', 'border': 'none', 'background': 'transparent', 'outline': 'none', 'focus': {'outline': 'none', 'background': 'transparent'}, 'blur': {'outline': 'none', 'background': 'transparent'}, 'color': '#919191', 'margin': 0, 'padding': '0 5px 5px 0' }, 'textFieldCont': { 'display': 'block', 'margin': 0, 'padding': 0, 'lineHeight': '10px' }, 'searchBox': { 'cont': { 'border': '1px solid #1f1f1f', 'background': '#323232', 'position': 'absolute', 'left': '7px', 'width': '243px', 'maxHeight': '244px', 'display': 'none' }, 'mask': { 'width': '227px', 'height': '100%', 'overflow': 'hidden', 'position': 'relative' }, 'scrollbar': { 'cont': { 'position': 'absolute', 'top': 0, 'right': 0, 'width': '16px', 'height': '100%', 'background': '#363636' }, 'bar': { 'position': 'absolute', 'top': '10px', 'background': '#3d3d3d', 'width': '16px', 'over': {'background': '#424242'}, 'out': {'background': '#3d3d3d'}, 'down': {'background': '#707070'}, 'up': {'background': '#3d3d3d'} } }, 'itemsCont': { 'width': '100%', 'position': 'absolute', 'top': 0, 'zIndex': 12000 }, 'item': { 'cont': { 'height': '48px', 'borderBottom': '1px solid #3e3e3e', 'color': '#8e8e8e', 'background': 'transparent', 'over': {'background': '#266589', 'color': '#bcbcbc'}, 'out': {'background': 'transparent', 'color': '#8e8e8e'} }, 'contSelected': { 'height': '48px', 'borderBottom': '1px solid #3e3e3e', 'color': '#bcbcbc', 'background': '#266589' }, 'text': { 'fontSize': '14px', 'textOverflow': 'ellipsis', 'height': '15px', 'lineHeight': '15px', 'padding': '5px 10px 0 10px', 'margin': 0 } } } }, 'contacts': { 'cont': { 'position': 'absolute', 'bottom': 0 } }, 'tableOptions': { 'button': { 'height': '25px', 'width': '40%', 'margin': '50px 0 0 15px', 'textAlign': 'center', 'background': '#4e4e4e', 'color': '#8b8b8b', 'fontSize': '12px', 'lineHeight': '25px', 'over': {'background': '#266589', 'color': '#c2c2c2'}, 'out': {'background': '#4e4e4e', 'color': '#8b8b8b'}, 'cursor': 'pointer', 'display': 'inline-block' }, 'inputCont': { 'position': 'relative' }, 'input': { 'width': '150px', 'border': '1px solid #1f1f1f', 'background': '#323232', 'color': '#6c6d6d', 'fontSize': '12px', 'margin': '10px 15px 0 15px', 'paddingLeft': '10px', 'outline': 'none', 'focus': {'outline': 'none'}, 'blur': {'outline': 'none'}, 'height': '23px', 'lineHeigt': '25px' }, 'label': { 'display': 'inline-block', 'verticalAlign': 'top', 'height': '25px', 'marginTop': '10px', 'lineHeight': '25px', 'color': '#6c6d6d', 'fontSize': '12px' }, 'span': { 'position': 'absolute', 'top': '-5px', 'left': '25px', 'height': '20px', 'lineHeight': '20px', 'color': '#6c6d6d', 'width': '190px', 'fontSize': '12px' }, 'checkbox': { 'border': '1px solid #5b5e5e', 'width': '10px', 'height': '10px', 'margin': '15px 0 0 15px', 'cursor': 'pointer', 'position': 'relative' } }, 'contacts': { 'main': { 'position': 'absolute', 'bottom': '40px', 'left': '16px', 'color': '#999', 'width': '230px' }, 'ul': { 'main': { 'listStyleType': 'none', 'display': 'block', 'margin': '0', 'padding': '0', 'color': '#a3a2a2' }, 'sub': { 'listStyleType': 'none', 'display': 'block', 'margin': '0', 'padding': '0', 'color': '#808080' }, 'span': { 'listStyleType': 'none', 'display': 'block', 'margin': '0', 'padding': '0', 'width': 'inherit', 'color': '#808080', 'position': 'absolute', 'top': 0 } }, 'li': { 'main': { 'fontSize': '24px', 'width': '240px' }, 'sub': { 'fontSize': '12px', 'position': 'relative', 'height': '20px', 'over': {'color': '#a3a2a2'}, 'out': {'color': '#808080'} }, 'span': { 'width': '100%', 'paddingLeft': '10px', 'boxSizing': 'border-box', 'MoxBoxSizing': 'border-box', 'borderBottom': '1px solid #464646', 'fontSize': '12px', 'height': '24px', 'lineHeight': '24px', 'over': {'background': '#434343', 'color': '#a3a2a2'}, 'out': {'background': 'transparent', 'color': '#808080'} } }, 'span': { 'main': { 'position': 'absolute', 'display': 'none', 'cursor': 'pointer', 'right': '16px', 'top': 0 }, 'sub': { 'position': 'absolute', 'bottom': '20px', 'left': '0', 'display': 'none', 'background': '#3a3b3b', 'border': '2px solid #1c1c1c', 'width': '100%', 'boxSizing': 'border-box', 'MoxBoxSizing': 'border-box', 'maxHeight': '178px', 'overflow': 'hidden' } }, 'select': { 'position': 'relative', 'height': '20px', 'width': '120px', 'marginLeft': '16px', 'cursor': 'pointer' }, 'scrollbar': { 'cont': { 'position': 'absolute', 'top': 0, 'right': 0, 'width': '16px', 'height': '100%', 'background': '#363636', 'maxHeight': '178px', 'opacity': 0.6 }, 'bar': { 'position': 'absolute', 'top': '10px', 'background': '#454545', 'width': '16px', 'over': {'background': '#555555'}, 'out': {'background': '#454545'}, 'down': {'background': '#707070'}, 'up': {'background': '#454545'} } } } }, 'rightBar': { 'cont': { 'height': '471px', 'display': 'table-cell', 'verticalAlign': 'top', 'position': 'relative', 'width': '100%' }, 'msgMask': { 'overflow': 'hidden', 'position': 'relative', 'height': '471px', 'width': 'inherit' }, 'msgCont': { 'width': '100%', 'position': 'absolute', 'top': 0, 'overflowX': 'hidden', 'padding': '100px 30px 25px 20px', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box' }, 'msgHeader': { 'position': 'absolute', 'top': 0, 'left': 0, 'padding': '0 30px 0 14px', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box', 'background': '#292929', 'width': '100%' }, 'scrollBar': { 'cont': { 'width': '16px', 'position': 'absolute', 'background': '#333333', 'height': '471px', 'top': 0, 'right': 0 }, 'bar': { 'width': '16px', 'background': '#3b3b3b', 'position': 'absolute', 'top': '10px', 'over': {'background': '#424242'}, 'out': {'background': '#3b3b3b'}, 'down': {'background': '#707070'}, 'up': {'background': '#3d3d3d'}, 'pointer': 'cursor' } }, 'textField': { 'color': '#6c6d6d', 'fontSize': '17px', 'fontWeight': 'bold', 'width': '100%', 'border': 'none', 'borderBottom': '2px solid #3f3e3e', 'margin': '0', 'padding': '13px 0 2px 0', 'outline': 'none', 'background': 'transparent', 'focus': {'outline': 'none'}, 'blur': {'outline': 'none'}, 'height': '24px', 'lineHeigt': '24px' }, 'textArea': { 'margin': 0, 'padding': 0, 'border': 'none', 'width': '100%', 'minHeight': '30px', 'height': '100px', 'cursor': 'text', 'display': 'block' }, 'expand': { 'position': 'absolute', 'top': '7px', 'right': '27px', 'backgroundPosition': 'center', 'backgroundRepeat': 'no-repeat', 'width': '30px', 'height': '30px', 'visibility': 'hidden', 'opacity': 0.3, 'cursor': 'pointer', 'over': {'opacity': 0.5}, 'out': {'opacity': 0.3} }, 'toolbar': { 'cont': { 'height': '20px', 'margin': '7px 0 10px 0' }, 'icon': { 'display': 'inline-block', 'verticalAlign': 'top', 'cursor': 'pointer', 'backgroundRepeat': 'no-repeat', 'backgroundPosition': 'center', 'width': '26px', 'height': '20px', 'opacity': 0.4, 'over': {'opacity': 0.8}, 'out': {'opacity': 0.4} } }, 'origionalMsg': { 'cont': { 'width': '100%', 'position': 'relative', 'background': '#262626', 'color': '#747474', 'border': '1px solid #3f3e3e', 'fontSize': '14px', 'padding': '15px', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box', 'margin': '5px 0', 'userSelect': 'text', 'MozUserSelect': 'text', 'cursor': 'text', 'lineHeight': '18px' }, 'close': { 'width': '20px', 'height': '20px', 'position': 'absolute', 'top': '3px', 'right': '3px', 'color': '#9b9b9b', 'textAlign': 'center', 'lineHeight': '20px', 'fontSize': '12px', 'fontWeight': 'bold', 'cursor': 'pointer' }, 'date': { 'fontSize': '12px', 'position': 'absolute', 'top': '5px', 'right': '12px', 'margin': 0 }, 'from': { 'position': 'relative', 'fontSize': '14px', 'paddingTop': '5px', 'margin': '0 0 10px 0', 'fontWeight': 'bold' } } } }, 'quote': { 'border': '1px solid #5a5a5a', 'background': '#303030', 'padding': '10px', 'box-sizing': 'border-box', 'MozBoxSizing': 'border-box' }, 'notification': { 'cont': { 'background': '#292929', 'width': '230px', 'height': '73px', 'border': '2px solid #8d8d8d', 'position': 'absolute', 'bottom': '30px', 'right': '30px', 'box-shadow': '5px 5px 25px rgba(0,0,0,0.7)', 'padding': '10px', 'color': '#9a9a9a', 'fontSize': '12px', 'fontFamily': 'vrinda', 'zIndex': 1000 }, 'header': { 'cont': { 'marginBottom': '5px' }, 'mail': { 'backgroundPosition': 'center left', 'backgroundRepeat': 'no-repeat', 'width': '40px', 'height': '30px', 'display': 'inline-block', 'verticalAlign': 'top', 'position': 'relative' }, 'text': { 'display': 'inline-block', 'verticalAlign': 'top', 'textAlign': 'center', 'margin': '0 0 0 5px', 'width': '182px', 'lineHeight': '30px', 'height': '30px', 'fontSize': '14px' }, 'textMultiple': { 'display': 'inline-block', 'verticalAlign': 'top', 'textAlign': 'center', 'margin': '0 0 0 5px', 'width': '182px', 'lineHeight': '15px', 'height': '35px', 'fontSize': '14px' }, 'type': { 'backgroundPosition': 'center', 'backgroundRepeat': 'no-repeat', 'width': '12px', 'height': '30px', 'display': 'inline-block', 'verticalAlign': 'top', 'position': 'absolute', 'top': 0, 'left': '40px' } }, 'from': { 'margin': 0, 'padding': 0, 'whiteSpace': 'nowrap', 'overflow': 'hidden', 'textOverflow': 'ellipsis' }, 'subject': { 'margin': 0, 'padding': 0, 'whiteSpace': 'nowrap', 'overflow': 'hidden', 'textOverflow': 'ellipsis' }, 'remove': { 'position': 'absolute', 'top': '2px', 'right': '2px', 'width': '20px', 'height': '20px', 'lineHeight': '20px', 'textAlign': 'center', 'color': '#9a9a9a', 'fontSize': '10px', 'fontWeight': 'bold', 'cursor': 'pointer' }, 'link': { 'fontSize': '12px', 'color': '#377395', 'textDecoration': 'none', 'cursor': 'pointer', 'marginRight': '10px' }, 'button': { 'position': 'absolute', 'bottom': '10px', 'width': '100px', 'height': '25px', 'textAlign': 'center', 'background': '#4e4e4e', 'color': '#8b8b8b', 'fontSize': '12px', 'lineHeight': '25px', 'over': {'background': '#266589', 'color': '#c2c2c2'}, 'out': {'background': '#4e4e4e', 'color': '#8b8b8b'}, 'cursor': 'pointer' } }, 'confirm': { 'wrapper': { 'position': 'absolute', 'top': 0, 'left': 0, 'width': '100%', 'height': '100%', 'background': '#000', 'opacity': 0.2, 'zIndex': 20000 }, 'cont': { 'position': 'absolute', 'top': '80px', 'right': '40px', 'background': '#292929', 'border': '2px solid #181818', 'width': '359px', 'padding': '20px 10px 10px 10px', 'zIndex': 25000 }, 'input': { 'width': '100%', 'border': '1px solid #1f1f1f', 'background': '#323232', 'color': '#6c6d6d', 'fontSize': '12px', 'padding': '2px 10px', 'margin': '0 0 10px 0', 'outline': 'none', 'focus': {'outline': 'none'}, 'blur': {'outline': 'none'}, 'height': '29px', 'lineHeigt': '29px', 'boxSizing': 'border-box', 'MozBoxSizing': 'border-box' }, 'select': { 'width': '150px', 'border': '1px solid #1f1f1f', 'background': '#323232', 'color': '#6c6d6d', 'fontSize': '12px', 'padding': '2px 10px', 'margin': '0 0 10px 0', 'height': '21px', 'lineHeigt': '21px', 'display': 'inline-block', 'position': 'relative', 'verticalAlign': 'top', 'textAlign': 'left' }, 'button': { 'height': '25px', 'width': '100px', 'display': 'inline-block', 'textAlign': 'center', 'background': '#4e4e4e', 'color': '#8b8b8b', 'fontSize': '12px', 'lineHeight': '25px', 'over': {'background': '#266589', 'color': '#c2c2c2'}, 'out': {'background': '#4e4e4e', 'color': '#8b8b8b'}, 'cursor': 'pointer', 'margin': '0 5px' }, 'subCont': { 'margin': '0 0 5px 0', 'padding': 0, 'height': '25px', 'lineHeight': '25px', 'font-size': '14px', 'color': '#6f6f6f', 'textAlign': 'center' }, 'list': { 'cont': { 'position': 'absolute', 'top': '28px', 'left': 0, 'display': 'none', 'background': '#323232', 'border': '1px solid #1c1c1c', 'width': '100%', 'boxSizing': 'border-box', 'MoxBoxSizing': 'border-box' }, 'ul': { 'listStyleType': 'none', 'display': 'block', 'margin': '0', 'padding': '0', 'width': 'inherit', 'color': '#808080' }, 'li': { 'width': '100%', 'paddingLeft': '10px', 'boxSizing': 'border-box', 'MoxBoxSizing': 'border-box', 'borderBottom': '1px solid #464646', 'fontSize': '12px', 'height': '24px', 'lineHeight': '24px', 'over': {'background': '#434343', 'color': '#a3a2a2'}, 'out': {'background': 'transparent', 'color': '#808080'} } } } }, res: { 'controls': { 'next': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAXUlEQVQYV2Oct3DhBsZ//xISExM/MOABjPMXLvzP8P//AyAGqk08gEstRCECNCTGxzdiU4yukAGoa2FSfHwCumJ0hY1AExtwmgg05SHUQ7jdSLSv8QUJshwj1RUCALdQMQvYKq1HAAAAAElFTkSuQmCC', 'previous': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAZUlEQVQYV2NkwALmz58vwMDIOD8xISEQJs2Irg6oyAGkCIgVEuPj4fIoCucvXNgA1FgP04xV4byFCxcAdcUj20CZiTCTQG78z8QEMl0ep4lIigVAipPi4wNw+hpbcIHEMIKHYoUATvMeC0yTB00AAAAASUVORK5CYII=', 'first': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAd0lEQVQYV2Ocv3DhfwYg+PfnD19ycvJnEHv+/PkCDIyM8xMTEgJBfBBgRFcIVOQAUgTEConx8YxYFTKxsBQDJephktgV/v+/lImRMRqmCERTaCLUMyA3/mdiWgB0nDxOE5F9DVKcFB8fAPcMspvwseHeJ6SBaIUAZidKC2YCLWUAAAAASUVORK5CYII=', 'last': 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAdElEQVQYV2Oct3DhBsZ//xISExM/MADB3LlzeZlYWD6B2Inx8YwgGgQY5y9c+J/h//8HQAxUm3gAv0KYNgaGhn9//vThNhGhkOHf//9LmRgZo7FbjVDYCDSxF6eJ/xkYHkI9hNuNRPsayXl4mfBwIqSBaIUAjElLC7H537YAAAAASUVORK5CYII=' }, 'tools': { 'bold': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAjElEQVQ4jeXSIQoCURCA4QWrYLJ6AMEqWD2DN/AYJu+xySSYBG9gtQqCYLIKewDhs0xYlo3zBPGHgceUD4ZXVX8balw6s8M0Gzrr74VJNtTEe4AlnoGti0Ct3b44hBUa3DHMhro9vv0Z5tlQ+3QjbAI7FoNiNw7oVhraBnTKhvp6Y1ESuuKAWRryU30AvDon2Jg0sc0AAAAASUVORK5CYII=)', 'italic': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAbElEQVQ4jc3SsQmDUABFUSshrZWQDQIOIKQSskoqIasEUrmKYBVwEsEqM5w02UD+I3eB09yq+udQo0tAPdYEdMeUgJ54JKAZtwS04VwaafApivygK94JKHbcC2MCWjAkoB1taSR23AmX4tCRvtMVYAewYq2yAAAAAElFTkSuQmCC)', 'underline': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAjElEQVQ4je3TsQkCQRBG4QNBuMgabMJW7OBSwcgChIss4DoQTO3ASDC1BlMjo4PPwAEvWRB2OQzuRcP+MI8ZZqvqn8ATbSLb+bCYRJNodFFdQvRAl8ha9NmSaHbBNZGdcS8l2sZ6DpgP3hv02JcSzXD05YZX1KehvJRwiXVMtsGqqGAU4rR/Jf8v5fIG4y4UzcoLKWQAAAAASUVORK5CYII=)', 'strikeThrough': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAABYUlEQVQ4T72UMUtDMRRGm0UoOAlO7VIRBLcurt1EsEsF0VFQBKe6Ci6CP8BJcSgUXBwEQdxEUBycBBdFJ0EQpEPBVSjP80keaA25QUoDhwe5r995N0njCkMaLsWTZdkI723ADEzBO5xByznXS8kwRUjGCLqECpzCJ2iuARdQT5GliHYJW4Uqgerke/AB6u4G1pg/srpKESnsjrDN/jBkx5qjtjwIkZatS9hiQFRibpTa8yBE64QcwhYcEPphhYbq5tL5/djj2QRJ2nANtz/3zJIHRax9Zv0wVucD/uQmdRTYm0nm5mAHXsmtWh8WFdHYOAH6v5wQ1g0I55k7hwnqL9EuY0Uv6vDOLEH6c/4a1KeZeIAy9bd/i/xBeOKp47vQfwMg0iFZ8qLoVWTuEWE1gq78SWvxfIQi6LZYAd0Mmo8OU+S7kmwftFT50FJtI2lbEtWTRHkQ3akTyXoI7lME+Ttfa410ERQq4hEAAAAASUVORK5CYII=)', 'quote': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAyElEQVQ4T2NkoBNgxGXP////tYByE4BYiEi3vAOqK2BkZLyGTT1Wi4CWMAMV3wZiRSItgSm7D2SoAi37i64Pl0X2QIUHSLQEptwBaNFBYi2KAipcSqZF0UCLlo1aRE7ojfCgMwOG2Ulywg2oxxyY6k4RlepAioCZdheQciXRst1AS9yILhmgFnEC6XwiSodkoJqtQHwciCcCLfpOkkXE+AToawmguu1AbIKt2EE2A2ehSqRFoKD9DrTkCCH1lFokDbTkKSFLQPIAtAVOEc/UEFUAAAAASUVORK5CYII=)', 'player': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAoUlEQVQ4jc3PsQpBYQCG4VMmk9XkJpTJBSjX4AJMymo6ZTIppUzuQLkMk9WkTCYXoNRjIcrf4fSfv7wX8D19WfaPoYERJminQpo4e3VDPwWU+2yXAloHoFMKqBeA5pVDD2z+hhxQT4FMA4+2qFWJjAPIs2VVSAvXAggGVUCLLwgcYpEaLj9A0I2BOj8ikMdAwxLQJgaalYD2MdCqBHQs2roDRL7rpNTLvRUAAAAASUVORK5CYII=)', 'alliance': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAABGklEQVQ4jc3U0UdDYRjH8RGxq66ivyEiRv9EtxG7jRGxq4gRIyJijIjoPxgR3XYVY3Q1RoyuInYVMcani206PXsdOxT9rs55/J7f93nf876nVPqPwhrqaKDyV5ANvPnWBLu/FVzHKXbQtKhu9BWFbOIjE9jHbQL0ilao1YqArkPzBNUEqIWnCC8CaiRCj8P0A1QSvscioDIeMs1dXCZC71DLvL9gqwhoH++z5r70QZjrCu3Z8ycusLoM5DAEHWCcA4IjjMJKV/Ig26Yffq5eZto8DXAeavU8UCeYT8KkeYo7MUI5BVkPq0k156np558DqinQXjCNTW/8surgPtRuUqCzYBqanqBl9WzxovdSoGhKNeZpaPFADOf5X3Iixhnv5aZoAAAAAElFTkSuQmCC)', 'coords': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAA00lEQVQ4jc3SIQoCQRTG8YVNWz2AYDIJpk0eYGGryQMIgrDJKphMgskDmASrJzGZBGFBEASTICz8DY7weDiLzkzwi/Ox78fOvCj6twApsAPOvHICtkA7JDIDKj7nDgxDIIUYegFSc54BD9HlPkgCXMWwQvVL0R18oFxdk4YWqu+4QhM16Ai0TNcFbqrvu0IjywKUlnO3dwJ6loG2NF0hvQx12TshAtMPbsvYF2p88VclkHhBBhvUIBWQeSMCW1mgaTDEQDGwVsgGiINCAnwvx/yX757Sbx5xpkiHLQAAAABJRU5ErkJggg==)', 'table': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAgUlEQVQ4je3RIQ6DQBRFUSyKBIvForqnJii2UlvFhpqQsIbaWuzBjJ0MM2JSwUuee/k3P7dpIkGLR2bb2L1oMMnP9NegEQc2fBLdwnbMBgXYju7CrsNeBKkGwoAfVrwTXcN2KAH1+GLBM9ElbPvSr25Ht6OKoNqOXpgvOJrDNuroBLUtQ3//HcJ5AAAAAElFTkSuQmCC)', 'insertunorderedList': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAO0lEQVQ4jWNgGEjw//9/g////z/4//+/Aa0tevAfAh4giRENSLEIw0c0sWj4gdHEMJoY4GA0MYzMxAAA6QxndHKcgPEAAAAASUVORK5CYII=)', 'insertorderedList': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAcElEQVQ4je3SMQ2AQAxG4UpBAhKQgDSkIOEkIAEJOPhYbrgQBiCUiTe2aV7b/BEnYIGz3qugP4rc4K4sX/R4ux+s9XNLtqjDgLWppYRhqFeN2SJVVC4P/UREoGD7KnUFc1NLCUOHqR3KEpWautdetwOK5H3Pn7B4CQAAAABJRU5ErkJggg==)', 'indent': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAUUlEQVQ4jdWRwQkAIAwD3X+KbBq/UiIF20p7z2A8jGt1hYLZohJI4peIVqamC095dCGyuOjSh1sMvKRWJIQQWfxvzKUQWboI7qHxpE7WQvTKBmYgK+hcRGVIAAAAAElFTkSuQmCC)', 'outdent': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAS0lEQVQ4jWNgGEzgPxYwtC0aVOD///8LyNFEEKBbQlZwkmIRzBKaxhuyJTRNKFSziG5BR4xFyJaRbRGJjlpAF4uoAuiSsuhqETUAAAP+K+ha7EZ4AAAAAElFTkSuQmCC)', 'justifyleft': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAALElEQVQ4jWNgGEjwn0Iw+CwafoBuQTUaJ2QDUoOO7KCkm0XDD9AtqIZ0nAAA5z6+ULjEuxYAAAAASUVORK5CYII=)', 'justifycenter': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAALElEQVQ4jWNgGEjwn0Iw+Cwa3oBuwTUaLyQB8hI1GcFIN4uGN6BbcA25eAEAdxKecO5FA68AAAAASUVORK5CYII=)', 'justifyright': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAALElEQVQ4jWNgGEjwn0Iw+Cwa/oBuQTcaR0QDUoOK7KCjm0XDH9At6IZUHAEA8oq+UNVXS0cAAAAASUVORK5CYII=)', 'link': 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAQCAYAAAAI0W+oAAAAiElEQVQ4je2S3Q2AIAyEHcFRGIERGIERHIERGMURGMUR3ODzwWoqIUZ8MJhwSV96lOvPDUPHbwEEIGXhFG8KfHgjAjADFvDAIjkLjMAq4SU3C/9cTD5IVd3tdQlYawrOztR0d7i8bVLos9UdU0Q59KSOPwJO+EWZIVabQYnl9jWKdwW+TqSjKWyaolPi2Vd/5AAAAABJRU5ErkJggg==)' }, 'mail': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAYCAYAAAEKfQTmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN\/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz\/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH\/w\/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA\/g88wAAKCRFRHgg\/P9eM4Ors7ONo62Dl8t6r8G\/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt\/qIl7gRoXgugdfeLZrIPQLUAoOnaV\/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl\/AV\/1s+X48\/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H\/LcL\/\/wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93\/+8\/\/UegJQCAZkmScQAAXkQkLlTKsz\/HCAAARKCBKrBBG\/TBGCzABhzBBdzBC\/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD\/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q\/pH5Z\/YkGWcNMw09DpFGgsV\/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY\/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4\/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L\/1U\/W36p\/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N\/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26\/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE\/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV\/MN8C3yLfLT8Nvnl+F30N\/I\/9k\/3r\/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt\/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi\/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a\/zYnKOZarnivN7cyzytuQN5zvn\/\/tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO\/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3\/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA\/0HIw6217nU1R3SPVRSj9Yr60cOxx++\/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3\/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX\/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8\/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb\/1tWeOT3dvfN6b\/fF9\/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR\/cGhYPP\/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF\/6i\/suuFxYvfvjV69fO0ZjRoZfyl5O\/bXyl\/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o\/2j5sfVT0Kf7kxmTk\/8EA5jz\/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5\/wAAgOkAAHUwAADqYAAAOpgAABdvkl\/FRgAAButJREFUeNpifPr0KYO0tHQmAxJgZGBgMDx69OhRVlZWTpggCwMDA8OpU6duS0lJ6cEEAQAAAP\/\/YmRgYEDR+v\/\/\/+ksp06dmgYT+P79+ydGRsbzLPfv34erev369XMGBgYGAAAAAP\/\/YmBgYDAMDAxsv3Hjxn9s2MnJqYGBgcGCkYGBwXDXrl3nYLpOnjy5hYODg1NfX98ZJubm5mbJzMDAIHn+\/PlnGhoajh8\/fmTg4eFR4+DgUPr48SPDx48fGbq7u1uePXt2GwAAAP\/\/dI0xCsIwAEV\/VQISyNTSpkMRuhQPIHToATxAzyHewNMIHXubLAVRawYzfQhkKXXRpeCDzxv+8CIARwA7\/OcZGWNma+2gtS6Xr3PuHsdxsSIJKWVZ1\/WJJH5rmuYshChIYt227SWEgGmaHuM43rIs2\/d9f03TdFtV1SGEgKjrutl7\/5ZSJsscyZdSKt+QBIDk6yU5SXwAAAD\/\/5xSsUqFUAA999HkUPBwfIu4C28QkeAiRE4RtDSFm9APtAvOfURORrTcFqHJC8JtuYSDo4tIaos83nCRwKYeEUHxDpzlcM4ZDocAOAJwXNf1EyFkgT1gGMY5gJwAWJdlKQGgqipRFMVrGIbXfxWkaXpnmubKtu0TALAsyyUA1pxz+dNMKT3Nsuxe07Tll6aU2vi+f8Y557\/43QUAjOO4o5Typeu6DWPseZqmZdu275TSoGmaN6XUIWOMD8OwFULw77nd65MkkfM8f+R5nnqed\/XfrYQQD47jXBBCDoIgcAmAla7rl1EU3WJPxHF80\/f94yep5A+aRhxH8ef5Kx50kkxdup2DU6losMQ\/4KJEKUW4TWg4XKQ1oi3kpHCWDieJWBJKb3FxchLCUUodNGbRrZTeIG51c+ns\/X73u9qhWKQtJbZf+CwP3uPB+3oA3AVwiP+7DySZTD6WZfleJpN59C8J4\/H4fafT2RPy+fz9cDgcz2azJ5RS7IIsyy+CwWBIUZQDwjmHz+fb6\/V6zWg0ejwcDk8JIb6\/tXBd14nFYrXJZHIBAJxzEMdxYNs2AGAwGJwbhvE2kUiEAoHA\/p9CFovFZ9M0r0aj0cXGxxiDwBiDbds\/KRQKJcaYoGlac1u3bRutVuv1crn8WiwWj7d1xhiETaNtptPpp0ql8iwej2c3WiqVeqIoytPZbPZltVp9+y3o10blcrmey+WKlFJimuY7TdNeqaqq9fv9N5RSkk6nj+r1+sttj+M48NRqtctIJPIQAFRVPdF1vXmT2avV6vN2u30GAJZlDQTOOSil6Ha7541Go3nT6XVdPzMM45RS+qNRqVS6FEVRlCTpgBBye5dn5Jyv5vP5tSAIHq\/f738gSVJIFMU7rutiF9br9S2v10ssy\/r4XYwMDAysEhIS2StWrEhUVlbWYxgg8Pjx4+txcXHz7ty5M5mZgYFBv6urK0FQUFA4JCSk+969e1cNDQ21GRkZ2Un1Lan4+\/fvXydMmDCroKBgubu7u6apqanEhg0bbrIwMDAw\/P79m0FSUlJn06ZN3X\/\/\/v29cePG1U1NTcdmzZoVCCv2qQkuXbp0JDU1dVV2drZ+ampqamZmJjsDAwPD8+fPd8JbKchFAQMDA6unp2eUp6dn1Lt3754kJSXVsrCwMDU2NqYLCgpKkeuQz58\/v25vb5\/5\/Pnzbx0dHckHDx6El0V\/\/vyBFycojvr58yeGQdzc3DL9\/f3N0FbNjrKysraysjIrT0\/PMCYmJhZCDvn\/\/\/+\/AwcObKyurp7d3t6eXldXVwWr8bHZ9\/v3bwZcIYUV6OjoOLu5uV369+8fS1dX14QLFy68bG1tTZSWltZCV\/vq1au7dXV1s5WUlATMzc3VnZycrIyNjd1+\/vyJtwmCElKw4g4XOHbs2MYzZ87czM7OLmRmZma1tbWFlejnQ0NDC52dnZXCw8OjN2\/evGb9+vVXW1tboyZMmAAv6czMzHynTJkyUUVFRdrFxSWCaEd9\/\/6dAYuPbzY0NMzq6OgoNjQ09IdpggExMTHDWbNmGf79+\/f35cuXD3h5ecX7+vqyQ9vGyEpZ4uPjiz9\/\/vw8NTW1tKqqKlFCQkILl6OYkNMUDH\/9+vV7c3Nz\/ZMnTx719\/f3srOzS+Erjv\/8+cOqpqbm+ufPH3Z86tjY2CS7u7u737x586a+vr728+fPX5DlMdMUNOEdOnRoyYsXL97m5uXVMjIysvzAkiApBbJycnaFRUU2mzZtmsXBwcHu4uqayMDAwPAL3VGPHj68NGPGjMVlZWVl5mZmor9o4Bg0wOTq6prx8+fPD7U1NWWJiYnhv6HRxzhx4kSG\/Px8GQYGBnYGBgZtBgYG6QGoZV4xMDBcZWBg+Pn\/\/\/\/7gAEAb05N4qKYeo4AAAAASUVORK5CYII=", 'compose': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAAHeTXxYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDA5QkJFRjAyMUM4MTFFM0FFNDdDRTZFMkNGQ0U4QjciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDA5QkJFRjEyMUM4MTFFM0FFNDdDRTZFMkNGQ0U4QjciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDlCQkVFRTIxQzgxMUUzQUU0N0NFNkUyQ0ZDRThCNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDlCQkVFRjIxQzgxMUUzQUU0N0NFNkUyQ0ZDRThCNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/PiCpd68AAAM7SURBVHjaYjx16hQDCJiamoJpJgYkcPr06aUgAU4ksUCQwHcgXgSUfQvUxgUQQAwgM4A47f\/\/\/3D9XRiGwTh3QARAADFC7f0AxAIw+4EGrgbSoSCVFVCJNCD+BpRIA0kA6WMwnauBOBTZ5SAAEEAwSRAwBmIDoORcEIcFKgjyyVkoBtmnC7JrO9RHcADUdRlmlBYQ2yBJzAIZ5QfEm4D4GnrQHWdAA0A7boMkXkP5\/4H4IVDQDKhLFSCAkJ0LAiuAmB+Io4H4HVQsCoiXArEwUMM7ZD+CBFPQXY4eIECbLgH5eiAnWAJxFhYNH7AYoAfU+AfkU10kT4kCsRyUzQwKYaAimIazUPHXMOeBPMqIxSYBNOeBwvYXLHoYoTYuAmJDqJgAmuJFQAOUQHyAAEIPPRhIhjrvLJKz4IAFiS0ExG+hwT0XJga0BZQePgI1R6AnXZDTZkKduQzJoHdAxZ5AOhGo+QO6pqWwhIoNADWCokMSlNNgmkCe18OidgsWjUIwTVEMxIMIUEiCAgI5+NKQ2KBIToNG7jKgTV+A+CNMkyKSQuTg\/YjE\/4UcOCzQVI1TE1qKAGWuxSA\/OSBnPQJgIyhAYH66B8RKaAp80HIlqPwQQ44nJahGrDYCNZwHUk1AW16jJyOQRjNoUvoCzeqgrLEYqNgQ2RCAAMOVYJFLrHwg9oZG7AsgfgqVkwZiCWixsBWIJ2JL3NgSOQyAyrGNUBfmAnEcPpfAYgQU51Cv8wCxP1D8Gi4fgUqHY0B8AV96x1dWoUWOARBbwcIbFkmgcH4FymlEWPIBPc9gsTwUatYrUJEMswhUSRwA4iAgPsJAJQC07AjUzANAyzhBFsVCI3k9A5UB0LL1ULNjWaCp6R0WdZlAPA2HGd7QQpwBVspDgTzQ8EdoakFmC4ESgw006ASgKY2BiDg6Asud2BIDUqLggap3YIJqWgNtBlAbgMxcA4ovWD6KgNbNoHxgha3KRQILYE0cPD7hhGaVm7BKBjnDRkArmudAvBuaUbFZWEDAAlA14grEtqDWDKEiSAhas4UA8Q6oL3ZAy2dkACrHPYA4AUqDoiAd1jIhpaxDL\/eMoZU2CPzFVXljAwBsiybgUCzWVAAAAABJRU5ErkJggg==", 'sendMail': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAAHeTXxYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkJBMDU2QjAyMUM4MTFFMzhENTM5NzJBMTI2OEM2QjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkJBMDU2QjEyMUM4MTFFMzhENTM5NzJBMTI2OEM2QjYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyQkEwNTZBRTIxQzgxMUUzOEQ1Mzk3MkExMjY4QzZCNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyQkEwNTZBRjIxQzgxMUUzOEQ1Mzk3MkExMjY4QzZCNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/PspK+6wAAANsSURBVHjaYjx16hQDCJiamoJpJgYkcPr06aUgAU4ksUCQwHcgXgSUfQvUxgUQQAwgM4A47f\/\/\/3D9lsiGaSFzmEEEQAAxQu39AMQCMPuBBq4G0qEsQH4FTALqjv9ACUYgfQymczUQhyK7HAQAAggmCQLGQGwAlJwL4rBABUE+OQvFIGN1Qa7aDvWRGUwrUNdlkIQnlH8KOVBAEn5IfDlkieNIEo+gdtwGSbyGCv4H4odAQTOgHaoAAYTsXBBYAcT8QBwNxO+gYlFAvBSIhYEa3iH7ESSYAnU5CkAOEKBNl4B8PSZolGRh0cADchKaAXpAjX9AmnSB+CMDJvgCxOuBimLRxF\/DnAfyKCOSBMgfy7A4zwZI\/YJFDyPUxkVAbAjTgKZ4EdAAJRAfIIDQQw8GkqGJ7CxQ4Vl0SRYkthAQv4UG91yYGNAWUHr4CNQcgRyzDFCnzYQ6E9lp74CKQWklEaj5A7qmpbCEig0ANYKiQxKU02CaQJ7XQ1P3HIjZsGgUgmmKwmK4JBBvhDobGUSAQpIJPV0jAZBfvIGKKpBsAyUCG1DoKTLgBnXg8gAVvGOCpmp0IAHE54GYCy2SQZlrMUiTA8hKNE1O0JSBDjaCAoQF6qd7QKyEJLkMXTWopAFSYsjxpATVaIPNY0ANIKc2AW15jZ6MlKBFx1totgApMAZqWAxUjOJUgADDlWCRS6x8UNBDI\/YFED+FyklDAwxUBGwF4onYEje2RM6AVAZvhLowF4jj8LkElkdBCQXqdVAp4Q8Uv4bLR6JAfAyIL+BL7\/jKKrTIMQBiK1h4wyIJFM6vQDkNhyWgfA8qkkKItDwUatYrUJEMswhUSRwA4iAgPoJD719QIoUmt0tAfBIaP\/gsOwI18wDQMk4mqEtBkbyeCMc+gpYKtkDcDsSfgYZ447FsPdTsWCZoanrHQBr4BQ2aSlDCAVrWjkctyGwhFmhwtUBTyxciLOGElnc20NTFgksh0AE80ERRwAS1aA20GYAP6EIrt0XQJC+Jp9iDAZCZa0DxBXNNBLRuBuUDK2xVLhBcBmJ5YsIVFPnQrHITVskgezsC6mpQkb8b6urvpEQc1AKQj11BCQbUmiFUBAlBazZQvtkBxAugNHrVDyrHPYA4AUqDoiAd1jIhpaxDL\/eMYS1DaN46i698QwYA7ichDuh2+qMAAAAASUVORK5CYII=", 'expand': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAHCAYAAAG3oLd4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENBNTNFOTYyMUM5MTFFMzgxQ0U4NURBODIyODZFQjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENBNTNFOTcyMUM5MTFFMzgxQ0U4NURBODIyODZFQjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0E1M0U5NDIxQzkxMUUzODFDRTg1REE4MjI4NkVCMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0E1M0U5NTIxQzkxMUUzODFDRTg1REE4MjI4NkVCMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/PkXCZdMAAAB7SURBVHjaYrhy5UoUQAAxAIk6gABiBBJODAwMpQABBOIxMAFZiwACCCTEA2R8BmIrFiDxBYjFgPg1QACBZHSBjMsgdQlA\/BDEyARiNpA6LiBmAAgwkJocIN0IxBFAnAzE9iBZkJHdQCwNxBNBNEiwA4jNgHg7EG8CYmcAZrIfR0hmuRcAAAAASUVORK5CYII=", 'collapse': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAHCAYAAAG3oLd4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjJFQkEwM0YyMUM5MTFFMzgwM0JDNkQ5QzlCNjQ3MUMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjJFQkEwNDAyMUM5MTFFMzgwM0JDNkQ5QzlCNjQ3MUMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMkVCQTAzRDIxQzkxMUUzODAzQkM2RDlDOUI2NDcxQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMkVCQTAzRTIxQzkxMUUzODAzQkM2RDlDOUI2NDcxQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/Pi65wUkAAAB0SURBVHjaYrhy5QoDQAAxgAiAAGIEEjwMDAxaAAEE4okyAVmvAAIIJOQEZKQBMT9IRAKII4D4FEAAMYK1AQELEH8D4o8g6elA\/AvEWADE8gABBlNjBsTbgXgTEKeD1FcwQEAxEN8E4sMgLV+gEk+BuAiIpQHP\/SBDZEL2QgAAAABJRU5ErkJggg==", 'drop': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAKCAYAAAEle4U0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjM5REMxOTYyMUM3MTFFM0JBODRGNUVCNzE5NTlBMUUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjM5REMxOTcyMUM3MTFFM0JBODRGNUVCNzE5NTlBMUUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMzlEQzE5NDIxQzcxMUUzQkE4NEY1RUI3MTk1OUExRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMzlEQzE5NTIxQzcxMUUzQkE4NEY1RUI3MTk1OUExRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/Phn5Ps0AAADuSURBVHjaYjh16pTx\/\/\/\/GUCYhQEITp8+DaIYAAKIESQCAkxQUX6AAGKAqQXS3kAMotsBAgiuDAbgAkAt34DURxYkSS4QARBAjCBzTE1Nz8JEgSpVgNQdJIWWTAyYAKSgHYhB5q8D4uMAAQRywTuY67FhFnQjgFaJAqnXUC4bNmteAXEUyA1A\/JMFiwKQ2B8omxebgr8gX8I4AAEGDjZCDiWEsdmC7jFvIDUNiP2B+AKSlDQ0uPYxMRAGR4D4GhCfh4bzalAgAPETIOYE4rnEGPIRiD2hYRAKxCCXNUH5eqCIJOgdYPJA5q6BYhQAAIt8mGSW9QmrAAAAAElFTkSuQmCC", 'expandDocument': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAAEhyb7BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkMwNUExQzUyRUU4MTFFMzg3NTJCREMxQTk3RTE1MDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkMwNUExQzYyRUU4MTFFMzg3NTJCREMxQTk3RTE1MDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQzA1QTFDMzJFRTgxMUUzODc1MkJEQzFBOTdFMTUwNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGQzA1QTFDNDJFRTgxMUUzODc1MkJEQzFBOTdFMTUwNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/PgfANO8AAADLSURBVHjaYvz\/\/z8DEIAJJiCeCcSMIA4jsgxAAME5TFARRiaouv8AAQSTQgZgZRgAIIBQTAQBFmRJmAP+wzgwAUZkM2Ba4GYABBC69f\/RdSA7ZzKyZfich1UBskmM6O5ABgABhM1NGAA9iD5CTUXGDEwMRACiHf4fn3tg1k3BF0awKMgF4hfEuAkGPgCxALqbiAongADDlr4YCHmEHIM+YnEidgtBBiHhCWh8YjAYwDgz\/yMA2QYhG\/KfDAMxFLdT4iKqBTbdDCIaAAAnZT5x4V7D2wAAAABJRU5ErkJggg==", 'contractDocument': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAAEhyb7BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUNCOUQ5OUYyRUU4MTFFM0I1MkY5QTdFQTI4NzY0REMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUNCOUQ5QTAyRUU4MTFFM0I1MkY5QTdFQTI4NzY0REMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFQ0I5RDk5RDJFRTgxMUUzQjUyRjlBN0VBMjg3NjREQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFQ0I5RDk5RTJFRTgxMUUzQjUyRjlBN0VBMjg3NjREQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/PgMVm38AAADUSURBVHjaYvwPBAxQwATEjFDMwALEcBmAAGKEKWOCCcAY\/wECCCbFyIAA\/2EmVSMJMgAEECOyXTArkLWBTf+PbC+GChRXgQBAAMEMNWHADc4gG4PuVhTLkcFkbIpYkExgxGUfQABheBSXSQyEHI4tcNEBPLBxOhrZOpi7OIE4BZvDGQiE03\/kcMLpLib0eCLGTVgBQIARFZjEABZi3E0A\/MfIJoTCHb9xQJ+hYRiYiUUOp3psBvwn0TAMg5Al2ol0Ddwg5HzKSEmgMzFQCbCgRyO5AABZbenazpGa4wAAAABJRU5ErkJggg==", 'arrowLeft': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAAE8d1zJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NDMTZCMEQyRTAxMTFFM0FCOUVDMjExNEU2NDMwOTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NDMTZCMEUyRTAxMTFFM0FCOUVDMjExNEU2NDMwOTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0MxNkIwQjJFMDExMUUzQUI5RUMyMTE0RTY0MzA5NCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0MxNkIwQzJFMDExMUUzQUI5RUMyMTE0RTY0MzA5NCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/PgV0+agAAADOSURBVHjaYlyxYgUDCDAxQAFAADGAREC8RoAAYoTK\/QcRAAEE40gA8QuQ9BMgfg6SBXFkoHoZAQIIpgwE6kCGgARBHBao4HOoGXCDYRZLQlXKQGlGgABCNgoEVID4DqpTGRj+ALE6jAOSsIGaywzEW6DsDyAJNgYsACSxD8l1PlDLBWB2\/IUK3IHpAAgwdFfBgBMQLwXiFCDeiizBgsQWhSpyRRLbgmbQR5AGXSA+g8vR2DxxGYjZoaG4jxgNMPACiJ2hnnQD4tdIoQDDAgDdNimjM3GYdAAAAABJRU5ErkJggg==", 'arrowRight': "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAALCAYAAAE8d1zJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw\/eHBhY2tldCBiZWdpbj0i77u\/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTEyMTUyQkMyRTAxMTFFMzk2OThFRTA1MDBFRkVGQkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTEyMTUyQkQyRTAxMTFFMzk2OThFRTA1MDBFRkVGQkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMTIxNTJCQTJFMDExMUUzOTY5OEVFMDUwMEVGRUZCRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMTIxNTJCQjJFMDExMUUzOTY5OEVFMDUwMEVGRUZCRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI\/PhpmJE8AAADMSURBVHjaYlyxYgUDCDAxQAAzQAAxAEVUQDx1gABiBLI+ABn8IHGAAGKEKYQp\/g\/FNiAOI1TiCEAAISvzBuKNQMzCACXghkEBSLszSEIAKqAOxDdhsgABhGyUBBC\/QLYdBp4DcR02Z4FAIxA\/QdfBAPcoVIIRyf1NQCwJcy4MyADxUxgHIMBQwgHJo3OAOBqI96FLMkE9\/h8Jb4F6aS+UvwuIRbF5DxdwBeJXQPwTiHWJ0bAP6jF2IL7MBA1yRiTsA8SvgdgNyndGDnEARs4t\/52DDUYAAAAASUVORK5CYII=" } } }); } function initialize_zmail() { console.log('zmail: ' + 'zmail retrying...'); if (typeof qx != 'undefined' && typeof qx.core != 'undefined' && typeof qx.core.Init != 'undefined' && typeof ClientLib != 'undefined' && typeof webfrontend != 'undefined' && typeof phe != 'undefined') { var app = qx.core.Init.getApplication(); if (app.initDone == true) { try { var isDefined = function(a){return (typeof a == 'undefined') ? false : true}; var data = ClientLib.Data.MainData.GetInstance(); var net = ClientLib.Net.CommunicationManager.GetInstance(); if (isDefined(data) && isDefined(net)) { var alliance = data.get_Alliance(); var player = data.get_Player(); var mail = data.get_Mail(); if (isDefined(alliance) && isDefined(player) && isDefined(mail) && isDefined(alliance.get_Exists()) && isDefined(alliance.get_Relationships()) && isDefined(player.get_Name()) && player.get_Name() != '') { try { console.log('zmail: ' + 'initializing zmail'); createClass(); zmail.data.getInstance(); } catch(e) { console.log('zmail: ' + "Zmail script init error:"); console.log('zmail: ' + e.toString()); } } else window.setTimeout(initialize_zmail, 10000); } else window.setTimeout(initialize_zmail, 10000); } catch(e) { console.log('zmail: ' + e.toString()); } } else window.setTimeout(initialize_zmail, 10000); } else window.setTimeout(initialize_zmail, 10000); }; window.setTimeout(initialize_zmail, 10000); } var script = document.createElement("script"); var txt = injectFunction.toString(); script.innerHTML = "(" + txt + ")();"; script.type = "text/javascript"; document.getElementsByTagName("head")[0].appendChild(script); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址