Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jsxc/jsxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsualko <klaus@jsxc.org>2015-05-08 14:07:02 +0300
committersualko <klaus@jsxc.org>2015-05-08 14:07:02 +0300
commitc242f05afeb788ceaf17ab3acdfd072d58db2500 (patch)
tree8d57f986ffdd84af599250cbd748290b5a6b4fca
parent3b23f20268a53fabeb8bd4f0e0199d49ff598743 (diff)
build v2.0.0v2.0.0
-rw-r--r--CHANGELOG.md20
-rw-r--r--Gruntfile.js4
-rw-r--r--build/css/jsxc.css91
-rw-r--r--build/css/jsxc.webrtc.css7
-rw-r--r--build/jsxc.js28
-rw-r--r--build/jsxc.min.js15
-rw-r--r--build/jsxc.min.js.map2
-rw-r--r--build/lib/jsxc.dep.js68
-rw-r--r--build/lib/jsxc.dep.min.js60
-rw-r--r--build/lib/jsxc.dep.min.js.map2
-rw-r--r--build/lib/translation.js2
-rw-r--r--doc/global.html236
-rw-r--r--doc/index.html4
-rw-r--r--doc/jsxc.gui.dialog.html12
-rw-r--r--doc/jsxc.gui.html64
-rw-r--r--doc/jsxc.gui.queryActions.html14
-rw-r--r--doc/jsxc.gui.roster.html86
-rw-r--r--doc/jsxc.gui.template.html6
-rw-r--r--doc/jsxc.gui.window.html143
-rw-r--r--doc/jsxc.html467
-rw-r--r--doc/jsxc.lib.gui.js.html2564
-rw-r--r--doc/jsxc.lib.js.html6595
-rw-r--r--doc/jsxc.lib.muc.js.html1166
-rw-r--r--doc/jsxc.lib.notice.js.html166
-rw-r--r--doc/jsxc.lib.notification.js.html322
-rw-r--r--doc/jsxc.lib.options.js.html218
-rw-r--r--doc/jsxc.lib.otr.js.html512
-rw-r--r--doc/jsxc.lib.storage.js.html662
-rw-r--r--doc/jsxc.lib.webrtc.js.html135
-rw-r--r--doc/jsxc.lib.xmpp.js.html1161
-rw-r--r--doc/jsxc.muc.html2948
-rw-r--r--doc/jsxc.notification.html52
-rw-r--r--doc/jsxc.options.html194
-rw-r--r--doc/jsxc.otr.html34
-rw-r--r--doc/jsxc.storage.html54
-rw-r--r--doc/jsxc.webrtc.html64
-rw-r--r--doc/jsxc.xmpp.carbons.html12
-rw-r--r--doc/jsxc.xmpp.html102
-rw-r--r--package.json2
39 files changed, 11695 insertions, 6599 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c59fc101..9b73e309 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,23 @@
+v2.0.0 / 2015-05-08
+===
+- add multi-user chat (XEP-0045)
+- add window resize handle
+- add username autocomplete
+- add offline state
+- add Italian, French, Polish, Portuguese/Brazil
+- use user avatar as notification icon
+- show notifications if tabs has no focus
+- split files into namespaces
+- sass improvements
+- replace own translation engine with i18next
+- fix login from login box
+- fix selection of chat messages
+- fix video calls
+- fix emoticons
+- fix duplicated roster items
+- fix notification request
+- fix logout
+
v1.1.0a / 2015-02-25
===
- fix css url path
diff --git a/Gruntfile.js b/Gruntfile.js
index c99897d4..c116305a 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -268,13 +268,13 @@ module.exports = function(grunt) {
grunt.registerTask('build', ['jshint', 'clean', 'sass', 'autoprefixer', 'copy', 'merge_data', 'replace:locales', 'concat']);
grunt.registerTask('build:prerelease', 'Build a new pre-release', function(){
- grunt.config.set('target', 'build/');
+ grunt.config.set('target', 'build');
grunt.task.run([ 'search:console', 'build', 'dataUri', 'usebanner', 'replace:version', 'replace:libraries', 'uglify', 'compress' ]);
});
grunt.registerTask('build:release', 'Build a new release', function(){
- grunt.config.set('target', 'build/');
+ grunt.config.set('target', 'build');
grunt.task.run([ 'search:changelog', 'build:prerelease', 'jsdoc' ]);
});
diff --git a/build/css/jsxc.css b/build/css/jsxc.css
index cf32fb7d..44a8942e 100644
--- a/build/css/jsxc.css
+++ b/build/css/jsxc.css
@@ -397,6 +397,82 @@ div.jsxc_transfer, div.jsxc_transfer.jsxc_disabled:hover {
#jsxc_roster > .jsxc_bottom > div:hover {
color: #fff; }
+.jsxc_windowItem.jsxc_groupchat .jsxc_bar .jsxc_avatar, li[data-type="groupchat"] .jsxc_avatar {
+ text-indent: 999px;
+ background-image: url("../img/group_white.svg");
+ background-size: 70% 70% !important;
+ background-repeat: no-repeat; }
+
+.jsxc_windowItem.jsxc_groupchat .jsxc_fade {
+ padding-top: 30px; }
+.jsxc_windowItem.jsxc_groupchat .jsxc_video {
+ display: none; }
+.jsxc_windowItem.jsxc_groupchat .jsxc_transfer {
+ display: none; }
+.jsxc_windowItem.jsxc_groupchat .jsxc_fingerprints, .jsxc_windowItem.jsxc_groupchat .jsxc_verification, .jsxc_windowItem.jsxc_groupchat .jsxc_transfer {
+ display: none; }
+.jsxc_windowItem.jsxc_groupchat .jsxc_members {
+ background-image: url("../img/group_grey.svg");
+ background-size: 90%;
+ background-repeat: no-repeat;
+ background-position: center; }
+ .jsxc_windowItem.jsxc_groupchat .jsxc_members:hover {
+ background-image: url("../img/group_white.svg"); }
+.jsxc_windowItem.jsxc_groupchat .jsxc_chatmessage.jsxc_in {
+ margin-left: 40px; }
+ .jsxc_windowItem.jsxc_groupchat .jsxc_chatmessage.jsxc_in .jsxc_avatar {
+ display: block;
+ position: absolute;
+ bottom: 0px;
+ left: -37px;
+ background-color: #777; }
+.jsxc_windowItem .jsxc_memberlist {
+ height: 30px;
+ width: 100%;
+ background-color: #1a1a1a;
+ overflow: hidden;
+ position: absolute;
+ top: 0px;
+ -webkit-transition: height 400ms;
+ transition: height 400ms;
+ z-index: 100; }
+ .jsxc_windowItem .jsxc_memberlist ul {
+ white-space: nowrap;
+ position: absolute;
+ background-color: #1a1a1a;
+ color: gray;
+ overflow: hidden;
+ -webkit-transition: left 400ms;
+ transition: left 400ms;
+ padding: 0px; }
+ .jsxc_windowItem .jsxc_memberlist ul > li {
+ display: inline-block;
+ white-space: normal; }
+ .jsxc_windowItem .jsxc_memberlist ul > li:last-child {
+ margin-right: 2px; }
+ .jsxc_windowItem .jsxc_memberlist ul > li .jsxc_name {
+ display: none; }
+ .jsxc_windowItem .jsxc_memberlist ul > li .jsxc_avatar {
+ margin-left: 2px;
+ margin-right: 0px; }
+ .jsxc_windowItem .jsxc_memberlist.jsxc_expand ul {
+ white-space: normal; }
+ .jsxc_windowItem .jsxc_memberlist.jsxc_expand ul > li {
+ display: block;
+ width: 100%;
+ height: 27px;
+ line-height: 27px; }
+ .jsxc_windowItem .jsxc_memberlist.jsxc_expand ul > li .jsxc_name {
+ display: block;
+ cursor: default; }
+ .jsxc_windowItem .jsxc_memberlist.jsxc_expand ul > li .jsxc_name:hover {
+ color: inherit; }
+ .jsxc_windowItem .jsxc_memberlist.jsxc_expand ul > li .jsxc_avatar {
+ margin-right: 4px; }
+
+li[data-type="groupchat"] .jsxc_video {
+ display: none; }
+
.jsxc_right {
text-align: right; }
@@ -482,6 +558,8 @@ div.jsxc_transfer, div.jsxc_transfer.jsxc_disabled:hover {
background-size: 100%;
margin: 0 3px 0 0;
background-image: url("../img/loading.gif"); }
+ #jsxc_dialog .jsxc_libraries {
+ max-width: 300px; }
.jsxc_avatar img {
display: block;
@@ -565,6 +643,7 @@ ul.jsxc_vCard {
background-position: center center; }
@-webkit-keyframes bounce {
+
0% {
bottom: 0;
-webkit-animation-timing-function: ease-in;
@@ -807,14 +886,14 @@ ul.jsxc_vCard {
box-sizing: border-box;
text-align: right; }
.jsxc_window input::-webkit-input-placeholder {
- color: #000;
- opacity: 0.3; }
+ color: #000;
+ opacity: 0.3; }
.jsxc_window input::-moz-placeholder {
- color: #000;
- opacity: 0.3; }
+ color: #000;
+ opacity: 0.3; }
.jsxc_window input:-ms-input-placeholder {
- color: #000;
- opacity: 0.3; }
+ color: #000;
+ opacity: 0.3; }
.jsxc_window input::placeholder {
color: #000;
opacity: 0.3; }
diff --git a/build/css/jsxc.webrtc.css b/build/css/jsxc.webrtc.css
index e6b1a2db..ec6c1744 100644
--- a/build/css/jsxc.webrtc.css
+++ b/build/css/jsxc.webrtc.css
@@ -105,11 +105,11 @@ div:fullscreen {
height: 100%;
background-color: #000; }
div:-webkit-full-screen.jsxc_localvideo {
- border: 1px solid #fff; }
+ border: 1px solid #fff; }
div:-moz-full-screen.jsxc_localvideo {
- border: 1px solid #fff; }
+ border: 1px solid #fff; }
div:-ms-fullscreen.jsxc_localvideo {
- border: 1px solid #fff; }
+ border: 1px solid #fff; }
div:fullscreen.jsxc_localvideo {
border: 1px solid #fff; }
div.jsxc_video {
@@ -198,6 +198,7 @@ div.jsxc_video {
animation-delay: 0.78s; }
@-webkit-keyframes bubblingG {
+
0% {
width: 16px;
height: 16px;
diff --git a/build/jsxc.js b/build/jsxc.js
index 9f3036dd..ac845b40 100644
--- a/build/jsxc.js
+++ b/build/jsxc.js
@@ -1,5 +1,5 @@
/*!
- * jsxc v2.0.0-beta2 - 2015-04-29
+ * jsxc v2.0.0 - 2015-05-08
*
* Copyright (c) 2015 Klaus Herberth <klaus@jsxc.org> <br>
* Released under the MIT license
@@ -7,7 +7,7 @@
* Please see http://www.jsxc.org/
*
* @author Klaus Herberth <klaus@jsxc.org>
- * @version 2.0.0-beta2
+ * @version 2.0.0
* @license MIT
*/
@@ -25,7 +25,7 @@ var jsxc = null, RTC = null, RTCPeerconnection = null;
*/
jsxc = {
/** Version of jsxc */
- version: '2.0.0-beta2',
+ version: '2.0.0',
/** True if i'm the master */
master: false,
@@ -3076,11 +3076,13 @@ jsxc.gui.template = {
var ret = jsxc.gui.template[name];
if (typeof (ret) === 'string') {
+ ret = $('<div>').append($(ret).i18n()).html();
+
ret = ret.replace(/\{\{([a-zA-Z0-9_\-]+)\}\}/g, function(s, key) {
return (typeof ph[key] === 'string') ? ph[key] : s;
});
- return $('<div>').append($(ret).i18n()).html();
+ return ret;
}
jsxc.debug('Template not available: ' + name);
@@ -3089,7 +3091,7 @@ jsxc.gui.template = {
authenticationDialog: '<h3>Verification</h3>\
<p data-i18n="Authenticating_a_buddy_helps_"></p>\
<div>\
- <p data-i18n="How_do_you_want_to_authenticate_your_buddy" style="margin:0px;"></p>\
+ <p data-i18n="[html]How_do_you_want_to_authenticate_your_buddy" style="margin:0px;"></p>\
<select size="1">\
<option data-i18n="Select_method"></option>\
<option data-i18n="Manual"></option>\
@@ -3233,7 +3235,7 @@ jsxc.gui.template = {
<p><span data-i18n="You_have_a_request_from"></span><b class="jsxc_their_jid"></b>.</p>\
<p class="jsxc_right"><a href="#" class="button jsxc_deny" data-i18n="Deny"></a> <a href="#" class="button creation jsxc_approve" data-i18n="Approve"></a></p>',
removeDialog: '<h3 data-i18n="Remove_buddy"></h3>\
- <p class="jsxc_maxWidth" data-i18n="You_are_about_to_remove_"></p>\
+ <p class="jsxc_maxWidth" data-i18n="[html]You_are_about_to_remove_"></p>\
<p class="jsxc_right"><a href="#" class="button jsxc_cancel jsxc_close" data-i18n="Cancel"></a> <a href="#" class="button creation" data-i18n="Remove"></a></p>',
waitAlert: '<h3>{{msg}}</h3>\
<p data-i18n="Please_wait"></p>\
@@ -3255,15 +3257,13 @@ jsxc.gui.template = {
pleaseAccept: '<p data-i18n="Please_accept_"></p>',
aboutDialog: '<h3>JavaScript XMPP Chat</h3>\
<p><b>Version: </b>' + jsxc.version + '<br />\
- <a href="http://jsxc.org/" target="_blank">www.jsxc.org</a><br />\
- <br />\
- <i>Released under the MIT license</i><br />\
- <br />\
- Real-time chat app for {{app_name}} and more.<br />\
- Requires an external <a href="https://xmpp.org/xmpp-software/servers/" target="_blank">XMPP server</a>.<br />\
- <br />\
- <b>Credits: </b> <a href="http://www.beepzoid.com/old-phones/" target="_blank">David English (Ringtone)</a>,\
+ <a href="http://jsxc.org/" target="_blank">www.jsxc.org</a></p>\
+ <p><i>Released under the MIT license</i></p>\
+ <p>Real-time chat app for {{app_name}} and more.<br />\
+ Requires an external <a href="https://xmpp.org/xmpp-software/servers/" target="_blank">XMPP server</a>.</p>\
+ <p><b>Credits: </b> <a href="http://www.beepzoid.com/old-phones/" target="_blank">David English (Ringtone)</a>,\
<a href="https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and" target="_blank">CameronMusic (Ping)</a></p>\
+ <p class="jsxc_libraries"><b>Libraries: </b><a href="http://strophe.im/strophejs/">strophe.js</a> (multiple), <a href="https://github.com/strophe/strophejs-plugins">strophe.js/muc</a> (MIT), <a href="https://github.com/strophe/strophejs-plugins">strophe.js/disco</a> (MIT), <a href="https://github.com/strophe/strophejs-plugins">strophe.js/caps</a> (MIT), <a href="https://github.com/strophe/strophejs-plugins">strophe.js/vcard</a> (MIT), <a href="https://github.com/ESTOS/strophe.jingle">strophe.jingle</a> (MIT), <a href="https://github.com/neoatlantis/node-salsa20">Salsa20</a> (AGPL3), <a href="www.leemon.com">bigint</a> (public domain), <a href="code.google.com/p/crypto-js">cryptojs</a> (code.google.com/p/crypto-js/wiki/license), <a href="http://git.io/ee">eventemitter</a> (MIT), <a href="https://arlolra.github.io/otr/">otr.js</a> (MPL v2.0), <a href="http://i18next.com/">i18next</a> (MIT)</p>\
<p class="jsxc_right"><a class="button jsxc_debuglog" href="#">Show debug log</a></p>',
vCard: '<h3><span data-i18n="Info_about"></span> <span>{{bid_name}}</span></h3>\
<ul class="jsxc_vCard"></ul>\
diff --git a/build/jsxc.min.js b/build/jsxc.min.js
index 5a5a5f26..287ccbf5 100644
--- a/build/jsxc.min.js
+++ b/build/jsxc.min.js
@@ -1,5 +1,5 @@
/*!
- * jsxc v2.0.0-beta2 - 2015-04-29
+ * jsxc v2.0.0 - 2015-05-08
*
* Copyright (c) 2015 Klaus Herberth <klaus@jsxc.org> <br>
* Released under the MIT license
@@ -7,14 +7,13 @@
* Please see http://www.jsxc.org/
*
* @author Klaus Herberth <klaus@jsxc.org>
- * @version 2.0.0-beta2
+ * @version 2.0.0
* @license MIT
*/
/*! This file is concatenated for the browser. */
-var jsxc=null,RTC=null,RTCPeerconnection=null;!function($){"use strict";jsxc={version:"2.0.0-beta2",master:!1,role_allocation:!1,to:null,toBusy:null,toNotification:null,toNotificationDelay:500,keepalive:null,restore:!1,restoreCompleted:!1,triggeredFromBox:!1,triggeredFromElement:!1,triggeredFromLogout:!1,ls:[],storageNotConform:null,toSNC:null,bid:null,CONST:{NOTIFICATION_DEFAULT:"default",NOTIFICATION_GRANTED:"granted",NOTIFICATION_DENIED:"denied",STATUS:["offline","dnd","xa","away","chat","online"],SOUNDS:{MSG:"incomingMessage.wav",CALL:"Rotary-Phone6.mp3",NOTICE:"Ping1.mp3"},REGEX:{JID:new RegExp("\\b[^\"&'\\/:<>@\\s]+@[\\w-_.]+\\b","ig"),URL:new RegExp(/((?:https?:\/\/|www\.|([\w\-]+\.[a-zA-Z]{2,3})(?=\b))(?:(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\)([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|])?)|(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|]))?)/gi)},NS:{CARBONS:"urn:xmpp:carbons:2",FORWARD:"urn:xmpp:forward:0"}},getFormattedTime:function(unixtime){var msgDate=new Date(parseInt(unixtime)),date=("0"+msgDate.getDate()).slice(-2),month=("0"+(msgDate.getMonth()+1)).slice(-2),year=msgDate.getFullYear(),hours=("0"+msgDate.getHours()).slice(-2),minutes=("0"+msgDate.getMinutes()).slice(-2),dateNow=new Date,time=hours+":"+minutes;return dateNow.setHours(0,0,0,0),msgDate.setHours(0,0,0,0),dateNow.getTime()!==msgDate.getTime()?date+"."+month+"."+year+" "+time:time},debug:function(msg,data,level){if(level&&(msg="["+level+"] "+msg),data){jsxc.storage.getItem("debug")===!0&&console.log(msg,data);var d;try{d=$("<span>").prepend($(data).clone()).html()}catch(err){try{d=JSON.stringify(data)}catch(err2){d="see js console"}}jsxc.log=jsxc.log+msg+": "+d+"\n"}else console.log(msg),jsxc.log=jsxc.log+msg+"\n"},warn:function(msg,data){jsxc.debug(msg,data,"WARN")},error:function(msg,data){jsxc.debug(msg,data,"ERROR")},log:"",init:function(options){options&&$.extend(!0,jsxc.options,options),jsxc.options.get=function(key){var local=jsxc.storage.getUserItem("options")||{};return local[key]||jsxc.options[key]},jsxc.options.set=function(key,value){jsxc.storage.updateItem("options",key,value,!0)},jsxc.storageNotConform=jsxc.storage.getItem("storageNotConform"),null===jsxc.storageNotConform&&(jsxc.storageNotConform=2);var lang;if(lang=null!==jsxc.storage.getItem("lang")?jsxc.storage.getItem("lang"):jsxc.options.autoLang&&navigator.language?navigator.language.substr(0,2):jsxc.options.defaultLang,$.i18n.init({lng:lang,fallbackLng:"en",resStore:I18next,useLocalStorage:!0,localStorageExpirationTime:864e5}),"undefined"==typeof localStorage)return void jsxc.debug("Browser doesn't support localStorage.");jsxc.storage.getItem("debug")===!0&&(jsxc.options.otr.debug=!0),window.addEventListener("storage",jsxc.storage.onStorage,!1);var lastActivity=jsxc.storage.getItem("lastActivity")||0;if((new Date).getTime()-lastActivity<jsxc.options.loginTimeout&&(jsxc.restore=!0),$(document).on("connectionReady.jsxc",function(){if(null!==jsxc.options.logoutElement&&jsxc.options.logoutElement.length>0){var logout=function(){return jsxc.options.logoutElement=$(this),jsxc.triggeredFromLogout=!0,jsxc.xmpp.logout()};jsxc.options.logoutElement.off("click",null,logout).one("click",logout)}}),jsxc.storage.getItem("rid")&&jsxc.storage.getItem("sid")&&jsxc.restore)jsxc.bid=jsxc.jidToBid(jsxc.storage.getItem("jid")),jsxc.gui.init(),"undefined"!=typeof jsxc.storage.getItem("alive")&&jsxc.restore?jsxc.checkMaster():jsxc.onMaster();else{if(!jsxc.options.loginForm.form||!(jsxc.el_exists(jsxc.options.loginForm.form)&&jsxc.el_exists(jsxc.options.loginForm.jid)&&jsxc.el_exists(jsxc.options.loginForm.pass)))return void(jsxc.options.displayRosterMinimized()&&(jsxc.storage.setUserItem("roster","hidden"),jsxc.gui.roster.init(),jsxc.gui.roster.noConnection()));"function"==typeof jsxc.options.formFound&&jsxc.options.formFound.call();var form=jsxc.options.loginForm.form=$(jsxc.options.loginForm.form),events=form.data("events")||{submit:[]},submits=[];$.each(events.submit,function(index,val){submits.push(val.handler)}),form.data("submits",submits),form.off("submit"),form.submit(function(){var settings=jsxc.prepareLogin();return settings===!1||"true"!==settings.xmpp.onlogin&&settings.xmpp.onlogin!==!0?!0:(jsxc.options.loginForm.triggered=!0,jsxc.xmpp.login(),!1)})}},prepareLogin:function(){var username=$(jsxc.options.loginForm.jid).val(),password=$(jsxc.options.loginForm.pass).val();if("function"!=typeof jsxc.options.loadSettings)return void jsxc.error("No loadSettings function given. Abort.");jsxc.gui.showWaitAlert($.t("Logging_in"));var settings=jsxc.options.loadSettings.call(this,username,password);if(settings===!1||null===settings||"undefined"==typeof settings)return jsxc.warn("No settings provided"),!1;"string"==typeof settings.xmpp.username&&(username=settings.xmpp.username);var jid,resource=settings.xmpp.resource?"/"+settings.xmpp.resource:"",domain=settings.xmpp.domain;return jid=username.match(/@(.*)$/)?username.match(/\/(.*)$/)?username:username+resource:username+"@"+domain+resource,"function"==typeof jsxc.options.loginForm.preJid&&(jid=jsxc.options.loginForm.preJid(jid)),jsxc.bid=jsxc.jidToBid(jid),settings.xmpp.username=jid.split("@")[0],settings.xmpp.domain=jid.split("@")[1].split("/")[0],settings.xmpp.resource=jid.split("@")[1].split("/")[1]||"",$.each(settings,function(key,val){jsxc.options.set(key,val)}),jsxc.options.xmpp.jid=jid,jsxc.options.xmpp.password=password,settings},onSlave:function(){jsxc.debug("I am the slave."),jsxc.role_allocation=!0,jsxc.restoreRoster(),jsxc.restoreWindows(),jsxc.restoreCompleted=!0,$(document).trigger("restoreCompleted.jsxc")},onMaster:function(){jsxc.debug("I am master."),jsxc.master=!0,jsxc.storage.setItem("alive",0),jsxc.storage.setItem("alive_busy",0),jsxc.storage.getUserItem("windowlist")||jsxc.storage.setUserItem("windowlist",[]),jsxc.startKeepAlive(),jsxc.options.get("otr").enable?jsxc.otr.createDSA():jsxc._onMaster()},_onMaster:function(){if(jsxc.role_allocation&&$.each(jsxc.storage.getUserItem("windowlist"),function(index,val){jsxc.otr.create(val)}),jsxc.role_allocation=!0,jsxc.restore&&!jsxc.restoreCompleted&&(jsxc.restoreRoster(),jsxc.restoreWindows(),jsxc.restoreCompleted=!0,$(document).trigger("restoreCompleted.jsxc")),jsxc.restore){var noti=jsxc.storage.getUserItem("notification");noti="number"==typeof noti?noti:2,jsxc.options.notification&&noti>0&&jsxc.notification.hasSupport()?jsxc.notification.hasPermission()?jsxc.notification.init():jsxc.notification.prepareRequest():jsxc.options.notification=!1}$(document).on("connectionReady.jsxc",function(){jsxc.gui.updateAvatar($("#jsxc_avatar"),jsxc.jidToBid(jsxc.storage.getItem("jid")),"own")}),jsxc.xmpp.login()},checkMaster:function(){jsxc.debug("check master"),jsxc.to=window.setTimeout(jsxc.onMaster,1e3),jsxc.storage.ink("alive")},startKeepAlive:function(){jsxc.keepalive=window.setInterval(jsxc.keepAlive,jsxc.options.timeout-1e3)},keepAlive:function(){jsxc.storage.ink("alive"),jsxc.role_allocation&&jsxc.storage.setItem("lastActivity",(new Date).getTime())},keepBusyAlive:function(){jsxc.toBusy&&window.clearTimeout(jsxc.toBusy),jsxc.keepalive&&window.clearInterval(jsxc.keepalive),jsxc.storage.ink("alive_busy"),jsxc.toBusy=window.setTimeout(jsxc.startKeepAlive,jsxc.options.busyTimeout-1e3)},random:function(max){return Math.floor(Math.random()*max)},el_exists:function(selector){return $(selector).length>0},jidToCid:function(jid){jsxc.warn("jsxc.jidToCid is deprecated!");var cid=Strophe.getBareJidFromJid(jid).replace("@","-").replace(/\./g,"-").toLowerCase();return cid},jidToBid:function(jid){return Strophe.getBareJidFromJid(jid).toLowerCase()},restoreRoster:function(){var buddies=jsxc.storage.getUserItem("buddylist");return buddies&&0!==buddies.length?($.each(buddies,function(index,value){jsxc.gui.roster.add(value)}),void $(document).trigger("cloaded.roster.jsxc")):(jsxc.debug("No saved buddylist."),void jsxc.gui.roster.empty())},restoreWindows:function(){var windows=jsxc.storage.getUserItem("windowlist");null!==windows&&$.each(windows,function(index,bid){var window=jsxc.storage.getUserItem("window",bid);return window?(jsxc.gui.window.init(bid),window.minimize?jsxc.gui.window.hide(bid):jsxc.gui.window.show(bid),void jsxc.gui.window.setText(bid,window.text)):(jsxc.debug("Associated window-element is missing: "+bid),!0)})},submitLoginForm:function(){var form=jsxc.options.loginForm.form.off("submit"),submits=form.data("submits")||[];$.each(submits,function(index,val){form.submit(val)}),form.find("#submit").length>0?form.find("#submit").click():form.submit()},escapeHTML:function(text){return text=text.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">"),text.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},removeHTML:function(text){return $("<span>").html(text).text()},switchEvents:function(obj){var ns=Math.random().toString(36).substr(2,12),self=this;return $.each(obj,function(key,val){$(document).one(key+"."+ns,function(){$(document).off("."+ns),val.apply(self,arguments)})}),ns},isHidden:function(){var hidden=!1;return"undefined"!=typeof document.hidden?hidden=document.hidden:"undefined"!=typeof document.webkitHidden?hidden=document.webkitHidden:"undefined"!=typeof document.mozHidden?hidden=document.mozHidden:"undefined"!=typeof document.msHidden&&(hidden=document.msHidden),hidden&&jsxc.master?jsxc.storage.ink("hidden",0):hidden||jsxc.master||jsxc.storage.ink("hidden"),hidden},hasFocus:function(){var focus=!0;return"function"==typeof document.hasFocus&&(focus=document.hasFocus()),!focus&&jsxc.master?jsxc.storage.ink("focus",0):focus&&!jsxc.master&&jsxc.storage.ink("focus"),focus},exec:function(fnName,fnParams){var i,fnList=fnName.split("."),fn=jsxc[fnList[0]];for(i=1;i<fnList.length;i++)fn=fn[fnList[i]];return"function"==typeof fn?fn.apply(null,fnParams):void 0},hashStr:function(str){var i,hash=0;if(0===str.length)return hash;for(i=0;i<str.length;i++)hash=(hash<<5)-hash+str.charCodeAt(i),hash|=0;return hash}},jsxc.gui={emotions:[["O:-) O:)","angel"],[">:-( >:( &gt;:-( &gt;:(","angry"],[":-) :)","smile"],[":-D :D","grin"],[":-( :(","sad"],[";-) ;)","wink"],[":-P :P","tonguesmile"],["=-O","surprised"],[":kiss: :-*","kiss"],["8-) :cool:","sunglassess"],[":'-( :'( :&amp;apos;-(","crysad"],[":-/","doubt"],[":-X :X","zip"],[":yes:","thumbsup"],[":no:","thumbsdown"],[":beer:","beer"],[":devil:","devil"],[":kiss: :kissing:","kissing"],["@->-- :rose: @-&gt;--","rose"],[":music:","music"],[":love:","love"],[":zzz:","tired"]],queryActions:{message:function(jid,params){var win=jsxc.gui.window.open(jsxc.jidToBid(jid));params&&"string"==typeof params.body&&win.find(".jsxc_textinput").val(params.body)},remove:function(jid){jsxc.gui.showRemoveDialog(jsxc.jidToBid(jid))},subscribe:function(jid,params){jsxc.gui.showContactDialog(jid),params&&$("#jsxc_alias").val(params.name)},vcard:function(jid){jsxc.gui.showVcard(jid)}},init:function(){$("#jsxc_windowList").length>0||($("body").append($(jsxc.gui.template.get("windowList"))),$(window).resize(jsxc.gui.updateWindowListSB),$("#jsxc_windowList").resize(jsxc.gui.updateWindowListSB),$("#jsxc_windowListSB .jsxc_scrollLeft").click(function(){jsxc.gui.scrollWindowListBy(-200)}),$("#jsxc_windowListSB .jsxc_scrollRight").click(function(){jsxc.gui.scrollWindowListBy(200)}),$("#jsxc_windowList").on("wheel",function(ev){$("#jsxc_windowList").data("isOver")&&jsxc.gui.scrollWindowListBy(ev.originalEvent.wheelDelta>0?200:-200)}),jsxc.gui.tooltip("#jsxc_windowList"),jsxc.el_exists("#jsxc_roster")||jsxc.gui.roster.init(),$.each(jsxc.gui.emotions,function(i,val){var reg=val[0].replace(/(\/|\||\*|\.|\+|\?|\^|\$|\(|\)|\[|\]|\{|\})/g,"\\$1");reg="("+reg.split(" ").join("|")+")",jsxc.gui.emotions[i][2]=new RegExp(reg,"g")}),jsxc.gui.windowTemplate=$(jsxc.gui.template.get("chatWindow")),jsxc.gui.buddyTemplate=$(jsxc.gui.template.get("rosterBuddy")))},tooltip:function(selector){$(selector).tooltip({show:{delay:600},content:function(){return $(this).attr("title").replace(/\n/g,"<br />")}})},update:function(bid){var data=jsxc.storage.getUserItem("buddy",bid);if(!data)return void jsxc.debug("No data for "+bid);var ri=jsxc.gui.roster.getItem(bid),we=jsxc.gui.window.get(bid),ue=ri.add(we),spot=$('.jsxc_spot[data-bid="'+bid+'"]');switch(ri.data(data),ue.add(spot).removeClass("jsxc_"+jsxc.CONST.STATUS.join(" jsxc_")).addClass("jsxc_"+jsxc.CONST.STATUS[data.status]),ue.find(".jsxc_name:first").add(spot).text(data.name).attr("title",$.t("is")+" "+jsxc.CONST.STATUS[data.status]),data.msgstate){case 0:we.find(".jsxc_transfer").removeClass("jsxc_enc jsxc_fin").attr("title",$.t("your_connection_is_unencrypted")),we.find(".jsxc_settings .jsxc_verification").addClass("jsxc_disabled"),we.find(".jsxc_settings .jsxc_transfer").text($.t("start_private"));break;case 1:we.find(".jsxc_transfer").addClass("jsxc_enc").attr("title",$.t("your_connection_is_encrypted")),we.find(".jsxc_settings .jsxc_verification").removeClass("jsxc_disabled"),we.find(".jsxc_settings .jsxc_transfer").text($.t("close_private"));break;case 2:we.find(".jsxc_settings .jsxc_verification").addClass("jsxc_disabled"),we.find(".jsxc_transfer").removeClass("jsxc_enc").addClass("jsxc_fin").attr("title",$.t("your_buddy_closed_the_private_connection")),we.find(".jsxc_settings .jsxc_transfer").text($.t("close_private"))}data.trust?we.find(".jsxc_transfer").addClass("jsxc_trust").attr("title",$.t("your_buddy_is_verificated")):we.find(".jsxc_transfer").removeClass("jsxc_trust"),data.sub&&"both"!==data.sub?ue.addClass("jsxc_oneway"):ue.removeClass("jsxc_oneway");var info="<b>"+Strophe.getBareJidFromJid(data.jid)+"</b>\n";info+=$.t("Subscription")+": "+$.t(data.sub)+"\n",info+=$.t("Status")+": "+$.t(jsxc.CONST.STATUS[data.status]),ri.find(".jsxc_name").attr("title",info),jsxc.gui.updateAvatar(ri.add(we.find(".jsxc_bar")),data.jid,data.avatar)},updateAvatar:function(el,jid,aid){var setAvatar=function(src){return 0===src||"0"===src?"function"==typeof jsxc.options.defaultAvatar?void jsxc.options.defaultAvatar.call(el,jid):void jsxc.gui.avatarPlaceholder(el.find(".jsxc_avatar"),jid):(el.find(".jsxc_avatar").removeAttr("style"),void el.find(".jsxc_avatar").css({"background-image":"url("+src+")","text-indent":"999px"}))};if("undefined"==typeof aid)return void setAvatar(0);var avatarSrc=jsxc.storage.getUserItem("avatar",aid);null!==avatarSrc?setAvatar(avatarSrc):jsxc.xmpp.conn.vcard.get(function(stanza){jsxc.debug("vCard",stanza);var src,vCard=$(stanza).find("vCard > PHOTO");if(0===vCard.length)jsxc.debug("No photo provided"),src="0";else if(vCard.find("EXTVAL").length>0)src=vCard.find("EXTVAL").text();else{var img=vCard.find("BINVAL").text(),type=vCard.find("TYPE").text();src="data:"+type+";base64,"+img}src=src.replace(/[\t\r\n\f]/gi,""),jsxc.storage.setUserItem("avatar",aid,src),setAvatar(src)},Strophe.getBareJidFromJid(jid),function(msg){jsxc.warn("Could not load vcard.",msg),jsxc.storage.setUserItem("avatar",aid,0),setAvatar(0)})},updateWindowListSB:function(){$("#jsxc_windowList>ul").width()>$("#jsxc_windowList").width()?$("#jsxc_windowListSB > div").removeClass("jsxc_disabled"):($("#jsxc_windowListSB > div").addClass("jsxc_disabled"),$("#jsxc_windowList>ul").css("right","0px"))},scrollWindowListBy:function(offset){var scrollWidth=$("#jsxc_windowList>ul").width(),width=$("#jsxc_windowList").width(),el=$("#jsxc_windowList>ul"),right=parseInt(el.css("right"))-offset,padding=$("#jsxc_windowListSB").width();width>scrollWidth||(right>0&&(right=0),width-scrollWidth-padding>right&&(right=width-scrollWidth-padding),el.css("right",right+"px"))},getWindow:function(bid){return jsxc.warn("jsxc.gui.getWindow is deprecated!"),jsxc.gui.window.get(bid)},toggleList:function(){var self=$(this);self.disableSelection();var ul=self.find("ul"),slideUp=null;slideUp=function(){ul.slideUp({complete:function(){self.removeClass("jsxc_opened")}}),$("body").off("click",null,slideUp)},$(this).click(function(){return ul.is(":hidden")?($("body").click(),$("body").one("click",slideUp)):$("body").off("click",null,slideUp),ul.slideToggle(),window.clearTimeout(ul.data("timer")),self.toggleClass("jsxc_opened"),!1}).mouseleave(function(){ul.data("timer",window.setTimeout(slideUp,2e3))}).mouseenter(function(){window.clearTimeout(ul.data("timer"))})},showLoginBox:function(){$(document).on("complete.dialog.jsxc",function(){$("#jsxc_password").focus()}),jsxc.gui.dialog.open(jsxc.gui.template.get("loginBox")),$("#jsxc_dialog").find("form").submit(function(){$(this).find("input[type=submit]").prop("disabled",!0),jsxc.options.loginForm.form=$(this),jsxc.options.loginForm.jid=$(this).find("#jsxc_username"),jsxc.options.loginForm.pass=$(this).find("#jsxc_password");var settings=jsxc.prepareLogin();return jsxc.triggeredFromBox=!0,jsxc.options.loginForm.triggered=!1,settings===!1?jsxc.gui.showAuthFail():jsxc.xmpp.login(),!1})},showFingerprints:function(bid){jsxc.gui.dialog.open(jsxc.gui.template.get("fingerprintsDialog",bid))},showVerification:function(bid){return $("#jsxc_dialog").length>0?void setTimeout(function(){jsxc.gui.showVerification(bid)},3e3):jsxc.storage.getUserItem("buddy",bid).msgstate!==OTR.CONST.MSGSTATE_ENCRYPTED?void jsxc.warn("Connection not encrypted"):(jsxc.gui.dialog.open(jsxc.gui.template.get("authenticationDialog",bid)),$("#jsxc_dialog > div:gt(0)").hide(),$("#jsxc_dialog select").change(function(){$("#jsxc_dialog > div:gt(0)").hide(),$("#jsxc_dialog > div:eq("+$(this).prop("selectedIndex")+")").slideDown({complete:function(){jsxc.gui.dialog.resize()}})}),$("#jsxc_dialog > div:eq(1) a.creation").click(function(){jsxc.master&&(jsxc.otr.objects[bid].trust=!0),jsxc.storage.updateUserItem("buddy",bid,"trust",!0),jsxc.gui.dialog.close(),jsxc.storage.updateUserItem("buddy",bid,"trust",!0),jsxc.gui.window.postMessage(bid,"sys",$.t("conversation_is_now_verified")),jsxc.gui.update(bid)}),$("#jsxc_dialog > div:eq(2) a.creation").click(function(){var div=$("#jsxc_dialog > div:eq(2)"),sec=div.find("#jsxc_secret2").val(),quest=div.find("#jsxc_quest").val();return""===sec||""===quest?void div.find('input[value=""]').addClass("jsxc_invalid").keyup(function(){$(this).val().match(/.*/)&&$(this).removeClass("jsxc_invalid")}):(jsxc.master?jsxc.otr.sendSmpReq(bid,sec,quest):jsxc.storage.setUserItem("smp_"+bid,{sec:sec,quest:quest}),jsxc.gui.dialog.close(),void jsxc.gui.window.postMessage(bid,"sys",$.t("authentication_query_sent")))}),void $("#jsxc_dialog > div:eq(3) .creation").click(function(){var div=$("#jsxc_dialog > div:eq(3)"),sec=div.find("#jsxc_secret").val();return""===sec?void div.find("#jsxc_secret").addClass("jsxc_invalid").keyup(function(){$(this).val().match(/.*/)&&$(this).removeClass("jsxc_invalid")}):(jsxc.master?jsxc.otr.sendSmpReq(bid,sec):jsxc.storage.setUserItem("smp_"+bid,{sec:sec,quest:null}),jsxc.gui.dialog.close(),void jsxc.gui.window.postMessage(bid,"sys",$.t("authentication_query_sent")))}))},showApproveDialog:function(from){jsxc.gui.dialog.open(jsxc.gui.template.get("approveDialog"),{noClose:!0}),$("#jsxc_dialog .jsxc_their_jid").text(Strophe.getBareJidFromJid(from)),$("#jsxc_dialog .jsxc_deny").click(function(ev){ev.stopPropagation(),jsxc.xmpp.resFriendReq(from,!1),jsxc.gui.dialog.close()}),$("#jsxc_dialog .jsxc_approve").click(function(ev){ev.stopPropagation();var data=jsxc.storage.getUserItem("buddy",jsxc.jidToBid(from));jsxc.xmpp.resFriendReq(from,!0),data&&"from"!==data.sub||$(document).one("close.dialog.jsxc",function(){jsxc.gui.showContactDialog(from)}),jsxc.gui.dialog.close()})},showContactDialog:function(username){jsxc.gui.dialog.open(jsxc.gui.template.get("contactDialog")),username&&$("#jsxc_username").val(username),$("#jsxc_username").keyup(function(){if("function"==typeof jsxc.options.getUsers){var val=$(this).val();$("#jsxc_userlist").empty(),""!==val&&jsxc.options.getUsers.call(this,val,function(list){$.each(list||{},function(uid,displayname){var option=$("<option>");option.attr("data-username",uid),option.attr("data-alias",displayname),option.attr("value",uid).appendTo("#jsxc_userlist"),uid!==displayname&&option.clone().attr("value",displayname).appendTo("#jsxc_userlist")})})}}),$("#jsxc_username").on("input",function(){var val=$(this).val(),option=$("#jsxc_userlist").find('option[data-username="'+val+'"], option[data-alias="'+val+'"]');option.length>0&&($("#jsxc_username").val(option.attr("data-username")),$("#jsxc_alias").val(option.attr("data-alias")))}),$("#jsxc_dialog form").submit(function(){var username=$("#jsxc_username").val(),alias=$("#jsxc_alias").val();return username.match(/@(.*)$/)||(username+="@"+Strophe.getDomainFromJid(jsxc.storage.getItem("jid"))),username&&username.match(jsxc.CONST.REGEX.JID)?(jsxc.xmpp.addBuddy(username,alias),jsxc.gui.dialog.close(),!1):($("#jsxc_username").addClass("jsxc_invalid").keyup(function(){$(this).val().match(jsxc.CONST.REGEX.JID)&&$(this).removeClass("jsxc_invalid")}),!1)})},showRemoveDialog:function(bid){jsxc.gui.dialog.open(jsxc.gui.template.get("removeDialog",bid));var data=jsxc.storage.getUserItem("buddy",bid);$("#jsxc_dialog .creation").click(function(ev){ev.stopPropagation(),jsxc.master?jsxc.xmpp.removeBuddy(data.jid):jsxc.storage.setUserItem("deletebuddy",bid,{jid:data.jid}),jsxc.gui.dialog.close()})},showWaitAlert:function(msg){jsxc.gui.dialog.open(jsxc.gui.template.get("waitAlert",null,msg),{noClose:!0})},showAlert:function(msg){jsxc.gui.dialog.open(jsxc.gui.template.get("alert",null,msg))},showAuthFail:function(){jsxc.gui.dialog.open(jsxc.gui.template.get("authFailDialog")),jsxc.options.loginForm.triggered!==!1&&$("#jsxc_dialog .jsxc_cancel").hide(),$("#jsxc_dialog .creation").click(function(){jsxc.gui.dialog.close()}),$("#jsxc_dialog .jsxc_cancel").click(function(){jsxc.submitLoginForm()})},showConfirmDialog:function(msg,confirm,dismiss){jsxc.gui.dialog.open(jsxc.gui.template.get("confirmDialog",null,msg),{noClose:!0}),confirm&&$("#jsxc_dialog .creation").click(confirm),dismiss&&$("#jsxc_dialog .jsxc_cancel").click(dismiss)},showAboutDialog:function(){jsxc.gui.dialog.open(jsxc.gui.template.get("aboutDialog")),$("#jsxc_dialog .jsxc_debuglog").click(function(){jsxc.gui.showDebugLog()})},showDebugLog:function(){var userInfo="<h3>User information</h3>";if(navigator){var key;for(key in navigator)navigator.hasOwnProperty(key)&&"string"==typeof navigator[key]&&(userInfo+="<b>"+key+":</b> "+navigator[key]+"<br />")}window.screen&&(userInfo+="<b>Height:</b> "+window.screen.height+"<br />",userInfo+="<b>Width:</b> "+window.screen.width+"<br />"),userInfo+="<b>jsxc version:</b> "+jsxc.version+"<br />",jsxc.gui.dialog.open('<div class="jsxc_log">'+userInfo+"<h3>Log</h3><pre>"+jsxc.escapeHTML(jsxc.log)+"</pre></div>")},showVcard:function(jid){var bid=jsxc.jidToBid(jid);jsxc.gui.dialog.open(jsxc.gui.template.get("vCard",bid));var data=jsxc.storage.getUserItem("buddy",bid);if(data){var i,j,res,identities,cap,client,identity=null;for(i=0;i<data.res.length;i++){for(res=data.res[i],identities=[],cap=jsxc.xmpp.getCapabilitiesByJid(bid+"/"+res),null!==cap&&null!==cap.identities&&(identities=cap.identities),client="",j=0;j<identities.length;j++)identity=identities[j],"client"===identity.category&&(""!==client&&(client+=",\n"),client+=identity.name+" ("+identity.type+")");var status=jsxc.storage.getUserItem("res",bid)[res];$("#jsxc_dialog ul.jsxc_vCard").append('<li class="jsxc_sep"><strong>'+$.t("Resource")+":</strong> "+res+"</li>"),$("#jsxc_dialog ul.jsxc_vCard").append("<li><strong>"+$.t("Client")+":</strong> "+client+"</li>"),$("#jsxc_dialog ul.jsxc_vCard").append("<li><strong>"+$.t("Status")+":</strong> "+$.t(jsxc.CONST.STATUS[status])+"</li>")}}var printProp=function(el,depth){var content="";return el.each(function(){var item=$(this),children=$(this).children();content+="<li>";var prop=$.t(item[0].tagName);" "!==prop&&(content+="<strong>"+prop+":</strong> "),"PHOTO"===item[0].tagName||(children.length>0?(content+="<ul>",content+=printProp(children,depth+1),content+="</ul>"):""!==item.text()&&(content+=jsxc.escapeHTML(item.text()))),content+="</li>",0===depth&&$("#jsxc_dialog ul.jsxc_vCard").length>0&&($("#jsxc_dialog ul.jsxc_vCard li.jsxc_sep:first").length>0?$("#jsxc_dialog ul.jsxc_vCard li.jsxc_sep:first").before(content):$("#jsxc_dialog ul.jsxc_vCard").append(content),content="")}),depth>0?content:void 0},failedToLoad=function(){if(0!==$("#jsxc_dialog ul.jsxc_vCard").length){$("#jsxc_dialog p").remove();var content="<p>";content+=$.t("Sorry_your_buddy_doesnt_provide_any_information"),content+="</p>",$("#jsxc_dialog").append(content)}};jsxc.xmpp.loadVcard(bid,function(stanza){if(0!==$("#jsxc_dialog ul.jsxc_vCard").length){$("#jsxc_dialog p").remove();var photo=$(stanza).find("vCard > PHOTO");if(photo.length>0){var img=photo.find("BINVAL").text(),type=photo.find("TYPE").text(),src="data:"+type+";base64,"+img;photo.find("EXTVAL").length>0&&(src=photo.find("EXTVAL").text()),src=src.replace(/[\t\r\n\f]/gi,"");var img_el=$('<img class="jsxc_vCard" alt="avatar" />');img_el.attr("src",src),$("#jsxc_dialog h3").before(img_el)}return 0===$(stanza).find("vCard").length||1===$(stanza).find("vcard > *").length&&1===photo.length?void failedToLoad():void printProp($(stanza).find("vcard > *"),0)}},failedToLoad)},showSettings:function(){jsxc.gui.dialog.open(jsxc.gui.template.get("settings")),("false"===jsxc.options.get("xmpp").overwrite||jsxc.options.get("xmpp").overwrite===!1)&&$(".jsxc_fieldsetXmpp").hide(),$("#jsxc_dialog form").each(function(){var self=$(this);self.find('input[type!="submit"]').each(function(){var id=this.id.split("-"),prop=id[0],key=id[1],type=this.type,data=jsxc.options.get(prop);data&&"undefined"!=typeof data[key]&&("checkbox"===type?"false"!==data[key]&&data[key]!==!1&&(this.checked="checked"):$(this).val(data[key]))})}),$("#jsxc_dialog form").submit(function(){var self=$(this),data={};self.find('input[type!="submit"]').each(function(){var val,id=this.id.split("-"),prop=id[0],key=id[1],type=this.type;val="checkbox"===type?this.checked:$(this).val(),data[prop]||(data[prop]={}),data[prop][key]=val}),$.each(data,function(key,val){jsxc.options.set(key,val)});var err=jsxc.options.saveSettinsPermanent.call(this,data);return"string"==typeof self.attr("data-onsubmit")&&jsxc.exec(self.attr("data-onsubmit"),[err]),setTimeout(function(){self.find('input[type="submit"]').effect("highlight",{color:err?"green":"red"},4e3)},200),!1})},showRequestNotification:function(){jsxc.switchEvents({"notificationready.jsxc":function(){jsxc.gui.dialog.close(),jsxc.notification.init(),jsxc.storage.setUserItem("notification",1)},"notificationfailure.jsxc":function(){jsxc.gui.dialog.close(),jsxc.options.notification=!1,jsxc.storage.setUserItem("notification",0)}}),jsxc.gui.showConfirmDialog($.t("Should_we_notify_you_"),function(){jsxc.gui.dialog.open(jsxc.gui.template.get("pleaseAccept"),{noClose:!0}),jsxc.notification.requestPermission()},function(){$(document).trigger("notificationfailure.jsxc")})},showUnknownSender:function(bid){var confirmationText=$.t("You_received_a_message_from_an_unknown_sender")+" ("+bid+"). "+$.t("Do_you_want_to_display_them");jsxc.gui.showConfirmDialog(confirmationText,function(){jsxc.gui.dialog.close(),jsxc.storage.saveBuddy(bid,{jid:bid,name:bid,status:0,sub:"none",res:[]}),jsxc.gui.window.open(bid)},function(){jsxc.storage.removeUserItem("chat",bid)})},changePresence:function(pres,external){external!==!0&&jsxc.storage.setUserItem("presence",pres),jsxc.master&&jsxc.xmpp.sendPres(),$("#jsxc_presence > span").text($("#jsxc_presence > ul .jsxc_"+pres).text()),jsxc.gui.updatePresence("own",pres)},updatePresence:function(bid,pres){"own"===bid&&("dnd"===pres?($("#jsxc_menu .jsxc_muteNotification").addClass("jsxc_disabled"),jsxc.notification.muteSound(!0)):($("#jsxc_menu .jsxc_muteNotification").removeClass("jsxc_disabled"),jsxc.options.get("muteNotification")||jsxc.notification.unmuteSound(!0))),$('.jsxc_presence[data-bid="'+bid+'"]').removeClass("jsxc_"+jsxc.CONST.STATUS.join(" jsxc_")).addClass("jsxc_"+pres)},unreadMsg:function(bid){var win=jsxc.gui.window.get(bid);jsxc.gui.roster.getItem(bid).add(win).addClass("jsxc_unreadMsg"),jsxc.storage.updateUserItem("window",bid,"unread",!0)},readMsg:function(bid){var win=jsxc.gui.window.get(bid);win.hasClass("jsxc_unreadMsg")&&(jsxc.gui.roster.getItem(bid).add(win).removeClass("jsxc_unreadMsg"),jsxc.storage.updateUserItem("window",bid,"unread",!1))},detectUriScheme:function(container){container=$(container?container:"body"),container.find("a[href^='xmpp:']").each(function(){var action,element=$(this),href=element.attr("href").replace(/^xmpp:/,""),jid=href.split("?")[0],params={};if(href.indexOf("?")<0)action="message";else{var pairs=href.substring(href.indexOf("?")+1).split(";");action=pairs[0];var i,key,value;for(i=1;i<pairs.length;i++)key=pairs[i].split("=")[0],value=pairs[i].indexOf("=")>0?pairs[i].substring(pairs[i].indexOf("=")+1):null,params[decodeURIComponent(key)]=decodeURIComponent(value)}"function"==typeof jsxc.gui.queryActions[action]&&(element.addClass("jsxc_uriScheme jsxc_uriScheme_"+action),element.off("click").click(function(ev){return ev.stopPropagation(),jsxc.gui.queryActions[action].call(jsxc,jid,params),!1}))})},detectEmail:function(container){container=$(container?container:"body"),container.find('a[href^="mailto:"]').each(function(){var spot=$("<span>X</span>").addClass("jsxc_spot"),href=$(this).attr("href").replace(/^ *mailto:/,"").trim();if(""!==href&&href!==Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))){var bid=jsxc.jidToBid(href),self=$(this),s=self.prev();s.hasClass("jsxc_spot")||(s=spot.clone().attr("data-bid",bid),self.before(s)),s.off("click"),jsxc.storage.getUserItem("buddy",bid)?(jsxc.gui.update(bid),s.click(function(){return jsxc.gui.window.open(bid),!1})):s.click(function(){return jsxc.gui.showContactDialog(href),!1})}})},avatarPlaceholder:function(el,seed,text){text=text||seed;var options=jsxc.options.get("avatarplaceholder")||{},hash=jsxc.hashStr(seed),hue=Math.abs(hash)%360,saturation=options.saturation||90,lightness=options.lightness||65;el.css({"background-color":"hsl("+hue+", "+saturation+"%, "+lightness+"%)",color:"#fff","font-weight":"bold","text-align":"center","line-height":el.height()+"px","font-size":.6*el.height()+"px"}),"string"==typeof text&&text.length>0&&el.text(text[0].toUpperCase())}},jsxc.gui.roster={ready:!1,init:function(){$(jsxc.options.rosterAppend+":first").append($(jsxc.gui.template.get("roster"))),jsxc.options.get("hideOffline")&&($("#jsxc_menu .jsxc_hideOffline").text($.t("Show_offline")),$("#jsxc_buddylist").addClass("jsxc_hideOffline")),$("#jsxc_menu .jsxc_settings").click(function(){jsxc.gui.showSettings()}),$("#jsxc_menu .jsxc_hideOffline").click(function(){var hideOffline=!jsxc.options.get("hideOffline");hideOffline?$("#jsxc_buddylist").addClass("jsxc_hideOffline"):$("#jsxc_buddylist").removeClass("jsxc_hideOffline"),$(this).text($.t(hideOffline?"Show_offline":"Hide_offline")),jsxc.options.set("hideOffline",hideOffline)}),jsxc.options.get("muteNotification")&&jsxc.notification.muteSound(),$("#jsxc_menu .jsxc_muteNotification").click(function(){if("dnd"!==jsxc.storage.getUserItem("presence")){var mute=!jsxc.options.get("muteNotification");mute?jsxc.notification.muteSound():jsxc.notification.unmuteSound()}}),$("#jsxc_roster .jsxc_addBuddy").click(function(){jsxc.gui.showContactDialog()}),$("#jsxc_roster .jsxc_onlineHelp").click(function(){window.open("http://www.jsxc.org/manual.html","onlineHelp")}),$("#jsxc_roster .jsxc_about").click(function(){jsxc.gui.showAboutDialog()}),$("#jsxc_toggleRoster").click(function(){jsxc.gui.roster.toggle()}),$("#jsxc_presence > ul > li").click(function(){var self=$(this),pres=self.data("pres");"offline"===pres?jsxc.xmpp.logout(!1):jsxc.gui.changePresence(pres)}),$("#jsxc_buddylist").slimScroll({distance:"3px",height:$("#jsxc_roster").height()-31+"px",width:$("#jsxc_buddylist").width()+"px",color:"#fff",opacity:"0.5"}),$("#jsxc_roster > .jsxc_bottom > div").each(function(){jsxc.gui.toggleList.call($(this))}),"hidden"===jsxc.storage.getUserItem("roster")&&($("#jsxc_roster").css("right","-200px"),
-$("#jsxc_windowList > ul").css("paddingRight","10px"));var pres=jsxc.storage.getUserItem("presence")||"online";$("#jsxc_presence > span").text($("#jsxc_presence > ul .jsxc_"+pres).text()),jsxc.gui.updatePresence("own",pres),jsxc.gui.tooltip("#jsxc_roster"),jsxc.notice.load(),jsxc.gui.roster.ready=!0,$(document).trigger("ready.roster.jsxc")},add:function(bid){var data=jsxc.storage.getUserItem("buddy",bid),bud=jsxc.gui.buddyTemplate.clone().attr("data-bid",bid).attr("data-type",data.type||"chat");jsxc.gui.roster.insert(bid,bud),bud.click(function(){jsxc.gui.window.open(bid)}),bud.find(".jsxc_chaticon").click(function(){jsxc.gui.window.open(bid)}),bud.find(".jsxc_rename").click(function(){return jsxc.gui.roster.rename(bid),!1}),bud.find(".jsxc_delete").click(function(){return jsxc.gui.showRemoveDialog(bid),!1});var expandClick=function(){return bud.trigger("extra.jsxc"),bud.toggleClass("jsxc_expand"),jsxc.gui.updateAvatar(bud,data.jid,data.avatar),!1};bud.find(".jsxc_control").click(expandClick),bud.dblclick(expandClick),bud.find(".jsxc_vcardicon").click(function(){return jsxc.gui.showVcard(data.jid),!1}),jsxc.gui.update(bid),$("#jsxc_buddylist").slimScroll({scrollTo:"0px"}),$(document).trigger("add.roster.jsxc",[bid,data,bud])},getItem:function(bid){return $("#jsxc_buddylist > li[data-bid='"+bid+"']")},insert:function(bid,li){var data=jsxc.storage.getUserItem("buddy",bid),listElements=$("#jsxc_buddylist > li"),insert=!1,status="both"===data.sub?data.status:-1;listElements.each(function(){var thisStatus="both"===$(this).data("sub")?$(this).data("status"):-1;return $(this).data("name").toLowerCase()>data.name.toLowerCase()&&thisStatus===status||status>thisStatus?($(this).before(li),insert=!0,!1):void 0}),insert||li.appendTo("#jsxc_buddylist")},reorder:function(bid){jsxc.gui.roster.insert(bid,jsxc.gui.roster.remove(bid))},remove:function(bid){return jsxc.gui.roster.getItem(bid).detach()},purge:function(bid){jsxc.master&&(jsxc.storage.removeUserItem("buddy",bid),jsxc.storage.removeUserItem("otr",bid),jsxc.storage.removeUserItem("otr_version_"+bid),jsxc.storage.removeUserItem("chat",bid),jsxc.storage.removeUserItem("window",bid),jsxc.storage.removeUserElement("buddylist",bid),jsxc.storage.removeUserElement("windowlist",bid)),jsxc.gui.window._close(bid),jsxc.gui.roster.remove(bid)},rename:function(bid){var name=jsxc.gui.roster.getItem(bid).find(".jsxc_name"),options=jsxc.gui.roster.getItem(bid).find(".jsxc_options, .jsxc_control"),input=$('<input type="text" name="name"/>');options.hide(),name=name.replaceWith(input),input.val(name.text()),input.keypress(function(ev){13===ev.which&&(options.show(),input.replaceWith(name),jsxc.gui.roster._rename(bid,$(this).val()),$("html").off("click"))}),input.click(function(){return!1}),$("html").one("click",function(){options.show(),input.replaceWith(name),jsxc.gui.roster._rename(bid,input.val())})},_rename:function(bid,newname){if(jsxc.master){var d=jsxc.storage.getUserItem("buddy",bid);if("chat"===d.type){var iq=$iq({type:"set"}).c("query",{xmlns:"jabber:iq:roster"}).c("item",{jid:Strophe.getBareJidFromJid(d.jid),name:newname});jsxc.xmpp.conn.sendIQ(iq)}}jsxc.storage.updateUserItem("buddy",bid,"name",newname),jsxc.gui.update(bid)},toggle:function(d){var duration=d||500,roster=$("#jsxc_roster"),wl=$("#jsxc_windowList"),roster_width=roster.innerWidth(),roster_right=parseFloat($("#jsxc_roster").css("right")),state=0>roster_right?"shown":"hidden";jsxc.storage.setUserItem("roster",state),roster.animate({right:-1*(roster_width+roster_right)+"px"},duration),wl.animate({right:10-roster_right+"px"},duration),$(document).trigger("toggle.roster.jsxc",[state,duration])},noConnection:function(){$("#jsxc_roster").addClass("jsxc_noConnection"),$("#jsxc_buddylist").empty(),$("#jsxc_roster").append($("<p>"+$.t("no_connection")+"</p>").append(" <a>"+$.t("relogin")+"</a>").click(function(){jsxc.gui.showLoginBox()}))},empty:function(){var text=$("<p>"+$.t("Your_roster_is_empty_add_a")+"</p>"),link=$("<a>"+$.t("new_buddy")+"</a>");link.click(function(){jsxc.gui.showContactDialog()}),text.append(link),text.append("."),$("#jsxc_roster").prepend(text)}},jsxc.gui.dialog={open:function(data,o){var opt=o||{},options={};return options={onComplete:function(){$("#jsxc_dialog .jsxc_close").click(function(ev){ev.preventDefault(),jsxc.gui.dialog.close()}),options.closeButton===!1&&$("#cboxClose").hide(),jsxc.gui.dialog.resize(),$(document).trigger("complete.dialog.jsxc")},onClosed:function(){$(document).trigger("close.dialog.jsxc")},onCleanup:function(){$(document).trigger("cleanup.dialog.jsxc")},opacity:.5},opt.noClose&&(options.overlayClose=!1,options.escKey=!1,options.closeButton=!1,delete opt.noClose),$.extend(options,opt),options.html='<div id="jsxc_dialog">'+data+"</div>",$.colorbox(options),$("#jsxc_dialog")},close:function(){jsxc.debug("close dialog"),$.colorbox.close()},resize:function(options){options=$.extend({innerWidth:$("#jsxc_dialog").outerWidth(),innerHeight:$("#jsxc_dialog").outerHeight()},options||{}),$("#cboxLoadedContent").css("overflow","hidden"),$.colorbox.resize(options)}},jsxc.gui.window={init:function(bid){if(jsxc.gui.window.get(bid).length>0)return jsxc.gui.window.get(bid);var win=jsxc.gui.windowTemplate.clone().attr("data-bid",bid).hide().appendTo("#jsxc_windowList > ul").show("slow"),data=jsxc.storage.getUserItem("buddy",bid);if(win.data("jid",data.jid),jsxc.gui.toggleList.call(win.find(".jsxc_settings")),win.find(".jsxc_verification").click(function(){jsxc.gui.showVerification(bid)}),win.find(".jsxc_fingerprints").click(function(){jsxc.gui.showFingerprints(bid)}),win.find(".jsxc_transfer").click(function(){jsxc.otr.toggleTransfer(bid)}),win.find(".jsxc_bar").click(function(){jsxc.gui.window.toggle(bid)}),win.find(".jsxc_close").click(function(){jsxc.gui.window.close(bid)}),win.find(".jsxc_clear").click(function(){jsxc.gui.window.clear(bid)}),win.find(".jsxc_tools").click(function(){return!1}),win.find(".jsxc_textinput").keyup(function(ev){var body=$(this).val();13===ev.which&&(body=""),jsxc.storage.updateUserItem("window",bid,"text",body),27===ev.which&&jsxc.gui.window.close(bid)}).keypress(function(ev){13===ev.which&&$(this).val()&&(jsxc.gui.window.postMessage(bid,"out",$(this).val()),$(this).val(""))}).focus(function(){jsxc.gui.readMsg(bid)}).mouseenter(function(){$("#jsxc_windowList").data("isOver",!0)}).mouseleave(function(){$("#jsxc_windowList").data("isOver",!1)}),win.find(".jsxc_textarea").click(function(){"function"!=typeof getSelection||getSelection().toString()||win.find(".jsxc_textinput").focus()}),win.find(".jsxc_textarea").slimScroll({height:"234px",distance:"3px"}),win.find(".jsxc_fade").hide(),win.find(".jsxc_name").disableSelection(),win.find(".slimScrollDiv").resizable({handles:"w, nw, n",minHeight:234,minWidth:250,resize:function(event,ui){win.width(ui.size.width),win.find(".jsxc_textarea").slimScroll({height:ui.size.height});var offset=win.find(".slimScrollDiv").position().top;win.find(".jsxc_emoticons").css("top",ui.size.height+offset+6+"px"),$(document).trigger("resize.window.jsxc",[win,bid,ui.size])}}),$.inArray(bid,jsxc.storage.getUserItem("windowlist"))<0){var wl=jsxc.storage.getUserItem("windowlist");wl.push(bid),jsxc.storage.setUserItem("windowlist",wl),jsxc.storage.setUserItem("window",bid,{minimize:!0,text:"",unread:!1})}else jsxc.storage.getUserItem("window",bid).unread&&jsxc.gui.unreadMsg(bid);return $.each(jsxc.gui.emotions,function(i,val){var ins=val[0].split(" ")[0],li=$('<li><div title="'+ins+'" class="jsxc_'+val[1]+'"/></li>');li.click(function(){win.find("input").val(win.find("input").val()+ins),win.find("input").focus()}),win.find(".jsxc_emoticons ul").append(li)}),jsxc.gui.toggleList.call(win.find(".jsxc_emoticons")),jsxc.gui.window.restoreChat(bid),jsxc.gui.update(bid),jsxc.gui.updateWindowListSB(),jsxc.master&&!jsxc.otr.objects[bid]?jsxc.otr.create(bid):jsxc.otr.enable(bid),$(document).trigger("init.window.jsxc",[win]),win},get:function(id){return $("li.jsxc_windowItem[data-bid='"+jsxc.jidToBid(id)+"']")},open:function(bid){var win=jsxc.gui.window.init(bid);jsxc.gui.window.show(bid),jsxc.gui.window.highlight(bid);var padding=$("#jsxc_windowListSB").width(),innerWidth=$("#jsxc_windowList>ul").width(),outerWidth=$("#jsxc_windowList").width()-padding;if(innerWidth>outerWidth){var offset=parseInt($("#jsxc_windowList>ul").css("right")),width=win.outerWidth(!0),right=innerWidth-win.position().left-width+offset,left=outerWidth-(innerWidth-win.position().left)-offset;0>left&&jsxc.gui.scrollWindowListBy(-1*left),0>right&&jsxc.gui.scrollWindowListBy(right)}return win},close:function(bid){return 0===jsxc.gui.window.get(bid).length?void jsxc.warn("Want to close a window, that is not open."):(jsxc.storage.removeUserElement("windowlist",bid),jsxc.storage.removeUserItem("window",bid),jsxc.storage.getUserItem("buddylist").indexOf(bid)<0&&(jsxc.storage.removeUserItem("buddy",bid),jsxc.storage.removeUserItem("chat",bid)),void jsxc.gui.window._close(bid))},_close:function(bid){jsxc.gui.window.get(bid).hide("slow",function(){$(this).remove(),jsxc.gui.updateWindowListSB()})},toggle:function(bid){var win=jsxc.gui.window.get(bid);0!==win.parents("#jsxc_windowList").length&&(win.find(".jsxc_fade").is(":hidden")?jsxc.gui.window.show(bid):jsxc.gui.window.hide(bid),jsxc.gui.updateWindowListSB())},show:function(bid){jsxc.storage.updateUserItem("window",bid,"minimize",!1),jsxc.gui.window._show(bid)},_show:function(bid){var win=jsxc.gui.window.get(bid);jsxc.gui.window.get(bid).find(".jsxc_fade").slideDown(),win.removeClass("jsxc_min"),jsxc.gui.window.scrollDown(bid),jsxc.restoreCompleted&&win.find(".jsxc_textinput").focus(),win.trigger("show.window.jsxc")},hide:function(bid){jsxc.storage.updateUserItem("window",bid,"minimize",!0),jsxc.gui.window._hide(bid)},_hide:function(bid){jsxc.gui.window.get(bid).addClass("jsxc_min").find(" .jsxc_fade").slideUp(),jsxc.gui.window.get(bid).trigger("hidden.window.jsxc")},highlight:function(bid){var el=jsxc.gui.window.get(bid).find(" .jsxc_bar");el.is(":animated")||el.effect("highlight",{color:"orange"},2e3)},scrollDown:function(bid){var chat=jsxc.gui.window.get(bid).find(".jsxc_textarea");0!==chat.length&&chat.slimScroll({scrollTo:chat.get(0).scrollHeight+"px"})},postMessage:function(bid,direction,msg,encrypted,forwarded,stamp,sender){var data=jsxc.storage.getUserItem("buddy",bid),html_msg=msg;msg=jsxc.removeHTML(msg),msg=jsxc.escapeHTML(msg),"out"===direction&&data.msgstate===OTR.CONST.MSGSTATE_FINISHED&&forwarded!==!0&&(direction="sys",msg=$.t("your_message_wasnt_send_please_end_your_private_conversation")),"in"===direction&&data.msgstate===OTR.CONST.MSGSTATE_FINISHED&&(direction="sys",msg=$.t("unencrypted_message_received")+" "+msg),"out"===direction&&"from"===data.sub&&(direction="sys",msg=$.t("your_message_wasnt_send_because_you_have_no_valid_subscription")),encrypted=encrypted||data.msgstate===OTR.CONST.MSGSTATE_ENCRYPTED;var post=jsxc.storage.saveMessage(bid,direction,msg,encrypted,forwarded,stamp,sender);"in"===direction&&$(document).trigger("postmessagein.jsxc",[bid,html_msg]),"out"===direction&&jsxc.master&&forwarded!==!0&&jsxc.xmpp.sendMessage(bid,html_msg,post.uid),jsxc.gui.window._postMessage(bid,post),"out"===direction&&"?"===msg&&jsxc.gui.window.postMessage(bid,"sys","42")},_postMessage:function(bid,post,restore){var win=jsxc.gui.window.get(bid),msg=post.msg,direction=post.direction,uid=post.uid;win.find(".jsxc_textinput").is(":not(:focus)")&&jsxc.restoreCompleted&&"in"===direction&&!restore&&jsxc.gui.window.highlight(bid),msg=msg.replace(jsxc.CONST.REGEX.URL,function(url){var href=url.match(/^https?:\/\//i)?url:"http://"+url;return'<a href="'+href+'" target="_blank">'+url+"</a>"}),msg=msg.replace(new RegExp("(xmpp:)?("+jsxc.CONST.REGEX.JID.source+")(\\?[^\\s]+\\b)?","i"),function(match,protocol,jid,action){return"xmpp:"===protocol?("string"==typeof action&&(jid+=action),'<a href="xmpp:'+jid+'">'+jid+"</a>"):'<a href="mailto:'+jid+'" target="_blank">'+jid+"</a>"}),$.each(jsxc.gui.emotions,function(i,val){msg=msg.replace(val[2],function(match,p1){var i,esc="";for(i=0;i<p1.length;i++)esc+="&#"+p1.charCodeAt(i)+";";return'<div title="'+esc+'" class="jsxc_emoticon jsxc_'+val[1]+'"/>'})});var msgDiv=$("<div>"),msgTsDiv=$("<div>");if(msgDiv.addClass("jsxc_chatmessage jsxc_"+direction),msgDiv.attr("id",uid),msgDiv.html("<div>"+msg+"</div>"),msgTsDiv.addClass("jsxc_timestamp"),msgTsDiv.text(jsxc.getFormattedTime(post.stamp)),post.received&&msgDiv.addClass("jsxc_received"),post.forwarded&&msgDiv.addClass("jsxc_forwarded"),post.encrypted&&msgDiv.addClass("jsxc_encrypted"),"sys"===direction?jsxc.gui.window.get(bid).find(".jsxc_textarea").append('<div style="clear:both"/>'):"undefined"!=typeof post.stamp&&msgDiv.append(msgTsDiv),win.find(".jsxc_textarea").append(msgDiv),"object"==typeof post.sender&&null!==post.sender){var title="",avatarDiv=$("<div>");if(avatarDiv.addClass("jsxc_avatar").prependTo(msgDiv),"string"==typeof post.sender.jid){msgDiv.attr("data-bid",jsxc.jidToBid(post.sender.jid));var data=jsxc.storage.getUserItem("buddy",jsxc.jidToBid(post.sender.jid))||{};jsxc.gui.updateAvatar(msgDiv,jsxc.jidToBid(post.sender.jid),data.avatar),title=jsxc.jidToBid(post.sender.jid)}"string"==typeof post.sender.name&&(msgDiv.attr("data-name",post.sender.name),"string"!=typeof post.sender.jid&&jsxc.gui.avatarPlaceholder(avatarDiv,post.sender.name),""!==title&&(title="\n"+title),title=post.sender.name+title,msgTsDiv.text(msgTsDiv.text()+" "+post.sender.name)),avatarDiv.attr("title",jsxc.escapeHTML(title))}jsxc.gui.detectUriScheme(win),jsxc.gui.detectEmail(win),jsxc.gui.window.scrollDown(bid),win.find(".jsxc_textinput").is(":focus")||!jsxc.restoreCompleted||restore||jsxc.gui.unreadMsg(bid)},setText:function(bid,text){jsxc.gui.window.get(bid).find(".jsxc_textinput").val(text)},restoreChat:function(bid){for(var chat=jsxc.storage.getUserItem("chat",bid);null!==chat&&chat.length>0;){var c=chat.pop();jsxc.gui.window._postMessage(bid,c,!0)}},clear:function(bid){jsxc.storage.setUserItem("chat",bid,[]),jsxc.gui.window.get(bid).find(".jsxc_textarea").empty()}},jsxc.gui.template={get:function(name,bid,msg){var ph={my_priv_fingerprint:jsxc.storage.getUserItem("priv_fingerprint")?jsxc.storage.getUserItem("priv_fingerprint").replace(/(.{8})/g,"$1 "):$.t("not_available"),my_jid:jsxc.storage.getItem("jid")||"",my_node:Strophe.getNodeFromJid(jsxc.storage.getItem("jid")||"")||"",root:jsxc.options.root,app_name:jsxc.options.app_name};if(bid){var data=jsxc.storage.getUserItem("buddy",bid);$.extend(ph,{bid_priv_fingerprint:data&&data.fingerprint?data.fingerprint.replace(/(.{8})/g,"$1 "):$.t("not_available"),bid_jid:bid,bid_name:data&&data.name?data.name:bid})}msg&&$.extend(ph,{msg:msg});var ret=jsxc.gui.template[name];return"string"==typeof ret?(ret=ret.replace(/\{\{([a-zA-Z0-9_\-]+)\}\}/g,function(s,key){return"string"==typeof ph[key]?ph[key]:s}),$("<div>").append($(ret).i18n()).html()):(jsxc.debug("Template not available: "+name),name)},authenticationDialog:'<h3>Verification</h3> <p data-i18n="Authenticating_a_buddy_helps_"></p> <div> <p data-i18n="How_do_you_want_to_authenticate_your_buddy" style="margin:0px;"></p> <select size="1"> <option data-i18n="Select_method"></option> <option data-i18n="Manual"></option> <option data-i18n="Question"></option> <option data-i18n="Secret"></option> </select> </div> <div style="display:none"> <p data-i18n="To_verify_the_fingerprint_" class=".jsxc_explanation"></p> <p><strong data-i18n="Your_fingerprint"></strong><br /> <span style="text-transform:uppercase">{{my_priv_fingerprint}}</span></p> <p><strong data-i18n="Buddy_fingerprint"></strong><br /> <span style="text-transform:uppercase">{{bid_priv_fingerprint}}</span></p><br /> <p class="jsxc_right"><a href="#" data-i18n="Close" class="jsxc_close button"></a> <a href="#" data-i18n="Compared" class="button creation"></a></p> </div> <div style="display:none"> <p data-i18n="To_authenticate_using_a_question_" class=".jsxc_explanation"></p> <p><label for="jsxc_quest" data-i18n="Question"></label><input type="text" name="quest" id="jsxc_quest" /></p> <p><label for="jsxc_secret2" data-i18n="Secret"></label><input type="text" name="secret2" id="jsxc_secret2" /></p> <p class="jsxc_right"><a href="#" class="button jsxc_close" data-i18n="Close"></a> <a href="#" class="button creation" data-i18n="Ask"></a></p> </div> <div style="display:none"> <p class=".jsxc_explanation" data-i18n="To_authenticate_pick_a_secret_"></p> <p><label for="jsxc_secret" data-i18n="Secret"></label><input type="text" name="secret" id="jsxc_secret" /></p> <p class="jsxc_right"><a href="#" class="button jsxc_close" data-i18n="Close"></a> <a href="#" class="button creation" data-i18n="Compare"></a></p> </div>',fingerprintsDialog:'<div> <p class="jsxc_maxWidth" data-i18n="A_fingerprint_"></p> <p><strong data-i18n="Your_fingerprint"></strong><br /> <span style="text-transform:uppercase">{{my_priv_fingerprint}}</span></p> <p><strong data-i18n="Buddy_fingerprint"></strong><br /> <span style="text-transform:uppercase">{{bid_priv_fingerprint}}</span></p><br /> <p class="jsxc_right"><a href="#" class="button jsxc_close" data-i18n="Close"></a></p> </div>',chatWindow:'<li class="jsxc_min jsxc_windowItem"> <div class="jsxc_window"> <div class="jsxc_bar"> <div class="jsxc_avatar">☺</div> <div class="jsxc_tools"> <div class="jsxc_settings"> <ul> <li class="jsxc_fingerprints jsxc_otr jsxc_disabled" data-i18n="Fingerprints"></li> <li class="jsxc_verification" data-i18n="Authentication"></li> <li class="jsxc_transfer jsxc_otr jsxc_disabled" data-i18n="start_private"></li> <li class="jsxc_clear" data-i18n="clear_history"></li> </ul> </div> <div class="jsxc_transfer jsxc_otr jsxc_disabled"/> <div class="jsxc_close">×</div> </div> <div class="jsxc_name"/> <div class="jsxc_cycle"/> </div> <div class="jsxc_fade"> <div class="jsxc_gradient"/> <div class="jsxc_textarea"/> <div class="jsxc_emoticons"><ul/></div> <input type="text" class="jsxc_textinput" data-i18n="[placeholder]Message"/> </div> </div> </li>',roster:'<div id="jsxc_roster"> <ul id="jsxc_buddylist"></ul> <div class="jsxc_bottom jsxc_presence" data-bid="own"> <div id="jsxc_avatar"> <div class="jsxc_avatar">☺</div> </div> <div id="jsxc_menu"> <span></span> <ul> <li class="jsxc_settings" data-i18n="Settings"></li> <li class="jsxc_muteNotification" data-i18n="Mute"></li> <li class="jsxc_addBuddy" data-i18n="Add_buddy"></li> <li class="jsxc_hideOffline" data-i18n="Hide_offline"></li> <li class="jsxc_onlineHelp" data-i18n="Online_help"></li> <li class="jsxc_about" data-i18n="About"></li> </ul> </div> <div id="jsxc_notice"> <span></span> <ul></ul> </div> <div id="jsxc_presence"> <span data-i18n="Online"></span> <ul> <li data-pres="online" class="jsxc_online" data-i18n="Online"></li> <li data-pres="chat" class="jsxc_chat" data-i18n="Chatty"></li> <li data-pres="away" class="jsxc_away" data-i18n="Away"></li> <li data-pres="xa" class="jsxc_xa" data-i18n="Extended_away"></li> <li data-pres="dnd" class="jsxc_dnd" data-i18n="dnd"></li> <li data-pres="offline" class="jsxc_offline" data-i18n="Offline"></li> </ul> </div> </div> <div id="jsxc_toggleRoster"></div> </div>',windowList:'<div id="jsxc_windowList"> <ul></ul> </div> <div id="jsxc_windowListSB"> <div class="jsxc_scrollLeft jsxc_disabled">&lt;</div> <div class="jsxc_scrollRight jsxc_disabled">&gt;</div> </div>',rosterBuddy:'<li> <div class="jsxc_avatar">☺</div> <div class="jsxc_control"></div> <div class="jsxc_name"/> <div class="jsxc_options jsxc_right"> <div class="jsxc_rename" data-i18n="[title]rename_buddy">✎</div> <div class="jsxc_delete" data-i18n="[title]delete_buddy">✘</div> </div> <div class="jsxc_options jsxc_left"> <div class="jsxc_chaticon" data-i18n="[title]send_message"/> <div class="jsxc_vcardicon" data-i18n="[title]get_info">i</div> </div> </li>',loginBox:'<h3 data-i18n="Login"></h3> <form> <p><label for="jsxc_username" data-i18n="Username"></label> <input type="text" name="username" id="jsxc_username" required="required" value="{{my_node}}"/></p> <p><label for="jsxc_password" data-i18n="Password"></label> <input type="password" name="password" required="required" id="jsxc_password" /></p> <div class="bottom_submit_section"> <input type="reset" class="button jsxc_close" name="clear" data-i18n="[value]Cancel"/> <input type="submit" class="button creation" name="commit" data-i18n="[value]Connect"/> </div> </form>',contactDialog:'<h3 data-i18n="Add_buddy"></h3> <p class=".jsxc_explanation" data-i18n="Type_in_the_full_username_"></p> <form> <p><label for="jsxc_username" data-i18n="Username"></label> <input type="text" name="username" id="jsxc_username" list="jsxc_userlist" pattern="^[^\\x22&\'\\/:<>@\\s]+(@[.\\-_\\w]+)?" required="required" /></p> <datalist id="jsxc_userlist"></datalist> <p><label for="jsxc_alias" data-i18n="Alias"></label> <input type="text" name="alias" id="jsxc_alias" /></p> <p class="jsxc_right"> <input class="button" type="submit" data-i18n="[value]Add" /> </p> <form>',approveDialog:'<h3 data-i18n="Subscription_request"></h3> <p><span data-i18n="You_have_a_request_from"></span><b class="jsxc_their_jid"></b>.</p> <p class="jsxc_right"><a href="#" class="button jsxc_deny" data-i18n="Deny"></a> <a href="#" class="button creation jsxc_approve" data-i18n="Approve"></a></p>',removeDialog:'<h3 data-i18n="Remove_buddy"></h3> <p class="jsxc_maxWidth" data-i18n="You_are_about_to_remove_"></p> <p class="jsxc_right"><a href="#" class="button jsxc_cancel jsxc_close" data-i18n="Cancel"></a> <a href="#" class="button creation" data-i18n="Remove"></a></p>',waitAlert:'<h3>{{msg}}</h3> <p data-i18n="Please_wait"></p> <p class="jsxc_center"><img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" /></p>',alert:'<h3 data-i18n="Alert"></h3> <p>{{msg}}</p> <p class="jsxc_right"><a href="#" data-i18n="Ok" class="button jsxc_close jsxc_cancel"></a></p>',authFailDialog:'<h3 data-i18n="Login_failed"></h3> <p data-i18n="Sorry_we_cant_authentikate_"></p> <p class="jsxc_right"> <a class="button jsxc_cancel" data-i18n="Continue_without_chat"></a> <a class="button creation" data-i18n="Retry"></a> </p>',confirmDialog:'<p>{{msg}}</p> <p class="jsxc_right"> <a class="button jsxc_cancel jsxc_close" data-i18n="Dismiss"></a> <a class="button creation" data-i18n="Confirm"></a> </p>',pleaseAccept:'<p data-i18n="Please_accept_"></p>',aboutDialog:"<h3>JavaScript XMPP Chat</h3> <p><b>Version: </b>"+jsxc.version+'<br /> <a href="http://jsxc.org/" target="_blank">www.jsxc.org</a><br /> <br /> <i>Released under the MIT license</i><br /> <br /> Real-time chat app for {{app_name}} and more.<br /> Requires an external <a href="https://xmpp.org/xmpp-software/servers/" target="_blank">XMPP server</a>.<br /> <br /> <b>Credits: </b> <a href="http://www.beepzoid.com/old-phones/" target="_blank">David English (Ringtone)</a>, <a href="https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and" target="_blank">CameronMusic (Ping)</a></p> <p class="jsxc_right"><a class="button jsxc_debuglog" href="#">Show debug log</a></p>',vCard:'<h3><span data-i18n="Info_about"></span> <span>{{bid_name}}</span></h3> <ul class="jsxc_vCard"></ul> <p><img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" /> <span data-i18n="Please_wait"></span>...</p>',settings:'<h3 data-i18n="User_settings"></h3> <p></p> <form> <fieldset class="jsxc_fieldsetXmpp jsxc_fieldset"> <legend data-i18n="Login_options"></legend> <label for="xmpp-url" data-i18n="BOSH_url"></label><input type="text" id="xmpp-url" readonly="readonly"/><br /> <label for="xmpp-username" data-i18n="Username"></label><input type="text" id="xmpp-username"/><br /> <label for="xmpp-domain" data-i18n="Domain"></label><input type="text" id="xmpp-domain"/><br /> <label for="xmpp-resource" data-i18n="Resource"></label><input type="text" id="xmpp-resource"/><br /> <label for="xmpp-onlogin" data-i18n="On_login"></label><input type="checkbox" id="xmpp-onlogin" /><br /> <input type="submit" data-i18n="[value]Save"/> </fieldset> </form> <p></p> <form> <fieldset class="jsxc_fieldsetPriority jsxc_fieldset"> <legend data-i18n="Priority"></legend> <label for="priority-online" data-i18n="Online"></label><input type="number" value="0" id="priority-online" min="-128" max="127" step="1" required="required"/><br /> <label for="priority-chat" data-i18n="Chatty"></label><input type="number" value="0" id="priority-chat" min="-128" max="127" step="1" required="required"/><br /> <label for="priority-away" data-i18n="Away"></label><input type="number" value="0" id="priority-away" min="-128" max="127" step="1" required="required"/><br /> <label for="priority-xa" data-i18n="Extended_away"></label><input type="number" value="0" id="priority-xa" min="-128" max="127" step="1" required="required"/><br /> <label for="priority-dnd" data-i18n="dnd"></label><input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/><br /> <input type="submit" data-i18n="[value]Save"/> </fieldset> </form> <p></p> <form data-onsubmit="xmpp.carbons.refresh"> <fieldset class="jsxc_fieldsetCarbons jsxc_fieldset"> <legend data-i18n="Carbon_copy"></legend> <label for="carbons-enable" data-i18n="Enable"></label><input type="checkbox" id="carbons-enable" /><br /> <input type="submit" data-i18n="[value]Save"/> </fieldset> </form>'},jsxc.gui.template.joinChat='<h3 data-i18n="Join_chat"></h3> <p class=".jsxc_explanation" data-i18n="muc_explanation"></p> <p><label for="jsxc_server" data-i18n="Server"></label> <input type="text" name="server" id="jsxc_server" required="required" readonly="readonly" /></p> <p><label for="jsxc_room" data-i18n="Room"></label> <input type="text" name="room" id="jsxc_room" autocomplete="off" list="jsxc_roomlist" required="required" pattern="^[^\\x22&\'\\/:<>@\\s]+" /></p> <p class="jsxc_inputinfo jsxc_waiting jsxc_room" data-i18n="Rooms_are_loaded"></p> <datalist id="jsxc_roomlist"> <p><label for="jsxc_roomlist_select"></label><select id="jsxc_roomlist_select"><option></option><option>workaround</option></select></p> </datalist> <p><label for="jsxc_nickname" data-i18n="Nickname"></label> <input type="text" name="nickname" id="jsxc_nickname" /></p> <p><label for="jsxc_password" data-i18n="Password"></label> <input type="text" name="password" id="jsxc_password" /></p> <div class="jsxc_msg"></div> <p class="jsxc_right"> <span class="jsxc_warning"></span> <a href="#" class="button jsxc_close" data-i18n="Close"></a> <a href="#" class="button jsxc_continue" data-i18n="Continue"> <a href="#" class="button jsxc_join" data-i18n="Join"></a> </p>',jsxc.muc={conn:null,CONST:{AFFILIATION:{ADMIN:"admin",MEMBER:"member",OUTCAST:"outcast",OWNER:"owner",NONE:"none"},ROLE:{MODERATOR:"moderator",PARTICIPANT:"participant",VISITOR:"visitor",NONE:"none"},ROOMSTATE:{INIT:0,ENTERED:1,EXITED:2,AWAIT_DESTRUCTION:3,DESTROYED:4}},init:function(o){var self=jsxc.muc;self.conn=jsxc.xmpp.conn;var options=o||jsxc.options.get("muc");return options&&"string"==typeof options.server?(jsxc.gui.roster.ready?self.initMenu():$(document).one("ready.roster.jsxc",jsxc.muc.initMenu),$(document).on("presence.jsxc",jsxc.muc.onPresence),$(document).on("error.presence.jsxc",jsxc.muc.onPresenceError),self.conn.addHandler(self.onGroupchatMessage,null,"message","groupchat"),self.conn.addHandler(self.onErrorMessage,null,"message","error"),void(self.conn.muc.roomNames=jsxc.storage.getUserItem("roomNames")||[])):(jsxc.debug("Discover muc service"),void setTimeout(function(){self.conn.disco.items(Strophe.getDomainFromJid(self.conn.jid),null,function(items){$(items).find("item").each(function(){var jid=$(this).attr("jid"),discovered=!1;return self.conn.disco.info(jid,null,function(info){var mucFeature=$(info).find('feature[var="'+Strophe.NS.MUC+'"]'),mucIdentity=$(info).find('identity[category="conference"][type="text"]');mucFeature.length>0&&mucIdentity.length>0&&(jsxc.debug("muc service found",jid),jsxc.options.set("muc",{server:jid,name:$(info).find("identity").attr("name")}),discovered=!0,self.init())}),!discovered})})},1e3))},initMenu:function(){var li=$("<li>").attr("class","jsxc_joinChat").text($.t("Join_chat"));li.click(jsxc.muc.showJoinChat),$("#jsxc_menu ul").append(li)},showJoinChat:function(){var self=jsxc.muc,dialog=jsxc.gui.dialog.open(jsxc.gui.template.get("joinChat"));dialog.find(".jsxc_join").hide(),dialog.find("#jsxc_server").val(jsxc.options.get("muc").server);var error_handler=function(event,condition,room){var msg;switch(condition){case"not-authorized":msg=$.t("A_password_is_required");break;case"registration-required":msg=$.t("You_are_not_on_the_member_list");break;case"forbidden":msg=$.t("You_are_banned_from_this_room");break;case"conflict":msg=$.t("Your_desired_nickname_");break;case"service-unavailable":msg=$.t("The_maximum_number_");break;case"item-not-found":msg=$.t("This_room_is_locked_");break;case"not-allowed":msg=$.t("You_are_not_allowed_to_create_");break;default:jsxc.warn("Unknown muc error condition: "+condition),msg=$.t("Error")+": "+condition}var roomIndex=self.conn.muc.roomNames.indexOf(room);roomIndex>-1&&(self.conn.muc.roomNames.splice(roomIndex,1),delete self.conn.muc.rooms[room]),dialog.find(".jsxc_warning").text(msg)};$(document).on("error.muc.jsxc",error_handler),
-$(document).on("close.dialog.jsxc",function(){$(document).off("error.muc.jsxc",error_handler)}),self.conn.muc.listRooms(jsxc.options.get("muc").server,function(stanza){$("#jsxc_roomlist option:last").remove(),$(stanza).find("item").each(function(){var r=$("<option>"),rjid=$(this).attr("jid").toLowerCase(),rnode=Strophe.getNodeFromJid(rjid),rname=$(this).attr("name")||rnode;r.text(rname),r.attr("data-jid",rjid),r.attr("value",rnode),$("#jsxc_roomlist select").append(r)});var set=$(stanza).find('set[xmlns="http://jabber.org/protocol/rsm"]');if(set.length>0){var count=set.find("count").text()||"?";dialog.find(".jsxc_inputinfo").removeClass("jsxc_waiting").text($.t("Could_load_only",{count:count}))}else dialog.find(".jsxc_inputinfo").hide()},function(){jsxc.warn("Could not load rooms"),dialog.find(".jsxc_inputinfo").hide()}),dialog.find("#jsxc_nickname").attr("placeholder",Strophe.getNodeFromJid(self.conn.jid)),dialog.find(".jsxc_continue").click(function(ev){ev.preventDefault();var room=$("#jsxc_room").val()?jsxc.jidToBid($("#jsxc_room").val()):null,nickname=$("#jsxc_nickname").val()||Strophe.getNodeFromJid(self.conn.jid),password=$("#jsxc_password").val()||null;if(!room||!room.match(/^[^"&\'\/:<>@\s]+$/i))return $("#jsxc_room").addClass("jsxc_invalid").keyup(function(){$(this).val()&&$(this).removeClass("jsxc_invalid")}),!1;if(room.match(/@(.*)$/)||(room+="@"+jsxc.options.get("muc").server),jsxc.xmpp.conn.muc.roomNames.indexOf(room)<0){var discoReceived=function(roomName,subject){jsxc.gui.dialog.resize(),dialog.find(".jsxc_continue").hide(),dialog.find(".jsxc_join").show().effect("highlight",{color:"green"},4e3),dialog.find(".jsxc_join").click(function(ev){return ev.preventDefault(),self.join(room,nickname,password,roomName,subject),!1})};dialog.find(".jsxc_msg").append($("<p>").text($.t("Loading_room_information")).addClass("jsxc_waiting")),jsxc.gui.dialog.resize(),self.conn.disco.info(room,null,function(stanza){dialog.find(".jsxc_msg").html("<p>"+$.t("This_room_is")+"</p>");var table=$("<table>");$(stanza).find("feature").each(function(){var feature=$(this).attr("var");if(""!==feature&&i18n.exists(feature)){var tr=$("<tr>");$("<td>").text($.t(feature+".keyword")).appendTo(tr),$("<td>").text($.t(feature+".description")).appendTo(tr),tr.appendTo(table)}}),dialog.find(".jsxc_msg").append(table);var roomName=$(stanza).find("identity").attr("name"),subject=$(stanza).find('field[var="muc#roominfo_subject"]').attr("label");discoReceived(roomName,subject)},function(){dialog.find(".jsxc_msg").empty(),$("<p>").text($.t("Room_not_found_")).appendTo(dialog.find(".jsxc_msg")),discoReceived()})}else dialog.find(".jsxc_warning").text($.t("You_already_joined_this_room"));return!1}),dialog.find("input").keydown(function(ev){return 13!==ev.which?(dialog.find(".jsxc_warning").empty(),void(dialog.find(".jsxc_continue").is(":hidden")&&(dialog.find(".jsxc_continue").show(),dialog.find(".jsxc_join").hide().off("click"),dialog.find(".jsxc_msg").empty(),jsxc.gui.dialog.resize()))):void(dialog.find(".jsxc_continue").is(":hidden")?dialog.find(".jsxc_join").click():dialog.find(".jsxc_continue").click())})},join:function(room,nickname,password,roomName,subject){var self=jsxc.muc;jsxc.storage.setUserItem("buddy",room,{jid:room,name:roomName||room,sub:"both",type:"groupchat",state:self.CONST.ROOMSTATE.INIT,subject:subject}),jsxc.xmpp.conn.muc.join(room,nickname,null,null,null,password)},leave:function(room){var self=jsxc.muc,own=jsxc.storage.getUserItem("ownNicknames")||{},data=jsxc.storage.getUserItem("buddy",room)||{};data.state===self.CONST.ROOMSTATE.ENTERED?self.conn.muc.leave(room,own[room],function(){self.onExited(room)}):self.onExited(room)},onExited:function(room){var self=jsxc.muc,own=jsxc.storage.getUserItem("ownNicknames")||{};jsxc.storage.setUserItem("roomNames",self.conn.muc.roomNames),delete own[room],jsxc.storage.setUserItem("ownNicknames",own),jsxc.storage.removeUserItem("member",room),jsxc.storage.removeUserItem("chat",room),jsxc.gui.window.close(room),jsxc.gui.roster.purge(room)},destroy:function(room,handler_cb,error_cb){var self=jsxc.muc;jsxc.storage.updateUserItem("buddy",room,"state",self.CONST.ROOMSTATE.AWAIT_DESTRUCTION),jsxc.gui.window.postMessage(room,"sys",$.t("This_room_will_be_closed"));var iq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}).c("destroy");jsxc.muc.conn.sendIQ(iq.tree(),handler_cb,error_cb)},close:function(room){var self=jsxc.muc,roomdata=jsxc.storage.getUserItem("buddy",room)||{};self.emptyMembers(room);var roomIndex=self.conn.muc.roomNames.indexOf(room);roomIndex>-1&&(self.conn.muc.roomNames.splice(roomIndex,1),delete self.conn.muc.rooms[room]),jsxc.storage.setUserItem("roomNames",self.conn.muc.roomNames),roomdata.state===self.CONST.ROOMSTATE.AWAIT_DESTRUCTION&&self.onExited(room),roomdata.state=self.CONST.ROOMSTATE.DESTROYED,jsxc.storage.setUserItem("buddy",room,roomdata)},initWindow:function(event,win){var self=jsxc.muc,data=win.data(),bid=jsxc.jidToBid(data.jid),roomdata=jsxc.storage.getUserItem("buddy",bid);if(!jsxc.xmpp.conn)return void $(document).one("connectionReady.jsxc",function(){self.initWindow(null,win)});if(!(self.conn.muc.roomNames.indexOf(data.jid)<0)){win.addClass("jsxc_groupchat");var own=jsxc.storage.getUserItem("ownNicknames")||{},ownNickname=own[bid],mlIcon=$('<div class="jsxc_members"></div>');win.find(".jsxc_tools > .jsxc_transfer").after(mlIcon);var ml=$('<div class="jsxc_memberlist"><ul></ul></div>');win.find(".jsxc_fade").prepend(ml),ml.on("wheel",function(ev){jsxc.muc.scrollMemberListBy(bid,ev.originalEvent.wheelDelta>0?50:-50)});var toggleMl=function(ev){ev&&ev.preventDefault();var slimOptions={},ul=ml.find("ul:first"),slimHeight=null;if(ml.toggleClass("jsxc_expand"),ml.hasClass("jsxc_expand")){$("body").click(),$("body").one("click",toggleMl),ul.mouseleave(function(){ul.data("timer",window.setTimeout(toggleMl,2e3))}).mouseenter(function(){window.clearTimeout(ul.data("timer"))}).css("left","0px");var maxHeight=.8*win.find(".jsxc_textarea").height(),innerHeight=ml.find("ul").height()+3;slimHeight=innerHeight>maxHeight?maxHeight:innerHeight,slimOptions={distance:"3px",height:slimHeight+"px",width:"100%",color:"#fff",opacity:"0.5"},ml.css("height",slimHeight+"px")}else slimOptions={destroy:!0},ul.attr("style",""),ml.css("height",""),window.clearTimeout(ul.data("timer")),$("body").off("click",null,toggleMl),ul.off("mouseleave mouseenter");return ul.slimscroll(slimOptions),!1};mlIcon.click(toggleMl),win.on("resize",function(){jsxc.muc.scrollMemberListBy(bid,0)}),setTimeout(function(){var top=win.find(".jsxc_emoticons").position().top+win.find(".slimScrollDiv").position().top;win.find(".jsxc_emoticons").css("top",top+"px")},400);var destroy=$("<li>");if(destroy.text($.t("Destroy")),destroy.addClass("jsxc_destroy"),destroy.hide(),destroy.click(function(){self.destroy(bid)}),win.find(".jsxc_settings ul").append(destroy),roomdata.state>self.CONST.ROOMSTATE.INIT){var member=jsxc.storage.getUserItem("member",bid)||{};$.each(member,function(nickname,val){self.insertMember(bid,nickname,val),nickname===ownNickname&&val.affiliation===self.CONST.AFFILIATION.OWNER&&destroy.show()})}var leave=$("<li>");leave.text($.t("Leave")),leave.addClass("jsxc_leave"),leave.click(function(){self.leave(bid)}),win.find(".jsxc_settings ul").append(leave)}},onPresence:function(event,from,status,presence){var self=jsxc.muc,room=jsxc.jidToBid(from),xdata=$(presence).find('x[xmlns^="'+Strophe.NS.MUC+'"]');if(self.conn.muc.roomNames.indexOf(room)<0||0===xdata.length)return!0;var res=Strophe.getResourceFromJid(from)||"",nickname=Strophe.unescapeNode(res),own=jsxc.storage.getUserItem("ownNicknames")||{},member=jsxc.storage.getUserItem("member",room)||{},codes=[];if(xdata.find("status").each(function(){var code=$(this).attr("code");jsxc.debug("[muc][code]",code),codes.push(code)}),0===jsxc.gui.roster.getItem(room).length){jsxc.storage.setUserItem("roomNames",jsxc.xmpp.conn.muc.roomNames),jsxc.storage.removeUserItem("chat",room),member={};var bl=jsxc.storage.getUserItem("buddylist");bl.push(room),jsxc.storage.setUserItem("buddylist",bl),jsxc.gui.roster.add(room),jsxc.gui.window.open(room),jsxc.gui.dialog.close()}var jid=xdata.find("item").attr("jid")||null;if(0===status)if(xdata.find("destroy").length>0)member={},jsxc.gui.window.postMessage(room,"sys",$.t("This_room_has_been_closed")),self.close(room);else{delete member[nickname],self.removeMember(room,nickname);var newNickname=xdata.find("item").attr("nick");codes.indexOf("303")>-1&&newNickname?(newNickname=Strophe.unescapeNode(newNickname),member[newNickname]={},jsxc.gui.window.postMessage(room,"sys",$.t("is_now_known_as",{oldNickname:nickname,newNickname:newNickname,escapeInterpolation:!0}))):(0===codes.length||1===codes.length&&codes.indexOf("110")>-1)&&jsxc.gui.window.postMessage(room,"sys",$.t("left_the_building",{nickname:nickname,escapeInterpolation:!0}))}else!member[nickname]&&own[room]&&jsxc.gui.window.postMessage(room,"sys",$.t("entered_the_room",{nickname:nickname,escapeInterpolation:!0})),member[nickname]={jid:jid,status:status,roomJid:from,affiliation:xdata.find("item").attr("affiliation"),role:xdata.find("item").attr("role")},self.insertMember(room,nickname,member[nickname]);return jsxc.storage.setUserItem("member",room,member),$.each(codes,function(index,code){"function"==typeof self.onStatus[code]&&self.onStatus[code].call(this,room,nickname,member[nickname]||{},xdata),$(document).trigger("status.muc.jsxc",[code,room,nickname,member[nickname]||{},presence])}),!0},onPresenceError:function(event,from,presence){var self=jsxc.muc,xdata=$(presence).find('x[xmlns="'+Strophe.NS.MUC+'"]'),room=jsxc.jidToBid(from);if(0===xdata.length||self.conn.muc.roomNames.indexOf(room)<0)return!0;var error=$(presence).find("error"),condition=error.children()[0].tagName;return jsxc.debug("[muc][error]",condition),$(document).trigger("error.muc.jsxc",[condition,room]),!0},onStatus:{110:function(room,nickname,data){var self=jsxc.muc,own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]=nickname,jsxc.storage.setUserItem("ownNicknames",own),data.affiliation===self.CONST.AFFILIATION.OWNER&&jsxc.gui.window.get(room).find(".jsxc_destroy").show();var roomdata=jsxc.storage.getUserItem("buddy",room);roomdata.state===self.CONST.ROOMSTATE.INIT&&(roomdata.state=self.CONST.ROOMSTATE.ENTERED,jsxc.storage.setUserItem("buddy",room,roomdata))},170:function(room){jsxc.gui.window.postMessage(room,"sys",$.t("Room_logging_is_enabled"))},201:function(room){var self=jsxc.muc;self.conn.muc.createInstantRoom(room)},301:function(room,nickname,data,xdata){var own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]===nickname?(jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_banned")),jsxc.muc.postReason(room,xdata)):jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_info_banned",{nickname:nickname,escapeInterpolation:!0}))},307:function(room,nickname,data,xdata){var own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]===nickname?(jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_kicked")),jsxc.muc.postReason(room,xdata)):jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_info_kicked",{nickname:nickname,escapeInterpolation:!0}))},321:function(room,nickname){var own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]===nickname?(jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_affiliation"))):jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_info_affiliation",{nickname:nickname,escapeInterpolation:!0}))},322:function(room,nickname){var own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]===nickname?(jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_membersonly"))):jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_info_membersonly",{nickname:nickname,escapeInterpolation:!0}))},332:function(room){jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_shutdown"))}},postReason:function(room,xdata){var actor={name:xdata.find("actor").attr("nick"),jid:xdata.find("actor").attr("jid")},reason=xdata.find("reason").text();""!==reason&&(reason=$.t("Reason")+": "+reason,"string"==typeof actor.name||"string"==typeof actor.jid?jsxc.gui.window.postMessage(room,"in",reason,!1,!1,null,actor):jsxc.gui.window.postMessage(room,"sys",reason))},insertMember:function(room,nickname,memberdata){var self=jsxc.muc,win=jsxc.gui.window.get(room),jid=memberdata.jid,m=win.find('.jsxc_memberlist li[data-nickname="'+nickname+'"]');if(0===m.length){var title=jsxc.escapeHTML(nickname);if(m=$('<li><div class="jsxc_avatar"></div><div class="jsxc_name"/></li>'),m.attr("data-nickname",nickname),win.find(".jsxc_memberlist ul").append(m),"string"==typeof jid){m.find(".jsxc_name").text(jsxc.jidToBid(jid)),m.attr("data-bid",jsxc.jidToBid(jid)),title=title+"\n"+jsxc.jidToBid(jid);var data=jsxc.storage.getUserItem("buddy",jsxc.jidToBid(jid));null!==data&&"object"==typeof data?jsxc.gui.updateAvatar(m,jsxc.jidToBid(jid),data.avatar):jsxc.jidToBid(jid)===jsxc.jidToBid(self.conn.jid)&&jsxc.gui.updateAvatar(m,jsxc.jidToBid(jid),"own")}else m.find(".jsxc_name").text(nickname),jsxc.gui.avatarPlaceholder(m.find(".jsxc_avatar"),nickname);m.attr("title",title)}},removeMember:function(room,nickname){var win=jsxc.gui.window.get(room),m=win.find('.jsxc_memberlist li[data-nickname="'+nickname+'"]');m.length>0&&m.remove()},scrollMemberListBy:function(room,offset){var win=jsxc.gui.window.get(room);if(!win.find(".jsxc_memberlist").hasClass("jsxc_expand")){var el=win.find(".jsxc_memberlist ul:first"),scrollWidth=el.width(),width=win.find(".jsxc_memberlist").width(),left=parseInt(el.css("left"));left=isNaN(left)?0-offset:left-offset,width>scrollWidth||left>0?left=0:width-scrollWidth>left&&(left=width-scrollWidth),el.css("left",left+"px")}},emptyMembers:function(room){var win=jsxc.gui.window.get(room);win.find(".jsxc_memberlist").empty(),jsxc.storage.setUserItem("member",room,{})},onGroupchatMessage:function(message){var id=$(message).attr("id");if(jsxc.el_exists($("#"+id)))return!0;var from=$(message).attr("from"),body=$(message).find("body:first").text(),room=jsxc.jidToBid(from),nickname=Strophe.unescapeNode(Strophe.getResourceFromJid(from));if(""!==body){var delay=$(message).find('delay[xmlns="urn:xmpp:delay"]'),stamp=delay.length>0?new Date(delay.attr("stamp")):new Date;stamp=stamp.getTime();var member=jsxc.storage.getUserItem("member",room)||{},sender={};sender.name=nickname,member[nickname]&&"string"==typeof member[nickname].jid&&(sender.jid=member[nickname].jid),jsxc.gui.window.postMessage(room,"in",body,!1,!1,stamp,sender)}var subject=$(message).find("subject");if(subject.length>0){var roomdata=jsxc.storage.getUserItem("buddy",room);roomdata.subject=subject.text(),jsxc.storage.setUserItem("buddy",room,roomdata),jsxc.gui.window.postMessage(room,"sys",$.t("changed_subject_to",{nickname:nickname,subject:subject.text()}))}return!0},onErrorMessage:function(message){var room=jsxc.jidToBid($(message).attr("from"));return 0===jsxc.gui.window.get(room).length?!0:($(message).find("item-not-found").length>0?jsxc.gui.window.postMessage(room,"sys",$.t("message_not_send_item-not-found")):$(message).find("forbidden").length>0?jsxc.gui.window.postMessage(room,"sys",$.t("message_not_send_forbidden")):$(message).find("not-acceptable").length>0?jsxc.gui.window.postMessage(room,"sys",$.t("message_not_send_not-acceptable")):jsxc.gui.window.postMessage(room,"sys",$.t("message_not_send")),jsxc.debug("[muc] error message for "+room,$(message).find("error")[0]),!0)},onAddRoster:function(event,room,data,bud){var self=jsxc.muc;"groupchat"===data.type&&bud.find(".jsxc_delete").off("click").click(function(){return self.leave(room),!1})}},$(document).on("init.window.jsxc",jsxc.muc.initWindow),$(document).on("add.roster.jsxc",jsxc.muc.onAddRoster),$(document).one("attached.jsxc",function(){jsxc.muc.init()}),$(document).one("connected.jsxc",function(){jsxc.storage.removeUserItem("roomNames"),jsxc.storage.removeUserItem("ownNicknames")}),jsxc.notice={_num:0,load:function(){$("#jsxc_notice ul li").remove(),$("#jsxc_notice > span").text(""),jsxc.notice._num=0;var saved=jsxc.storage.getUserItem("notices")||[],key=null;for(key in saved)if(saved.hasOwnProperty(key)){var val=saved[key];jsxc.notice.add(val.msg,val.description,val.fnName,val.fnParams,key)}},add:function(msg,description,fnName,fnParams,id){var nid=id||Date.now(),list=$("#jsxc_notice ul"),notice=$("<li/>");if(notice.click(function(){return jsxc.notice.remove(nid),jsxc.exec(fnName,fnParams),!1}),notice.text(msg),notice.attr("title",description||""),notice.attr("data-nid",nid),list.append(notice),$("#jsxc_notice > span").text(++jsxc.notice._num),!id){var saved=jsxc.storage.getUserItem("notices")||{};saved[nid]={msg:msg,description:description,fnName:fnName,fnParams:fnParams},jsxc.storage.setUserItem("notices",saved),jsxc.notification.notify(msg,description||"",null,!0,jsxc.CONST.SOUNDS.NOTICE)}},remove:function(nid){var el=$("#jsxc_notice li[data-nid="+nid+"]");el.remove(),$("#jsxc_notice > span").text(--jsxc.notice._num||"");var s=jsxc.storage.getUserItem("notices");delete s[nid],jsxc.storage.setUserItem("notices",s)},has:function(fnName){var saved=jsxc.storage.getUserItem("notices")||[],has=!1;return $.each(saved,function(index,val){return val.fnName===fnName?(has=!0,!1):void 0}),has}},jsxc.notification={audio:null,init:function(){$(document).on("postmessagein.jsxc",function(event,bid,msg){msg=msg.match(/^\?OTR/)?$.t("Encrypted_message"):msg;var data=jsxc.storage.getUserItem("buddy",bid);jsxc.notification.notify({title:$.t("New_message_from")+" "+data.name,msg:msg,soundFile:jsxc.CONST.SOUNDS.MSG,source:bid})}),$(document).on("callincoming.jingle",function(){jsxc.notification.playSound(jsxc.CONST.SOUNDS.CALL,!0,!0)}),$(document).on("accept.call.jsxc reject.call.jsxc",function(){jsxc.notification.stopSound()})},notify:function(title,msg,d,force,soundFile,loop,source){if(jsxc.options.notification&&jsxc.notification.hasPermission()){var o;if(o=null!==title&&"object"==typeof title?title:{title:title,msg:msg,duration:d,force:force,soundFile:soundFile,loop:loop,source:source},!jsxc.hasFocus()||o.force){var icon=o.icon||jsxc.options.root+"/img/XMPP_logo.png";if("string"==typeof o.source){var data=jsxc.storage.getUserItem("buddy",o.source),src=jsxc.storage.getUserItem("avatar",data.avatar);"string"==typeof src&&"0"!==src&&(icon=src)}jsxc.toNotification=setTimeout(function(){"string"==typeof o.soundFile&&jsxc.notification.playSound(o.soundFile,o.loop,o.force);var popup=new Notification($.t(o.title),{body:$.t(o.msg),icon:icon}),duration=o.duration||jsxc.options.popupDuration;duration>0&&setTimeout(function(){popup.close()},duration)},jsxc.toNotificationDelay)}}},hasSupport:function(){if(window.webkitNotifications){window.Notification=function(title,opt){var popup=window.webkitNotifications.createNotification(null,title,opt.body);return popup.show(),popup.close=function(){popup.cancel()},popup};var permission;switch(window.webkitNotifications.checkPermission()){case 0:permission=jsxc.CONST.NOTIFICATION_GRANTED;break;case 2:permission=jsxc.CONST.NOTIFICATION_DENIED;break;default:permission=jsxc.CONST.NOTIFICATION_DEFAULT}return window.Notification.permission=permission,window.Notification.requestPermission=function(func){window.webkitNotifications.requestPermission(func)},!0}return window.Notification?!0:!1},prepareRequest:function(){jsxc.notice.has("gui.showRequestNotification")||$(document).one("postmessagein.jsxc",function(){setTimeout(function(){jsxc.notice.add($.t("Notifications")+"?",$.t("Should_we_notify_you_"),"gui.showRequestNotification")},1e3)})},requestPermission:function(){window.Notification.requestPermission(function(status){window.Notification.permission!==status&&(window.Notification.permission=status),$(document).trigger(jsxc.notification.hasPermission()?"notificationready.jsxc":"notificationfailure.jsxc")})},hasPermission:function(){return window.Notification.permission===jsxc.CONST.NOTIFICATION_GRANTED},playSound:function(soundFile,loop,force){if(jsxc.master&&!jsxc.options.get("muteNotification")&&"dnd"!==jsxc.storage.getUserItem("presence")&&(!jsxc.hasFocus()||force)){jsxc.notification.stopSound();var audio=new Audio(jsxc.options.root+"/sound/"+soundFile);audio.loop=loop||!1,audio.play(),jsxc.notification.audio=audio}},stopSound:function(){var audio=jsxc.notification.audio;"undefined"!=typeof audio&&null!==audio&&(audio.pause(),jsxc.notification.audio=null)},muteSound:function(external){$("#jsxc_menu .jsxc_muteNotification").text($.t("Unmute")),external!==!0&&jsxc.options.set("muteNotification",!0)},unmuteSound:function(external){$("#jsxc_menu .jsxc_muteNotification").text($.t("Mute")),external!==!0&&jsxc.options.set("muteNotification",!1)}},jsxc.options={app_name:"web applications",timeout:3e3,busyTimeout:15e3,otr:{enable:!0,ERROR_START_AKE:!1,debug:!1,SEND_WHITESPACE_TAG:!0,WHITESPACE_START_AKE:!0},xmpp:{url:null,jid:null,domain:null,password:null,overwrite:!1,onlogin:!0},priority:{online:0,chat:0,away:0,xa:0,dnd:0},loginForm:{form:null,jid:null,pass:null,preJid:function(jid){return jid},onConnected:"submit",onAuthFail:"submit"},logoutElement:null,numberOfMsg:10,defaultLang:"en",autoLang:!0,rosterAppend:"body",notification:!0,popupDuration:6e3,root:"",loginTimeout:6e5,displayRosterMinimized:function(){return!1},hideOffline:!1,muteNotification:!1,defaultAvatar:function(jid){jsxc.gui.avatarPlaceholder($(this).find(".jsxc_avatar"),jid)},loadSettings:function(){},saveSettinsPermanent:function(){},carbons:{enable:!1},getUsers:null},jsxc.otr={objects:{},dsaFallback:null,receiveMessage:function(d){var bid=d.bid;jsxc.otr.objects[bid].msgstate!==OTR.CONST.MSGSTATE_PLAINTEXT&&jsxc.otr.backup(bid),jsxc.otr.objects[bid].msgstate===OTR.CONST.MSGSTATE_PLAINTEXT||d.encrypted?jsxc.gui.window.postMessage(bid,"in",d.msg,d.encrypted,d.forwarded,d.stamp):jsxc.gui.window.postMessage(bid,"sys",$.t("Received_an_unencrypted_message")+". ["+d.msg+"]",d.encrypted,d.forwarded,d.stamp)},sendMessage:function(jid,msg,uid){0!==jsxc.otr.objects[jsxc.jidToBid(jid)].msgstate&&jsxc.otr.backup(jsxc.jidToBid(jid)),jsxc.xmpp._sendMessage(jid,msg,uid)},create:function(bid){if(!jsxc.otr.objects.hasOwnProperty(bid)&&jsxc.options.otr.priv){var ol=jsxc.storage.getUserItem("otrlist")||[];ol.indexOf(bid)<0&&(ol.push(bid),jsxc.storage.setUserItem("otrlist",ol)),jsxc.otr.objects[bid]=new OTR(jsxc.options.otr),jsxc.options.otr.SEND_WHITESPACE_TAG&&(jsxc.otr.objects[bid].SEND_WHITESPACE_TAG=!0),jsxc.options.otr.WHITESPACE_START_AKE&&(jsxc.otr.objects[bid].WHITESPACE_START_AKE=!0),jsxc.otr.objects[bid].on("status",function(status){var data=jsxc.storage.getUserItem("buddy",bid);if(null!==data){switch(status){case OTR.CONST.STATUS_SEND_QUERY:jsxc.gui.window.postMessage(bid,"sys",$.t("trying_to_start_private_conversation"));break;case OTR.CONST.STATUS_AKE_SUCCESS:data.fingerprint=jsxc.otr.objects[bid].their_priv_pk.fingerprint(),data.msgstate=OTR.CONST.MSGSTATE_ENCRYPTED;var msg=$.t(jsxc.otr.objects[bid].trust?"Verified":"Unverified")+" "+$.t("private_conversation_started");jsxc.gui.window.postMessage(bid,"sys",msg);break;case OTR.CONST.STATUS_END_OTR:data.fingerprint=null,jsxc.otr.objects[bid].msgstate===OTR.CONST.MSGSTATE_PLAINTEXT?(data.msgstate=OTR.CONST.MSGSTATE_PLAINTEXT,jsxc.gui.window.postMessage(bid,"sys",$.t("private_conversation_aborted"))):(data.msgstate=OTR.CONST.MSGSTATE_FINISHED,jsxc.gui.window.postMessage(bid,"sys",$.t("your_buddy_closed_the_private_conversation_you_should_do_the_same")));break;case OTR.CONST.STATUS_SMP_HANDLE:jsxc.keepBusyAlive()}jsxc.storage.setUserItem("buddy",bid,data),jsxc.gui.update(bid)}}),jsxc.otr.objects[bid].on("smp",function(type,data){switch(type){case"question":if(jsxc.gui.window.postMessage(bid,"sys",$.t("Authentication_request_received")),$("#jsxc_dialog").length>0){jsxc.otr.objects[bid].sm.abort();break}jsxc.otr.onSmpQuestion(bid,data),jsxc.storage.setUserItem("smp_"+bid,{data:data||null});break;case"trust":jsxc.otr.objects[bid].trust=data,jsxc.storage.updateUserItem("buddy",bid,"trust",data),jsxc.otr.backup(bid),jsxc.gui.update(bid),data?jsxc.gui.window.postMessage(bid,"sys",$.t("conversation_is_now_verified")):jsxc.gui.window.postMessage(bid,"sys",$.t("authentication_failed")),jsxc.storage.removeUserItem("smp_"+bid),jsxc.gui.dialog.close();break;case"abort":jsxc.gui.window.postMessage(bid,"sys",$.t("Authentication_aborted"));break;default:jsxc.debug("[OTR] sm callback: Unknown type: "+type)}}),jsxc.otr.objects[bid].on("ui",function(msg,encrypted,meta){jsxc.otr.receiveMessage({bid:bid,msg:msg,encrypted:encrypted===!0,stamp:meta.stamp,forwarded:meta.forwarded})}),jsxc.otr.objects[bid].on("io",function(msg,uid){var jid=jsxc.gui.window.get(bid).data("jid")||jsxc.otr.objects[bid].jid;jsxc.otr.objects[bid].jid=jid,jsxc.otr.sendMessage(jid,msg,uid)}),jsxc.otr.objects[bid].on("error",function(err){"Received an unencrypted message."!==err&&jsxc.gui.window.postMessage(bid,"sys","[OTR] "+$.t(err)),jsxc.error("[OTR] "+err)}),jsxc.otr.restore(bid)}},onSmpQuestion:function(bid,data){jsxc.gui.showVerification(bid),$("#jsxc_dialog select").prop("selectedIndex",data?2:3).change(),$("#jsxc_dialog > div:eq(0)").hide(),data?($("#jsxc_dialog > div:eq(2)").find("#jsxc_quest").val(data).prop("disabled",!0),$("#jsxc_dialog > div:eq(2)").find(".creation").text("Answer"),$("#jsxc_dialog > div:eq(2)").find(".jsxc_explanation").text($.t("your_buddy_is_attempting_to_determine_")+" "+$.t("to_authenticate_to_your_buddy")+$.t("enter_the_answer_and_click_answer"))):$("#jsxc_dialog > div:eq(3)").find(".jsxc_explanation").text($.t("your_buddy_is_attempting_to_determine_")+" "+$.t("to_authenticate_to_your_buddy")+$.t("enter_the_secret")),$("#jsxc_dialog .jsxc_close").click(function(){jsxc.storage.removeUserItem("smp_"+bid),jsxc.master&&jsxc.otr.objects[bid].sm.abort()})},sendSmpReq:function(bid,sec,quest){jsxc.keepBusyAlive(),jsxc.otr.objects[bid].smpSecret(sec,quest||"")},toggleTransfer:function(bid){0===jsxc.storage.getUserItem("buddy",bid).msgstate?jsxc.otr.goEncrypt(bid):jsxc.otr.goPlain(bid)},goEncrypt:function(bid){jsxc.master?jsxc.otr.objects[bid].sendQueryMsg():jsxc.storage.updateUserItem("buddy",bid,"transferReq",1)},goPlain:function(bid,cb){jsxc.master?(jsxc.otr.objects[bid].endOtr.call(jsxc.otr.objects[bid],cb),jsxc.otr.objects[bid].init.call(jsxc.otr.objects[bid]),jsxc.otr.backup(bid)):jsxc.storage.updateUserItem("buddy",bid,"transferReq",0)},backup:function(bid){var o=jsxc.otr.objects[bid],r={};if(null!==o){var i,savekey=["jid","our_instance_tag","msgstate","authstate","fragment","their_y","their_old_y","their_keyid","their_instance_tag","our_dh","our_old_dh","our_keyid","sessKeys","storedMgs","oldMacKeys","trust","transmittedRS","ssid","receivedPlaintext","authstate","send_interval"];for(i=0;i<savekey.length;i++)r[savekey[i]]=JSON.stringify(o[savekey[i]]);null!==o.their_priv_pk&&(r.their_priv_pk=JSON.stringify(o.their_priv_pk.packPublic())),o.ake.otr_version&&""!==o.ake.otr_version&&(r.otr_version=JSON.stringify(o.ake.otr_version)),jsxc.storage.setUserItem("otr",bid,r)}},restore:function(bid){var o=jsxc.otr.objects[bid],d=jsxc.storage.getUserItem("otr",bid);if(null!==o||null!==d){var key;for(key in d)if(d.hasOwnProperty(key)){var val=JSON.parse(d[key]);"their_priv_pk"===key&&null!==val&&(val=DSA.parsePublic(val)),"otr_version"===key&&null!==val?o.ake.otr_version=val:o[key]=val}jsxc.otr.objects[bid]=o,1===o.msgstate&&null!==o.their_priv_pk&&o._smInit.call(jsxc.otr.objects[bid])}jsxc.otr.enable(bid)},createDSA:function(){if(!jsxc.options.otr.priv)if(null===jsxc.storage.getUserItem("key")){var msg=$.t("Creating_your_private_key_"),worker=null;if(Worker)try{worker=new Worker(jsxc.options.root+"/lib/otr/build/dsa-webworker.js")}catch(err){jsxc.warn("Couldn't create web-worker.",err)}jsxc.otr.dsaFallback=null===worker,jsxc.otr.dsaFallback?(jsxc.gui.dialog.open(jsxc.gui.template.get("waitAlert",null,msg),{noClose:!0}),jsxc.debug("DSA key creation started."),setTimeout(function(){var dsa=new DSA;jsxc.otr.DSAready(dsa)},500)):(jsxc._onMaster(),worker.onmessage=function(e){var type=e.data.type,val=e.data.val;"debug"===type?jsxc.debug(val):"data"===type&&jsxc.otr.DSAready(DSA.parsePrivate(val))},worker.postMessage({imports:[jsxc.options.root+"/lib/otr/vendor/salsa20.js",jsxc.options.root+"/lib/otr/vendor/bigint.js",jsxc.options.root+"/lib/otr/vendor/crypto.js",jsxc.options.root+"/lib/otr/vendor/eventemitter.js",jsxc.options.root+"/lib/otr/lib/const.js",jsxc.options.root+"/lib/otr/lib/helpers.js",jsxc.options.root+"/lib/otr/lib/dsa.js"],seed:BigInt.getSeed(),debug:!0}))}else jsxc.debug("DSA key loaded"),jsxc.options.otr.priv=DSA.parsePrivate(jsxc.storage.getUserItem("key")),jsxc.otr._createDSA()},_createDSA:function(){jsxc.storage.setUserItem("priv_fingerprint",jsxc.options.otr.priv.fingerprint()),jsxc.otr.dsaFallback!==!1&&jsxc._onMaster()},DSAready:function(dsa){jsxc.storage.setUserItem("key",dsa.packPrivate()),jsxc.options.otr.priv=dsa,jsxc.otr.dsaFallback?jsxc.gui.dialog.close():$.each(jsxc.storage.getUserItem("windowlist"),function(index,val){jsxc.otr.create(val)}),jsxc.otr._createDSA()},enable:function(bid){jsxc.gui.window.get(bid).find(".jsxc_otr").removeClass("jsxc_disabled")}},jsxc.storage={PREFIX:"jsxc",SEP:":",getPrefix:function(uk){var self=jsxc.storage;return self.PREFIX+self.SEP+(uk&&jsxc.bid?jsxc.bid+self.SEP:"")},setItem:function(key,value,uk){jsxc.storageNotConform>0&&"rid"!==key&&"lastActivity"!==key&&(jsxc.storageNotConform>1&&null===jsxc.toSNC&&(jsxc.toSNC=window.setTimeout(function(){jsxc.storageNotConform=0,jsxc.storage.setItem("storageNotConform",0)},1e3)),jsxc.ls.push(JSON.stringify({key:key,value:value}))),"object"==typeof value&&(value=JSON.stringify(value)),localStorage.setItem(jsxc.storage.getPrefix(uk)+key,value)},setUserItem:function(type,key,value){var self=jsxc.storage;return 2===arguments.length?(value=key,key=type,type=""):3===arguments.length&&(key=type+self.SEP+key),jsxc.storage.setItem(key,value,!0)},getItem:function(key,uk){key=jsxc.storage.getPrefix(uk)+key;var value=localStorage.getItem(key);try{return JSON.parse(value)}catch(e){return value}},getUserItem:function(type,key){var self=jsxc.storage;return 1===arguments.length?key=type:2===arguments.length&&(key=type+self.SEP+key),jsxc.storage.getItem(key,!0)},removeItem:function(key,uk){jsxc.storageNotConform&&"rid"!==key&&"lastActivity"!==key&&jsxc.ls.push(JSON.stringify({key:jsxc.storage.prefix+key,value:""})),localStorage.removeItem(jsxc.storage.getPrefix(uk)+key)},removeUserItem:function(type,key){var self=jsxc.storage;1===arguments.length?key=type:2===arguments.length&&(key=type+self.SEP+key),jsxc.storage.removeItem(key,!0)},updateItem:function(key,variable,value,uk){var data=jsxc.storage.getItem(key,uk)||{};"object"==typeof variable?$.each(variable,function(key,val){"undefined"==typeof data[key]&&jsxc.debug("Variable "+key+" doesn't exist in "+variable+". It was created."),data[key]=val}):("undefined"==typeof data[variable]&&jsxc.debug("Variable "+variable+" doesn't exist. It was created."),data[variable]=value),jsxc.storage.setItem(key,data,uk)},updateUserItem:function(type,key,variable,value){var self=jsxc.storage;return 4===arguments.length||3===arguments.length&&"object"==typeof variable?key=type+self.SEP+key:(value=variable,variable=key,key=type),jsxc.storage.updateItem(key,variable,value,!0)},ink:function(key,uk){jsxc.storage.setItem(key,Number(jsxc.storage.getItem(key,uk))+1,uk)},removeElement:function(key,name,uk){var item=jsxc.storage.getItem(key,uk);$.isArray(item)?item=$.grep(item,function(e){return e!==name}):"object"==typeof item&&delete item[name],jsxc.storage.setItem(key,item,uk)},removeUserElement:function(type,key,name){var self=jsxc.storage;return 2===arguments.length?(name=key,key=type):3===arguments.length&&(key=type+self.SEP+key),jsxc.storage.removeElement(key,name,!0)},onStorage:function(e){if(e.key!==jsxc.storage.PREFIX+jsxc.storage.SEP+"rid"&&e.key!==jsxc.storage.PREFIX+jsxc.storage.SEP+"lastActivity"){
-var re=new RegExp("^"+jsxc.storage.PREFIX+jsxc.storage.SEP+"(?:[^"+jsxc.storage.SEP+"]+@[^"+jsxc.storage.SEP+"]+"+jsxc.storage.SEP+")?(.*)","i"),key=e.key.replace(re,"$1");if(jsxc.storageNotConform>0&&jsxc.ls.length>0){var val=e.newValue;try{val=JSON.parse(val)}catch(err){}var index=$.inArray(JSON.stringify({key:key,value:val}),jsxc.ls);if(index>=0)return jsxc.storageNotConform>1&&(window.clearTimeout(jsxc.toSNC),jsxc.storageNotConform=1,jsxc.storage.setItem("storageNotConform",1)),void jsxc.ls.splice(index,1)}if(e.oldValue!==e.newValue){var n,o,bid=key.replace(new RegExp("[^"+jsxc.storage.SEP+"]+"+jsxc.storage.SEP+"(.*)","i"),"$1");if(jsxc.master&&"alive"===key)return jsxc.debug("Master request."),void jsxc.storage.ink("alive");if(!(jsxc.master||"alive"!==key&&"alive_busy"!==key||jsxc.triggeredFromElement))return window.clearTimeout(jsxc.to),jsxc.to=window.setTimeout(jsxc.checkMaster,("alive"===key?jsxc.options.timeout:jsxc.options.busyTimeout)+jsxc.random(60)),void(jsxc.role_allocation||jsxc.onSlave());if(key.match(/^notices/)&&jsxc.notice.load(),key.match(/^presence/)&&jsxc.gui.changePresence(e.newValue,!0),key.match(/^options/)&&e.newValue&&(n=JSON.parse(e.newValue),"undefined"!=typeof n.muteNotification&&n.muteNotification?jsxc.notification.muteSound(!0):jsxc.notification.unmuteSound(!0)),key.match(/^hidden/)&&(jsxc.master?clearTimeout(jsxc.toNotification):jsxc.isHidden()),key.match(/^focus/)&&(jsxc.master?clearTimeout(jsxc.toNotification):jsxc.hasFocus()),key.match(new RegExp("^chat"+jsxc.storage.SEP)))for(var data,el,posts=JSON.parse(e.newValue);posts.length>0;)data=posts.pop(),el=$("#"+data.uid),0===el.length?(jsxc.master&&"out"===data.direction&&jsxc.xmpp.sendMessage(bid,data.msg,data.uid),jsxc.gui.window._postMessage(bid,data)):data.received&&el.addClass("jsxc_received");else{if(key.match(new RegExp("^window"+jsxc.storage.SEP)))return e.newValue?e.oldValue?(n=JSON.parse(e.newValue),n.minimize?jsxc.gui.window._hide(bid):jsxc.gui.window._show(bid),void jsxc.gui.window.setText(bid,n.text)):void jsxc.gui.window.open(bid):void jsxc.gui.window._close(bid);if(key.match(new RegExp("^smp"+jsxc.storage.SEP))){if(!e.newValue)return jsxc.gui.dialog.close(),void(jsxc.master&&jsxc.otr.objects[bid].sm.abort());n=JSON.parse(e.newValue),"undefined"!=typeof n.data?jsxc.otr.onSmpQuestion(bid,n.data):jsxc.master&&n.sec&&(jsxc.gui.dialog.close(),jsxc.otr.sendSmpReq(bid,n.sec,n.quest))}if(!jsxc.master&&key.match(new RegExp("^buddy"+jsxc.storage.SEP))){if(!e.newValue)return void jsxc.gui.roster.purge(bid);if(!e.oldValue)return void jsxc.gui.roster.add(bid);n=JSON.parse(e.newValue),o=JSON.parse(e.oldValue),jsxc.gui.update(bid),(o.status!==n.status||o.sub!==n.sub)&&jsxc.gui.roster.reorder(bid)}if(jsxc.master&&key.match(new RegExp("^deletebuddy"+jsxc.storage.SEP))&&e.newValue&&(n=JSON.parse(e.newValue),jsxc.xmpp.removeBuddy(n.jid),jsxc.storage.removeUserItem(key)),jsxc.master&&key.match(new RegExp("^buddy"+jsxc.storage.SEP))&&(n=JSON.parse(e.newValue),o=JSON.parse(e.oldValue),o.transferReq!==n.transferReq&&(jsxc.storage.updateUserItem("buddy",bid,"transferReq",-1),0===n.transferReq&&jsxc.otr.goPlain(bid),1===n.transferReq&&jsxc.otr.goEncrypt(bid)),o.name!==n.name&&jsxc.gui.roster._rename(bid,n.name)),"sid"===key)return void(e.newValue||jsxc.xmpp.logout());"friendReq"===key&&(n=JSON.parse(e.newValue),jsxc.master&&n.approve>=0&&jsxc.xmpp.resFriendReq(n.jid,n.approve)),jsxc.master&&key.match(new RegExp("^add"+jsxc.storage.SEP))&&(n=JSON.parse(e.newValue),jsxc.xmpp.addBuddy(n.username,n.alias)),"roster"===key&&jsxc.gui.roster.toggle(),jsxc.master&&key.match(new RegExp("^vcard"+jsxc.storage.SEP))&&null!==e.newValue&&e.newValue.match(/^request:/)&&jsxc.xmpp.loadVcard(bid,function(stanza){jsxc.storage.setUserItem("vcard",bid,{state:"success",data:$("<div>").append(stanza).html()})},function(){jsxc.storage.setUserItem("vcard",bid,{state:"error"})}),jsxc.master||!key.match(new RegExp("^vcard"+jsxc.storage.SEP))||null===e.newValue||e.newValue.match(/^request:/)||(n=JSON.parse(e.newValue),"undefined"!=typeof n.state&&$(document).trigger("loaded.vcard.jsxc",n),jsxc.storage.removeUserItem("vcard",bid))}}}},saveMessage:function(bid,direction,msg,encrypted,forwarded,stamp,sender){var chat=jsxc.storage.getUserItem("chat",bid)||[],uid=(new Date).getTime()+":msg";chat.length>jsxc.options.get("numberOfMsg")&&chat.pop();var post={direction:direction,msg:msg,uid:uid.replace(/:/,"-"),received:!1,encrypted:encrypted||!1,forwarded:forwarded||!1,stamp:stamp||(new Date).getTime(),sender:sender};return chat.unshift(post),jsxc.storage.setUserItem("chat",bid,chat),post},saveBuddy:function(bid,data){return jsxc.storage.getUserItem("buddy",bid)?(jsxc.storage.updateUserItem("buddy",bid,data),"updated"):(jsxc.storage.setUserItem("buddy",bid,$.extend({jid:"",name:"",status:0,sub:"none",msgstate:0,transferReq:-1,trust:!1,fingerprint:null,res:[],type:"chat"},data)),"created")}},jsxc.gui.template.incomingCall='<h3 data-i18n="Incoming_call"></h3> <p><span data-i18n="Do_you_want_to_accept_the_call_from"></span> {{bid_name}}?</p> <p class="jsxc_right"> <a href="#" class="button jsxc_reject" data-i18n="Reject"></a> <a href="#" class="button creation jsxc_accept" data-i18n="Accept"></a> </p>',jsxc.gui.template.allowMediaAccess='<p data-i18n="Please_allow_access_to_microphone_and_camera"></p>',jsxc.gui.template.videoWindow='<div class="jsxc_webrtc"> <div class="jsxc_chatarea"> <ul></ul> </div> <div class="jsxc_videoContainer"> <video class="jsxc_localvideo" autoplay></video> <video class="jsxc_remotevideo" autoplay></video> <div class="jsxc_status"></div> <div class="bubblingG"> <span id="bubblingG_1"> </span> <span id="bubblingG_2"> </span> <span id="bubblingG_3"> </span> </div> <div class="jsxc_noRemoteVideo"> <div> <div></div> <p data-i18n="No_video_signal"></p> <div></div> </div> </div> </div> <div class="jsxc_controlbar"> <button type="button" class="jsxc_hangUp" data-i18n="hang_up"></button> <input type="range" class="jsxc_volume" min="0.0" max="1.0" step="0.05" value="0.5" /> <div class="jsxc_buttongroup"> <button type="button" class="jsxc_snapshot" data-i18n="snapshot"></button><button type="button" class="jsxc_snapshots">&#9660;</button> </div> <!-- <button type="button" class="jsxc_mute_local" data-i18n="mute_my_audio"></button> <button type="button" class="jsxc_pause_local" data-i18n="pause_my_video"></button> --> <button type="button" class="jsxc_showchat" data-i18n="chat"></button> <button type="button" class="jsxc_fullscreen" data-i18n="fullscreen"></button> <button type="button" class="jsxc_info" data-i18n="Info"></button> </div> <div class="jsxc_multi"> <div class="jsxc_snapshotbar"> <p>No pictures yet!</p> </div>\n <!--<div class="jsxc_chatarea"> <ul></ul> </div>--> <div class="jsxc_infobar"></div> </div> </div>',jsxc.webrtc={conn:null,localStream:null,remoteStream:null,last_caller:null,AUTO_ACCEPT:!1,reqVideoFeatures:["urn:xmpp:jingle:apps:rtp:video","urn:xmpp:jingle:apps:rtp:audio","urn:xmpp:jingle:transports:ice-udp:1","urn:xmpp:jingle:apps:dtls:0"],chatJids:{},init:function(){var self=jsxc.webrtc;return self.conn=jsxc.xmpp.conn,"firefox"===RTC.browser&&(self.conn.jingle.media_constraints.mandatory.MozDontOfferDataChannel=!0),self.conn.jingle?(self.conn.jingle.PRANSWER=!1,self.conn.jingle.AUTOACCEPT=!1,self.conn.jingle.ice_config=jsxc.storage.getUserItem("iceConfig"),self.conn.jingle.MULTIPARTY=!1,self.conn.jingle.pc_constraints=RTC.pc_constraints,$(document).on("message.jsxc",$.proxy(self.onMessage,self)),$(document).on("presence.jsxc",$.proxy(self.onPresence,self)),$(document).on("mediaready.jingle",$.proxy(self.onMediaReady,self)),$(document).on("mediafailure.jingle",$.proxy(self.onMediaFailure,self)),$(document).on("callincoming.jingle",$.proxy(self.onCallIncoming,self)),$(document).on("callterminated.jingle",$.proxy(self.onCallTerminated,self)),$(document).on("ringing.jingle",$.proxy(self.onCallRinging,self)),$(document).on("remotestreamadded.jingle",$.proxy(self.onRemoteStreamAdded,self)),$(document).on("remotestreamremoved.jingle",$.proxy(self.onRemoteStreamRemoved,self)),$(document).on("iceconnectionstatechange.jingle",$.proxy(self.onIceConnectionStateChanged,self)),$(document).on("nostuncandidates.jingle",$.proxy(self.noStunCandidates,self)),$(document).on("error.jingle",function(ev,sid,error){jsxc.error("[JINGLE]",error)}),self.conn.disco&&self.conn.disco.addFeature("urn:xmpp:jingle:apps:dtls:0"),self.conn.caps&&$(document).on("caps.strophe",$.proxy(self.onCaps,self)),void self.getTurnCrendentials()):void jsxc.error("No jingle plugin found!")},getTurnCrendentials:function(){if(!jsxc.options.turnCredentialsPath)return void jsxc.debug("No path for TURN credentials defined!");var ttl=(jsxc.storage.getUserItem("iceValidity")||0)-(new Date).getTime();return ttl>0?void window.setTimeout(jsxc.webrtc.getTurnCrendentials,ttl+500):void $.ajax(jsxc.options.turnCredentialsPath,{async:!0,success:function(data){var iceConfig={iceServers:[{url:"turn:"+data.url,credential:data.credential,username:data.username}]};jsxc.webrtc.conn.jingle.ice_config=iceConfig,jsxc.storage.setUserItem("iceConfig",iceConfig),jsxc.storage.setUserItem("iceValidity",(new Date).getTime()+1e3*data.ttl)},dataType:"json"})},getCapableRes:function(jid){var self=jsxc.webrtc,bid=jsxc.jidToBid(jid),res=jsxc.storage.getUserItem("res",bid)||[],available=[];return $.each(res,function(r){self.conn.caps.hasFeatureByJid(bid+"/"+r,self.reqVideoFeatures)&&available.push(r)}),available},onAddRosterItem:function(event,bid,data,el){var self=jsxc.webrtc;if(!self.conn)return void $(document).one("connectionReady.jsxc",function(){self.onAddRosterItem(null,bid,data,el)});var videoIcon=$('<div class="jsxc_video jsxc_disabled" title="'+$.t("Start_video_call")+'"></div>');videoIcon.click(function(){return self.startCall(data.jid),!1}),el.find(".jsxc_options.jsxc_left").append(videoIcon),el.on("extra.jsxc",function(){self.updateIcon(bid)})},initWindow:function(event,win){var self=jsxc.webrtc;if(!win.hasClass("jsxc_groupchat")){if(jsxc.debug("webrtc.initWindow"),!self.conn)return void $(document).one("connectionReady.jsxc",function(){self.initWindow(null,win)});var div=$("<div>").addClass("jsxc_video");win.find(".jsxc_transfer:eq(1)").after(div),self.updateIcon(jsxc.jidToBid(win.data("jid")))}},updateIcon:function(bid){jsxc.debug("Update icon",bid);var self=jsxc.webrtc;if(bid!==jsxc.jidToBid(self.conn.jid)){var win=jsxc.gui.window.get(bid),jid=win.data("jid")||jsxc.storage.getUserItem("buddy",bid).jid,el=win.find(".jsxc_video").add(jsxc.gui.roster.getItem(bid).find(".jsxc_video")),capableRes=self.getCapableRes(jid),targetRes=Strophe.getResourceFromJid(jid);null===targetRes&&($.each(jsxc.storage.getUserItem("buddy",bid).res||[],function(index,val){return capableRes.indexOf(val)>-1?(targetRes=val,!1):void 0}),jid=jid+"/"+targetRes),el.off("click"),capableRes.indexOf(targetRes)>-1?(el.click(function(){self.startCall(jid)}),el.removeClass("jsxc_disabled"),el.attr("title",$.t("Start_video_call"))):(el.addClass("jsxc_disabled"),el.attr("title",$.t("Video_call_not_possible")))}},onMessage:function(e,from){var self=jsxc.webrtc,bid=jsxc.jidToBid(from);jsxc.debug("webrtc.onmessage",from),self.chatJids[bid]!==from&&(self.updateIcon(bid),self.chatJids[bid]=from)},onPresence:function(ev,jid){var self=jsxc.webrtc;jsxc.debug("webrtc.onpresence",jid),self.updateIcon(jsxc.jidToBid(jid))},setStatus:function(txt,d){var status=$(".jsxc_webrtc .jsxc_status"),duration="undefined"==typeof d||null===d?4e3:d;if(jsxc.debug("[Webrtc]",txt),status.html()&&(txt=status.html()+"<br />"+txt),status.html(txt),status.css({"margin-left":"-"+status.width()/2+"px",opacity:0,display:"block"}),status.stop().animate({opacity:1}),clearTimeout(status.data("timeout")),0!==duration){var to=setTimeout(function(){status.stop().animate({opacity:0},function(){status.html("")})},duration);status.data("timeout",to)}},onCaps:function(event,jid){var self=jsxc.webrtc;self.updateIcon(jsxc.jidToBid(jid))},onMediaReady:function(event,stream){jsxc.debug("media ready");var self=jsxc.webrtc;self.localStream=stream,self.conn.jingle.localStream=stream,jsxc.gui.showVideoWindow(self.last_caller);var i;for(i=0;i<stream.getAudioTracks().length;i++)self.setStatus(stream.getAudioTracks().length>0?"Use local audio device.":"No local audio device."),jsxc.debug('using audio device "'+stream.getAudioTracks()[i].label+'"');for(i=0;i<stream.getVideoTracks().length;i++)self.setStatus(stream.getVideoTracks().length>0?"Use local video device.":"No local video device."),jsxc.debug('using video device "'+stream.getVideoTracks()[i].label+'"'),$("#jsxc_dialog .jsxc_localvideo").show();$(document).one("cleanup.dialog.jsxc",$.proxy(self.hangUp,self)),$(document).trigger("finish.mediaready.jsxc")},onMediaFailure:function(ev,err){this.setStatus("media failure"),jsxc.gui.window.postMessage(jsxc.jidToBid(jsxc.webrtc.last_caller),"sys",$.t("Media_failure")+err.name),jsxc.debug("media failure: "+err.name)},onCallIncoming:function(event,sid){jsxc.debug("incoming call"+sid);var self=this,sess=this.conn.jingle.sessions[sid],bid=jsxc.jidToBid(sess.peerjid);if(jsxc.gui.window.postMessage(bid,"sys",$.t("Incoming_call")),jsxc.notification.notify($.t("Incoming_call"),$.t("from")+" "+bid),sess.sendRinging(),jsxc.webrtc.last_caller=sess.peerjid,jsxc.switchEvents({"mediaready.jingle":function(event,stream){self.setStatus("Accept call"),sess.localStream=stream,sess.peerconnection.addStream(stream),sess.sendAnswer(),sess.accept()},"mediafailure.jingle":function(){sess.sendTerminate("decline"),sess.terminate()}}),jsxc.webrtc.AUTO_ACCEPT)return void self.reqUserMedia();var dialog=jsxc.gui.dialog.open(jsxc.gui.template.get("incomingCall",bid),{noClose:!0});dialog.find(".jsxc_accept").click(function(){$(document).trigger("accept.call.jsxc"),self.reqUserMedia()}),dialog.find(".jsxc_reject").click(function(){jsxc.gui.dialog.close(),$(document).trigger("reject.call.jsxc"),sess.sendTerminate("decline"),sess.terminate()})},onCallTerminated:function(event,sid,reason,text){this.setStatus("call terminated "+sid+(reason?": "+reason+" "+text:""));var bid=jsxc.jidToBid(jsxc.webrtc.last_caller);this.localStream&&this.localStream.stop(),$(".jsxc_videoContainer").length&&($(".jsxc_remotevideo")[0].src="",$(".jsxc_localvideo")[0].src=""),this.conn.jingle.localStream=null,this.localStream=null,this.remoteStream=null;var win=$("#jsxc_dialog .jsxc_chatarea > ul > li");$("#jsxc_windowList > ul").prepend(win.detach()),win.find(".slimScrollDiv").resizable("enable"),$(document).off("cleanup.dialog.jsxc"),$(document).off("error.jingle"),jsxc.gui.dialog.close(),jsxc.gui.window.postMessage(bid,"sys",$.t("Call_terminated")+(reason?": "+$.t(reason):"")+".")},onCallRinging:function(){this.setStatus("ringing...",0)},onRemoteStreamAdded:function(event,data,sid){this.setStatus("Remote stream for session "+sid+" added.");var stream=data.stream;this.remoteStream=stream;var sess=this.conn.jingle.sessions[sid],isVideoDevice=stream.getVideoTracks().length>0,isAudioDevice=stream.getAudioTracks().length>0;sess.remoteDevices={video:isVideoDevice,audio:isAudioDevice},this.setStatus(isVideoDevice?"Use remote video device.":"No remote video device"),this.setStatus(isAudioDevice?"Use remote audio device.":"No remote audio device"),$(".jsxc_remotevideo").length&&(RTC.attachMediaStream($("#jsxc_dialog .jsxc_remotevideo"),stream),$("#jsxc_dialog .jsxc_"+(isVideoDevice?"remotevideo":"noRemoteVideo")).addClass("jsxc_deviceAvailable"))},onRemoteStreamRemoved:function(event,data,sid){this.setStatus("Remote stream for session "+sid+" removed.")},onIceConnectionStateChanged:function(event,sid,sess){var sigState=sess.peerconnection.signalingState,iceCon=sess.peerconnection.iceConnectionState;if(jsxc.debug("iceGat state for "+sid,sess.peerconnection.iceGatheringState),jsxc.debug("iceCon state for "+sid,iceCon),jsxc.debug("sig state for "+sid,sigState),"stable"!==sigState||"connected"!==iceCon&&"completed"!==iceCon)"failed"===iceCon&&(jsxc.gui.window.postMessage(jsxc.jidToBid(sess.peerjid),"sys",$.t("ICE_connection_failure")),$(document).off("cleanup.dialog.jsxc"),sess.sendTerminate("failed-transport"),sess.terminate(),$(document).trigger("callterminated.jingle"));else{$("#jsxc_dialog .jsxc_deviceAvailable").show(),$("#jsxc_dialog .bubblingG").hide();var localSDP=sess.peerconnection.localDescription.sdp,remoteSDP=sess.peerconnection.remoteDescription.sdp;sess.local_fp=SDPUtil.parse_fingerprint(SDPUtil.find_line(localSDP,"a=fingerprint:")).fingerprint,sess.remote_fp=SDPUtil.parse_fingerprint(SDPUtil.find_line(remoteSDP,"a=fingerprint:")).fingerprint;var ip_regex="(\\d{1,3}\\.\\d{1,3}.\\d{1,3}\\.\\d{1,3}) \\d+ typ host";sess.remote_ip=remoteSDP.match(new RegExp(ip_regex))[1],sess.local_ip=localSDP.match(new RegExp(ip_regex))[1];for(var match,regex=new RegExp(ip_regex,"g");null!==(match=regex.exec(remoteSDP));)if(match[1]!==sess.remote_ip)return void alert("!!! WARNING !!!\n\nPossible Man-in-the-middle attack detected!\n\nYou should close the connection.");var text="<p>";text+="<b>"+$.t("Local_IP")+": </b>"+sess.local_ip+"<br />",text+="<b>"+$.t("Remote_IP")+": </b>"+sess.remote_ip+"<br />",text+="<b>"+$.t("Local_Fingerprint")+": </b>"+sess.local_fp+"<br />",text+="<b>"+$.t("Remote_Fingerprint")+": </b>"+sess.remote_fp,text+="</p>",$("#jsxc_dialog .jsxc_infobar").html(text)}},noStunCandidates:function(){},startCall:function(jid,um){var self=this;return null===Strophe.getResourceFromJid(jid)?void jsxc.debug("We need a full jid"):(self.last_caller=jid,jsxc.switchEvents({"finish.mediaready.jsxc":function(){self.setStatus("Initiate call"),jsxc.gui.window.postMessage(jsxc.jidToBid(jid),"sys",$.t("Call_started")),$(document).one("error.jingle",function(e,sid,error){"offer"===error.source&&($(document).off("cleanup.dialog.jsxc"),setTimeout(function(){jsxc.gui.showAlert("Sorry, we couldn't establish a connection. Maybe your buddy is offline.")},500))}),self.conn.jingle.initiate(jid,self.conn.jid.toLowerCase())},"mediafailure.jingle":function(){jsxc.gui.dialog.close()}}),void self.reqUserMedia(um))},hangUp:function(reason,text){$(document).off("cleanup.dialog.jsxc"),jsxc.webrtc.conn.jingle.terminate(null,reason,text),$(document).trigger("callterminated.jingle")},reqUserMedia:function(um){return this.localStream?void $(document).trigger("mediaready.jingle",[this.localStream]):(um=um||["video","audio"],jsxc.gui.dialog.open(jsxc.gui.template.get("allowMediaAccess"),{noClose:!0}),this.setStatus("please allow access to microphone and camera"),void("undefined"!=typeof MediaStreamTrack&&"undefined"!=typeof MediaStreamTrack.getSources?MediaStreamTrack.getSources(function(sourceInfo){var availableDevices=sourceInfo.map(function(el){return el.kind});um=um.filter(function(el){return-1!==availableDevices.indexOf(el)}),getUserMediaWithConstraints(um)}):getUserMediaWithConstraints(um)))},snapshot:function(video){video||jsxc.debug("Missing video element"),$(".jsxc_snapshotbar p").remove();var canvas=$("<canvas/>").css("display","none").appendTo("body").attr({width:video.width(),height:video.height()}).get(0),ctx=canvas.getContext("2d");ctx.drawImage(video[0],0,0);var img=$("<img/>"),url=null;try{url=canvas.toDataURL("image/jpeg")}catch(err){return void jsxc.warn("Error",err)}img[0].src=url;var link=$("<a/>").attr({target:"_blank",href:url});link.append(img),$(".jsxc_snapshotbar").append(link),canvas.remove()}},jsxc.gui.showVideoWindow=function(jid){var self=jsxc.webrtc;$(document).one("complete.dialog.jsxc",function(){$("#jsxc_dialog .jsxc_localvideo")[0].muted=!0,$("#jsxc_dialog .jsxc_localvideo")[0].volume=0;var rv=$("#jsxc_dialog .jsxc_remotevideo"),lv=$("#jsxc_dialog .jsxc_localvideo");lv.draggable({containment:"parent"}),RTC.attachMediaStream(lv,self.localStream);var w_dialog=$("#jsxc_dialog").width(),w_remote=rv.width();if(w_remote>w_dialog){var scale=w_dialog/w_remote,new_h=rv.height()*scale,new_w=w_dialog,vc=$("#jsxc_dialog .jsxc_videoContainer");rv.height(new_h),rv.width(new_w),vc.height(new_h),vc.width(new_w),lv.height(lv.height()*scale),lv.width(lv.width()*scale)}self.remoteStream&&(RTC.attachMediaStream(rv,self.remoteStream),$("#jsxc_dialog .jsxc_"+(self.remoteStream.getVideoTracks().length>0?"remotevideo":"noRemoteVideo")).addClass("jsxc_deviceAvailable"));var toggleMulti=function(elem,open){$("#jsxc_dialog .jsxc_multi > div").not(elem).slideUp();var opt={complete:jsxc.gui.dialog.resize};open?elem.slideDown(opt):elem.slideToggle(opt)},win=jsxc.gui.window.open(jsxc.jidToBid(jid));win.find(".slimScrollDiv").resizable("disable"),win.find(".jsxc_textarea").slimScroll({height:413}),win.find(".jsxc_emoticons").css("top","419px"),$("#jsxc_dialog .jsxc_chatarea ul").append(win.detach()),$("#jsxc_dialog .jsxc_hangUp").click(function(){jsxc.webrtc.hangUp()}),$("#jsxc_dialog .jsxc_snapshot").click(function(){jsxc.webrtc.snapshot(rv),toggleMulti($("#jsxc_dialog .jsxc_snapshotbar"),!0)}),$("#jsxc_dialog .jsxc_snapshots").click(function(){toggleMulti($("#jsxc_dialog .jsxc_snapshotbar"))}),$("#jsxc_dialog .jsxc_showchat").click(function(){var chatarea=$("#jsxc_dialog .jsxc_chatarea");chatarea.is(":hidden")?(chatarea.show(),$("#jsxc_dialog .jsxc_webrtc").width("900"),jsxc.gui.dialog.resize({width:"920px"})):(chatarea.hide(),$("#jsxc_dialog .jsxc_webrtc").width("650"),jsxc.gui.dialog.resize({width:"660px"}))}),$("#jsxc_dialog .jsxc_info").click(function(){toggleMulti($("#jsxc_dialog .jsxc_infobar"))}),$("#jsxc_dialog .jsxc_fullscreen").click(function(){$.support.fullscreen&&($(document).one("disabled.fullscreen",function(){lv.removeAttr("style")}),$("#jsxc_dialog .jsxc_videoContainer").fullscreen())}),$("#jsxc_dialog .jsxc_volume").change(function(){rv[0].volume=$(this).val()}),$("#jsxc_dialog .jsxc_volume").dblclick(function(){$(this).val(.5)})}),jsxc.gui.dialog.open(jsxc.gui.template.get("videoWindow"),{noClose:!0})},$.extend(jsxc.CONST,{KEYCODE_ENTER:13,KEYCODE_ESC:27}),$(document).ready(function(){RTC=setupRTC(),null!==RTC&&(RTCPeerconnection=RTC.peerconnection,$(document).on("add.roster.jsxc",jsxc.webrtc.onAddRosterItem),$(document).on("init.window.jsxc",jsxc.webrtc.initWindow),$(document).on("attached.jsxc",jsxc.webrtc.init))}),jsxc.xmpp={conn:null,login:function(){if(!jsxc.xmpp.conn||!jsxc.xmpp.conn.connected){var jid=null,password=null,sid=null,rid=null;switch(arguments.length){case 2:jid=arguments[0],password=arguments[1];break;case 3:jid=arguments[0],sid=arguments[1],rid=arguments[2];break;default:sid=jsxc.storage.getItem("sid"),rid=jsxc.storage.getItem("rid"),null!==sid&&null!==rid?jid=jsxc.storage.getItem("jid"):(sid=null,rid=null,jid=jsxc.options.xmpp.jid)}var url=jsxc.options.get("xmpp").url;$(document).on("connected.jsxc",jsxc.xmpp.connected),$(document).on("attached.jsxc",jsxc.xmpp.attached),$(document).on("disconnected.jsxc",jsxc.xmpp.disconnected),$(document).on("ridChange",jsxc.xmpp.onRidChange),$(document).on("connfail.jsxc",jsxc.xmpp.onConnfail),$(document).on("authfail.jsxc",jsxc.xmpp.onAuthFail),Strophe.addNamespace("RECEIPTS","urn:xmpp:receipts"),jsxc.xmpp.conn=new Strophe.Connection(url);var stropheGetUniqueId=jsxc.xmpp.conn.getUniqueId;jsxc.xmpp.conn.getUniqueId=function(suffix){var uid=stropheGetUniqueId.call(jsxc.xmpp.conn,suffix);return jsxc.storage.setItem("_uniqueId",jsxc.xmpp.conn._uniqueId),uid},jsxc.storage.getItem("debug")===!0&&(jsxc.xmpp.conn.xmlInput=function(data){console.log("<",data)},jsxc.xmpp.conn.xmlOutput=function(data){console.log(">",data)});var callback=function(status,condition){switch(jsxc.debug(Object.getOwnPropertyNames(Strophe.Status)[status]+": "+condition),status){case Strophe.Status.CONNECTED:jsxc.bid=jsxc.jidToBid(jsxc.xmpp.conn.jid.toLowerCase()),$(document).trigger("connected.jsxc");break;case Strophe.Status.ATTACHED:$(document).trigger("attached.jsxc");break;case Strophe.Status.DISCONNECTED:$(document).trigger("disconnected.jsxc");break;case Strophe.Status.CONNFAIL:$(document).trigger("connfail.jsxc");break;case Strophe.Status.AUTHFAIL:$(document).trigger("authfail.jsxc")}};jsxc.xmpp.conn.caps&&(jsxc.xmpp.conn.caps.node="http://jsxc.org/"),jsxc.restore&&sid&&rid?(jsxc.debug("Try to attach"),jsxc.debug("SID: "+sid),jsxc.xmpp.conn.attach(jid,sid,rid,callback)):(jsxc.debug("New connection"),jsxc.xmpp.conn.caps&&jsxc.xmpp.conn._addSysHandler(function(stanza){var from=jsxc.xmpp.conn.domain,c=stanza.querySelector("c"),ver=c.getAttribute("ver"),node=c.getAttribute("node"),_jidNodeIndex=JSON.parse(localStorage.getItem("strophe.caps._jidNodeIndex"))||{};jsxc.xmpp.conn.caps._jidVerIndex[from]=ver,_jidNodeIndex[from]=node,localStorage.setItem("strophe.caps._jidVerIndex",JSON.stringify(jsxc.xmpp.conn.caps._jidVerIndex)),localStorage.setItem("strophe.caps._jidNodeIndex",JSON.stringify(_jidNodeIndex))},Strophe.NS.CAPS),jsxc.xmpp.conn.connect(jid||jsxc.options.xmpp.jid,password||jsxc.options.xmpp.password,callback))}},logout:function(complete){if(jsxc.storage.removeItem("sid"),jsxc.storage.removeUserItem("buddylist"),jsxc.storage.removeUserItem("windowlist"),jsxc.storage.removeItem("_uniqueId"),!jsxc.master)return $("#jsxc_roster").remove(),$("#jsxc_windowlist").remove(),!0;if(null===jsxc.xmpp.conn)return!0;$("body").click(),jsxc.triggeredFromElement="boolean"==typeof complete?complete:!0,$.each(jsxc.storage.getUserItem("otrlist")||{},function(i,val){jsxc.otr.create(val)});var numOtr=Object.keys(jsxc.otr.objects||{}).length+1,disReady=function(){--numOtr<=0&&(jsxc.xmpp.conn.flush(),setTimeout(function(){jsxc.xmpp.conn.disconnect()},600))};return $.each(jsxc.otr.objects||{},function(key,obj){obj.msgstate===OTR.CONST.MSGSTATE_ENCRYPTED?obj.endOtr.call(obj,function(){obj.init.call(obj),jsxc.otr.backup(key),disReady()}):disReady()}),disReady(),!1},connected:function(){jsxc.xmpp.conn.pause();var nomJid=Strophe.getBareJidFromJid(jsxc.xmpp.conn.jid).toLowerCase()+"/"+Strophe.getResourceFromJid(jsxc.xmpp.conn.jid);if(jsxc.storage.setItem("sid",jsxc.xmpp.conn._proto.sid),jsxc.storage.setItem("jid",nomJid),jsxc.storage.setItem("lastActivity",(new Date).getTime()),jsxc.storage.removeUserItem("buddylist"),jsxc.storage.removeUserItem("windowlist"),jsxc.storage.removeUserItem("own"),jsxc.storage.removeUserItem("avatar","own"),jsxc.storage.removeUserItem("otrlist"),jsxc.options.loginForm.triggered)switch(jsxc.options.loginForm.onConnected||"submit"){case"submit":jsxc.submitLoginForm();case!1:return void jsxc.xmpp.connectionReady()}jsxc.gui.init(),$("#jsxc_roster").removeClass("jsxc_noConnection"),jsxc.onMaster(),jsxc.xmpp.conn.resume(),jsxc.gui.dialog.close(),$(document).trigger("attached.jsxc")},attached:function(){jsxc.xmpp.conn.addHandler(jsxc.xmpp.onRosterChanged,"jabber:iq:roster","iq","set"),jsxc.xmpp.conn.addHandler(jsxc.xmpp.onMessage,null,"message","chat"),jsxc.xmpp.conn.addHandler(jsxc.xmpp.onReceived,null,"message"),jsxc.xmpp.conn.addHandler(jsxc.xmpp.onPresence,null,"presence");var caps=jsxc.xmpp.conn.caps,domain=jsxc.xmpp.conn.domain;if(caps&&jsxc.options.get("carbons").enable){var conditionalEnable=function(){jsxc.xmpp.conn.caps.hasFeatureByJid(domain,jsxc.CONST.NS.CARBONS)&&jsxc.xmpp.carbons.enable()};if("undefined"==typeof caps._knownCapabilities[caps._jidVerIndex[domain]]){var _jidNodeIndex=JSON.parse(localStorage.getItem("strophe.caps._jidNodeIndex"))||{};$(document).on("caps.strophe",function onCaps(ev,from){from===domain&&(conditionalEnable(),$(document).off("caps.strophe",onCaps))}),caps._requestCapabilities(jsxc.xmpp.conn.domain,_jidNodeIndex[domain],caps._jidVerIndex[domain])}else conditionalEnable()}if(jsxc.restore&&jsxc.storage.getUserItem("buddylist"))jsxc.xmpp.sendPres();else{$(document).one("cloaded.roster.jsxc",jsxc.xmpp.sendPres),$("#jsxc_roster > p:first").remove();var iq=$iq({type:"get"}).c("query",{xmlns:"jabber:iq:roster"});jsxc.xmpp.conn.sendIQ(iq,jsxc.xmpp.onRoster)}jsxc.xmpp.connectionReady()},connectionReady:function(){jsxc.xmpp.conn._uniqueId=jsxc.storage.getItem("_uniqueId")||(new Date).getTime(),$(document).trigger("connectionReady.jsxc")},sendPres:function(){jsxc.xmpp.conn.disco&&(jsxc.xmpp.conn.disco.addIdentity("client","web","JSXC"),jsxc.xmpp.conn.disco.addFeature(Strophe.NS.DISCO_INFO),jsxc.xmpp.conn.disco.addFeature(Strophe.NS.RECEIPTS));var pres=$pres();jsxc.xmpp.conn.caps&&pres.c("c",jsxc.xmpp.conn.caps.generateCapsAttrs()).up();var presState=jsxc.storage.getUserItem("presence")||"online";"online"!==presState&&pres.c("show").t(presState).up();var priority=jsxc.options.get("priority");priority&&"undefined"!=typeof priority[presState]&&0!==parseInt(priority[presState])&&pres.c("priority").t(priority[presState]).up(),jsxc.debug("Send presence",pres.toString()),jsxc.xmpp.conn.send(pres)},disconnected:function(){jsxc.debug("disconnected"),jsxc.storage.removeItem("sid"),jsxc.storage.removeItem("rid"),jsxc.storage.removeItem("lastActivity"),jsxc.storage.removeItem("hidden"),jsxc.storage.removeUserItem("avatar","own"),jsxc.storage.removeUserItem("otrlist"),$(document).off("connected.jsxc",jsxc.xmpp.connected),$(document).off("attached.jsxc",jsxc.xmpp.attached),$(document).off("disconnected.jsxc",jsxc.xmpp.disconnected),$(document).off("ridChange",jsxc.xmpp.onRidChange),$(document).off("connfail.jsxc",jsxc.xmpp.onConnfail),$(document).off("authfail.jsxc",jsxc.xmpp.onAuthFail),jsxc.xmpp.conn=null,$("#jsxc_windowList").remove(),jsxc.triggeredFromElement?($(document).trigger("toggle.roster.jsxc",["hidden",0]),$("#jsxc_roster").remove(),jsxc.triggeredFromLogout&&(window.location=jsxc.options.logoutElement.attr("href"))):jsxc.gui.roster.noConnection(),window.clearInterval(jsxc.keepalive)},onConnfail:function(ev,condition){jsxc.debug("XMPP connection failed: "+condition),jsxc.options.loginForm.triggered&&jsxc.submitLoginForm()},onAuthFail:function(){if(jsxc.options.loginForm.triggered)switch(jsxc.options.loginForm.onAuthFail||"ask"){case"ask":jsxc.gui.showAuthFail();break;case"submit":jsxc.submitLoginForm()}jsxc.triggeredFromBox&&jsxc.gui.showAuthFail()},onRoster:function(iq){jsxc.debug("Load roster",iq);var buddies=[];$(iq).find("item").each(function(){var jid=$(this).attr("jid"),name=$(this).attr("name")||jid,bid=jsxc.jidToBid(jid),sub=$(this).attr("subscription");buddies.push(bid),jsxc.storage.removeUserItem("res",bid),jsxc.storage.saveBuddy(bid,{jid:jid,name:name,status:0,sub:sub,res:[]}),jsxc.gui.roster.add(bid)}),0===buddies.length&&jsxc.gui.roster.empty(),jsxc.storage.setUserItem("buddylist",buddies),jsxc.debug("Roster loaded"),$(document).trigger("cloaded.roster.jsxc")},onRosterChanged:function(iq){return jsxc.debug("onRosterChanged",iq),$(iq).find("item").each(function(){var jid=$(this).attr("jid"),name=$(this).attr("name")||jid,bid=jsxc.jidToBid(jid),sub=$(this).attr("subscription");if("remove"===sub)jsxc.gui.roster.purge(bid);else{var bl=jsxc.storage.getUserItem("buddylist");bl.indexOf(bid)<0&&(bl.push(bid),jsxc.storage.setUserItem("buddylist",bl));var temp=jsxc.storage.saveBuddy(bid,{jid:jid,name:name,sub:sub});"updated"===temp?(jsxc.gui.update(bid),jsxc.gui.roster.reorder(bid)):jsxc.gui.roster.add(bid)}if("from"===sub||"both"===sub){var notice,notices=jsxc.storage.getUserItem("notices"),noticeKey=null;for(noticeKey in notices)notice=notices[noticeKey],"gui.showApproveDialog"===notice.fnName&&notice.fnParams[0]===jid&&(jsxc.debug("Remove notice with key "+noticeKey),jsxc.notice.remove(noticeKey));
-
-}}),jsxc.storage.getUserItem("buddylist")&&0!==jsxc.storage.getUserItem("buddylist").length?$("#jsxc_roster > p:first").remove():jsxc.gui.roster.empty(),!0},onPresence:function(presence){jsxc.debug("onPresence",presence);var ptype=$(presence).attr("type"),from=$(presence).attr("from"),jid=Strophe.getBareJidFromJid(from).toLowerCase(),r=Strophe.getResourceFromJid(from),bid=jsxc.jidToBid(jid),data=jsxc.storage.getUserItem("buddy",bid),res=jsxc.storage.getUserItem("res",bid)||{},status=null,xVCard=$(presence).find('x[xmlns="vcard-temp:x:update"]');if(jid===Strophe.getBareJidFromJid(jsxc.storage.getItem("jid")))return!0;if("error"===ptype)return $(document).trigger("error.presence.jsxc",[from,presence]),jsxc.error("[XMPP] "+$(presence).attr("code")),!0;if("subscribe"===ptype)return jsxc.storage.setUserItem("friendReq",{jid:jid,approve:-1}),jsxc.notice.add($.t("Friendship_request"),$.t("from")+" "+jid,"gui.showApproveDialog",[jid]),!0;if("unavailable"===ptype||"unsubscribed"===ptype)status=jsxc.CONST.STATUS.indexOf("offline");else{var show=$(presence).find("show").text();status=jsxc.CONST.STATUS.indexOf(""===show?"online":show)}0===status?delete res[r]:res[r]=status;var maxVal=[],max=0,prop=null;for(prop in res)res.hasOwnProperty(prop)&&max<=res[prop]&&(max!==res[prop]&&(maxVal=[],max=res[prop]),maxVal.push(prop));if(0===data.status&&max>0&&jsxc.notification.notify({title:data.name,msg:$.t("has_come_online"),source:bid}),data.status=max,data.res=maxVal,data.jid=jid,xVCard.length>0){var photo=xVCard.find("photo");photo.length>0&&photo.text()!==data.avatar&&(jsxc.storage.removeUserItem("avatar",data.avatar),data.avatar=photo.text())}return jsxc.gui.window.get(bid).length>0&&jsxc.gui.window.get(bid).data("jid",jid),jsxc.storage.setUserItem("buddy",bid,data),jsxc.storage.setUserItem("res",bid,res),jsxc.debug("Presence ("+from+"): "+status),jsxc.gui.update(bid),jsxc.gui.roster.reorder(bid),$(document).trigger("presence.jsxc",[from,status,presence]),!0},onMessage:function(stanza){var message,carbon,forwarded=$(stanza).find('forwarded[xmlns="'+jsxc.CONST.NS.FORWARD+'"]');forwarded.length>0?(message=forwarded.find("> message"),forwarded=!0,carbon=$(stanza).find('> [xmlns="'+jsxc.CONST.NS.CARBONS+'"]'),0===carbon.length&&(carbon=!1),jsxc.debug("Incoming forwarded message",message)):(message=stanza,forwarded=!1,carbon=!1,jsxc.debug("Incoming message",message));var body=$(message).find("body:first").text();if(!body||body.match(/\?OTR/i)&&forwarded)return!0;var bid,type=$(message).attr("type"),from=$(message).attr("from"),mid=$(message).attr("id"),delay=$(message).find('delay[xmlns="urn:xmpp:delay"]'),stamp=delay.length>0?new Date(delay.attr("stamp")):new Date;if(stamp=stamp.getTime(),carbon){var direction="sent"===carbon.prop("tagName")?"out":"in";return bid=jsxc.jidToBid("out"===direction?$(message).attr("to"):from),jsxc.gui.window.postMessage(bid,direction,body,!1,forwarded,stamp),!0}forwarded&&(body=from+" "+$.t("to")+" "+$(stanza).attr("to")+'"'+body+'"',from=$(stanza).attr("from"));var jid=Strophe.getBareJidFromJid(from);bid=jsxc.jidToBid(jid);var data=jsxc.storage.getUserItem("buddy",bid),request=$(message).find("request[xmlns='urn:xmpp:receipts']");if(null===data){var chat=jsxc.storage.getUserItem("chat",bid)||[];0===chat.length&&jsxc.notice.add($.t("Unknown_sender"),$.t("You_received_a_message_from_an_unknown_sender")+" ("+bid+").","gui.showUnknownSender",[bid]);var msg=jsxc.removeHTML(body);return msg=jsxc.escapeHTML(msg),jsxc.storage.saveMessage(bid,"in",msg,!1,forwarded,stamp),!0}var win=jsxc.gui.window.init(bid);return"chat"===type&&(win.data("jid",from),jsxc.storage.updateUserItem("buddy",bid,{jid:from})),$(document).trigger("message.jsxc",[from,body]),jsxc.master&&!jsxc.otr.objects[bid]&&jsxc.otr.create(bid),forwarded||null===mid||!request.length||null===data||"both"!==data.sub&&"from"!==data.sub||"chat"!==type||jsxc.xmpp.conn.send($msg({to:from}).c("received",{xmlns:"urn:xmpp:receipts",id:mid})),jsxc.otr.objects.hasOwnProperty(bid)?jsxc.otr.objects[bid].receiveMsg(body,{stamp:stamp,forwarded:forwarded}):jsxc.gui.window.postMessage(bid,"in",body,!1,forwarded,stamp),!0},onRidChange:function(ev,data){jsxc.storage.setItem("rid",data.rid)},resFriendReq:function(from,approve){jsxc.master?(jsxc.xmpp.conn.send($pres({to:from,type:approve?"subscribed":"unsubscribed"})),jsxc.storage.removeUserItem("friendReq"),jsxc.gui.dialog.close()):jsxc.storage.updateUserItem("friendReq","approve",approve)},addBuddy:function(username,alias){var bid=jsxc.jidToBid(username);if(jsxc.master){var iq=$iq({type:"set"}).c("query",{xmlns:"jabber:iq:roster"}).c("item",{jid:username,name:alias||""});jsxc.xmpp.conn.sendIQ(iq),jsxc.xmpp.conn.send($pres({to:username,type:"subscribe"})),jsxc.storage.removeUserItem("add_"+bid)}else jsxc.storage.setUserItem("add_"+bid,{username:username,alias:alias||null})},removeBuddy:function(jid){var bid=jsxc.jidToBid(jid),iq=$iq({type:"set"}).c("query",{xmlns:"jabber:iq:roster"}).c("item",{jid:Strophe.getBareJidFromJid(jid),subscription:"remove"});jsxc.xmpp.conn.sendIQ(iq),jsxc.gui.roster.purge(bid)},onReceived:function(message){var from=$(message).attr("from"),jid=Strophe.getBareJidFromJid(from),bid=jsxc.jidToBid(jid),received=$(message).find("received[xmlns='urn:xmpp:receipts']");if(received.length){var i,receivedId=received.attr("id").replace(/:/,"-"),chat=jsxc.storage.getUserItem("chat",bid);for(i=chat.length-1;i>=0;i--)if(chat[i].uid===receivedId){chat[i].received=!0,$("#"+receivedId).addClass("jsxc_received"),jsxc.storage.setUserItem("chat",bid,chat);break}}return!0},sendMessage:function(bid,msg,uid){jsxc.otr.objects.hasOwnProperty(bid)?jsxc.otr.objects[bid].sendMsg(msg,uid):jsxc.xmpp._sendMessage(jsxc.gui.window.get(bid).data("jid"),msg,uid)},_sendMessage:function(jid,msg,uid){var data=jsxc.storage.getUserItem("buddy",jsxc.jidToBid(jid))||{},isBar=Strophe.getBareJidFromJid(jid)===jid,type=data.type||"chat",xmlMsg=$msg({to:jid,type:type,id:uid}).c("body").t(msg);jsxc.xmpp.carbons.enabled&&msg.match(/^\?OTR/)&&xmlMsg.up().c("private",{xmlns:jsxc.CONST.NS.CARBONS}),"chat"===type&&(isBar||jsxc.xmpp.conn.caps.hasFeatureByJid(jid,Strophe.NS.RECEIPTS))&&xmlMsg.up().c("request",{xmlns:"urn:xmpp:receipts"}),jsxc.xmpp.conn.send(xmlMsg)},loadVcard:function(bid,cb,error_cb){jsxc.master?jsxc.xmpp.conn.vcard.get(cb,bid,error_cb):(jsxc.storage.setUserItem("vcard",bid,"request:"+(new Date).getTime()),$(document).one("loaded.vcard.jsxc",function(ev,result){result&&"success"===result.state?cb($(result.data).get(0)):error_cb()}))},getCapabilitiesByJid:function(jid){if(jsxc.xmpp.conn)return jsxc.xmpp.conn.caps.getCapabilitiesByJid(jid);var jidVerIndex=JSON.parse(localStorage.getItem("strophe.caps._jidVerIndex"))||{},knownCapabilities=JSON.parse(localStorage.getItem("strophe.caps._knownCapabilities"))||{};return jidVerIndex[jid]?knownCapabilities[jidVerIndex[jid]]:null}},jsxc.xmpp.carbons={enabled:!1,enable:function(cb){var iq=$iq({type:"set"}).c("enable",{xmlns:jsxc.CONST.NS.CARBONS});jsxc.xmpp.conn.sendIQ(iq,function(){jsxc.xmpp.carbons.enabled=!0,jsxc.debug("Carbons enabled"),cb&&cb.call(this)},function(stanza){jsxc.warn("Could not enable carbons",stanza)})},disable:function(cb){var iq=$iq({type:"set"}).c("disable",{xmlns:jsxc.CONST.NS.CARBONS});jsxc.xmpp.conn.sendIQ(iq,function(){jsxc.xmpp.carbons.enabled=!1,jsxc.debug("Carbons disabled"),cb&&cb.call(this)},function(stanza){jsxc.warn("Could not disable carbons",stanza)})},refresh:function(err){return err!==!1?jsxc.options.get("carbons").enable?jsxc.xmpp.carbons.enable():jsxc.xmpp.carbons.disable():void 0}}}(jQuery);
+var jsxc=null,RTC=null,RTCPeerconnection=null;!function($){"use strict";jsxc={version:"2.0.0",master:!1,role_allocation:!1,to:null,toBusy:null,toNotification:null,toNotificationDelay:500,keepalive:null,restore:!1,restoreCompleted:!1,triggeredFromBox:!1,triggeredFromElement:!1,triggeredFromLogout:!1,ls:[],storageNotConform:null,toSNC:null,bid:null,CONST:{NOTIFICATION_DEFAULT:"default",NOTIFICATION_GRANTED:"granted",NOTIFICATION_DENIED:"denied",STATUS:["offline","dnd","xa","away","chat","online"],SOUNDS:{MSG:"incomingMessage.wav",CALL:"Rotary-Phone6.mp3",NOTICE:"Ping1.mp3"},REGEX:{JID:new RegExp("\\b[^\"&'\\/:<>@\\s]+@[\\w-_.]+\\b","ig"),URL:new RegExp(/((?:https?:\/\/|www\.|([\w\-]+\.[a-zA-Z]{2,3})(?=\b))(?:(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\)([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|])?)|(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|]))?)/gi)},NS:{CARBONS:"urn:xmpp:carbons:2",FORWARD:"urn:xmpp:forward:0"}},getFormattedTime:function(unixtime){var msgDate=new Date(parseInt(unixtime)),date=("0"+msgDate.getDate()).slice(-2),month=("0"+(msgDate.getMonth()+1)).slice(-2),year=msgDate.getFullYear(),hours=("0"+msgDate.getHours()).slice(-2),minutes=("0"+msgDate.getMinutes()).slice(-2),dateNow=new Date,time=hours+":"+minutes;return dateNow.setHours(0,0,0,0),msgDate.setHours(0,0,0,0),dateNow.getTime()!==msgDate.getTime()?date+"."+month+"."+year+" "+time:time},debug:function(msg,data,level){if(level&&(msg="["+level+"] "+msg),data){jsxc.storage.getItem("debug")===!0&&console.log(msg,data);var d;try{d=$("<span>").prepend($(data).clone()).html()}catch(err){try{d=JSON.stringify(data)}catch(err2){d="see js console"}}jsxc.log=jsxc.log+msg+": "+d+"\n"}else console.log(msg),jsxc.log=jsxc.log+msg+"\n"},warn:function(msg,data){jsxc.debug(msg,data,"WARN")},error:function(msg,data){jsxc.debug(msg,data,"ERROR")},log:"",init:function(options){options&&$.extend(!0,jsxc.options,options),jsxc.options.get=function(key){var local=jsxc.storage.getUserItem("options")||{};return local[key]||jsxc.options[key]},jsxc.options.set=function(key,value){jsxc.storage.updateItem("options",key,value,!0)},jsxc.storageNotConform=jsxc.storage.getItem("storageNotConform"),null===jsxc.storageNotConform&&(jsxc.storageNotConform=2);var lang;if(lang=null!==jsxc.storage.getItem("lang")?jsxc.storage.getItem("lang"):jsxc.options.autoLang&&navigator.language?navigator.language.substr(0,2):jsxc.options.defaultLang,$.i18n.init({lng:lang,fallbackLng:"en",resStore:I18next,useLocalStorage:!0,localStorageExpirationTime:864e5}),"undefined"==typeof localStorage)return void jsxc.debug("Browser doesn't support localStorage.");jsxc.storage.getItem("debug")===!0&&(jsxc.options.otr.debug=!0),window.addEventListener("storage",jsxc.storage.onStorage,!1);var lastActivity=jsxc.storage.getItem("lastActivity")||0;if((new Date).getTime()-lastActivity<jsxc.options.loginTimeout&&(jsxc.restore=!0),$(document).on("connectionReady.jsxc",function(){if(null!==jsxc.options.logoutElement&&jsxc.options.logoutElement.length>0){var logout=function(){return jsxc.options.logoutElement=$(this),jsxc.triggeredFromLogout=!0,jsxc.xmpp.logout()};jsxc.options.logoutElement.off("click",null,logout).one("click",logout)}}),jsxc.storage.getItem("rid")&&jsxc.storage.getItem("sid")&&jsxc.restore)jsxc.bid=jsxc.jidToBid(jsxc.storage.getItem("jid")),jsxc.gui.init(),"undefined"!=typeof jsxc.storage.getItem("alive")&&jsxc.restore?jsxc.checkMaster():jsxc.onMaster();else{if(!jsxc.options.loginForm.form||!(jsxc.el_exists(jsxc.options.loginForm.form)&&jsxc.el_exists(jsxc.options.loginForm.jid)&&jsxc.el_exists(jsxc.options.loginForm.pass)))return void(jsxc.options.displayRosterMinimized()&&(jsxc.storage.setUserItem("roster","hidden"),jsxc.gui.roster.init(),jsxc.gui.roster.noConnection()));"function"==typeof jsxc.options.formFound&&jsxc.options.formFound.call();var form=jsxc.options.loginForm.form=$(jsxc.options.loginForm.form),events=form.data("events")||{submit:[]},submits=[];$.each(events.submit,function(index,val){submits.push(val.handler)}),form.data("submits",submits),form.off("submit"),form.submit(function(){var settings=jsxc.prepareLogin();return settings===!1||"true"!==settings.xmpp.onlogin&&settings.xmpp.onlogin!==!0?!0:(jsxc.options.loginForm.triggered=!0,jsxc.xmpp.login(),!1)})}},prepareLogin:function(){var username=$(jsxc.options.loginForm.jid).val(),password=$(jsxc.options.loginForm.pass).val();if("function"!=typeof jsxc.options.loadSettings)return void jsxc.error("No loadSettings function given. Abort.");jsxc.gui.showWaitAlert($.t("Logging_in"));var settings=jsxc.options.loadSettings.call(this,username,password);if(settings===!1||null===settings||"undefined"==typeof settings)return jsxc.warn("No settings provided"),!1;"string"==typeof settings.xmpp.username&&(username=settings.xmpp.username);var jid,resource=settings.xmpp.resource?"/"+settings.xmpp.resource:"",domain=settings.xmpp.domain;return jid=username.match(/@(.*)$/)?username.match(/\/(.*)$/)?username:username+resource:username+"@"+domain+resource,"function"==typeof jsxc.options.loginForm.preJid&&(jid=jsxc.options.loginForm.preJid(jid)),jsxc.bid=jsxc.jidToBid(jid),settings.xmpp.username=jid.split("@")[0],settings.xmpp.domain=jid.split("@")[1].split("/")[0],settings.xmpp.resource=jid.split("@")[1].split("/")[1]||"",$.each(settings,function(key,val){jsxc.options.set(key,val)}),jsxc.options.xmpp.jid=jid,jsxc.options.xmpp.password=password,settings},onSlave:function(){jsxc.debug("I am the slave."),jsxc.role_allocation=!0,jsxc.restoreRoster(),jsxc.restoreWindows(),jsxc.restoreCompleted=!0,$(document).trigger("restoreCompleted.jsxc")},onMaster:function(){jsxc.debug("I am master."),jsxc.master=!0,jsxc.storage.setItem("alive",0),jsxc.storage.setItem("alive_busy",0),jsxc.storage.getUserItem("windowlist")||jsxc.storage.setUserItem("windowlist",[]),jsxc.startKeepAlive(),jsxc.options.get("otr").enable?jsxc.otr.createDSA():jsxc._onMaster()},_onMaster:function(){if(jsxc.role_allocation&&$.each(jsxc.storage.getUserItem("windowlist"),function(index,val){jsxc.otr.create(val)}),jsxc.role_allocation=!0,jsxc.restore&&!jsxc.restoreCompleted&&(jsxc.restoreRoster(),jsxc.restoreWindows(),jsxc.restoreCompleted=!0,$(document).trigger("restoreCompleted.jsxc")),jsxc.restore){var noti=jsxc.storage.getUserItem("notification");noti="number"==typeof noti?noti:2,jsxc.options.notification&&noti>0&&jsxc.notification.hasSupport()?jsxc.notification.hasPermission()?jsxc.notification.init():jsxc.notification.prepareRequest():jsxc.options.notification=!1}$(document).on("connectionReady.jsxc",function(){jsxc.gui.updateAvatar($("#jsxc_avatar"),jsxc.jidToBid(jsxc.storage.getItem("jid")),"own")}),jsxc.xmpp.login()},checkMaster:function(){jsxc.debug("check master"),jsxc.to=window.setTimeout(jsxc.onMaster,1e3),jsxc.storage.ink("alive")},startKeepAlive:function(){jsxc.keepalive=window.setInterval(jsxc.keepAlive,jsxc.options.timeout-1e3)},keepAlive:function(){jsxc.storage.ink("alive"),jsxc.role_allocation&&jsxc.storage.setItem("lastActivity",(new Date).getTime())},keepBusyAlive:function(){jsxc.toBusy&&window.clearTimeout(jsxc.toBusy),jsxc.keepalive&&window.clearInterval(jsxc.keepalive),jsxc.storage.ink("alive_busy"),jsxc.toBusy=window.setTimeout(jsxc.startKeepAlive,jsxc.options.busyTimeout-1e3)},random:function(max){return Math.floor(Math.random()*max)},el_exists:function(selector){return $(selector).length>0},jidToCid:function(jid){jsxc.warn("jsxc.jidToCid is deprecated!");var cid=Strophe.getBareJidFromJid(jid).replace("@","-").replace(/\./g,"-").toLowerCase();return cid},jidToBid:function(jid){return Strophe.getBareJidFromJid(jid).toLowerCase()},restoreRoster:function(){var buddies=jsxc.storage.getUserItem("buddylist");return buddies&&0!==buddies.length?($.each(buddies,function(index,value){jsxc.gui.roster.add(value)}),void $(document).trigger("cloaded.roster.jsxc")):(jsxc.debug("No saved buddylist."),void jsxc.gui.roster.empty())},restoreWindows:function(){var windows=jsxc.storage.getUserItem("windowlist");null!==windows&&$.each(windows,function(index,bid){var window=jsxc.storage.getUserItem("window",bid);return window?(jsxc.gui.window.init(bid),window.minimize?jsxc.gui.window.hide(bid):jsxc.gui.window.show(bid),void jsxc.gui.window.setText(bid,window.text)):(jsxc.debug("Associated window-element is missing: "+bid),!0)})},submitLoginForm:function(){var form=jsxc.options.loginForm.form.off("submit"),submits=form.data("submits")||[];$.each(submits,function(index,val){form.submit(val)}),form.find("#submit").length>0?form.find("#submit").click():form.submit()},escapeHTML:function(text){return text=text.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">"),text.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},removeHTML:function(text){return $("<span>").html(text).text()},switchEvents:function(obj){var ns=Math.random().toString(36).substr(2,12),self=this;return $.each(obj,function(key,val){$(document).one(key+"."+ns,function(){$(document).off("."+ns),val.apply(self,arguments)})}),ns},isHidden:function(){var hidden=!1;return"undefined"!=typeof document.hidden?hidden=document.hidden:"undefined"!=typeof document.webkitHidden?hidden=document.webkitHidden:"undefined"!=typeof document.mozHidden?hidden=document.mozHidden:"undefined"!=typeof document.msHidden&&(hidden=document.msHidden),hidden&&jsxc.master?jsxc.storage.ink("hidden",0):hidden||jsxc.master||jsxc.storage.ink("hidden"),hidden},hasFocus:function(){var focus=!0;return"function"==typeof document.hasFocus&&(focus=document.hasFocus()),!focus&&jsxc.master?jsxc.storage.ink("focus",0):focus&&!jsxc.master&&jsxc.storage.ink("focus"),focus},exec:function(fnName,fnParams){var i,fnList=fnName.split("."),fn=jsxc[fnList[0]];for(i=1;i<fnList.length;i++)fn=fn[fnList[i]];return"function"==typeof fn?fn.apply(null,fnParams):void 0},hashStr:function(str){var i,hash=0;if(0===str.length)return hash;for(i=0;i<str.length;i++)hash=(hash<<5)-hash+str.charCodeAt(i),hash|=0;return hash}},jsxc.gui={emotions:[["O:-) O:)","angel"],[">:-( >:( &gt;:-( &gt;:(","angry"],[":-) :)","smile"],[":-D :D","grin"],[":-( :(","sad"],[";-) ;)","wink"],[":-P :P","tonguesmile"],["=-O","surprised"],[":kiss: :-*","kiss"],["8-) :cool:","sunglassess"],[":'-( :'( :&amp;apos;-(","crysad"],[":-/","doubt"],[":-X :X","zip"],[":yes:","thumbsup"],[":no:","thumbsdown"],[":beer:","beer"],[":devil:","devil"],[":kiss: :kissing:","kissing"],["@->-- :rose: @-&gt;--","rose"],[":music:","music"],[":love:","love"],[":zzz:","tired"]],queryActions:{message:function(jid,params){var win=jsxc.gui.window.open(jsxc.jidToBid(jid));params&&"string"==typeof params.body&&win.find(".jsxc_textinput").val(params.body)},remove:function(jid){jsxc.gui.showRemoveDialog(jsxc.jidToBid(jid))},subscribe:function(jid,params){jsxc.gui.showContactDialog(jid),params&&$("#jsxc_alias").val(params.name)},vcard:function(jid){jsxc.gui.showVcard(jid)}},init:function(){$("#jsxc_windowList").length>0||($("body").append($(jsxc.gui.template.get("windowList"))),$(window).resize(jsxc.gui.updateWindowListSB),$("#jsxc_windowList").resize(jsxc.gui.updateWindowListSB),$("#jsxc_windowListSB .jsxc_scrollLeft").click(function(){jsxc.gui.scrollWindowListBy(-200)}),$("#jsxc_windowListSB .jsxc_scrollRight").click(function(){jsxc.gui.scrollWindowListBy(200)}),$("#jsxc_windowList").on("wheel",function(ev){$("#jsxc_windowList").data("isOver")&&jsxc.gui.scrollWindowListBy(ev.originalEvent.wheelDelta>0?200:-200)}),jsxc.gui.tooltip("#jsxc_windowList"),jsxc.el_exists("#jsxc_roster")||jsxc.gui.roster.init(),$.each(jsxc.gui.emotions,function(i,val){var reg=val[0].replace(/(\/|\||\*|\.|\+|\?|\^|\$|\(|\)|\[|\]|\{|\})/g,"\\$1");reg="("+reg.split(" ").join("|")+")",jsxc.gui.emotions[i][2]=new RegExp(reg,"g")}),jsxc.gui.windowTemplate=$(jsxc.gui.template.get("chatWindow")),jsxc.gui.buddyTemplate=$(jsxc.gui.template.get("rosterBuddy")))},tooltip:function(selector){$(selector).tooltip({show:{delay:600},content:function(){return $(this).attr("title").replace(/\n/g,"<br />")}})},update:function(bid){var data=jsxc.storage.getUserItem("buddy",bid);if(!data)return void jsxc.debug("No data for "+bid);var ri=jsxc.gui.roster.getItem(bid),we=jsxc.gui.window.get(bid),ue=ri.add(we),spot=$('.jsxc_spot[data-bid="'+bid+'"]');switch(ri.data(data),ue.add(spot).removeClass("jsxc_"+jsxc.CONST.STATUS.join(" jsxc_")).addClass("jsxc_"+jsxc.CONST.STATUS[data.status]),ue.find(".jsxc_name:first").add(spot).text(data.name).attr("title",$.t("is")+" "+jsxc.CONST.STATUS[data.status]),data.msgstate){case 0:we.find(".jsxc_transfer").removeClass("jsxc_enc jsxc_fin").attr("title",$.t("your_connection_is_unencrypted")),we.find(".jsxc_settings .jsxc_verification").addClass("jsxc_disabled"),we.find(".jsxc_settings .jsxc_transfer").text($.t("start_private"));break;case 1:we.find(".jsxc_transfer").addClass("jsxc_enc").attr("title",$.t("your_connection_is_encrypted")),we.find(".jsxc_settings .jsxc_verification").removeClass("jsxc_disabled"),we.find(".jsxc_settings .jsxc_transfer").text($.t("close_private"));break;case 2:we.find(".jsxc_settings .jsxc_verification").addClass("jsxc_disabled"),we.find(".jsxc_transfer").removeClass("jsxc_enc").addClass("jsxc_fin").attr("title",$.t("your_buddy_closed_the_private_connection")),we.find(".jsxc_settings .jsxc_transfer").text($.t("close_private"))}data.trust?we.find(".jsxc_transfer").addClass("jsxc_trust").attr("title",$.t("your_buddy_is_verificated")):we.find(".jsxc_transfer").removeClass("jsxc_trust"),data.sub&&"both"!==data.sub?ue.addClass("jsxc_oneway"):ue.removeClass("jsxc_oneway");var info="<b>"+Strophe.getBareJidFromJid(data.jid)+"</b>\n";info+=$.t("Subscription")+": "+$.t(data.sub)+"\n",info+=$.t("Status")+": "+$.t(jsxc.CONST.STATUS[data.status]),ri.find(".jsxc_name").attr("title",info),jsxc.gui.updateAvatar(ri.add(we.find(".jsxc_bar")),data.jid,data.avatar)},updateAvatar:function(el,jid,aid){var setAvatar=function(src){return 0===src||"0"===src?"function"==typeof jsxc.options.defaultAvatar?void jsxc.options.defaultAvatar.call(el,jid):void jsxc.gui.avatarPlaceholder(el.find(".jsxc_avatar"),jid):(el.find(".jsxc_avatar").removeAttr("style"),void el.find(".jsxc_avatar").css({"background-image":"url("+src+")","text-indent":"999px"}))};if("undefined"==typeof aid)return void setAvatar(0);var avatarSrc=jsxc.storage.getUserItem("avatar",aid);null!==avatarSrc?setAvatar(avatarSrc):jsxc.xmpp.conn.vcard.get(function(stanza){jsxc.debug("vCard",stanza);var src,vCard=$(stanza).find("vCard > PHOTO");if(0===vCard.length)jsxc.debug("No photo provided"),src="0";else if(vCard.find("EXTVAL").length>0)src=vCard.find("EXTVAL").text();else{var img=vCard.find("BINVAL").text(),type=vCard.find("TYPE").text();src="data:"+type+";base64,"+img}src=src.replace(/[\t\r\n\f]/gi,""),jsxc.storage.setUserItem("avatar",aid,src),setAvatar(src)},Strophe.getBareJidFromJid(jid),function(msg){jsxc.warn("Could not load vcard.",msg),jsxc.storage.setUserItem("avatar",aid,0),setAvatar(0)})},updateWindowListSB:function(){$("#jsxc_windowList>ul").width()>$("#jsxc_windowList").width()?$("#jsxc_windowListSB > div").removeClass("jsxc_disabled"):($("#jsxc_windowListSB > div").addClass("jsxc_disabled"),$("#jsxc_windowList>ul").css("right","0px"))},scrollWindowListBy:function(offset){var scrollWidth=$("#jsxc_windowList>ul").width(),width=$("#jsxc_windowList").width(),el=$("#jsxc_windowList>ul"),right=parseInt(el.css("right"))-offset,padding=$("#jsxc_windowListSB").width();width>scrollWidth||(right>0&&(right=0),width-scrollWidth-padding>right&&(right=width-scrollWidth-padding),el.css("right",right+"px"))},getWindow:function(bid){return jsxc.warn("jsxc.gui.getWindow is deprecated!"),jsxc.gui.window.get(bid)},toggleList:function(){var self=$(this);self.disableSelection();var ul=self.find("ul"),slideUp=null;slideUp=function(){ul.slideUp({complete:function(){self.removeClass("jsxc_opened")}}),$("body").off("click",null,slideUp)},$(this).click(function(){return ul.is(":hidden")?($("body").click(),$("body").one("click",slideUp)):$("body").off("click",null,slideUp),ul.slideToggle(),window.clearTimeout(ul.data("timer")),self.toggleClass("jsxc_opened"),!1}).mouseleave(function(){ul.data("timer",window.setTimeout(slideUp,2e3))}).mouseenter(function(){window.clearTimeout(ul.data("timer"))})},showLoginBox:function(){$(document).on("complete.dialog.jsxc",function(){$("#jsxc_password").focus()}),jsxc.gui.dialog.open(jsxc.gui.template.get("loginBox")),$("#jsxc_dialog").find("form").submit(function(){$(this).find("input[type=submit]").prop("disabled",!0),jsxc.options.loginForm.form=$(this),jsxc.options.loginForm.jid=$(this).find("#jsxc_username"),jsxc.options.loginForm.pass=$(this).find("#jsxc_password");var settings=jsxc.prepareLogin();return jsxc.triggeredFromBox=!0,jsxc.options.loginForm.triggered=!1,settings===!1?jsxc.gui.showAuthFail():jsxc.xmpp.login(),!1})},showFingerprints:function(bid){jsxc.gui.dialog.open(jsxc.gui.template.get("fingerprintsDialog",bid))},showVerification:function(bid){return $("#jsxc_dialog").length>0?void setTimeout(function(){jsxc.gui.showVerification(bid)},3e3):jsxc.storage.getUserItem("buddy",bid).msgstate!==OTR.CONST.MSGSTATE_ENCRYPTED?void jsxc.warn("Connection not encrypted"):(jsxc.gui.dialog.open(jsxc.gui.template.get("authenticationDialog",bid)),$("#jsxc_dialog > div:gt(0)").hide(),$("#jsxc_dialog select").change(function(){$("#jsxc_dialog > div:gt(0)").hide(),$("#jsxc_dialog > div:eq("+$(this).prop("selectedIndex")+")").slideDown({complete:function(){jsxc.gui.dialog.resize()}})}),$("#jsxc_dialog > div:eq(1) a.creation").click(function(){jsxc.master&&(jsxc.otr.objects[bid].trust=!0),jsxc.storage.updateUserItem("buddy",bid,"trust",!0),jsxc.gui.dialog.close(),jsxc.storage.updateUserItem("buddy",bid,"trust",!0),jsxc.gui.window.postMessage(bid,"sys",$.t("conversation_is_now_verified")),jsxc.gui.update(bid)}),$("#jsxc_dialog > div:eq(2) a.creation").click(function(){var div=$("#jsxc_dialog > div:eq(2)"),sec=div.find("#jsxc_secret2").val(),quest=div.find("#jsxc_quest").val();return""===sec||""===quest?void div.find('input[value=""]').addClass("jsxc_invalid").keyup(function(){$(this).val().match(/.*/)&&$(this).removeClass("jsxc_invalid")}):(jsxc.master?jsxc.otr.sendSmpReq(bid,sec,quest):jsxc.storage.setUserItem("smp_"+bid,{sec:sec,quest:quest}),jsxc.gui.dialog.close(),void jsxc.gui.window.postMessage(bid,"sys",$.t("authentication_query_sent")))}),void $("#jsxc_dialog > div:eq(3) .creation").click(function(){var div=$("#jsxc_dialog > div:eq(3)"),sec=div.find("#jsxc_secret").val();return""===sec?void div.find("#jsxc_secret").addClass("jsxc_invalid").keyup(function(){$(this).val().match(/.*/)&&$(this).removeClass("jsxc_invalid")}):(jsxc.master?jsxc.otr.sendSmpReq(bid,sec):jsxc.storage.setUserItem("smp_"+bid,{sec:sec,quest:null}),jsxc.gui.dialog.close(),void jsxc.gui.window.postMessage(bid,"sys",$.t("authentication_query_sent")))}))},showApproveDialog:function(from){jsxc.gui.dialog.open(jsxc.gui.template.get("approveDialog"),{noClose:!0}),$("#jsxc_dialog .jsxc_their_jid").text(Strophe.getBareJidFromJid(from)),$("#jsxc_dialog .jsxc_deny").click(function(ev){ev.stopPropagation(),jsxc.xmpp.resFriendReq(from,!1),jsxc.gui.dialog.close()}),$("#jsxc_dialog .jsxc_approve").click(function(ev){ev.stopPropagation();var data=jsxc.storage.getUserItem("buddy",jsxc.jidToBid(from));jsxc.xmpp.resFriendReq(from,!0),data&&"from"!==data.sub||$(document).one("close.dialog.jsxc",function(){jsxc.gui.showContactDialog(from)}),jsxc.gui.dialog.close()})},showContactDialog:function(username){jsxc.gui.dialog.open(jsxc.gui.template.get("contactDialog")),username&&$("#jsxc_username").val(username),$("#jsxc_username").keyup(function(){if("function"==typeof jsxc.options.getUsers){var val=$(this).val();$("#jsxc_userlist").empty(),""!==val&&jsxc.options.getUsers.call(this,val,function(list){$.each(list||{},function(uid,displayname){var option=$("<option>");option.attr("data-username",uid),option.attr("data-alias",displayname),option.attr("value",uid).appendTo("#jsxc_userlist"),uid!==displayname&&option.clone().attr("value",displayname).appendTo("#jsxc_userlist")})})}}),$("#jsxc_username").on("input",function(){var val=$(this).val(),option=$("#jsxc_userlist").find('option[data-username="'+val+'"], option[data-alias="'+val+'"]');option.length>0&&($("#jsxc_username").val(option.attr("data-username")),$("#jsxc_alias").val(option.attr("data-alias")))}),$("#jsxc_dialog form").submit(function(){var username=$("#jsxc_username").val(),alias=$("#jsxc_alias").val();return username.match(/@(.*)$/)||(username+="@"+Strophe.getDomainFromJid(jsxc.storage.getItem("jid"))),username&&username.match(jsxc.CONST.REGEX.JID)?(jsxc.xmpp.addBuddy(username,alias),jsxc.gui.dialog.close(),!1):($("#jsxc_username").addClass("jsxc_invalid").keyup(function(){$(this).val().match(jsxc.CONST.REGEX.JID)&&$(this).removeClass("jsxc_invalid")}),!1)})},showRemoveDialog:function(bid){jsxc.gui.dialog.open(jsxc.gui.template.get("removeDialog",bid));var data=jsxc.storage.getUserItem("buddy",bid);$("#jsxc_dialog .creation").click(function(ev){ev.stopPropagation(),jsxc.master?jsxc.xmpp.removeBuddy(data.jid):jsxc.storage.setUserItem("deletebuddy",bid,{jid:data.jid}),jsxc.gui.dialog.close()})},showWaitAlert:function(msg){jsxc.gui.dialog.open(jsxc.gui.template.get("waitAlert",null,msg),{noClose:!0})},showAlert:function(msg){jsxc.gui.dialog.open(jsxc.gui.template.get("alert",null,msg))},showAuthFail:function(){jsxc.gui.dialog.open(jsxc.gui.template.get("authFailDialog")),jsxc.options.loginForm.triggered!==!1&&$("#jsxc_dialog .jsxc_cancel").hide(),$("#jsxc_dialog .creation").click(function(){jsxc.gui.dialog.close()}),$("#jsxc_dialog .jsxc_cancel").click(function(){jsxc.submitLoginForm()})},showConfirmDialog:function(msg,confirm,dismiss){jsxc.gui.dialog.open(jsxc.gui.template.get("confirmDialog",null,msg),{noClose:!0}),confirm&&$("#jsxc_dialog .creation").click(confirm),dismiss&&$("#jsxc_dialog .jsxc_cancel").click(dismiss)},showAboutDialog:function(){jsxc.gui.dialog.open(jsxc.gui.template.get("aboutDialog")),$("#jsxc_dialog .jsxc_debuglog").click(function(){jsxc.gui.showDebugLog()})},showDebugLog:function(){var userInfo="<h3>User information</h3>";if(navigator){var key;for(key in navigator)navigator.hasOwnProperty(key)&&"string"==typeof navigator[key]&&(userInfo+="<b>"+key+":</b> "+navigator[key]+"<br />")}window.screen&&(userInfo+="<b>Height:</b> "+window.screen.height+"<br />",userInfo+="<b>Width:</b> "+window.screen.width+"<br />"),userInfo+="<b>jsxc version:</b> "+jsxc.version+"<br />",jsxc.gui.dialog.open('<div class="jsxc_log">'+userInfo+"<h3>Log</h3><pre>"+jsxc.escapeHTML(jsxc.log)+"</pre></div>")},showVcard:function(jid){var bid=jsxc.jidToBid(jid);jsxc.gui.dialog.open(jsxc.gui.template.get("vCard",bid));var data=jsxc.storage.getUserItem("buddy",bid);if(data){var i,j,res,identities,cap,client,identity=null;for(i=0;i<data.res.length;i++){for(res=data.res[i],identities=[],cap=jsxc.xmpp.getCapabilitiesByJid(bid+"/"+res),null!==cap&&null!==cap.identities&&(identities=cap.identities),client="",j=0;j<identities.length;j++)identity=identities[j],"client"===identity.category&&(""!==client&&(client+=",\n"),client+=identity.name+" ("+identity.type+")");var status=jsxc.storage.getUserItem("res",bid)[res];$("#jsxc_dialog ul.jsxc_vCard").append('<li class="jsxc_sep"><strong>'+$.t("Resource")+":</strong> "+res+"</li>"),$("#jsxc_dialog ul.jsxc_vCard").append("<li><strong>"+$.t("Client")+":</strong> "+client+"</li>"),$("#jsxc_dialog ul.jsxc_vCard").append("<li><strong>"+$.t("Status")+":</strong> "+$.t(jsxc.CONST.STATUS[status])+"</li>")}}var printProp=function(el,depth){var content="";return el.each(function(){var item=$(this),children=$(this).children();content+="<li>";var prop=$.t(item[0].tagName);" "!==prop&&(content+="<strong>"+prop+":</strong> "),"PHOTO"===item[0].tagName||(children.length>0?(content+="<ul>",content+=printProp(children,depth+1),content+="</ul>"):""!==item.text()&&(content+=jsxc.escapeHTML(item.text()))),content+="</li>",0===depth&&$("#jsxc_dialog ul.jsxc_vCard").length>0&&($("#jsxc_dialog ul.jsxc_vCard li.jsxc_sep:first").length>0?$("#jsxc_dialog ul.jsxc_vCard li.jsxc_sep:first").before(content):$("#jsxc_dialog ul.jsxc_vCard").append(content),content="")}),depth>0?content:void 0},failedToLoad=function(){if(0!==$("#jsxc_dialog ul.jsxc_vCard").length){$("#jsxc_dialog p").remove();var content="<p>";content+=$.t("Sorry_your_buddy_doesnt_provide_any_information"),content+="</p>",$("#jsxc_dialog").append(content)}};jsxc.xmpp.loadVcard(bid,function(stanza){if(0!==$("#jsxc_dialog ul.jsxc_vCard").length){$("#jsxc_dialog p").remove();var photo=$(stanza).find("vCard > PHOTO");if(photo.length>0){var img=photo.find("BINVAL").text(),type=photo.find("TYPE").text(),src="data:"+type+";base64,"+img;photo.find("EXTVAL").length>0&&(src=photo.find("EXTVAL").text()),src=src.replace(/[\t\r\n\f]/gi,"");var img_el=$('<img class="jsxc_vCard" alt="avatar" />');img_el.attr("src",src),$("#jsxc_dialog h3").before(img_el)}return 0===$(stanza).find("vCard").length||1===$(stanza).find("vcard > *").length&&1===photo.length?void failedToLoad():void printProp($(stanza).find("vcard > *"),0)}},failedToLoad)},showSettings:function(){jsxc.gui.dialog.open(jsxc.gui.template.get("settings")),("false"===jsxc.options.get("xmpp").overwrite||jsxc.options.get("xmpp").overwrite===!1)&&$(".jsxc_fieldsetXmpp").hide(),$("#jsxc_dialog form").each(function(){var self=$(this);self.find('input[type!="submit"]').each(function(){var id=this.id.split("-"),prop=id[0],key=id[1],type=this.type,data=jsxc.options.get(prop);data&&"undefined"!=typeof data[key]&&("checkbox"===type?"false"!==data[key]&&data[key]!==!1&&(this.checked="checked"):$(this).val(data[key]))})}),$("#jsxc_dialog form").submit(function(){var self=$(this),data={};self.find('input[type!="submit"]').each(function(){var val,id=this.id.split("-"),prop=id[0],key=id[1],type=this.type;val="checkbox"===type?this.checked:$(this).val(),data[prop]||(data[prop]={}),data[prop][key]=val}),$.each(data,function(key,val){jsxc.options.set(key,val)});var err=jsxc.options.saveSettinsPermanent.call(this,data);return"string"==typeof self.attr("data-onsubmit")&&jsxc.exec(self.attr("data-onsubmit"),[err]),setTimeout(function(){self.find('input[type="submit"]').effect("highlight",{color:err?"green":"red"},4e3)},200),!1})},showRequestNotification:function(){jsxc.switchEvents({"notificationready.jsxc":function(){jsxc.gui.dialog.close(),jsxc.notification.init(),jsxc.storage.setUserItem("notification",1)},"notificationfailure.jsxc":function(){jsxc.gui.dialog.close(),jsxc.options.notification=!1,jsxc.storage.setUserItem("notification",0)}}),jsxc.gui.showConfirmDialog($.t("Should_we_notify_you_"),function(){jsxc.gui.dialog.open(jsxc.gui.template.get("pleaseAccept"),{noClose:!0}),jsxc.notification.requestPermission()},function(){$(document).trigger("notificationfailure.jsxc")})},showUnknownSender:function(bid){var confirmationText=$.t("You_received_a_message_from_an_unknown_sender")+" ("+bid+"). "+$.t("Do_you_want_to_display_them");jsxc.gui.showConfirmDialog(confirmationText,function(){jsxc.gui.dialog.close(),jsxc.storage.saveBuddy(bid,{jid:bid,name:bid,status:0,sub:"none",res:[]}),jsxc.gui.window.open(bid)},function(){jsxc.storage.removeUserItem("chat",bid)})},changePresence:function(pres,external){external!==!0&&jsxc.storage.setUserItem("presence",pres),jsxc.master&&jsxc.xmpp.sendPres(),$("#jsxc_presence > span").text($("#jsxc_presence > ul .jsxc_"+pres).text()),jsxc.gui.updatePresence("own",pres)},updatePresence:function(bid,pres){"own"===bid&&("dnd"===pres?($("#jsxc_menu .jsxc_muteNotification").addClass("jsxc_disabled"),jsxc.notification.muteSound(!0)):($("#jsxc_menu .jsxc_muteNotification").removeClass("jsxc_disabled"),jsxc.options.get("muteNotification")||jsxc.notification.unmuteSound(!0))),$('.jsxc_presence[data-bid="'+bid+'"]').removeClass("jsxc_"+jsxc.CONST.STATUS.join(" jsxc_")).addClass("jsxc_"+pres)},unreadMsg:function(bid){var win=jsxc.gui.window.get(bid);jsxc.gui.roster.getItem(bid).add(win).addClass("jsxc_unreadMsg"),jsxc.storage.updateUserItem("window",bid,"unread",!0)},readMsg:function(bid){var win=jsxc.gui.window.get(bid);win.hasClass("jsxc_unreadMsg")&&(jsxc.gui.roster.getItem(bid).add(win).removeClass("jsxc_unreadMsg"),jsxc.storage.updateUserItem("window",bid,"unread",!1))},detectUriScheme:function(container){container=$(container?container:"body"),container.find("a[href^='xmpp:']").each(function(){var action,element=$(this),href=element.attr("href").replace(/^xmpp:/,""),jid=href.split("?")[0],params={};if(href.indexOf("?")<0)action="message";else{var pairs=href.substring(href.indexOf("?")+1).split(";");action=pairs[0];var i,key,value;for(i=1;i<pairs.length;i++)key=pairs[i].split("=")[0],value=pairs[i].indexOf("=")>0?pairs[i].substring(pairs[i].indexOf("=")+1):null,params[decodeURIComponent(key)]=decodeURIComponent(value)}"function"==typeof jsxc.gui.queryActions[action]&&(element.addClass("jsxc_uriScheme jsxc_uriScheme_"+action),element.off("click").click(function(ev){return ev.stopPropagation(),jsxc.gui.queryActions[action].call(jsxc,jid,params),!1}))})},detectEmail:function(container){container=$(container?container:"body"),container.find('a[href^="mailto:"]').each(function(){var spot=$("<span>X</span>").addClass("jsxc_spot"),href=$(this).attr("href").replace(/^ *mailto:/,"").trim();if(""!==href&&href!==Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))){var bid=jsxc.jidToBid(href),self=$(this),s=self.prev();s.hasClass("jsxc_spot")||(s=spot.clone().attr("data-bid",bid),self.before(s)),s.off("click"),jsxc.storage.getUserItem("buddy",bid)?(jsxc.gui.update(bid),s.click(function(){return jsxc.gui.window.open(bid),!1})):s.click(function(){return jsxc.gui.showContactDialog(href),!1})}})},avatarPlaceholder:function(el,seed,text){text=text||seed;var options=jsxc.options.get("avatarplaceholder")||{},hash=jsxc.hashStr(seed),hue=Math.abs(hash)%360,saturation=options.saturation||90,lightness=options.lightness||65;el.css({"background-color":"hsl("+hue+", "+saturation+"%, "+lightness+"%)",color:"#fff","font-weight":"bold","text-align":"center","line-height":el.height()+"px","font-size":.6*el.height()+"px"}),"string"==typeof text&&text.length>0&&el.text(text[0].toUpperCase())}},jsxc.gui.roster={ready:!1,init:function(){$(jsxc.options.rosterAppend+":first").append($(jsxc.gui.template.get("roster"))),jsxc.options.get("hideOffline")&&($("#jsxc_menu .jsxc_hideOffline").text($.t("Show_offline")),$("#jsxc_buddylist").addClass("jsxc_hideOffline")),$("#jsxc_menu .jsxc_settings").click(function(){jsxc.gui.showSettings()}),$("#jsxc_menu .jsxc_hideOffline").click(function(){var hideOffline=!jsxc.options.get("hideOffline");hideOffline?$("#jsxc_buddylist").addClass("jsxc_hideOffline"):$("#jsxc_buddylist").removeClass("jsxc_hideOffline"),$(this).text($.t(hideOffline?"Show_offline":"Hide_offline")),jsxc.options.set("hideOffline",hideOffline)}),jsxc.options.get("muteNotification")&&jsxc.notification.muteSound(),$("#jsxc_menu .jsxc_muteNotification").click(function(){if("dnd"!==jsxc.storage.getUserItem("presence")){var mute=!jsxc.options.get("muteNotification");mute?jsxc.notification.muteSound():jsxc.notification.unmuteSound()}}),$("#jsxc_roster .jsxc_addBuddy").click(function(){jsxc.gui.showContactDialog()}),$("#jsxc_roster .jsxc_onlineHelp").click(function(){window.open("http://www.jsxc.org/manual.html","onlineHelp")}),$("#jsxc_roster .jsxc_about").click(function(){jsxc.gui.showAboutDialog()}),$("#jsxc_toggleRoster").click(function(){jsxc.gui.roster.toggle()}),$("#jsxc_presence > ul > li").click(function(){var self=$(this),pres=self.data("pres");"offline"===pres?jsxc.xmpp.logout(!1):jsxc.gui.changePresence(pres)}),$("#jsxc_buddylist").slimScroll({distance:"3px",height:$("#jsxc_roster").height()-31+"px",width:$("#jsxc_buddylist").width()+"px",color:"#fff",opacity:"0.5"}),$("#jsxc_roster > .jsxc_bottom > div").each(function(){jsxc.gui.toggleList.call($(this))}),"hidden"===jsxc.storage.getUserItem("roster")&&($("#jsxc_roster").css("right","-200px"),$("#jsxc_windowList > ul").css("paddingRight","10px"));
+var pres=jsxc.storage.getUserItem("presence")||"online";$("#jsxc_presence > span").text($("#jsxc_presence > ul .jsxc_"+pres).text()),jsxc.gui.updatePresence("own",pres),jsxc.gui.tooltip("#jsxc_roster"),jsxc.notice.load(),jsxc.gui.roster.ready=!0,$(document).trigger("ready.roster.jsxc")},add:function(bid){var data=jsxc.storage.getUserItem("buddy",bid),bud=jsxc.gui.buddyTemplate.clone().attr("data-bid",bid).attr("data-type",data.type||"chat");jsxc.gui.roster.insert(bid,bud),bud.click(function(){jsxc.gui.window.open(bid)}),bud.find(".jsxc_chaticon").click(function(){jsxc.gui.window.open(bid)}),bud.find(".jsxc_rename").click(function(){return jsxc.gui.roster.rename(bid),!1}),bud.find(".jsxc_delete").click(function(){return jsxc.gui.showRemoveDialog(bid),!1});var expandClick=function(){return bud.trigger("extra.jsxc"),bud.toggleClass("jsxc_expand"),jsxc.gui.updateAvatar(bud,data.jid,data.avatar),!1};bud.find(".jsxc_control").click(expandClick),bud.dblclick(expandClick),bud.find(".jsxc_vcardicon").click(function(){return jsxc.gui.showVcard(data.jid),!1}),jsxc.gui.update(bid),$("#jsxc_buddylist").slimScroll({scrollTo:"0px"}),$(document).trigger("add.roster.jsxc",[bid,data,bud])},getItem:function(bid){return $("#jsxc_buddylist > li[data-bid='"+bid+"']")},insert:function(bid,li){var data=jsxc.storage.getUserItem("buddy",bid),listElements=$("#jsxc_buddylist > li"),insert=!1,status="both"===data.sub?data.status:-1;listElements.each(function(){var thisStatus="both"===$(this).data("sub")?$(this).data("status"):-1;return $(this).data("name").toLowerCase()>data.name.toLowerCase()&&thisStatus===status||status>thisStatus?($(this).before(li),insert=!0,!1):void 0}),insert||li.appendTo("#jsxc_buddylist")},reorder:function(bid){jsxc.gui.roster.insert(bid,jsxc.gui.roster.remove(bid))},remove:function(bid){return jsxc.gui.roster.getItem(bid).detach()},purge:function(bid){jsxc.master&&(jsxc.storage.removeUserItem("buddy",bid),jsxc.storage.removeUserItem("otr",bid),jsxc.storage.removeUserItem("otr_version_"+bid),jsxc.storage.removeUserItem("chat",bid),jsxc.storage.removeUserItem("window",bid),jsxc.storage.removeUserElement("buddylist",bid),jsxc.storage.removeUserElement("windowlist",bid)),jsxc.gui.window._close(bid),jsxc.gui.roster.remove(bid)},rename:function(bid){var name=jsxc.gui.roster.getItem(bid).find(".jsxc_name"),options=jsxc.gui.roster.getItem(bid).find(".jsxc_options, .jsxc_control"),input=$('<input type="text" name="name"/>');options.hide(),name=name.replaceWith(input),input.val(name.text()),input.keypress(function(ev){13===ev.which&&(options.show(),input.replaceWith(name),jsxc.gui.roster._rename(bid,$(this).val()),$("html").off("click"))}),input.click(function(){return!1}),$("html").one("click",function(){options.show(),input.replaceWith(name),jsxc.gui.roster._rename(bid,input.val())})},_rename:function(bid,newname){if(jsxc.master){var d=jsxc.storage.getUserItem("buddy",bid);if("chat"===d.type){var iq=$iq({type:"set"}).c("query",{xmlns:"jabber:iq:roster"}).c("item",{jid:Strophe.getBareJidFromJid(d.jid),name:newname});jsxc.xmpp.conn.sendIQ(iq)}}jsxc.storage.updateUserItem("buddy",bid,"name",newname),jsxc.gui.update(bid)},toggle:function(d){var duration=d||500,roster=$("#jsxc_roster"),wl=$("#jsxc_windowList"),roster_width=roster.innerWidth(),roster_right=parseFloat($("#jsxc_roster").css("right")),state=0>roster_right?"shown":"hidden";jsxc.storage.setUserItem("roster",state),roster.animate({right:-1*(roster_width+roster_right)+"px"},duration),wl.animate({right:10-roster_right+"px"},duration),$(document).trigger("toggle.roster.jsxc",[state,duration])},noConnection:function(){$("#jsxc_roster").addClass("jsxc_noConnection"),$("#jsxc_buddylist").empty(),$("#jsxc_roster").append($("<p>"+$.t("no_connection")+"</p>").append(" <a>"+$.t("relogin")+"</a>").click(function(){jsxc.gui.showLoginBox()}))},empty:function(){var text=$("<p>"+$.t("Your_roster_is_empty_add_a")+"</p>"),link=$("<a>"+$.t("new_buddy")+"</a>");link.click(function(){jsxc.gui.showContactDialog()}),text.append(link),text.append("."),$("#jsxc_roster").prepend(text)}},jsxc.gui.dialog={open:function(data,o){var opt=o||{},options={};return options={onComplete:function(){$("#jsxc_dialog .jsxc_close").click(function(ev){ev.preventDefault(),jsxc.gui.dialog.close()}),options.closeButton===!1&&$("#cboxClose").hide(),jsxc.gui.dialog.resize(),$(document).trigger("complete.dialog.jsxc")},onClosed:function(){$(document).trigger("close.dialog.jsxc")},onCleanup:function(){$(document).trigger("cleanup.dialog.jsxc")},opacity:.5},opt.noClose&&(options.overlayClose=!1,options.escKey=!1,options.closeButton=!1,delete opt.noClose),$.extend(options,opt),options.html='<div id="jsxc_dialog">'+data+"</div>",$.colorbox(options),$("#jsxc_dialog")},close:function(){jsxc.debug("close dialog"),$.colorbox.close()},resize:function(options){options=$.extend({innerWidth:$("#jsxc_dialog").outerWidth(),innerHeight:$("#jsxc_dialog").outerHeight()},options||{}),$("#cboxLoadedContent").css("overflow","hidden"),$.colorbox.resize(options)}},jsxc.gui.window={init:function(bid){if(jsxc.gui.window.get(bid).length>0)return jsxc.gui.window.get(bid);var win=jsxc.gui.windowTemplate.clone().attr("data-bid",bid).hide().appendTo("#jsxc_windowList > ul").show("slow"),data=jsxc.storage.getUserItem("buddy",bid);if(win.data("jid",data.jid),jsxc.gui.toggleList.call(win.find(".jsxc_settings")),win.find(".jsxc_verification").click(function(){jsxc.gui.showVerification(bid)}),win.find(".jsxc_fingerprints").click(function(){jsxc.gui.showFingerprints(bid)}),win.find(".jsxc_transfer").click(function(){jsxc.otr.toggleTransfer(bid)}),win.find(".jsxc_bar").click(function(){jsxc.gui.window.toggle(bid)}),win.find(".jsxc_close").click(function(){jsxc.gui.window.close(bid)}),win.find(".jsxc_clear").click(function(){jsxc.gui.window.clear(bid)}),win.find(".jsxc_tools").click(function(){return!1}),win.find(".jsxc_textinput").keyup(function(ev){var body=$(this).val();13===ev.which&&(body=""),jsxc.storage.updateUserItem("window",bid,"text",body),27===ev.which&&jsxc.gui.window.close(bid)}).keypress(function(ev){13===ev.which&&$(this).val()&&(jsxc.gui.window.postMessage(bid,"out",$(this).val()),$(this).val(""))}).focus(function(){jsxc.gui.readMsg(bid)}).mouseenter(function(){$("#jsxc_windowList").data("isOver",!0)}).mouseleave(function(){$("#jsxc_windowList").data("isOver",!1)}),win.find(".jsxc_textarea").click(function(){"function"!=typeof getSelection||getSelection().toString()||win.find(".jsxc_textinput").focus()}),win.find(".jsxc_textarea").slimScroll({height:"234px",distance:"3px"}),win.find(".jsxc_fade").hide(),win.find(".jsxc_name").disableSelection(),win.find(".slimScrollDiv").resizable({handles:"w, nw, n",minHeight:234,minWidth:250,resize:function(event,ui){win.width(ui.size.width),win.find(".jsxc_textarea").slimScroll({height:ui.size.height});var offset=win.find(".slimScrollDiv").position().top;win.find(".jsxc_emoticons").css("top",ui.size.height+offset+6+"px"),$(document).trigger("resize.window.jsxc",[win,bid,ui.size])}}),$.inArray(bid,jsxc.storage.getUserItem("windowlist"))<0){var wl=jsxc.storage.getUserItem("windowlist");wl.push(bid),jsxc.storage.setUserItem("windowlist",wl),jsxc.storage.setUserItem("window",bid,{minimize:!0,text:"",unread:!1})}else jsxc.storage.getUserItem("window",bid).unread&&jsxc.gui.unreadMsg(bid);return $.each(jsxc.gui.emotions,function(i,val){var ins=val[0].split(" ")[0],li=$('<li><div title="'+ins+'" class="jsxc_'+val[1]+'"/></li>');li.click(function(){win.find("input").val(win.find("input").val()+ins),win.find("input").focus()}),win.find(".jsxc_emoticons ul").append(li)}),jsxc.gui.toggleList.call(win.find(".jsxc_emoticons")),jsxc.gui.window.restoreChat(bid),jsxc.gui.update(bid),jsxc.gui.updateWindowListSB(),jsxc.master&&!jsxc.otr.objects[bid]?jsxc.otr.create(bid):jsxc.otr.enable(bid),$(document).trigger("init.window.jsxc",[win]),win},get:function(id){return $("li.jsxc_windowItem[data-bid='"+jsxc.jidToBid(id)+"']")},open:function(bid){var win=jsxc.gui.window.init(bid);jsxc.gui.window.show(bid),jsxc.gui.window.highlight(bid);var padding=$("#jsxc_windowListSB").width(),innerWidth=$("#jsxc_windowList>ul").width(),outerWidth=$("#jsxc_windowList").width()-padding;if(innerWidth>outerWidth){var offset=parseInt($("#jsxc_windowList>ul").css("right")),width=win.outerWidth(!0),right=innerWidth-win.position().left-width+offset,left=outerWidth-(innerWidth-win.position().left)-offset;0>left&&jsxc.gui.scrollWindowListBy(-1*left),0>right&&jsxc.gui.scrollWindowListBy(right)}return win},close:function(bid){return 0===jsxc.gui.window.get(bid).length?void jsxc.warn("Want to close a window, that is not open."):(jsxc.storage.removeUserElement("windowlist",bid),jsxc.storage.removeUserItem("window",bid),jsxc.storage.getUserItem("buddylist").indexOf(bid)<0&&(jsxc.storage.removeUserItem("buddy",bid),jsxc.storage.removeUserItem("chat",bid)),void jsxc.gui.window._close(bid))},_close:function(bid){jsxc.gui.window.get(bid).hide("slow",function(){$(this).remove(),jsxc.gui.updateWindowListSB()})},toggle:function(bid){var win=jsxc.gui.window.get(bid);0!==win.parents("#jsxc_windowList").length&&(win.find(".jsxc_fade").is(":hidden")?jsxc.gui.window.show(bid):jsxc.gui.window.hide(bid),jsxc.gui.updateWindowListSB())},show:function(bid){jsxc.storage.updateUserItem("window",bid,"minimize",!1),jsxc.gui.window._show(bid)},_show:function(bid){var win=jsxc.gui.window.get(bid);jsxc.gui.window.get(bid).find(".jsxc_fade").slideDown(),win.removeClass("jsxc_min"),jsxc.gui.window.scrollDown(bid),jsxc.restoreCompleted&&win.find(".jsxc_textinput").focus(),win.trigger("show.window.jsxc")},hide:function(bid){jsxc.storage.updateUserItem("window",bid,"minimize",!0),jsxc.gui.window._hide(bid)},_hide:function(bid){jsxc.gui.window.get(bid).addClass("jsxc_min").find(" .jsxc_fade").slideUp(),jsxc.gui.window.get(bid).trigger("hidden.window.jsxc")},highlight:function(bid){var el=jsxc.gui.window.get(bid).find(" .jsxc_bar");el.is(":animated")||el.effect("highlight",{color:"orange"},2e3)},scrollDown:function(bid){var chat=jsxc.gui.window.get(bid).find(".jsxc_textarea");0!==chat.length&&chat.slimScroll({scrollTo:chat.get(0).scrollHeight+"px"})},postMessage:function(bid,direction,msg,encrypted,forwarded,stamp,sender){var data=jsxc.storage.getUserItem("buddy",bid),html_msg=msg;msg=jsxc.removeHTML(msg),msg=jsxc.escapeHTML(msg),"out"===direction&&data.msgstate===OTR.CONST.MSGSTATE_FINISHED&&forwarded!==!0&&(direction="sys",msg=$.t("your_message_wasnt_send_please_end_your_private_conversation")),"in"===direction&&data.msgstate===OTR.CONST.MSGSTATE_FINISHED&&(direction="sys",msg=$.t("unencrypted_message_received")+" "+msg),"out"===direction&&"from"===data.sub&&(direction="sys",msg=$.t("your_message_wasnt_send_because_you_have_no_valid_subscription")),encrypted=encrypted||data.msgstate===OTR.CONST.MSGSTATE_ENCRYPTED;var post=jsxc.storage.saveMessage(bid,direction,msg,encrypted,forwarded,stamp,sender);"in"===direction&&$(document).trigger("postmessagein.jsxc",[bid,html_msg]),"out"===direction&&jsxc.master&&forwarded!==!0&&jsxc.xmpp.sendMessage(bid,html_msg,post.uid),jsxc.gui.window._postMessage(bid,post),"out"===direction&&"?"===msg&&jsxc.gui.window.postMessage(bid,"sys","42")},_postMessage:function(bid,post,restore){var win=jsxc.gui.window.get(bid),msg=post.msg,direction=post.direction,uid=post.uid;win.find(".jsxc_textinput").is(":not(:focus)")&&jsxc.restoreCompleted&&"in"===direction&&!restore&&jsxc.gui.window.highlight(bid),msg=msg.replace(jsxc.CONST.REGEX.URL,function(url){var href=url.match(/^https?:\/\//i)?url:"http://"+url;return'<a href="'+href+'" target="_blank">'+url+"</a>"}),msg=msg.replace(new RegExp("(xmpp:)?("+jsxc.CONST.REGEX.JID.source+")(\\?[^\\s]+\\b)?","i"),function(match,protocol,jid,action){return"xmpp:"===protocol?("string"==typeof action&&(jid+=action),'<a href="xmpp:'+jid+'">'+jid+"</a>"):'<a href="mailto:'+jid+'" target="_blank">'+jid+"</a>"}),$.each(jsxc.gui.emotions,function(i,val){msg=msg.replace(val[2],function(match,p1){var i,esc="";for(i=0;i<p1.length;i++)esc+="&#"+p1.charCodeAt(i)+";";return'<div title="'+esc+'" class="jsxc_emoticon jsxc_'+val[1]+'"/>'})});var msgDiv=$("<div>"),msgTsDiv=$("<div>");if(msgDiv.addClass("jsxc_chatmessage jsxc_"+direction),msgDiv.attr("id",uid),msgDiv.html("<div>"+msg+"</div>"),msgTsDiv.addClass("jsxc_timestamp"),msgTsDiv.text(jsxc.getFormattedTime(post.stamp)),post.received&&msgDiv.addClass("jsxc_received"),post.forwarded&&msgDiv.addClass("jsxc_forwarded"),post.encrypted&&msgDiv.addClass("jsxc_encrypted"),"sys"===direction?jsxc.gui.window.get(bid).find(".jsxc_textarea").append('<div style="clear:both"/>'):"undefined"!=typeof post.stamp&&msgDiv.append(msgTsDiv),win.find(".jsxc_textarea").append(msgDiv),"object"==typeof post.sender&&null!==post.sender){var title="",avatarDiv=$("<div>");if(avatarDiv.addClass("jsxc_avatar").prependTo(msgDiv),"string"==typeof post.sender.jid){msgDiv.attr("data-bid",jsxc.jidToBid(post.sender.jid));var data=jsxc.storage.getUserItem("buddy",jsxc.jidToBid(post.sender.jid))||{};jsxc.gui.updateAvatar(msgDiv,jsxc.jidToBid(post.sender.jid),data.avatar),title=jsxc.jidToBid(post.sender.jid)}"string"==typeof post.sender.name&&(msgDiv.attr("data-name",post.sender.name),"string"!=typeof post.sender.jid&&jsxc.gui.avatarPlaceholder(avatarDiv,post.sender.name),""!==title&&(title="\n"+title),title=post.sender.name+title,msgTsDiv.text(msgTsDiv.text()+" "+post.sender.name)),avatarDiv.attr("title",jsxc.escapeHTML(title))}jsxc.gui.detectUriScheme(win),jsxc.gui.detectEmail(win),jsxc.gui.window.scrollDown(bid),win.find(".jsxc_textinput").is(":focus")||!jsxc.restoreCompleted||restore||jsxc.gui.unreadMsg(bid)},setText:function(bid,text){jsxc.gui.window.get(bid).find(".jsxc_textinput").val(text)},restoreChat:function(bid){for(var chat=jsxc.storage.getUserItem("chat",bid);null!==chat&&chat.length>0;){var c=chat.pop();jsxc.gui.window._postMessage(bid,c,!0)}},clear:function(bid){jsxc.storage.setUserItem("chat",bid,[]),jsxc.gui.window.get(bid).find(".jsxc_textarea").empty()}},jsxc.gui.template={get:function(name,bid,msg){var ph={my_priv_fingerprint:jsxc.storage.getUserItem("priv_fingerprint")?jsxc.storage.getUserItem("priv_fingerprint").replace(/(.{8})/g,"$1 "):$.t("not_available"),my_jid:jsxc.storage.getItem("jid")||"",my_node:Strophe.getNodeFromJid(jsxc.storage.getItem("jid")||"")||"",root:jsxc.options.root,app_name:jsxc.options.app_name};if(bid){var data=jsxc.storage.getUserItem("buddy",bid);$.extend(ph,{bid_priv_fingerprint:data&&data.fingerprint?data.fingerprint.replace(/(.{8})/g,"$1 "):$.t("not_available"),bid_jid:bid,bid_name:data&&data.name?data.name:bid})}msg&&$.extend(ph,{msg:msg});var ret=jsxc.gui.template[name];return"string"==typeof ret?(ret=$("<div>").append($(ret).i18n()).html(),ret=ret.replace(/\{\{([a-zA-Z0-9_\-]+)\}\}/g,function(s,key){return"string"==typeof ph[key]?ph[key]:s})):(jsxc.debug("Template not available: "+name),name)},authenticationDialog:'<h3>Verification</h3> <p data-i18n="Authenticating_a_buddy_helps_"></p> <div> <p data-i18n="[html]How_do_you_want_to_authenticate_your_buddy" style="margin:0px;"></p> <select size="1"> <option data-i18n="Select_method"></option> <option data-i18n="Manual"></option> <option data-i18n="Question"></option> <option data-i18n="Secret"></option> </select> </div> <div style="display:none"> <p data-i18n="To_verify_the_fingerprint_" class=".jsxc_explanation"></p> <p><strong data-i18n="Your_fingerprint"></strong><br /> <span style="text-transform:uppercase">{{my_priv_fingerprint}}</span></p> <p><strong data-i18n="Buddy_fingerprint"></strong><br /> <span style="text-transform:uppercase">{{bid_priv_fingerprint}}</span></p><br /> <p class="jsxc_right"><a href="#" data-i18n="Close" class="jsxc_close button"></a> <a href="#" data-i18n="Compared" class="button creation"></a></p> </div> <div style="display:none"> <p data-i18n="To_authenticate_using_a_question_" class=".jsxc_explanation"></p> <p><label for="jsxc_quest" data-i18n="Question"></label><input type="text" name="quest" id="jsxc_quest" /></p> <p><label for="jsxc_secret2" data-i18n="Secret"></label><input type="text" name="secret2" id="jsxc_secret2" /></p> <p class="jsxc_right"><a href="#" class="button jsxc_close" data-i18n="Close"></a> <a href="#" class="button creation" data-i18n="Ask"></a></p> </div> <div style="display:none"> <p class=".jsxc_explanation" data-i18n="To_authenticate_pick_a_secret_"></p> <p><label for="jsxc_secret" data-i18n="Secret"></label><input type="text" name="secret" id="jsxc_secret" /></p> <p class="jsxc_right"><a href="#" class="button jsxc_close" data-i18n="Close"></a> <a href="#" class="button creation" data-i18n="Compare"></a></p> </div>',fingerprintsDialog:'<div> <p class="jsxc_maxWidth" data-i18n="A_fingerprint_"></p> <p><strong data-i18n="Your_fingerprint"></strong><br /> <span style="text-transform:uppercase">{{my_priv_fingerprint}}</span></p> <p><strong data-i18n="Buddy_fingerprint"></strong><br /> <span style="text-transform:uppercase">{{bid_priv_fingerprint}}</span></p><br /> <p class="jsxc_right"><a href="#" class="button jsxc_close" data-i18n="Close"></a></p> </div>',chatWindow:'<li class="jsxc_min jsxc_windowItem"> <div class="jsxc_window"> <div class="jsxc_bar"> <div class="jsxc_avatar">☺</div> <div class="jsxc_tools"> <div class="jsxc_settings"> <ul> <li class="jsxc_fingerprints jsxc_otr jsxc_disabled" data-i18n="Fingerprints"></li> <li class="jsxc_verification" data-i18n="Authentication"></li> <li class="jsxc_transfer jsxc_otr jsxc_disabled" data-i18n="start_private"></li> <li class="jsxc_clear" data-i18n="clear_history"></li> </ul> </div> <div class="jsxc_transfer jsxc_otr jsxc_disabled"/> <div class="jsxc_close">×</div> </div> <div class="jsxc_name"/> <div class="jsxc_cycle"/> </div> <div class="jsxc_fade"> <div class="jsxc_gradient"/> <div class="jsxc_textarea"/> <div class="jsxc_emoticons"><ul/></div> <input type="text" class="jsxc_textinput" data-i18n="[placeholder]Message"/> </div> </div> </li>',roster:'<div id="jsxc_roster"> <ul id="jsxc_buddylist"></ul> <div class="jsxc_bottom jsxc_presence" data-bid="own"> <div id="jsxc_avatar"> <div class="jsxc_avatar">☺</div> </div> <div id="jsxc_menu"> <span></span> <ul> <li class="jsxc_settings" data-i18n="Settings"></li> <li class="jsxc_muteNotification" data-i18n="Mute"></li> <li class="jsxc_addBuddy" data-i18n="Add_buddy"></li> <li class="jsxc_hideOffline" data-i18n="Hide_offline"></li> <li class="jsxc_onlineHelp" data-i18n="Online_help"></li> <li class="jsxc_about" data-i18n="About"></li> </ul> </div> <div id="jsxc_notice"> <span></span> <ul></ul> </div> <div id="jsxc_presence"> <span data-i18n="Online"></span> <ul> <li data-pres="online" class="jsxc_online" data-i18n="Online"></li> <li data-pres="chat" class="jsxc_chat" data-i18n="Chatty"></li> <li data-pres="away" class="jsxc_away" data-i18n="Away"></li> <li data-pres="xa" class="jsxc_xa" data-i18n="Extended_away"></li> <li data-pres="dnd" class="jsxc_dnd" data-i18n="dnd"></li> <li data-pres="offline" class="jsxc_offline" data-i18n="Offline"></li> </ul> </div> </div> <div id="jsxc_toggleRoster"></div> </div>',windowList:'<div id="jsxc_windowList"> <ul></ul> </div> <div id="jsxc_windowListSB"> <div class="jsxc_scrollLeft jsxc_disabled">&lt;</div> <div class="jsxc_scrollRight jsxc_disabled">&gt;</div> </div>',rosterBuddy:'<li> <div class="jsxc_avatar">☺</div> <div class="jsxc_control"></div> <div class="jsxc_name"/> <div class="jsxc_options jsxc_right"> <div class="jsxc_rename" data-i18n="[title]rename_buddy">✎</div> <div class="jsxc_delete" data-i18n="[title]delete_buddy">✘</div> </div> <div class="jsxc_options jsxc_left"> <div class="jsxc_chaticon" data-i18n="[title]send_message"/> <div class="jsxc_vcardicon" data-i18n="[title]get_info">i</div> </div> </li>',loginBox:'<h3 data-i18n="Login"></h3> <form> <p><label for="jsxc_username" data-i18n="Username"></label> <input type="text" name="username" id="jsxc_username" required="required" value="{{my_node}}"/></p> <p><label for="jsxc_password" data-i18n="Password"></label> <input type="password" name="password" required="required" id="jsxc_password" /></p> <div class="bottom_submit_section"> <input type="reset" class="button jsxc_close" name="clear" data-i18n="[value]Cancel"/> <input type="submit" class="button creation" name="commit" data-i18n="[value]Connect"/> </div> </form>',contactDialog:'<h3 data-i18n="Add_buddy"></h3> <p class=".jsxc_explanation" data-i18n="Type_in_the_full_username_"></p> <form> <p><label for="jsxc_username" data-i18n="Username"></label> <input type="text" name="username" id="jsxc_username" list="jsxc_userlist" pattern="^[^\\x22&\'\\/:<>@\\s]+(@[.\\-_\\w]+)?" required="required" /></p> <datalist id="jsxc_userlist"></datalist> <p><label for="jsxc_alias" data-i18n="Alias"></label> <input type="text" name="alias" id="jsxc_alias" /></p> <p class="jsxc_right"> <input class="button" type="submit" data-i18n="[value]Add" /> </p> <form>',approveDialog:'<h3 data-i18n="Subscription_request"></h3> <p><span data-i18n="You_have_a_request_from"></span><b class="jsxc_their_jid"></b>.</p> <p class="jsxc_right"><a href="#" class="button jsxc_deny" data-i18n="Deny"></a> <a href="#" class="button creation jsxc_approve" data-i18n="Approve"></a></p>',removeDialog:'<h3 data-i18n="Remove_buddy"></h3> <p class="jsxc_maxWidth" data-i18n="[html]You_are_about_to_remove_"></p> <p class="jsxc_right"><a href="#" class="button jsxc_cancel jsxc_close" data-i18n="Cancel"></a> <a href="#" class="button creation" data-i18n="Remove"></a></p>',waitAlert:'<h3>{{msg}}</h3> <p data-i18n="Please_wait"></p> <p class="jsxc_center"><img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" /></p>',alert:'<h3 data-i18n="Alert"></h3> <p>{{msg}}</p> <p class="jsxc_right"><a href="#" data-i18n="Ok" class="button jsxc_close jsxc_cancel"></a></p>',authFailDialog:'<h3 data-i18n="Login_failed"></h3> <p data-i18n="Sorry_we_cant_authentikate_"></p> <p class="jsxc_right"> <a class="button jsxc_cancel" data-i18n="Continue_without_chat"></a> <a class="button creation" data-i18n="Retry"></a> </p>',confirmDialog:'<p>{{msg}}</p> <p class="jsxc_right"> <a class="button jsxc_cancel jsxc_close" data-i18n="Dismiss"></a> <a class="button creation" data-i18n="Confirm"></a> </p>',pleaseAccept:'<p data-i18n="Please_accept_"></p>',aboutDialog:"<h3>JavaScript XMPP Chat</h3> <p><b>Version: </b>"+jsxc.version+'<br /> <a href="http://jsxc.org/" target="_blank">www.jsxc.org</a></p> <p><i>Released under the MIT license</i></p> <p>Real-time chat app for {{app_name}} and more.<br /> Requires an external <a href="https://xmpp.org/xmpp-software/servers/" target="_blank">XMPP server</a>.</p> <p><b>Credits: </b> <a href="http://www.beepzoid.com/old-phones/" target="_blank">David English (Ringtone)</a>, <a href="https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and" target="_blank">CameronMusic (Ping)</a></p> <p class="jsxc_libraries"><b>Libraries: </b><a href="http://strophe.im/strophejs/">strophe.js</a> (multiple), <a href="https://github.com/strophe/strophejs-plugins">strophe.js/muc</a> (MIT), <a href="https://github.com/strophe/strophejs-plugins">strophe.js/disco</a> (MIT), <a href="https://github.com/strophe/strophejs-plugins">strophe.js/caps</a> (MIT), <a href="https://github.com/strophe/strophejs-plugins">strophe.js/vcard</a> (MIT), <a href="https://github.com/ESTOS/strophe.jingle">strophe.jingle</a> (MIT), <a href="https://github.com/neoatlantis/node-salsa20">Salsa20</a> (AGPL3), <a href="www.leemon.com">bigint</a> (public domain), <a href="code.google.com/p/crypto-js">cryptojs</a> (code.google.com/p/crypto-js/wiki/license), <a href="http://git.io/ee">eventemitter</a> (MIT), <a href="https://arlolra.github.io/otr/">otr.js</a> (MPL v2.0), <a href="http://i18next.com/">i18next</a> (MIT)</p> <p class="jsxc_right"><a class="button jsxc_debuglog" href="#">Show debug log</a></p>',vCard:'<h3><span data-i18n="Info_about"></span> <span>{{bid_name}}</span></h3> <ul class="jsxc_vCard"></ul> <p><img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" /> <span data-i18n="Please_wait"></span>...</p>',settings:'<h3 data-i18n="User_settings"></h3> <p></p> <form> <fieldset class="jsxc_fieldsetXmpp jsxc_fieldset"> <legend data-i18n="Login_options"></legend> <label for="xmpp-url" data-i18n="BOSH_url"></label><input type="text" id="xmpp-url" readonly="readonly"/><br /> <label for="xmpp-username" data-i18n="Username"></label><input type="text" id="xmpp-username"/><br /> <label for="xmpp-domain" data-i18n="Domain"></label><input type="text" id="xmpp-domain"/><br /> <label for="xmpp-resource" data-i18n="Resource"></label><input type="text" id="xmpp-resource"/><br /> <label for="xmpp-onlogin" data-i18n="On_login"></label><input type="checkbox" id="xmpp-onlogin" /><br /> <input type="submit" data-i18n="[value]Save"/> </fieldset> </form> <p></p> <form> <fieldset class="jsxc_fieldsetPriority jsxc_fieldset"> <legend data-i18n="Priority"></legend> <label for="priority-online" data-i18n="Online"></label><input type="number" value="0" id="priority-online" min="-128" max="127" step="1" required="required"/><br /> <label for="priority-chat" data-i18n="Chatty"></label><input type="number" value="0" id="priority-chat" min="-128" max="127" step="1" required="required"/><br /> <label for="priority-away" data-i18n="Away"></label><input type="number" value="0" id="priority-away" min="-128" max="127" step="1" required="required"/><br /> <label for="priority-xa" data-i18n="Extended_away"></label><input type="number" value="0" id="priority-xa" min="-128" max="127" step="1" required="required"/><br /> <label for="priority-dnd" data-i18n="dnd"></label><input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/><br /> <input type="submit" data-i18n="[value]Save"/> </fieldset> </form> <p></p> <form data-onsubmit="xmpp.carbons.refresh"> <fieldset class="jsxc_fieldsetCarbons jsxc_fieldset"> <legend data-i18n="Carbon_copy"></legend> <label for="carbons-enable" data-i18n="Enable"></label><input type="checkbox" id="carbons-enable" /><br /> <input type="submit" data-i18n="[value]Save"/> </fieldset> </form>'},jsxc.gui.template.joinChat='<h3 data-i18n="Join_chat"></h3> <p class=".jsxc_explanation" data-i18n="muc_explanation"></p> <p><label for="jsxc_server" data-i18n="Server"></label> <input type="text" name="server" id="jsxc_server" required="required" readonly="readonly" /></p> <p><label for="jsxc_room" data-i18n="Room"></label> <input type="text" name="room" id="jsxc_room" autocomplete="off" list="jsxc_roomlist" required="required" pattern="^[^\\x22&\'\\/:<>@\\s]+" /></p> <p class="jsxc_inputinfo jsxc_waiting jsxc_room" data-i18n="Rooms_are_loaded"></p> <datalist id="jsxc_roomlist"> <p><label for="jsxc_roomlist_select"></label><select id="jsxc_roomlist_select"><option></option><option>workaround</option></select></p> </datalist> <p><label for="jsxc_nickname" data-i18n="Nickname"></label> <input type="text" name="nickname" id="jsxc_nickname" /></p> <p><label for="jsxc_password" data-i18n="Password"></label> <input type="text" name="password" id="jsxc_password" /></p> <div class="jsxc_msg"></div> <p class="jsxc_right"> <span class="jsxc_warning"></span> <a href="#" class="button jsxc_close" data-i18n="Close"></a> <a href="#" class="button jsxc_continue" data-i18n="Continue"> <a href="#" class="button jsxc_join" data-i18n="Join"></a> </p>',jsxc.muc={conn:null,CONST:{AFFILIATION:{ADMIN:"admin",MEMBER:"member",OUTCAST:"outcast",OWNER:"owner",NONE:"none"},ROLE:{MODERATOR:"moderator",PARTICIPANT:"participant",VISITOR:"visitor",NONE:"none"},ROOMSTATE:{INIT:0,ENTERED:1,EXITED:2,AWAIT_DESTRUCTION:3,DESTROYED:4}},init:function(o){var self=jsxc.muc;self.conn=jsxc.xmpp.conn;var options=o||jsxc.options.get("muc");return options&&"string"==typeof options.server?(jsxc.gui.roster.ready?self.initMenu():$(document).one("ready.roster.jsxc",jsxc.muc.initMenu),$(document).on("presence.jsxc",jsxc.muc.onPresence),$(document).on("error.presence.jsxc",jsxc.muc.onPresenceError),self.conn.addHandler(self.onGroupchatMessage,null,"message","groupchat"),self.conn.addHandler(self.onErrorMessage,null,"message","error"),void(self.conn.muc.roomNames=jsxc.storage.getUserItem("roomNames")||[])):(jsxc.debug("Discover muc service"),void setTimeout(function(){self.conn.disco.items(Strophe.getDomainFromJid(self.conn.jid),null,function(items){$(items).find("item").each(function(){var jid=$(this).attr("jid"),discovered=!1;return self.conn.disco.info(jid,null,function(info){var mucFeature=$(info).find('feature[var="'+Strophe.NS.MUC+'"]'),mucIdentity=$(info).find('identity[category="conference"][type="text"]');mucFeature.length>0&&mucIdentity.length>0&&(jsxc.debug("muc service found",jid),jsxc.options.set("muc",{server:jid,name:$(info).find("identity").attr("name")}),discovered=!0,self.init())}),!discovered})})},1e3))},initMenu:function(){var li=$("<li>").attr("class","jsxc_joinChat").text($.t("Join_chat"));li.click(jsxc.muc.showJoinChat),$("#jsxc_menu ul").append(li)},showJoinChat:function(){var self=jsxc.muc,dialog=jsxc.gui.dialog.open(jsxc.gui.template.get("joinChat"));dialog.find(".jsxc_join").hide(),dialog.find("#jsxc_server").val(jsxc.options.get("muc").server);
+var error_handler=function(event,condition,room){var msg;switch(condition){case"not-authorized":msg=$.t("A_password_is_required");break;case"registration-required":msg=$.t("You_are_not_on_the_member_list");break;case"forbidden":msg=$.t("You_are_banned_from_this_room");break;case"conflict":msg=$.t("Your_desired_nickname_");break;case"service-unavailable":msg=$.t("The_maximum_number_");break;case"item-not-found":msg=$.t("This_room_is_locked_");break;case"not-allowed":msg=$.t("You_are_not_allowed_to_create_");break;default:jsxc.warn("Unknown muc error condition: "+condition),msg=$.t("Error")+": "+condition}var roomIndex=self.conn.muc.roomNames.indexOf(room);roomIndex>-1&&(self.conn.muc.roomNames.splice(roomIndex,1),delete self.conn.muc.rooms[room]),dialog.find(".jsxc_warning").text(msg)};$(document).on("error.muc.jsxc",error_handler),$(document).on("close.dialog.jsxc",function(){$(document).off("error.muc.jsxc",error_handler)}),self.conn.muc.listRooms(jsxc.options.get("muc").server,function(stanza){$("#jsxc_roomlist option:last").remove(),$(stanza).find("item").each(function(){var r=$("<option>"),rjid=$(this).attr("jid").toLowerCase(),rnode=Strophe.getNodeFromJid(rjid),rname=$(this).attr("name")||rnode;r.text(rname),r.attr("data-jid",rjid),r.attr("value",rnode),$("#jsxc_roomlist select").append(r)});var set=$(stanza).find('set[xmlns="http://jabber.org/protocol/rsm"]');if(set.length>0){var count=set.find("count").text()||"?";dialog.find(".jsxc_inputinfo").removeClass("jsxc_waiting").text($.t("Could_load_only",{count:count}))}else dialog.find(".jsxc_inputinfo").hide()},function(){jsxc.warn("Could not load rooms"),dialog.find(".jsxc_inputinfo").hide()}),dialog.find("#jsxc_nickname").attr("placeholder",Strophe.getNodeFromJid(self.conn.jid)),dialog.find(".jsxc_continue").click(function(ev){ev.preventDefault();var room=$("#jsxc_room").val()?jsxc.jidToBid($("#jsxc_room").val()):null,nickname=$("#jsxc_nickname").val()||Strophe.getNodeFromJid(self.conn.jid),password=$("#jsxc_password").val()||null;if(!room||!room.match(/^[^"&\'\/:<>@\s]+$/i))return $("#jsxc_room").addClass("jsxc_invalid").keyup(function(){$(this).val()&&$(this).removeClass("jsxc_invalid")}),!1;if(room.match(/@(.*)$/)||(room+="@"+jsxc.options.get("muc").server),jsxc.xmpp.conn.muc.roomNames.indexOf(room)<0){var discoReceived=function(roomName,subject){jsxc.gui.dialog.resize(),dialog.find(".jsxc_continue").hide(),dialog.find(".jsxc_join").show().effect("highlight",{color:"green"},4e3),dialog.find(".jsxc_join").click(function(ev){return ev.preventDefault(),self.join(room,nickname,password,roomName,subject),!1})};dialog.find(".jsxc_msg").append($("<p>").text($.t("Loading_room_information")).addClass("jsxc_waiting")),jsxc.gui.dialog.resize(),self.conn.disco.info(room,null,function(stanza){dialog.find(".jsxc_msg").html("<p>"+$.t("This_room_is")+"</p>");var table=$("<table>");$(stanza).find("feature").each(function(){var feature=$(this).attr("var");if(""!==feature&&i18n.exists(feature)){var tr=$("<tr>");$("<td>").text($.t(feature+".keyword")).appendTo(tr),$("<td>").text($.t(feature+".description")).appendTo(tr),tr.appendTo(table)}}),dialog.find(".jsxc_msg").append(table);var roomName=$(stanza).find("identity").attr("name"),subject=$(stanza).find('field[var="muc#roominfo_subject"]').attr("label");discoReceived(roomName,subject)},function(){dialog.find(".jsxc_msg").empty(),$("<p>").text($.t("Room_not_found_")).appendTo(dialog.find(".jsxc_msg")),discoReceived()})}else dialog.find(".jsxc_warning").text($.t("You_already_joined_this_room"));return!1}),dialog.find("input").keydown(function(ev){return 13!==ev.which?(dialog.find(".jsxc_warning").empty(),void(dialog.find(".jsxc_continue").is(":hidden")&&(dialog.find(".jsxc_continue").show(),dialog.find(".jsxc_join").hide().off("click"),dialog.find(".jsxc_msg").empty(),jsxc.gui.dialog.resize()))):void(dialog.find(".jsxc_continue").is(":hidden")?dialog.find(".jsxc_join").click():dialog.find(".jsxc_continue").click())})},join:function(room,nickname,password,roomName,subject){var self=jsxc.muc;jsxc.storage.setUserItem("buddy",room,{jid:room,name:roomName||room,sub:"both",type:"groupchat",state:self.CONST.ROOMSTATE.INIT,subject:subject}),jsxc.xmpp.conn.muc.join(room,nickname,null,null,null,password)},leave:function(room){var self=jsxc.muc,own=jsxc.storage.getUserItem("ownNicknames")||{},data=jsxc.storage.getUserItem("buddy",room)||{};data.state===self.CONST.ROOMSTATE.ENTERED?self.conn.muc.leave(room,own[room],function(){self.onExited(room)}):self.onExited(room)},onExited:function(room){var self=jsxc.muc,own=jsxc.storage.getUserItem("ownNicknames")||{};jsxc.storage.setUserItem("roomNames",self.conn.muc.roomNames),delete own[room],jsxc.storage.setUserItem("ownNicknames",own),jsxc.storage.removeUserItem("member",room),jsxc.storage.removeUserItem("chat",room),jsxc.gui.window.close(room),jsxc.gui.roster.purge(room)},destroy:function(room,handler_cb,error_cb){var self=jsxc.muc;jsxc.storage.updateUserItem("buddy",room,"state",self.CONST.ROOMSTATE.AWAIT_DESTRUCTION),jsxc.gui.window.postMessage(room,"sys",$.t("This_room_will_be_closed"));var iq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}).c("destroy");jsxc.muc.conn.sendIQ(iq.tree(),handler_cb,error_cb)},close:function(room){var self=jsxc.muc,roomdata=jsxc.storage.getUserItem("buddy",room)||{};self.emptyMembers(room);var roomIndex=self.conn.muc.roomNames.indexOf(room);roomIndex>-1&&(self.conn.muc.roomNames.splice(roomIndex,1),delete self.conn.muc.rooms[room]),jsxc.storage.setUserItem("roomNames",self.conn.muc.roomNames),roomdata.state===self.CONST.ROOMSTATE.AWAIT_DESTRUCTION&&self.onExited(room),roomdata.state=self.CONST.ROOMSTATE.DESTROYED,jsxc.storage.setUserItem("buddy",room,roomdata)},initWindow:function(event,win){var self=jsxc.muc,data=win.data(),bid=jsxc.jidToBid(data.jid),roomdata=jsxc.storage.getUserItem("buddy",bid);if(!jsxc.xmpp.conn)return void $(document).one("connectionReady.jsxc",function(){self.initWindow(null,win)});if(!(self.conn.muc.roomNames.indexOf(data.jid)<0)){win.addClass("jsxc_groupchat");var own=jsxc.storage.getUserItem("ownNicknames")||{},ownNickname=own[bid],mlIcon=$('<div class="jsxc_members"></div>');win.find(".jsxc_tools > .jsxc_transfer").after(mlIcon);var ml=$('<div class="jsxc_memberlist"><ul></ul></div>');win.find(".jsxc_fade").prepend(ml),ml.on("wheel",function(ev){jsxc.muc.scrollMemberListBy(bid,ev.originalEvent.wheelDelta>0?50:-50)});var toggleMl=function(ev){ev&&ev.preventDefault();var slimOptions={},ul=ml.find("ul:first"),slimHeight=null;if(ml.toggleClass("jsxc_expand"),ml.hasClass("jsxc_expand")){$("body").click(),$("body").one("click",toggleMl),ul.mouseleave(function(){ul.data("timer",window.setTimeout(toggleMl,2e3))}).mouseenter(function(){window.clearTimeout(ul.data("timer"))}).css("left","0px");var maxHeight=.8*win.find(".jsxc_textarea").height(),innerHeight=ml.find("ul").height()+3;slimHeight=innerHeight>maxHeight?maxHeight:innerHeight,slimOptions={distance:"3px",height:slimHeight+"px",width:"100%",color:"#fff",opacity:"0.5"},ml.css("height",slimHeight+"px")}else slimOptions={destroy:!0},ul.attr("style",""),ml.css("height",""),window.clearTimeout(ul.data("timer")),$("body").off("click",null,toggleMl),ul.off("mouseleave mouseenter");return ul.slimscroll(slimOptions),!1};mlIcon.click(toggleMl),win.on("resize",function(){jsxc.muc.scrollMemberListBy(bid,0)}),setTimeout(function(){var top=win.find(".jsxc_emoticons").position().top+win.find(".slimScrollDiv").position().top;win.find(".jsxc_emoticons").css("top",top+"px")},400);var destroy=$("<li>");if(destroy.text($.t("Destroy")),destroy.addClass("jsxc_destroy"),destroy.hide(),destroy.click(function(){self.destroy(bid)}),win.find(".jsxc_settings ul").append(destroy),roomdata.state>self.CONST.ROOMSTATE.INIT){var member=jsxc.storage.getUserItem("member",bid)||{};$.each(member,function(nickname,val){self.insertMember(bid,nickname,val),nickname===ownNickname&&val.affiliation===self.CONST.AFFILIATION.OWNER&&destroy.show()})}var leave=$("<li>");leave.text($.t("Leave")),leave.addClass("jsxc_leave"),leave.click(function(){self.leave(bid)}),win.find(".jsxc_settings ul").append(leave)}},onPresence:function(event,from,status,presence){var self=jsxc.muc,room=jsxc.jidToBid(from),xdata=$(presence).find('x[xmlns^="'+Strophe.NS.MUC+'"]');if(self.conn.muc.roomNames.indexOf(room)<0||0===xdata.length)return!0;var res=Strophe.getResourceFromJid(from)||"",nickname=Strophe.unescapeNode(res),own=jsxc.storage.getUserItem("ownNicknames")||{},member=jsxc.storage.getUserItem("member",room)||{},codes=[];if(xdata.find("status").each(function(){var code=$(this).attr("code");jsxc.debug("[muc][code]",code),codes.push(code)}),0===jsxc.gui.roster.getItem(room).length){jsxc.storage.setUserItem("roomNames",jsxc.xmpp.conn.muc.roomNames),jsxc.storage.removeUserItem("chat",room),member={};var bl=jsxc.storage.getUserItem("buddylist");bl.push(room),jsxc.storage.setUserItem("buddylist",bl),jsxc.gui.roster.add(room),jsxc.gui.window.open(room),jsxc.gui.dialog.close()}var jid=xdata.find("item").attr("jid")||null;if(0===status)if(xdata.find("destroy").length>0)member={},jsxc.gui.window.postMessage(room,"sys",$.t("This_room_has_been_closed")),self.close(room);else{delete member[nickname],self.removeMember(room,nickname);var newNickname=xdata.find("item").attr("nick");codes.indexOf("303")>-1&&newNickname?(newNickname=Strophe.unescapeNode(newNickname),member[newNickname]={},jsxc.gui.window.postMessage(room,"sys",$.t("is_now_known_as",{oldNickname:nickname,newNickname:newNickname,escapeInterpolation:!0}))):(0===codes.length||1===codes.length&&codes.indexOf("110")>-1)&&jsxc.gui.window.postMessage(room,"sys",$.t("left_the_building",{nickname:nickname,escapeInterpolation:!0}))}else!member[nickname]&&own[room]&&jsxc.gui.window.postMessage(room,"sys",$.t("entered_the_room",{nickname:nickname,escapeInterpolation:!0})),member[nickname]={jid:jid,status:status,roomJid:from,affiliation:xdata.find("item").attr("affiliation"),role:xdata.find("item").attr("role")},self.insertMember(room,nickname,member[nickname]);return jsxc.storage.setUserItem("member",room,member),$.each(codes,function(index,code){"function"==typeof self.onStatus[code]&&self.onStatus[code].call(this,room,nickname,member[nickname]||{},xdata),$(document).trigger("status.muc.jsxc",[code,room,nickname,member[nickname]||{},presence])}),!0},onPresenceError:function(event,from,presence){var self=jsxc.muc,xdata=$(presence).find('x[xmlns="'+Strophe.NS.MUC+'"]'),room=jsxc.jidToBid(from);if(0===xdata.length||self.conn.muc.roomNames.indexOf(room)<0)return!0;var error=$(presence).find("error"),condition=error.children()[0].tagName;return jsxc.debug("[muc][error]",condition),$(document).trigger("error.muc.jsxc",[condition,room]),!0},onStatus:{110:function(room,nickname,data){var self=jsxc.muc,own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]=nickname,jsxc.storage.setUserItem("ownNicknames",own),data.affiliation===self.CONST.AFFILIATION.OWNER&&jsxc.gui.window.get(room).find(".jsxc_destroy").show();var roomdata=jsxc.storage.getUserItem("buddy",room);roomdata.state===self.CONST.ROOMSTATE.INIT&&(roomdata.state=self.CONST.ROOMSTATE.ENTERED,jsxc.storage.setUserItem("buddy",room,roomdata))},170:function(room){jsxc.gui.window.postMessage(room,"sys",$.t("Room_logging_is_enabled"))},201:function(room){var self=jsxc.muc;self.conn.muc.createInstantRoom(room)},301:function(room,nickname,data,xdata){var own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]===nickname?(jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_banned")),jsxc.muc.postReason(room,xdata)):jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_info_banned",{nickname:nickname,escapeInterpolation:!0}))},307:function(room,nickname,data,xdata){var own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]===nickname?(jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_kicked")),jsxc.muc.postReason(room,xdata)):jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_info_kicked",{nickname:nickname,escapeInterpolation:!0}))},321:function(room,nickname){var own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]===nickname?(jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_affiliation"))):jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_info_affiliation",{nickname:nickname,escapeInterpolation:!0}))},322:function(room,nickname){var own=jsxc.storage.getUserItem("ownNicknames")||{};own[room]===nickname?(jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_membersonly"))):jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_info_membersonly",{nickname:nickname,escapeInterpolation:!0}))},332:function(room){jsxc.muc.close(room),jsxc.gui.window.postMessage(room,"sys",$.t("muc_removed_shutdown"))}},postReason:function(room,xdata){var actor={name:xdata.find("actor").attr("nick"),jid:xdata.find("actor").attr("jid")},reason=xdata.find("reason").text();""!==reason&&(reason=$.t("Reason")+": "+reason,"string"==typeof actor.name||"string"==typeof actor.jid?jsxc.gui.window.postMessage(room,"in",reason,!1,!1,null,actor):jsxc.gui.window.postMessage(room,"sys",reason))},insertMember:function(room,nickname,memberdata){var self=jsxc.muc,win=jsxc.gui.window.get(room),jid=memberdata.jid,m=win.find('.jsxc_memberlist li[data-nickname="'+nickname+'"]');if(0===m.length){var title=jsxc.escapeHTML(nickname);if(m=$('<li><div class="jsxc_avatar"></div><div class="jsxc_name"/></li>'),m.attr("data-nickname",nickname),win.find(".jsxc_memberlist ul").append(m),"string"==typeof jid){m.find(".jsxc_name").text(jsxc.jidToBid(jid)),m.attr("data-bid",jsxc.jidToBid(jid)),title=title+"\n"+jsxc.jidToBid(jid);var data=jsxc.storage.getUserItem("buddy",jsxc.jidToBid(jid));null!==data&&"object"==typeof data?jsxc.gui.updateAvatar(m,jsxc.jidToBid(jid),data.avatar):jsxc.jidToBid(jid)===jsxc.jidToBid(self.conn.jid)&&jsxc.gui.updateAvatar(m,jsxc.jidToBid(jid),"own")}else m.find(".jsxc_name").text(nickname),jsxc.gui.avatarPlaceholder(m.find(".jsxc_avatar"),nickname);m.attr("title",title)}},removeMember:function(room,nickname){var win=jsxc.gui.window.get(room),m=win.find('.jsxc_memberlist li[data-nickname="'+nickname+'"]');m.length>0&&m.remove()},scrollMemberListBy:function(room,offset){var win=jsxc.gui.window.get(room);if(!win.find(".jsxc_memberlist").hasClass("jsxc_expand")){var el=win.find(".jsxc_memberlist ul:first"),scrollWidth=el.width(),width=win.find(".jsxc_memberlist").width(),left=parseInt(el.css("left"));left=isNaN(left)?0-offset:left-offset,width>scrollWidth||left>0?left=0:width-scrollWidth>left&&(left=width-scrollWidth),el.css("left",left+"px")}},emptyMembers:function(room){var win=jsxc.gui.window.get(room);win.find(".jsxc_memberlist").empty(),jsxc.storage.setUserItem("member",room,{})},onGroupchatMessage:function(message){var id=$(message).attr("id");if(jsxc.el_exists($("#"+id)))return!0;var from=$(message).attr("from"),body=$(message).find("body:first").text(),room=jsxc.jidToBid(from),nickname=Strophe.unescapeNode(Strophe.getResourceFromJid(from));if(""!==body){var delay=$(message).find('delay[xmlns="urn:xmpp:delay"]'),stamp=delay.length>0?new Date(delay.attr("stamp")):new Date;stamp=stamp.getTime();var member=jsxc.storage.getUserItem("member",room)||{},sender={};sender.name=nickname,member[nickname]&&"string"==typeof member[nickname].jid&&(sender.jid=member[nickname].jid),jsxc.gui.window.postMessage(room,"in",body,!1,!1,stamp,sender)}var subject=$(message).find("subject");if(subject.length>0){var roomdata=jsxc.storage.getUserItem("buddy",room);roomdata.subject=subject.text(),jsxc.storage.setUserItem("buddy",room,roomdata),jsxc.gui.window.postMessage(room,"sys",$.t("changed_subject_to",{nickname:nickname,subject:subject.text()}))}return!0},onErrorMessage:function(message){var room=jsxc.jidToBid($(message).attr("from"));return 0===jsxc.gui.window.get(room).length?!0:($(message).find("item-not-found").length>0?jsxc.gui.window.postMessage(room,"sys",$.t("message_not_send_item-not-found")):$(message).find("forbidden").length>0?jsxc.gui.window.postMessage(room,"sys",$.t("message_not_send_forbidden")):$(message).find("not-acceptable").length>0?jsxc.gui.window.postMessage(room,"sys",$.t("message_not_send_not-acceptable")):jsxc.gui.window.postMessage(room,"sys",$.t("message_not_send")),jsxc.debug("[muc] error message for "+room,$(message).find("error")[0]),!0)},onAddRoster:function(event,room,data,bud){var self=jsxc.muc;"groupchat"===data.type&&bud.find(".jsxc_delete").off("click").click(function(){return self.leave(room),!1})}},$(document).on("init.window.jsxc",jsxc.muc.initWindow),$(document).on("add.roster.jsxc",jsxc.muc.onAddRoster),$(document).one("attached.jsxc",function(){jsxc.muc.init()}),$(document).one("connected.jsxc",function(){jsxc.storage.removeUserItem("roomNames"),jsxc.storage.removeUserItem("ownNicknames")}),jsxc.notice={_num:0,load:function(){$("#jsxc_notice ul li").remove(),$("#jsxc_notice > span").text(""),jsxc.notice._num=0;var saved=jsxc.storage.getUserItem("notices")||[],key=null;for(key in saved)if(saved.hasOwnProperty(key)){var val=saved[key];jsxc.notice.add(val.msg,val.description,val.fnName,val.fnParams,key)}},add:function(msg,description,fnName,fnParams,id){var nid=id||Date.now(),list=$("#jsxc_notice ul"),notice=$("<li/>");if(notice.click(function(){return jsxc.notice.remove(nid),jsxc.exec(fnName,fnParams),!1}),notice.text(msg),notice.attr("title",description||""),notice.attr("data-nid",nid),list.append(notice),$("#jsxc_notice > span").text(++jsxc.notice._num),!id){var saved=jsxc.storage.getUserItem("notices")||{};saved[nid]={msg:msg,description:description,fnName:fnName,fnParams:fnParams},jsxc.storage.setUserItem("notices",saved),jsxc.notification.notify(msg,description||"",null,!0,jsxc.CONST.SOUNDS.NOTICE)}},remove:function(nid){var el=$("#jsxc_notice li[data-nid="+nid+"]");el.remove(),$("#jsxc_notice > span").text(--jsxc.notice._num||"");var s=jsxc.storage.getUserItem("notices");delete s[nid],jsxc.storage.setUserItem("notices",s)},has:function(fnName){var saved=jsxc.storage.getUserItem("notices")||[],has=!1;return $.each(saved,function(index,val){return val.fnName===fnName?(has=!0,!1):void 0}),has}},jsxc.notification={audio:null,init:function(){$(document).on("postmessagein.jsxc",function(event,bid,msg){msg=msg.match(/^\?OTR/)?$.t("Encrypted_message"):msg;var data=jsxc.storage.getUserItem("buddy",bid);jsxc.notification.notify({title:$.t("New_message_from")+" "+data.name,msg:msg,soundFile:jsxc.CONST.SOUNDS.MSG,source:bid})}),$(document).on("callincoming.jingle",function(){jsxc.notification.playSound(jsxc.CONST.SOUNDS.CALL,!0,!0)}),$(document).on("accept.call.jsxc reject.call.jsxc",function(){jsxc.notification.stopSound()})},notify:function(title,msg,d,force,soundFile,loop,source){if(jsxc.options.notification&&jsxc.notification.hasPermission()){var o;if(o=null!==title&&"object"==typeof title?title:{title:title,msg:msg,duration:d,force:force,soundFile:soundFile,loop:loop,source:source},!jsxc.hasFocus()||o.force){var icon=o.icon||jsxc.options.root+"/img/XMPP_logo.png";if("string"==typeof o.source){var data=jsxc.storage.getUserItem("buddy",o.source),src=jsxc.storage.getUserItem("avatar",data.avatar);"string"==typeof src&&"0"!==src&&(icon=src)}jsxc.toNotification=setTimeout(function(){"string"==typeof o.soundFile&&jsxc.notification.playSound(o.soundFile,o.loop,o.force);var popup=new Notification($.t(o.title),{body:$.t(o.msg),icon:icon}),duration=o.duration||jsxc.options.popupDuration;duration>0&&setTimeout(function(){popup.close()},duration)},jsxc.toNotificationDelay)}}},hasSupport:function(){if(window.webkitNotifications){window.Notification=function(title,opt){var popup=window.webkitNotifications.createNotification(null,title,opt.body);return popup.show(),popup.close=function(){popup.cancel()},popup};var permission;switch(window.webkitNotifications.checkPermission()){case 0:permission=jsxc.CONST.NOTIFICATION_GRANTED;break;case 2:permission=jsxc.CONST.NOTIFICATION_DENIED;break;default:permission=jsxc.CONST.NOTIFICATION_DEFAULT}return window.Notification.permission=permission,window.Notification.requestPermission=function(func){window.webkitNotifications.requestPermission(func)},!0}return window.Notification?!0:!1},prepareRequest:function(){jsxc.notice.has("gui.showRequestNotification")||$(document).one("postmessagein.jsxc",function(){setTimeout(function(){jsxc.notice.add($.t("Notifications")+"?",$.t("Should_we_notify_you_"),"gui.showRequestNotification")},1e3)})},requestPermission:function(){window.Notification.requestPermission(function(status){window.Notification.permission!==status&&(window.Notification.permission=status),$(document).trigger(jsxc.notification.hasPermission()?"notificationready.jsxc":"notificationfailure.jsxc")})},hasPermission:function(){return window.Notification.permission===jsxc.CONST.NOTIFICATION_GRANTED},playSound:function(soundFile,loop,force){if(jsxc.master&&!jsxc.options.get("muteNotification")&&"dnd"!==jsxc.storage.getUserItem("presence")&&(!jsxc.hasFocus()||force)){jsxc.notification.stopSound();var audio=new Audio(jsxc.options.root+"/sound/"+soundFile);audio.loop=loop||!1,audio.play(),jsxc.notification.audio=audio}},stopSound:function(){var audio=jsxc.notification.audio;"undefined"!=typeof audio&&null!==audio&&(audio.pause(),jsxc.notification.audio=null)},muteSound:function(external){$("#jsxc_menu .jsxc_muteNotification").text($.t("Unmute")),external!==!0&&jsxc.options.set("muteNotification",!0)},unmuteSound:function(external){$("#jsxc_menu .jsxc_muteNotification").text($.t("Mute")),external!==!0&&jsxc.options.set("muteNotification",!1)}},jsxc.options={app_name:"web applications",timeout:3e3,busyTimeout:15e3,otr:{enable:!0,ERROR_START_AKE:!1,debug:!1,SEND_WHITESPACE_TAG:!0,WHITESPACE_START_AKE:!0},xmpp:{url:null,jid:null,domain:null,password:null,overwrite:!1,onlogin:!0},priority:{online:0,chat:0,away:0,xa:0,dnd:0},loginForm:{form:null,jid:null,pass:null,preJid:function(jid){return jid},onConnected:"submit",onAuthFail:"submit"},logoutElement:null,numberOfMsg:10,defaultLang:"en",autoLang:!0,rosterAppend:"body",notification:!0,popupDuration:6e3,root:"",loginTimeout:6e5,displayRosterMinimized:function(){return!1},hideOffline:!1,muteNotification:!1,defaultAvatar:function(jid){jsxc.gui.avatarPlaceholder($(this).find(".jsxc_avatar"),jid)},loadSettings:function(){},saveSettinsPermanent:function(){},carbons:{enable:!1},getUsers:null},jsxc.otr={objects:{},dsaFallback:null,receiveMessage:function(d){var bid=d.bid;jsxc.otr.objects[bid].msgstate!==OTR.CONST.MSGSTATE_PLAINTEXT&&jsxc.otr.backup(bid),jsxc.otr.objects[bid].msgstate===OTR.CONST.MSGSTATE_PLAINTEXT||d.encrypted?jsxc.gui.window.postMessage(bid,"in",d.msg,d.encrypted,d.forwarded,d.stamp):jsxc.gui.window.postMessage(bid,"sys",$.t("Received_an_unencrypted_message")+". ["+d.msg+"]",d.encrypted,d.forwarded,d.stamp)},sendMessage:function(jid,msg,uid){0!==jsxc.otr.objects[jsxc.jidToBid(jid)].msgstate&&jsxc.otr.backup(jsxc.jidToBid(jid)),jsxc.xmpp._sendMessage(jid,msg,uid)},create:function(bid){if(!jsxc.otr.objects.hasOwnProperty(bid)&&jsxc.options.otr.priv){var ol=jsxc.storage.getUserItem("otrlist")||[];ol.indexOf(bid)<0&&(ol.push(bid),jsxc.storage.setUserItem("otrlist",ol)),jsxc.otr.objects[bid]=new OTR(jsxc.options.otr),jsxc.options.otr.SEND_WHITESPACE_TAG&&(jsxc.otr.objects[bid].SEND_WHITESPACE_TAG=!0),jsxc.options.otr.WHITESPACE_START_AKE&&(jsxc.otr.objects[bid].WHITESPACE_START_AKE=!0),jsxc.otr.objects[bid].on("status",function(status){var data=jsxc.storage.getUserItem("buddy",bid);if(null!==data){switch(status){case OTR.CONST.STATUS_SEND_QUERY:jsxc.gui.window.postMessage(bid,"sys",$.t("trying_to_start_private_conversation"));break;case OTR.CONST.STATUS_AKE_SUCCESS:data.fingerprint=jsxc.otr.objects[bid].their_priv_pk.fingerprint(),data.msgstate=OTR.CONST.MSGSTATE_ENCRYPTED;var msg=$.t(jsxc.otr.objects[bid].trust?"Verified":"Unverified")+" "+$.t("private_conversation_started");jsxc.gui.window.postMessage(bid,"sys",msg);break;case OTR.CONST.STATUS_END_OTR:data.fingerprint=null,jsxc.otr.objects[bid].msgstate===OTR.CONST.MSGSTATE_PLAINTEXT?(data.msgstate=OTR.CONST.MSGSTATE_PLAINTEXT,jsxc.gui.window.postMessage(bid,"sys",$.t("private_conversation_aborted"))):(data.msgstate=OTR.CONST.MSGSTATE_FINISHED,jsxc.gui.window.postMessage(bid,"sys",$.t("your_buddy_closed_the_private_conversation_you_should_do_the_same")));break;case OTR.CONST.STATUS_SMP_HANDLE:jsxc.keepBusyAlive()}jsxc.storage.setUserItem("buddy",bid,data),jsxc.gui.update(bid)}}),jsxc.otr.objects[bid].on("smp",function(type,data){switch(type){case"question":if(jsxc.gui.window.postMessage(bid,"sys",$.t("Authentication_request_received")),$("#jsxc_dialog").length>0){jsxc.otr.objects[bid].sm.abort();break}jsxc.otr.onSmpQuestion(bid,data),jsxc.storage.setUserItem("smp_"+bid,{data:data||null});break;case"trust":jsxc.otr.objects[bid].trust=data,jsxc.storage.updateUserItem("buddy",bid,"trust",data),jsxc.otr.backup(bid),jsxc.gui.update(bid),data?jsxc.gui.window.postMessage(bid,"sys",$.t("conversation_is_now_verified")):jsxc.gui.window.postMessage(bid,"sys",$.t("authentication_failed")),jsxc.storage.removeUserItem("smp_"+bid),jsxc.gui.dialog.close();break;case"abort":jsxc.gui.window.postMessage(bid,"sys",$.t("Authentication_aborted"));break;default:jsxc.debug("[OTR] sm callback: Unknown type: "+type)}}),jsxc.otr.objects[bid].on("ui",function(msg,encrypted,meta){jsxc.otr.receiveMessage({bid:bid,msg:msg,encrypted:encrypted===!0,stamp:meta.stamp,forwarded:meta.forwarded})}),jsxc.otr.objects[bid].on("io",function(msg,uid){var jid=jsxc.gui.window.get(bid).data("jid")||jsxc.otr.objects[bid].jid;jsxc.otr.objects[bid].jid=jid,jsxc.otr.sendMessage(jid,msg,uid)}),jsxc.otr.objects[bid].on("error",function(err){"Received an unencrypted message."!==err&&jsxc.gui.window.postMessage(bid,"sys","[OTR] "+$.t(err)),jsxc.error("[OTR] "+err)}),jsxc.otr.restore(bid)}},onSmpQuestion:function(bid,data){jsxc.gui.showVerification(bid),$("#jsxc_dialog select").prop("selectedIndex",data?2:3).change(),$("#jsxc_dialog > div:eq(0)").hide(),data?($("#jsxc_dialog > div:eq(2)").find("#jsxc_quest").val(data).prop("disabled",!0),$("#jsxc_dialog > div:eq(2)").find(".creation").text("Answer"),$("#jsxc_dialog > div:eq(2)").find(".jsxc_explanation").text($.t("your_buddy_is_attempting_to_determine_")+" "+$.t("to_authenticate_to_your_buddy")+$.t("enter_the_answer_and_click_answer"))):$("#jsxc_dialog > div:eq(3)").find(".jsxc_explanation").text($.t("your_buddy_is_attempting_to_determine_")+" "+$.t("to_authenticate_to_your_buddy")+$.t("enter_the_secret")),$("#jsxc_dialog .jsxc_close").click(function(){jsxc.storage.removeUserItem("smp_"+bid),jsxc.master&&jsxc.otr.objects[bid].sm.abort()})},sendSmpReq:function(bid,sec,quest){jsxc.keepBusyAlive(),jsxc.otr.objects[bid].smpSecret(sec,quest||"")},toggleTransfer:function(bid){0===jsxc.storage.getUserItem("buddy",bid).msgstate?jsxc.otr.goEncrypt(bid):jsxc.otr.goPlain(bid)},goEncrypt:function(bid){jsxc.master?jsxc.otr.objects[bid].sendQueryMsg():jsxc.storage.updateUserItem("buddy",bid,"transferReq",1)},goPlain:function(bid,cb){jsxc.master?(jsxc.otr.objects[bid].endOtr.call(jsxc.otr.objects[bid],cb),jsxc.otr.objects[bid].init.call(jsxc.otr.objects[bid]),jsxc.otr.backup(bid)):jsxc.storage.updateUserItem("buddy",bid,"transferReq",0)},backup:function(bid){var o=jsxc.otr.objects[bid],r={};if(null!==o){var i,savekey=["jid","our_instance_tag","msgstate","authstate","fragment","their_y","their_old_y","their_keyid","their_instance_tag","our_dh","our_old_dh","our_keyid","sessKeys","storedMgs","oldMacKeys","trust","transmittedRS","ssid","receivedPlaintext","authstate","send_interval"];for(i=0;i<savekey.length;i++)r[savekey[i]]=JSON.stringify(o[savekey[i]]);null!==o.their_priv_pk&&(r.their_priv_pk=JSON.stringify(o.their_priv_pk.packPublic())),o.ake.otr_version&&""!==o.ake.otr_version&&(r.otr_version=JSON.stringify(o.ake.otr_version)),jsxc.storage.setUserItem("otr",bid,r)}},restore:function(bid){var o=jsxc.otr.objects[bid],d=jsxc.storage.getUserItem("otr",bid);if(null!==o||null!==d){var key;for(key in d)if(d.hasOwnProperty(key)){var val=JSON.parse(d[key]);"their_priv_pk"===key&&null!==val&&(val=DSA.parsePublic(val)),"otr_version"===key&&null!==val?o.ake.otr_version=val:o[key]=val}jsxc.otr.objects[bid]=o,1===o.msgstate&&null!==o.their_priv_pk&&o._smInit.call(jsxc.otr.objects[bid])}jsxc.otr.enable(bid)},createDSA:function(){if(!jsxc.options.otr.priv)if(null===jsxc.storage.getUserItem("key")){var msg=$.t("Creating_your_private_key_"),worker=null;if(Worker)try{worker=new Worker(jsxc.options.root+"/lib/otr/build/dsa-webworker.js")}catch(err){jsxc.warn("Couldn't create web-worker.",err)}jsxc.otr.dsaFallback=null===worker,jsxc.otr.dsaFallback?(jsxc.gui.dialog.open(jsxc.gui.template.get("waitAlert",null,msg),{noClose:!0}),jsxc.debug("DSA key creation started."),setTimeout(function(){var dsa=new DSA;jsxc.otr.DSAready(dsa)},500)):(jsxc._onMaster(),worker.onmessage=function(e){var type=e.data.type,val=e.data.val;"debug"===type?jsxc.debug(val):"data"===type&&jsxc.otr.DSAready(DSA.parsePrivate(val))},worker.postMessage({imports:[jsxc.options.root+"/lib/otr/vendor/salsa20.js",jsxc.options.root+"/lib/otr/vendor/bigint.js",jsxc.options.root+"/lib/otr/vendor/crypto.js",jsxc.options.root+"/lib/otr/vendor/eventemitter.js",jsxc.options.root+"/lib/otr/lib/const.js",jsxc.options.root+"/lib/otr/lib/helpers.js",jsxc.options.root+"/lib/otr/lib/dsa.js"],seed:BigInt.getSeed(),debug:!0}))}else jsxc.debug("DSA key loaded"),jsxc.options.otr.priv=DSA.parsePrivate(jsxc.storage.getUserItem("key")),jsxc.otr._createDSA()},_createDSA:function(){jsxc.storage.setUserItem("priv_fingerprint",jsxc.options.otr.priv.fingerprint()),jsxc.otr.dsaFallback!==!1&&jsxc._onMaster()},DSAready:function(dsa){jsxc.storage.setUserItem("key",dsa.packPrivate()),jsxc.options.otr.priv=dsa,jsxc.otr.dsaFallback?jsxc.gui.dialog.close():$.each(jsxc.storage.getUserItem("windowlist"),function(index,val){jsxc.otr.create(val)}),jsxc.otr._createDSA()},enable:function(bid){jsxc.gui.window.get(bid).find(".jsxc_otr").removeClass("jsxc_disabled")}},jsxc.storage={PREFIX:"jsxc",SEP:":",getPrefix:function(uk){var self=jsxc.storage;return self.PREFIX+self.SEP+(uk&&jsxc.bid?jsxc.bid+self.SEP:"")},setItem:function(key,value,uk){jsxc.storageNotConform>0&&"rid"!==key&&"lastActivity"!==key&&(jsxc.storageNotConform>1&&null===jsxc.toSNC&&(jsxc.toSNC=window.setTimeout(function(){jsxc.storageNotConform=0,jsxc.storage.setItem("storageNotConform",0)},1e3)),jsxc.ls.push(JSON.stringify({key:key,value:value}))),"object"==typeof value&&(value=JSON.stringify(value)),localStorage.setItem(jsxc.storage.getPrefix(uk)+key,value)},setUserItem:function(type,key,value){var self=jsxc.storage;return 2===arguments.length?(value=key,key=type,type=""):3===arguments.length&&(key=type+self.SEP+key),jsxc.storage.setItem(key,value,!0)},getItem:function(key,uk){key=jsxc.storage.getPrefix(uk)+key;var value=localStorage.getItem(key);try{return JSON.parse(value)}catch(e){return value}},getUserItem:function(type,key){var self=jsxc.storage;return 1===arguments.length?key=type:2===arguments.length&&(key=type+self.SEP+key),jsxc.storage.getItem(key,!0)},removeItem:function(key,uk){jsxc.storageNotConform&&"rid"!==key&&"lastActivity"!==key&&jsxc.ls.push(JSON.stringify({key:jsxc.storage.prefix+key,value:""})),localStorage.removeItem(jsxc.storage.getPrefix(uk)+key)},removeUserItem:function(type,key){var self=jsxc.storage;1===arguments.length?key=type:2===arguments.length&&(key=type+self.SEP+key),jsxc.storage.removeItem(key,!0)},updateItem:function(key,variable,value,uk){var data=jsxc.storage.getItem(key,uk)||{};"object"==typeof variable?$.each(variable,function(key,val){"undefined"==typeof data[key]&&jsxc.debug("Variable "+key+" doesn't exist in "+variable+". It was created."),data[key]=val}):("undefined"==typeof data[variable]&&jsxc.debug("Variable "+variable+" doesn't exist. It was created."),data[variable]=value),jsxc.storage.setItem(key,data,uk)
+},updateUserItem:function(type,key,variable,value){var self=jsxc.storage;return 4===arguments.length||3===arguments.length&&"object"==typeof variable?key=type+self.SEP+key:(value=variable,variable=key,key=type),jsxc.storage.updateItem(key,variable,value,!0)},ink:function(key,uk){jsxc.storage.setItem(key,Number(jsxc.storage.getItem(key,uk))+1,uk)},removeElement:function(key,name,uk){var item=jsxc.storage.getItem(key,uk);$.isArray(item)?item=$.grep(item,function(e){return e!==name}):"object"==typeof item&&delete item[name],jsxc.storage.setItem(key,item,uk)},removeUserElement:function(type,key,name){var self=jsxc.storage;return 2===arguments.length?(name=key,key=type):3===arguments.length&&(key=type+self.SEP+key),jsxc.storage.removeElement(key,name,!0)},onStorage:function(e){if(e.key!==jsxc.storage.PREFIX+jsxc.storage.SEP+"rid"&&e.key!==jsxc.storage.PREFIX+jsxc.storage.SEP+"lastActivity"){var re=new RegExp("^"+jsxc.storage.PREFIX+jsxc.storage.SEP+"(?:[^"+jsxc.storage.SEP+"]+@[^"+jsxc.storage.SEP+"]+"+jsxc.storage.SEP+")?(.*)","i"),key=e.key.replace(re,"$1");if(jsxc.storageNotConform>0&&jsxc.ls.length>0){var val=e.newValue;try{val=JSON.parse(val)}catch(err){}var index=$.inArray(JSON.stringify({key:key,value:val}),jsxc.ls);if(index>=0)return jsxc.storageNotConform>1&&(window.clearTimeout(jsxc.toSNC),jsxc.storageNotConform=1,jsxc.storage.setItem("storageNotConform",1)),void jsxc.ls.splice(index,1)}if(e.oldValue!==e.newValue){var n,o,bid=key.replace(new RegExp("[^"+jsxc.storage.SEP+"]+"+jsxc.storage.SEP+"(.*)","i"),"$1");if(jsxc.master&&"alive"===key)return jsxc.debug("Master request."),void jsxc.storage.ink("alive");if(!(jsxc.master||"alive"!==key&&"alive_busy"!==key||jsxc.triggeredFromElement))return window.clearTimeout(jsxc.to),jsxc.to=window.setTimeout(jsxc.checkMaster,("alive"===key?jsxc.options.timeout:jsxc.options.busyTimeout)+jsxc.random(60)),void(jsxc.role_allocation||jsxc.onSlave());if(key.match(/^notices/)&&jsxc.notice.load(),key.match(/^presence/)&&jsxc.gui.changePresence(e.newValue,!0),key.match(/^options/)&&e.newValue&&(n=JSON.parse(e.newValue),"undefined"!=typeof n.muteNotification&&n.muteNotification?jsxc.notification.muteSound(!0):jsxc.notification.unmuteSound(!0)),key.match(/^hidden/)&&(jsxc.master?clearTimeout(jsxc.toNotification):jsxc.isHidden()),key.match(/^focus/)&&(jsxc.master?clearTimeout(jsxc.toNotification):jsxc.hasFocus()),key.match(new RegExp("^chat"+jsxc.storage.SEP)))for(var data,el,posts=JSON.parse(e.newValue);posts.length>0;)data=posts.pop(),el=$("#"+data.uid),0===el.length?(jsxc.master&&"out"===data.direction&&jsxc.xmpp.sendMessage(bid,data.msg,data.uid),jsxc.gui.window._postMessage(bid,data)):data.received&&el.addClass("jsxc_received");else{if(key.match(new RegExp("^window"+jsxc.storage.SEP)))return e.newValue?e.oldValue?(n=JSON.parse(e.newValue),n.minimize?jsxc.gui.window._hide(bid):jsxc.gui.window._show(bid),void jsxc.gui.window.setText(bid,n.text)):void jsxc.gui.window.open(bid):void jsxc.gui.window._close(bid);if(key.match(new RegExp("^smp"+jsxc.storage.SEP))){if(!e.newValue)return jsxc.gui.dialog.close(),void(jsxc.master&&jsxc.otr.objects[bid].sm.abort());n=JSON.parse(e.newValue),"undefined"!=typeof n.data?jsxc.otr.onSmpQuestion(bid,n.data):jsxc.master&&n.sec&&(jsxc.gui.dialog.close(),jsxc.otr.sendSmpReq(bid,n.sec,n.quest))}if(!jsxc.master&&key.match(new RegExp("^buddy"+jsxc.storage.SEP))){if(!e.newValue)return void jsxc.gui.roster.purge(bid);if(!e.oldValue)return void jsxc.gui.roster.add(bid);n=JSON.parse(e.newValue),o=JSON.parse(e.oldValue),jsxc.gui.update(bid),(o.status!==n.status||o.sub!==n.sub)&&jsxc.gui.roster.reorder(bid)}if(jsxc.master&&key.match(new RegExp("^deletebuddy"+jsxc.storage.SEP))&&e.newValue&&(n=JSON.parse(e.newValue),jsxc.xmpp.removeBuddy(n.jid),jsxc.storage.removeUserItem(key)),jsxc.master&&key.match(new RegExp("^buddy"+jsxc.storage.SEP))&&(n=JSON.parse(e.newValue),o=JSON.parse(e.oldValue),o.transferReq!==n.transferReq&&(jsxc.storage.updateUserItem("buddy",bid,"transferReq",-1),0===n.transferReq&&jsxc.otr.goPlain(bid),1===n.transferReq&&jsxc.otr.goEncrypt(bid)),o.name!==n.name&&jsxc.gui.roster._rename(bid,n.name)),"sid"===key)return void(e.newValue||jsxc.xmpp.logout());"friendReq"===key&&(n=JSON.parse(e.newValue),jsxc.master&&n.approve>=0&&jsxc.xmpp.resFriendReq(n.jid,n.approve)),jsxc.master&&key.match(new RegExp("^add"+jsxc.storage.SEP))&&(n=JSON.parse(e.newValue),jsxc.xmpp.addBuddy(n.username,n.alias)),"roster"===key&&jsxc.gui.roster.toggle(),jsxc.master&&key.match(new RegExp("^vcard"+jsxc.storage.SEP))&&null!==e.newValue&&e.newValue.match(/^request:/)&&jsxc.xmpp.loadVcard(bid,function(stanza){jsxc.storage.setUserItem("vcard",bid,{state:"success",data:$("<div>").append(stanza).html()})},function(){jsxc.storage.setUserItem("vcard",bid,{state:"error"})}),jsxc.master||!key.match(new RegExp("^vcard"+jsxc.storage.SEP))||null===e.newValue||e.newValue.match(/^request:/)||(n=JSON.parse(e.newValue),"undefined"!=typeof n.state&&$(document).trigger("loaded.vcard.jsxc",n),jsxc.storage.removeUserItem("vcard",bid))}}}},saveMessage:function(bid,direction,msg,encrypted,forwarded,stamp,sender){var chat=jsxc.storage.getUserItem("chat",bid)||[],uid=(new Date).getTime()+":msg";chat.length>jsxc.options.get("numberOfMsg")&&chat.pop();var post={direction:direction,msg:msg,uid:uid.replace(/:/,"-"),received:!1,encrypted:encrypted||!1,forwarded:forwarded||!1,stamp:stamp||(new Date).getTime(),sender:sender};return chat.unshift(post),jsxc.storage.setUserItem("chat",bid,chat),post},saveBuddy:function(bid,data){return jsxc.storage.getUserItem("buddy",bid)?(jsxc.storage.updateUserItem("buddy",bid,data),"updated"):(jsxc.storage.setUserItem("buddy",bid,$.extend({jid:"",name:"",status:0,sub:"none",msgstate:0,transferReq:-1,trust:!1,fingerprint:null,res:[],type:"chat"},data)),"created")}},jsxc.gui.template.incomingCall='<h3 data-i18n="Incoming_call"></h3> <p><span data-i18n="Do_you_want_to_accept_the_call_from"></span> {{bid_name}}?</p> <p class="jsxc_right"> <a href="#" class="button jsxc_reject" data-i18n="Reject"></a> <a href="#" class="button creation jsxc_accept" data-i18n="Accept"></a> </p>',jsxc.gui.template.allowMediaAccess='<p data-i18n="Please_allow_access_to_microphone_and_camera"></p>',jsxc.gui.template.videoWindow='<div class="jsxc_webrtc"> <div class="jsxc_chatarea"> <ul></ul> </div> <div class="jsxc_videoContainer"> <video class="jsxc_localvideo" autoplay></video> <video class="jsxc_remotevideo" autoplay></video> <div class="jsxc_status"></div> <div class="bubblingG"> <span id="bubblingG_1"> </span> <span id="bubblingG_2"> </span> <span id="bubblingG_3"> </span> </div> <div class="jsxc_noRemoteVideo"> <div> <div></div> <p data-i18n="No_video_signal"></p> <div></div> </div> </div> </div> <div class="jsxc_controlbar"> <button type="button" class="jsxc_hangUp" data-i18n="hang_up"></button> <input type="range" class="jsxc_volume" min="0.0" max="1.0" step="0.05" value="0.5" /> <div class="jsxc_buttongroup"> <button type="button" class="jsxc_snapshot" data-i18n="snapshot"></button><button type="button" class="jsxc_snapshots">&#9660;</button> </div> <!-- <button type="button" class="jsxc_mute_local" data-i18n="mute_my_audio"></button> <button type="button" class="jsxc_pause_local" data-i18n="pause_my_video"></button> --> <button type="button" class="jsxc_showchat" data-i18n="chat"></button> <button type="button" class="jsxc_fullscreen" data-i18n="fullscreen"></button> <button type="button" class="jsxc_info" data-i18n="Info"></button> </div> <div class="jsxc_multi"> <div class="jsxc_snapshotbar"> <p>No pictures yet!</p> </div>\n <!--<div class="jsxc_chatarea"> <ul></ul> </div>--> <div class="jsxc_infobar"></div> </div> </div>',jsxc.webrtc={conn:null,localStream:null,remoteStream:null,last_caller:null,AUTO_ACCEPT:!1,reqVideoFeatures:["urn:xmpp:jingle:apps:rtp:video","urn:xmpp:jingle:apps:rtp:audio","urn:xmpp:jingle:transports:ice-udp:1","urn:xmpp:jingle:apps:dtls:0"],chatJids:{},init:function(){var self=jsxc.webrtc;return self.conn=jsxc.xmpp.conn,"firefox"===RTC.browser&&(self.conn.jingle.media_constraints.mandatory.MozDontOfferDataChannel=!0),self.conn.jingle?(self.conn.jingle.PRANSWER=!1,self.conn.jingle.AUTOACCEPT=!1,self.conn.jingle.ice_config=jsxc.storage.getUserItem("iceConfig"),self.conn.jingle.MULTIPARTY=!1,self.conn.jingle.pc_constraints=RTC.pc_constraints,$(document).on("message.jsxc",$.proxy(self.onMessage,self)),$(document).on("presence.jsxc",$.proxy(self.onPresence,self)),$(document).on("mediaready.jingle",$.proxy(self.onMediaReady,self)),$(document).on("mediafailure.jingle",$.proxy(self.onMediaFailure,self)),$(document).on("callincoming.jingle",$.proxy(self.onCallIncoming,self)),$(document).on("callterminated.jingle",$.proxy(self.onCallTerminated,self)),$(document).on("ringing.jingle",$.proxy(self.onCallRinging,self)),$(document).on("remotestreamadded.jingle",$.proxy(self.onRemoteStreamAdded,self)),$(document).on("remotestreamremoved.jingle",$.proxy(self.onRemoteStreamRemoved,self)),$(document).on("iceconnectionstatechange.jingle",$.proxy(self.onIceConnectionStateChanged,self)),$(document).on("nostuncandidates.jingle",$.proxy(self.noStunCandidates,self)),$(document).on("error.jingle",function(ev,sid,error){jsxc.error("[JINGLE]",error)}),self.conn.disco&&self.conn.disco.addFeature("urn:xmpp:jingle:apps:dtls:0"),self.conn.caps&&$(document).on("caps.strophe",$.proxy(self.onCaps,self)),void self.getTurnCrendentials()):void jsxc.error("No jingle plugin found!")},getTurnCrendentials:function(){if(!jsxc.options.turnCredentialsPath)return void jsxc.debug("No path for TURN credentials defined!");var ttl=(jsxc.storage.getUserItem("iceValidity")||0)-(new Date).getTime();return ttl>0?void window.setTimeout(jsxc.webrtc.getTurnCrendentials,ttl+500):void $.ajax(jsxc.options.turnCredentialsPath,{async:!0,success:function(data){var iceConfig={iceServers:[{url:"turn:"+data.url,credential:data.credential,username:data.username}]};jsxc.webrtc.conn.jingle.ice_config=iceConfig,jsxc.storage.setUserItem("iceConfig",iceConfig),jsxc.storage.setUserItem("iceValidity",(new Date).getTime()+1e3*data.ttl)},dataType:"json"})},getCapableRes:function(jid){var self=jsxc.webrtc,bid=jsxc.jidToBid(jid),res=jsxc.storage.getUserItem("res",bid)||[],available=[];return $.each(res,function(r){self.conn.caps.hasFeatureByJid(bid+"/"+r,self.reqVideoFeatures)&&available.push(r)}),available},onAddRosterItem:function(event,bid,data,el){var self=jsxc.webrtc;if(!self.conn)return void $(document).one("connectionReady.jsxc",function(){self.onAddRosterItem(null,bid,data,el)});var videoIcon=$('<div class="jsxc_video jsxc_disabled" title="'+$.t("Start_video_call")+'"></div>');videoIcon.click(function(){return self.startCall(data.jid),!1}),el.find(".jsxc_options.jsxc_left").append(videoIcon),el.on("extra.jsxc",function(){self.updateIcon(bid)})},initWindow:function(event,win){var self=jsxc.webrtc;if(!win.hasClass("jsxc_groupchat")){if(jsxc.debug("webrtc.initWindow"),!self.conn)return void $(document).one("connectionReady.jsxc",function(){self.initWindow(null,win)});var div=$("<div>").addClass("jsxc_video");win.find(".jsxc_transfer:eq(1)").after(div),self.updateIcon(jsxc.jidToBid(win.data("jid")))}},updateIcon:function(bid){jsxc.debug("Update icon",bid);var self=jsxc.webrtc;if(bid!==jsxc.jidToBid(self.conn.jid)){var win=jsxc.gui.window.get(bid),jid=win.data("jid")||jsxc.storage.getUserItem("buddy",bid).jid,el=win.find(".jsxc_video").add(jsxc.gui.roster.getItem(bid).find(".jsxc_video")),capableRes=self.getCapableRes(jid),targetRes=Strophe.getResourceFromJid(jid);null===targetRes&&($.each(jsxc.storage.getUserItem("buddy",bid).res||[],function(index,val){return capableRes.indexOf(val)>-1?(targetRes=val,!1):void 0}),jid=jid+"/"+targetRes),el.off("click"),capableRes.indexOf(targetRes)>-1?(el.click(function(){self.startCall(jid)}),el.removeClass("jsxc_disabled"),el.attr("title",$.t("Start_video_call"))):(el.addClass("jsxc_disabled"),el.attr("title",$.t("Video_call_not_possible")))}},onMessage:function(e,from){var self=jsxc.webrtc,bid=jsxc.jidToBid(from);jsxc.debug("webrtc.onmessage",from),self.chatJids[bid]!==from&&(self.updateIcon(bid),self.chatJids[bid]=from)},onPresence:function(ev,jid){var self=jsxc.webrtc;jsxc.debug("webrtc.onpresence",jid),self.updateIcon(jsxc.jidToBid(jid))},setStatus:function(txt,d){var status=$(".jsxc_webrtc .jsxc_status"),duration="undefined"==typeof d||null===d?4e3:d;if(jsxc.debug("[Webrtc]",txt),status.html()&&(txt=status.html()+"<br />"+txt),status.html(txt),status.css({"margin-left":"-"+status.width()/2+"px",opacity:0,display:"block"}),status.stop().animate({opacity:1}),clearTimeout(status.data("timeout")),0!==duration){var to=setTimeout(function(){status.stop().animate({opacity:0},function(){status.html("")})},duration);status.data("timeout",to)}},onCaps:function(event,jid){var self=jsxc.webrtc;self.updateIcon(jsxc.jidToBid(jid))},onMediaReady:function(event,stream){jsxc.debug("media ready");var self=jsxc.webrtc;self.localStream=stream,self.conn.jingle.localStream=stream,jsxc.gui.showVideoWindow(self.last_caller);var i;for(i=0;i<stream.getAudioTracks().length;i++)self.setStatus(stream.getAudioTracks().length>0?"Use local audio device.":"No local audio device."),jsxc.debug('using audio device "'+stream.getAudioTracks()[i].label+'"');for(i=0;i<stream.getVideoTracks().length;i++)self.setStatus(stream.getVideoTracks().length>0?"Use local video device.":"No local video device."),jsxc.debug('using video device "'+stream.getVideoTracks()[i].label+'"'),$("#jsxc_dialog .jsxc_localvideo").show();$(document).one("cleanup.dialog.jsxc",$.proxy(self.hangUp,self)),$(document).trigger("finish.mediaready.jsxc")},onMediaFailure:function(ev,err){this.setStatus("media failure"),jsxc.gui.window.postMessage(jsxc.jidToBid(jsxc.webrtc.last_caller),"sys",$.t("Media_failure")+err.name),jsxc.debug("media failure: "+err.name)},onCallIncoming:function(event,sid){jsxc.debug("incoming call"+sid);var self=this,sess=this.conn.jingle.sessions[sid],bid=jsxc.jidToBid(sess.peerjid);if(jsxc.gui.window.postMessage(bid,"sys",$.t("Incoming_call")),jsxc.notification.notify($.t("Incoming_call"),$.t("from")+" "+bid),sess.sendRinging(),jsxc.webrtc.last_caller=sess.peerjid,jsxc.switchEvents({"mediaready.jingle":function(event,stream){self.setStatus("Accept call"),sess.localStream=stream,sess.peerconnection.addStream(stream),sess.sendAnswer(),sess.accept()},"mediafailure.jingle":function(){sess.sendTerminate("decline"),sess.terminate()}}),jsxc.webrtc.AUTO_ACCEPT)return void self.reqUserMedia();var dialog=jsxc.gui.dialog.open(jsxc.gui.template.get("incomingCall",bid),{noClose:!0});dialog.find(".jsxc_accept").click(function(){$(document).trigger("accept.call.jsxc"),self.reqUserMedia()}),dialog.find(".jsxc_reject").click(function(){jsxc.gui.dialog.close(),$(document).trigger("reject.call.jsxc"),sess.sendTerminate("decline"),sess.terminate()})},onCallTerminated:function(event,sid,reason,text){this.setStatus("call terminated "+sid+(reason?": "+reason+" "+text:""));var bid=jsxc.jidToBid(jsxc.webrtc.last_caller);this.localStream&&this.localStream.stop(),$(".jsxc_videoContainer").length&&($(".jsxc_remotevideo")[0].src="",$(".jsxc_localvideo")[0].src=""),this.conn.jingle.localStream=null,this.localStream=null,this.remoteStream=null;var win=$("#jsxc_dialog .jsxc_chatarea > ul > li");$("#jsxc_windowList > ul").prepend(win.detach()),win.find(".slimScrollDiv").resizable("enable"),$(document).off("cleanup.dialog.jsxc"),$(document).off("error.jingle"),jsxc.gui.dialog.close(),jsxc.gui.window.postMessage(bid,"sys",$.t("Call_terminated")+(reason?": "+$.t(reason):"")+".")},onCallRinging:function(){this.setStatus("ringing...",0)},onRemoteStreamAdded:function(event,data,sid){this.setStatus("Remote stream for session "+sid+" added.");var stream=data.stream;this.remoteStream=stream;var sess=this.conn.jingle.sessions[sid],isVideoDevice=stream.getVideoTracks().length>0,isAudioDevice=stream.getAudioTracks().length>0;sess.remoteDevices={video:isVideoDevice,audio:isAudioDevice},this.setStatus(isVideoDevice?"Use remote video device.":"No remote video device"),this.setStatus(isAudioDevice?"Use remote audio device.":"No remote audio device"),$(".jsxc_remotevideo").length&&(RTC.attachMediaStream($("#jsxc_dialog .jsxc_remotevideo"),stream),$("#jsxc_dialog .jsxc_"+(isVideoDevice?"remotevideo":"noRemoteVideo")).addClass("jsxc_deviceAvailable"))},onRemoteStreamRemoved:function(event,data,sid){this.setStatus("Remote stream for session "+sid+" removed.")},onIceConnectionStateChanged:function(event,sid,sess){var sigState=sess.peerconnection.signalingState,iceCon=sess.peerconnection.iceConnectionState;if(jsxc.debug("iceGat state for "+sid,sess.peerconnection.iceGatheringState),jsxc.debug("iceCon state for "+sid,iceCon),jsxc.debug("sig state for "+sid,sigState),"stable"!==sigState||"connected"!==iceCon&&"completed"!==iceCon)"failed"===iceCon&&(jsxc.gui.window.postMessage(jsxc.jidToBid(sess.peerjid),"sys",$.t("ICE_connection_failure")),$(document).off("cleanup.dialog.jsxc"),sess.sendTerminate("failed-transport"),sess.terminate(),$(document).trigger("callterminated.jingle"));else{$("#jsxc_dialog .jsxc_deviceAvailable").show(),$("#jsxc_dialog .bubblingG").hide();var localSDP=sess.peerconnection.localDescription.sdp,remoteSDP=sess.peerconnection.remoteDescription.sdp;sess.local_fp=SDPUtil.parse_fingerprint(SDPUtil.find_line(localSDP,"a=fingerprint:")).fingerprint,sess.remote_fp=SDPUtil.parse_fingerprint(SDPUtil.find_line(remoteSDP,"a=fingerprint:")).fingerprint;var ip_regex="(\\d{1,3}\\.\\d{1,3}.\\d{1,3}\\.\\d{1,3}) \\d+ typ host";sess.remote_ip=remoteSDP.match(new RegExp(ip_regex))[1],sess.local_ip=localSDP.match(new RegExp(ip_regex))[1];for(var match,regex=new RegExp(ip_regex,"g");null!==(match=regex.exec(remoteSDP));)if(match[1]!==sess.remote_ip)return void alert("!!! WARNING !!!\n\nPossible Man-in-the-middle attack detected!\n\nYou should close the connection.");var text="<p>";text+="<b>"+$.t("Local_IP")+": </b>"+sess.local_ip+"<br />",text+="<b>"+$.t("Remote_IP")+": </b>"+sess.remote_ip+"<br />",text+="<b>"+$.t("Local_Fingerprint")+": </b>"+sess.local_fp+"<br />",text+="<b>"+$.t("Remote_Fingerprint")+": </b>"+sess.remote_fp,text+="</p>",$("#jsxc_dialog .jsxc_infobar").html(text)}},noStunCandidates:function(){},startCall:function(jid,um){var self=this;return null===Strophe.getResourceFromJid(jid)?void jsxc.debug("We need a full jid"):(self.last_caller=jid,jsxc.switchEvents({"finish.mediaready.jsxc":function(){self.setStatus("Initiate call"),jsxc.gui.window.postMessage(jsxc.jidToBid(jid),"sys",$.t("Call_started")),$(document).one("error.jingle",function(e,sid,error){"offer"===error.source&&($(document).off("cleanup.dialog.jsxc"),setTimeout(function(){jsxc.gui.showAlert("Sorry, we couldn't establish a connection. Maybe your buddy is offline.")},500))}),self.conn.jingle.initiate(jid,self.conn.jid.toLowerCase())},"mediafailure.jingle":function(){jsxc.gui.dialog.close()}}),void self.reqUserMedia(um))},hangUp:function(reason,text){$(document).off("cleanup.dialog.jsxc"),jsxc.webrtc.conn.jingle.terminate(null,reason,text),$(document).trigger("callterminated.jingle")},reqUserMedia:function(um){return this.localStream?void $(document).trigger("mediaready.jingle",[this.localStream]):(um=um||["video","audio"],jsxc.gui.dialog.open(jsxc.gui.template.get("allowMediaAccess"),{noClose:!0}),this.setStatus("please allow access to microphone and camera"),void("undefined"!=typeof MediaStreamTrack&&"undefined"!=typeof MediaStreamTrack.getSources?MediaStreamTrack.getSources(function(sourceInfo){var availableDevices=sourceInfo.map(function(el){return el.kind});um=um.filter(function(el){return-1!==availableDevices.indexOf(el)}),getUserMediaWithConstraints(um)}):getUserMediaWithConstraints(um)))},snapshot:function(video){video||jsxc.debug("Missing video element"),$(".jsxc_snapshotbar p").remove();var canvas=$("<canvas/>").css("display","none").appendTo("body").attr({width:video.width(),height:video.height()}).get(0),ctx=canvas.getContext("2d");ctx.drawImage(video[0],0,0);var img=$("<img/>"),url=null;try{url=canvas.toDataURL("image/jpeg")}catch(err){return void jsxc.warn("Error",err)}img[0].src=url;var link=$("<a/>").attr({target:"_blank",href:url});link.append(img),$(".jsxc_snapshotbar").append(link),canvas.remove()}},jsxc.gui.showVideoWindow=function(jid){var self=jsxc.webrtc;$(document).one("complete.dialog.jsxc",function(){$("#jsxc_dialog .jsxc_localvideo")[0].muted=!0,$("#jsxc_dialog .jsxc_localvideo")[0].volume=0;var rv=$("#jsxc_dialog .jsxc_remotevideo"),lv=$("#jsxc_dialog .jsxc_localvideo");lv.draggable({containment:"parent"}),RTC.attachMediaStream(lv,self.localStream);var w_dialog=$("#jsxc_dialog").width(),w_remote=rv.width();if(w_remote>w_dialog){var scale=w_dialog/w_remote,new_h=rv.height()*scale,new_w=w_dialog,vc=$("#jsxc_dialog .jsxc_videoContainer");rv.height(new_h),rv.width(new_w),vc.height(new_h),vc.width(new_w),lv.height(lv.height()*scale),lv.width(lv.width()*scale)}self.remoteStream&&(RTC.attachMediaStream(rv,self.remoteStream),$("#jsxc_dialog .jsxc_"+(self.remoteStream.getVideoTracks().length>0?"remotevideo":"noRemoteVideo")).addClass("jsxc_deviceAvailable"));var toggleMulti=function(elem,open){$("#jsxc_dialog .jsxc_multi > div").not(elem).slideUp();var opt={complete:jsxc.gui.dialog.resize};open?elem.slideDown(opt):elem.slideToggle(opt)},win=jsxc.gui.window.open(jsxc.jidToBid(jid));win.find(".slimScrollDiv").resizable("disable"),win.find(".jsxc_textarea").slimScroll({height:413}),win.find(".jsxc_emoticons").css("top","419px"),$("#jsxc_dialog .jsxc_chatarea ul").append(win.detach()),$("#jsxc_dialog .jsxc_hangUp").click(function(){jsxc.webrtc.hangUp()}),$("#jsxc_dialog .jsxc_snapshot").click(function(){jsxc.webrtc.snapshot(rv),toggleMulti($("#jsxc_dialog .jsxc_snapshotbar"),!0)}),$("#jsxc_dialog .jsxc_snapshots").click(function(){toggleMulti($("#jsxc_dialog .jsxc_snapshotbar"))}),$("#jsxc_dialog .jsxc_showchat").click(function(){var chatarea=$("#jsxc_dialog .jsxc_chatarea");chatarea.is(":hidden")?(chatarea.show(),$("#jsxc_dialog .jsxc_webrtc").width("900"),jsxc.gui.dialog.resize({width:"920px"})):(chatarea.hide(),$("#jsxc_dialog .jsxc_webrtc").width("650"),jsxc.gui.dialog.resize({width:"660px"}))}),$("#jsxc_dialog .jsxc_info").click(function(){toggleMulti($("#jsxc_dialog .jsxc_infobar"))}),$("#jsxc_dialog .jsxc_fullscreen").click(function(){$.support.fullscreen&&($(document).one("disabled.fullscreen",function(){lv.removeAttr("style")}),$("#jsxc_dialog .jsxc_videoContainer").fullscreen())}),$("#jsxc_dialog .jsxc_volume").change(function(){rv[0].volume=$(this).val()}),$("#jsxc_dialog .jsxc_volume").dblclick(function(){$(this).val(.5)})}),jsxc.gui.dialog.open(jsxc.gui.template.get("videoWindow"),{noClose:!0})},$.extend(jsxc.CONST,{KEYCODE_ENTER:13,KEYCODE_ESC:27}),$(document).ready(function(){RTC=setupRTC(),null!==RTC&&(RTCPeerconnection=RTC.peerconnection,$(document).on("add.roster.jsxc",jsxc.webrtc.onAddRosterItem),$(document).on("init.window.jsxc",jsxc.webrtc.initWindow),$(document).on("attached.jsxc",jsxc.webrtc.init))}),jsxc.xmpp={conn:null,login:function(){if(!jsxc.xmpp.conn||!jsxc.xmpp.conn.connected){var jid=null,password=null,sid=null,rid=null;switch(arguments.length){case 2:jid=arguments[0],password=arguments[1];break;case 3:jid=arguments[0],sid=arguments[1],rid=arguments[2];break;default:sid=jsxc.storage.getItem("sid"),rid=jsxc.storage.getItem("rid"),null!==sid&&null!==rid?jid=jsxc.storage.getItem("jid"):(sid=null,rid=null,jid=jsxc.options.xmpp.jid)}var url=jsxc.options.get("xmpp").url;$(document).on("connected.jsxc",jsxc.xmpp.connected),$(document).on("attached.jsxc",jsxc.xmpp.attached),$(document).on("disconnected.jsxc",jsxc.xmpp.disconnected),$(document).on("ridChange",jsxc.xmpp.onRidChange),$(document).on("connfail.jsxc",jsxc.xmpp.onConnfail),$(document).on("authfail.jsxc",jsxc.xmpp.onAuthFail),Strophe.addNamespace("RECEIPTS","urn:xmpp:receipts"),jsxc.xmpp.conn=new Strophe.Connection(url);var stropheGetUniqueId=jsxc.xmpp.conn.getUniqueId;jsxc.xmpp.conn.getUniqueId=function(suffix){var uid=stropheGetUniqueId.call(jsxc.xmpp.conn,suffix);return jsxc.storage.setItem("_uniqueId",jsxc.xmpp.conn._uniqueId),uid},jsxc.storage.getItem("debug")===!0&&(jsxc.xmpp.conn.xmlInput=function(data){console.log("<",data)},jsxc.xmpp.conn.xmlOutput=function(data){console.log(">",data)});var callback=function(status,condition){switch(jsxc.debug(Object.getOwnPropertyNames(Strophe.Status)[status]+": "+condition),status){case Strophe.Status.CONNECTED:jsxc.bid=jsxc.jidToBid(jsxc.xmpp.conn.jid.toLowerCase()),$(document).trigger("connected.jsxc");break;case Strophe.Status.ATTACHED:$(document).trigger("attached.jsxc");break;case Strophe.Status.DISCONNECTED:$(document).trigger("disconnected.jsxc");break;case Strophe.Status.CONNFAIL:$(document).trigger("connfail.jsxc");break;case Strophe.Status.AUTHFAIL:$(document).trigger("authfail.jsxc")}};jsxc.xmpp.conn.caps&&(jsxc.xmpp.conn.caps.node="http://jsxc.org/"),jsxc.restore&&sid&&rid?(jsxc.debug("Try to attach"),jsxc.debug("SID: "+sid),jsxc.xmpp.conn.attach(jid,sid,rid,callback)):(jsxc.debug("New connection"),jsxc.xmpp.conn.caps&&jsxc.xmpp.conn._addSysHandler(function(stanza){var from=jsxc.xmpp.conn.domain,c=stanza.querySelector("c"),ver=c.getAttribute("ver"),node=c.getAttribute("node"),_jidNodeIndex=JSON.parse(localStorage.getItem("strophe.caps._jidNodeIndex"))||{};jsxc.xmpp.conn.caps._jidVerIndex[from]=ver,_jidNodeIndex[from]=node,localStorage.setItem("strophe.caps._jidVerIndex",JSON.stringify(jsxc.xmpp.conn.caps._jidVerIndex)),localStorage.setItem("strophe.caps._jidNodeIndex",JSON.stringify(_jidNodeIndex))},Strophe.NS.CAPS),jsxc.xmpp.conn.connect(jid||jsxc.options.xmpp.jid,password||jsxc.options.xmpp.password,callback))}},logout:function(complete){if(jsxc.storage.removeItem("sid"),jsxc.storage.removeUserItem("buddylist"),jsxc.storage.removeUserItem("windowlist"),jsxc.storage.removeItem("_uniqueId"),!jsxc.master)return $("#jsxc_roster").remove(),$("#jsxc_windowlist").remove(),!0;if(null===jsxc.xmpp.conn)return!0;$("body").click(),jsxc.triggeredFromElement="boolean"==typeof complete?complete:!0,$.each(jsxc.storage.getUserItem("otrlist")||{},function(i,val){jsxc.otr.create(val)});var numOtr=Object.keys(jsxc.otr.objects||{}).length+1,disReady=function(){--numOtr<=0&&(jsxc.xmpp.conn.flush(),setTimeout(function(){jsxc.xmpp.conn.disconnect()},600))};return $.each(jsxc.otr.objects||{},function(key,obj){obj.msgstate===OTR.CONST.MSGSTATE_ENCRYPTED?obj.endOtr.call(obj,function(){obj.init.call(obj),jsxc.otr.backup(key),disReady()}):disReady()}),disReady(),!1},connected:function(){jsxc.xmpp.conn.pause();var nomJid=Strophe.getBareJidFromJid(jsxc.xmpp.conn.jid).toLowerCase()+"/"+Strophe.getResourceFromJid(jsxc.xmpp.conn.jid);if(jsxc.storage.setItem("sid",jsxc.xmpp.conn._proto.sid),jsxc.storage.setItem("jid",nomJid),jsxc.storage.setItem("lastActivity",(new Date).getTime()),jsxc.storage.removeUserItem("buddylist"),jsxc.storage.removeUserItem("windowlist"),jsxc.storage.removeUserItem("own"),jsxc.storage.removeUserItem("avatar","own"),jsxc.storage.removeUserItem("otrlist"),jsxc.options.loginForm.triggered)switch(jsxc.options.loginForm.onConnected||"submit"){case"submit":jsxc.submitLoginForm();case!1:return void jsxc.xmpp.connectionReady()}jsxc.gui.init(),$("#jsxc_roster").removeClass("jsxc_noConnection"),jsxc.onMaster(),jsxc.xmpp.conn.resume(),jsxc.gui.dialog.close(),$(document).trigger("attached.jsxc")},attached:function(){jsxc.xmpp.conn.addHandler(jsxc.xmpp.onRosterChanged,"jabber:iq:roster","iq","set"),jsxc.xmpp.conn.addHandler(jsxc.xmpp.onMessage,null,"message","chat"),jsxc.xmpp.conn.addHandler(jsxc.xmpp.onReceived,null,"message"),jsxc.xmpp.conn.addHandler(jsxc.xmpp.onPresence,null,"presence");var caps=jsxc.xmpp.conn.caps,domain=jsxc.xmpp.conn.domain;if(caps&&jsxc.options.get("carbons").enable){var conditionalEnable=function(){jsxc.xmpp.conn.caps.hasFeatureByJid(domain,jsxc.CONST.NS.CARBONS)&&jsxc.xmpp.carbons.enable()};if("undefined"==typeof caps._knownCapabilities[caps._jidVerIndex[domain]]){var _jidNodeIndex=JSON.parse(localStorage.getItem("strophe.caps._jidNodeIndex"))||{};$(document).on("caps.strophe",function onCaps(ev,from){from===domain&&(conditionalEnable(),$(document).off("caps.strophe",onCaps))}),caps._requestCapabilities(jsxc.xmpp.conn.domain,_jidNodeIndex[domain],caps._jidVerIndex[domain])}else conditionalEnable()}if(jsxc.restore&&jsxc.storage.getUserItem("buddylist"))jsxc.xmpp.sendPres();else{$(document).one("cloaded.roster.jsxc",jsxc.xmpp.sendPres),$("#jsxc_roster > p:first").remove();var iq=$iq({type:"get"}).c("query",{xmlns:"jabber:iq:roster"});jsxc.xmpp.conn.sendIQ(iq,jsxc.xmpp.onRoster)}jsxc.xmpp.connectionReady()},connectionReady:function(){jsxc.xmpp.conn._uniqueId=jsxc.storage.getItem("_uniqueId")||(new Date).getTime(),$(document).trigger("connectionReady.jsxc")},sendPres:function(){jsxc.xmpp.conn.disco&&(jsxc.xmpp.conn.disco.addIdentity("client","web","JSXC"),jsxc.xmpp.conn.disco.addFeature(Strophe.NS.DISCO_INFO),jsxc.xmpp.conn.disco.addFeature(Strophe.NS.RECEIPTS));var pres=$pres();jsxc.xmpp.conn.caps&&pres.c("c",jsxc.xmpp.conn.caps.generateCapsAttrs()).up();var presState=jsxc.storage.getUserItem("presence")||"online";"online"!==presState&&pres.c("show").t(presState).up();var priority=jsxc.options.get("priority");priority&&"undefined"!=typeof priority[presState]&&0!==parseInt(priority[presState])&&pres.c("priority").t(priority[presState]).up(),jsxc.debug("Send presence",pres.toString()),jsxc.xmpp.conn.send(pres)},disconnected:function(){jsxc.debug("disconnected"),jsxc.storage.removeItem("sid"),jsxc.storage.removeItem("rid"),jsxc.storage.removeItem("lastActivity"),jsxc.storage.removeItem("hidden"),jsxc.storage.removeUserItem("avatar","own"),jsxc.storage.removeUserItem("otrlist"),$(document).off("connected.jsxc",jsxc.xmpp.connected),$(document).off("attached.jsxc",jsxc.xmpp.attached),$(document).off("disconnected.jsxc",jsxc.xmpp.disconnected),$(document).off("ridChange",jsxc.xmpp.onRidChange),$(document).off("connfail.jsxc",jsxc.xmpp.onConnfail),$(document).off("authfail.jsxc",jsxc.xmpp.onAuthFail),jsxc.xmpp.conn=null,$("#jsxc_windowList").remove(),jsxc.triggeredFromElement?($(document).trigger("toggle.roster.jsxc",["hidden",0]),$("#jsxc_roster").remove(),jsxc.triggeredFromLogout&&(window.location=jsxc.options.logoutElement.attr("href"))):jsxc.gui.roster.noConnection(),window.clearInterval(jsxc.keepalive)},onConnfail:function(ev,condition){jsxc.debug("XMPP connection failed: "+condition),jsxc.options.loginForm.triggered&&jsxc.submitLoginForm()},onAuthFail:function(){if(jsxc.options.loginForm.triggered)switch(jsxc.options.loginForm.onAuthFail||"ask"){case"ask":jsxc.gui.showAuthFail();break;case"submit":jsxc.submitLoginForm()}jsxc.triggeredFromBox&&jsxc.gui.showAuthFail()},onRoster:function(iq){jsxc.debug("Load roster",iq);var buddies=[];$(iq).find("item").each(function(){var jid=$(this).attr("jid"),name=$(this).attr("name")||jid,bid=jsxc.jidToBid(jid),sub=$(this).attr("subscription");buddies.push(bid),jsxc.storage.removeUserItem("res",bid),jsxc.storage.saveBuddy(bid,{jid:jid,name:name,status:0,sub:sub,res:[]}),jsxc.gui.roster.add(bid)}),0===buddies.length&&jsxc.gui.roster.empty(),jsxc.storage.setUserItem("buddylist",buddies),jsxc.debug("Roster loaded"),$(document).trigger("cloaded.roster.jsxc")
+},onRosterChanged:function(iq){return jsxc.debug("onRosterChanged",iq),$(iq).find("item").each(function(){var jid=$(this).attr("jid"),name=$(this).attr("name")||jid,bid=jsxc.jidToBid(jid),sub=$(this).attr("subscription");if("remove"===sub)jsxc.gui.roster.purge(bid);else{var bl=jsxc.storage.getUserItem("buddylist");bl.indexOf(bid)<0&&(bl.push(bid),jsxc.storage.setUserItem("buddylist",bl));var temp=jsxc.storage.saveBuddy(bid,{jid:jid,name:name,sub:sub});"updated"===temp?(jsxc.gui.update(bid),jsxc.gui.roster.reorder(bid)):jsxc.gui.roster.add(bid)}if("from"===sub||"both"===sub){var notice,notices=jsxc.storage.getUserItem("notices"),noticeKey=null;for(noticeKey in notices)notice=notices[noticeKey],"gui.showApproveDialog"===notice.fnName&&notice.fnParams[0]===jid&&(jsxc.debug("Remove notice with key "+noticeKey),jsxc.notice.remove(noticeKey))}}),jsxc.storage.getUserItem("buddylist")&&0!==jsxc.storage.getUserItem("buddylist").length?$("#jsxc_roster > p:first").remove():jsxc.gui.roster.empty(),!0},onPresence:function(presence){jsxc.debug("onPresence",presence);var ptype=$(presence).attr("type"),from=$(presence).attr("from"),jid=Strophe.getBareJidFromJid(from).toLowerCase(),r=Strophe.getResourceFromJid(from),bid=jsxc.jidToBid(jid),data=jsxc.storage.getUserItem("buddy",bid),res=jsxc.storage.getUserItem("res",bid)||{},status=null,xVCard=$(presence).find('x[xmlns="vcard-temp:x:update"]');if(jid===Strophe.getBareJidFromJid(jsxc.storage.getItem("jid")))return!0;if("error"===ptype)return $(document).trigger("error.presence.jsxc",[from,presence]),jsxc.error("[XMPP] "+$(presence).attr("code")),!0;if("subscribe"===ptype)return jsxc.storage.setUserItem("friendReq",{jid:jid,approve:-1}),jsxc.notice.add($.t("Friendship_request"),$.t("from")+" "+jid,"gui.showApproveDialog",[jid]),!0;if("unavailable"===ptype||"unsubscribed"===ptype)status=jsxc.CONST.STATUS.indexOf("offline");else{var show=$(presence).find("show").text();status=jsxc.CONST.STATUS.indexOf(""===show?"online":show)}0===status?delete res[r]:res[r]=status;var maxVal=[],max=0,prop=null;for(prop in res)res.hasOwnProperty(prop)&&max<=res[prop]&&(max!==res[prop]&&(maxVal=[],max=res[prop]),maxVal.push(prop));if(0===data.status&&max>0&&jsxc.notification.notify({title:data.name,msg:$.t("has_come_online"),source:bid}),data.status=max,data.res=maxVal,data.jid=jid,xVCard.length>0){var photo=xVCard.find("photo");photo.length>0&&photo.text()!==data.avatar&&(jsxc.storage.removeUserItem("avatar",data.avatar),data.avatar=photo.text())}return jsxc.gui.window.get(bid).length>0&&jsxc.gui.window.get(bid).data("jid",jid),jsxc.storage.setUserItem("buddy",bid,data),jsxc.storage.setUserItem("res",bid,res),jsxc.debug("Presence ("+from+"): "+status),jsxc.gui.update(bid),jsxc.gui.roster.reorder(bid),$(document).trigger("presence.jsxc",[from,status,presence]),!0},onMessage:function(stanza){var message,carbon,forwarded=$(stanza).find('forwarded[xmlns="'+jsxc.CONST.NS.FORWARD+'"]');forwarded.length>0?(message=forwarded.find("> message"),forwarded=!0,carbon=$(stanza).find('> [xmlns="'+jsxc.CONST.NS.CARBONS+'"]'),0===carbon.length&&(carbon=!1),jsxc.debug("Incoming forwarded message",message)):(message=stanza,forwarded=!1,carbon=!1,jsxc.debug("Incoming message",message));var body=$(message).find("body:first").text();if(!body||body.match(/\?OTR/i)&&forwarded)return!0;var bid,type=$(message).attr("type"),from=$(message).attr("from"),mid=$(message).attr("id"),delay=$(message).find('delay[xmlns="urn:xmpp:delay"]'),stamp=delay.length>0?new Date(delay.attr("stamp")):new Date;if(stamp=stamp.getTime(),carbon){var direction="sent"===carbon.prop("tagName")?"out":"in";return bid=jsxc.jidToBid("out"===direction?$(message).attr("to"):from),jsxc.gui.window.postMessage(bid,direction,body,!1,forwarded,stamp),!0}forwarded&&(body=from+" "+$.t("to")+" "+$(stanza).attr("to")+'"'+body+'"',from=$(stanza).attr("from"));var jid=Strophe.getBareJidFromJid(from);bid=jsxc.jidToBid(jid);var data=jsxc.storage.getUserItem("buddy",bid),request=$(message).find("request[xmlns='urn:xmpp:receipts']");if(null===data){var chat=jsxc.storage.getUserItem("chat",bid)||[];0===chat.length&&jsxc.notice.add($.t("Unknown_sender"),$.t("You_received_a_message_from_an_unknown_sender")+" ("+bid+").","gui.showUnknownSender",[bid]);var msg=jsxc.removeHTML(body);return msg=jsxc.escapeHTML(msg),jsxc.storage.saveMessage(bid,"in",msg,!1,forwarded,stamp),!0}var win=jsxc.gui.window.init(bid);return"chat"===type&&(win.data("jid",from),jsxc.storage.updateUserItem("buddy",bid,{jid:from})),$(document).trigger("message.jsxc",[from,body]),jsxc.master&&!jsxc.otr.objects[bid]&&jsxc.otr.create(bid),forwarded||null===mid||!request.length||null===data||"both"!==data.sub&&"from"!==data.sub||"chat"!==type||jsxc.xmpp.conn.send($msg({to:from}).c("received",{xmlns:"urn:xmpp:receipts",id:mid})),jsxc.otr.objects.hasOwnProperty(bid)?jsxc.otr.objects[bid].receiveMsg(body,{stamp:stamp,forwarded:forwarded}):jsxc.gui.window.postMessage(bid,"in",body,!1,forwarded,stamp),!0},onRidChange:function(ev,data){jsxc.storage.setItem("rid",data.rid)},resFriendReq:function(from,approve){jsxc.master?(jsxc.xmpp.conn.send($pres({to:from,type:approve?"subscribed":"unsubscribed"})),jsxc.storage.removeUserItem("friendReq"),jsxc.gui.dialog.close()):jsxc.storage.updateUserItem("friendReq","approve",approve)},addBuddy:function(username,alias){var bid=jsxc.jidToBid(username);if(jsxc.master){var iq=$iq({type:"set"}).c("query",{xmlns:"jabber:iq:roster"}).c("item",{jid:username,name:alias||""});jsxc.xmpp.conn.sendIQ(iq),jsxc.xmpp.conn.send($pres({to:username,type:"subscribe"})),jsxc.storage.removeUserItem("add_"+bid)}else jsxc.storage.setUserItem("add_"+bid,{username:username,alias:alias||null})},removeBuddy:function(jid){var bid=jsxc.jidToBid(jid),iq=$iq({type:"set"}).c("query",{xmlns:"jabber:iq:roster"}).c("item",{jid:Strophe.getBareJidFromJid(jid),subscription:"remove"});jsxc.xmpp.conn.sendIQ(iq),jsxc.gui.roster.purge(bid)},onReceived:function(message){var from=$(message).attr("from"),jid=Strophe.getBareJidFromJid(from),bid=jsxc.jidToBid(jid),received=$(message).find("received[xmlns='urn:xmpp:receipts']");if(received.length){var i,receivedId=received.attr("id").replace(/:/,"-"),chat=jsxc.storage.getUserItem("chat",bid);for(i=chat.length-1;i>=0;i--)if(chat[i].uid===receivedId){chat[i].received=!0,$("#"+receivedId).addClass("jsxc_received"),jsxc.storage.setUserItem("chat",bid,chat);break}}return!0},sendMessage:function(bid,msg,uid){jsxc.otr.objects.hasOwnProperty(bid)?jsxc.otr.objects[bid].sendMsg(msg,uid):jsxc.xmpp._sendMessage(jsxc.gui.window.get(bid).data("jid"),msg,uid)},_sendMessage:function(jid,msg,uid){var data=jsxc.storage.getUserItem("buddy",jsxc.jidToBid(jid))||{},isBar=Strophe.getBareJidFromJid(jid)===jid,type=data.type||"chat",xmlMsg=$msg({to:jid,type:type,id:uid}).c("body").t(msg);jsxc.xmpp.carbons.enabled&&msg.match(/^\?OTR/)&&xmlMsg.up().c("private",{xmlns:jsxc.CONST.NS.CARBONS}),"chat"===type&&(isBar||jsxc.xmpp.conn.caps.hasFeatureByJid(jid,Strophe.NS.RECEIPTS))&&xmlMsg.up().c("request",{xmlns:"urn:xmpp:receipts"}),jsxc.xmpp.conn.send(xmlMsg)},loadVcard:function(bid,cb,error_cb){jsxc.master?jsxc.xmpp.conn.vcard.get(cb,bid,error_cb):(jsxc.storage.setUserItem("vcard",bid,"request:"+(new Date).getTime()),$(document).one("loaded.vcard.jsxc",function(ev,result){result&&"success"===result.state?cb($(result.data).get(0)):error_cb()}))},getCapabilitiesByJid:function(jid){if(jsxc.xmpp.conn)return jsxc.xmpp.conn.caps.getCapabilitiesByJid(jid);var jidVerIndex=JSON.parse(localStorage.getItem("strophe.caps._jidVerIndex"))||{},knownCapabilities=JSON.parse(localStorage.getItem("strophe.caps._knownCapabilities"))||{};return jidVerIndex[jid]?knownCapabilities[jidVerIndex[jid]]:null}},jsxc.xmpp.carbons={enabled:!1,enable:function(cb){var iq=$iq({type:"set"}).c("enable",{xmlns:jsxc.CONST.NS.CARBONS});jsxc.xmpp.conn.sendIQ(iq,function(){jsxc.xmpp.carbons.enabled=!0,jsxc.debug("Carbons enabled"),cb&&cb.call(this)},function(stanza){jsxc.warn("Could not enable carbons",stanza)})},disable:function(cb){var iq=$iq({type:"set"}).c("disable",{xmlns:jsxc.CONST.NS.CARBONS});jsxc.xmpp.conn.sendIQ(iq,function(){jsxc.xmpp.carbons.enabled=!1,jsxc.debug("Carbons disabled"),cb&&cb.call(this)},function(stanza){jsxc.warn("Could not disable carbons",stanza)})},refresh:function(err){return err!==!1?jsxc.options.get("carbons").enable?jsxc.xmpp.carbons.enable():jsxc.xmpp.carbons.disable():void 0}}}(jQuery);
//# sourceMappingURL=jsxc.min.js.map \ No newline at end of file
diff --git a/build/jsxc.min.js.map b/build/jsxc.min.js.map
index 7af21e27..1c8edc27 100644
--- a/build/jsxc.min.js.map
+++ b/build/jsxc.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"jsxc.min.js","sources":["jsxc.js"],"names":["jsxc","RTC","RTCPeerconnection","$","version","master","role_allocation","to","toBusy","toNotification","toNotificationDelay","keepalive","restore","restoreCompleted","triggeredFromBox","triggeredFromElement","triggeredFromLogout","ls","storageNotConform","toSNC","bid","CONST","NOTIFICATION_DEFAULT","NOTIFICATION_GRANTED","NOTIFICATION_DENIED","STATUS","SOUNDS","MSG","CALL","NOTICE","REGEX","JID","RegExp","URL","NS","CARBONS","FORWARD","getFormattedTime","unixtime","msgDate","Date","parseInt","date","getDate","slice","month","getMonth","year","getFullYear","hours","getHours","minutes","getMinutes","dateNow","time","setHours","getTime","debug","msg","data","level","storage","getItem","console","log","d","prepend","clone","html","err","JSON","stringify","err2","warn","error","init","options","extend","get","key","local","getUserItem","set","value","updateItem","lang","autoLang","navigator","language","substr","defaultLang","i18n","lng","fallbackLng","resStore","I18next","useLocalStorage","localStorageExpirationTime","otr","window","addEventListener","onStorage","lastActivity","loginTimeout","document","on","logoutElement","length","logout","this","xmpp","off","one","jidToBid","gui","checkMaster","onMaster","loginForm","form","el_exists","jid","pass","displayRosterMinimized","setUserItem","roster","noConnection","formFound","call","events","submit","submits","each","index","val","push","handler","settings","prepareLogin","onlogin","triggered","login","username","password","loadSettings","showWaitAlert","t","resource","domain","match","preJid","split","onSlave","restoreRoster","restoreWindows","trigger","setItem","startKeepAlive","enable","createDSA","_onMaster","create","noti","notification","hasSupport","hasPermission","prepareRequest","updateAvatar","setTimeout","ink","setInterval","keepAlive","timeout","keepBusyAlive","clearTimeout","clearInterval","busyTimeout","random","max","Math","floor","selector","jidToCid","cid","Strophe","getBareJidFromJid","replace","toLowerCase","buddies","add","empty","windows","minimize","hide","show","setText","text","submitLoginForm","find","click","escapeHTML","removeHTML","switchEvents","obj","ns","toString","self","apply","arguments","isHidden","hidden","webkitHidden","mozHidden","msHidden","hasFocus","focus","exec","fnName","fnParams","i","fnList","fn","hashStr","str","hash","charCodeAt","emotions","queryActions","message","params","win","open","body","remove","showRemoveDialog","subscribe","showContactDialog","name","vcard","showVcard","append","template","resize","updateWindowListSB","scrollWindowListBy","ev","originalEvent","wheelDelta","tooltip","reg","join","windowTemplate","buddyTemplate","delay","content","attr","update","ri","we","ue","spot","removeClass","addClass","status","msgstate","trust","sub","info","avatar","el","aid","setAvatar","src","defaultAvatar","avatarPlaceholder","removeAttr","css","background-image","text-indent","avatarSrc","conn","stanza","vCard","img","type","width","offset","scrollWidth","right","padding","getWindow","toggleList","disableSelection","ul","slideUp","complete","is","slideToggle","toggleClass","mouseleave","mouseenter","showLoginBox","dialog","prop","showAuthFail","showFingerprints","showVerification","OTR","MSGSTATE_ENCRYPTED","change","slideDown","objects","updateUserItem","close","postMessage","div","sec","quest","keyup","sendSmpReq","showApproveDialog","from","noClose","stopPropagation","resFriendReq","getUsers","list","uid","displayname","option","appendTo","alias","getDomainFromJid","addBuddy","removeBuddy","showAlert","showConfirmDialog","confirm","dismiss","showAboutDialog","showDebugLog","userInfo","hasOwnProperty","screen","height","j","res","identities","cap","client","identity","getCapabilitiesByJid","category","printProp","depth","item","children","tagName","before","failedToLoad","loadVcard","photo","img_el","showSettings","overwrite","id","checked","saveSettinsPermanent","effect","color","showRequestNotification","notificationready.jsxc","notificationfailure.jsxc","requestPermission","showUnknownSender","confirmationText","saveBuddy","removeUserItem","changePresence","pres","external","sendPres","updatePresence","muteSound","unmuteSound","unreadMsg","readMsg","hasClass","detectUriScheme","container","action","element","href","indexOf","pairs","substring","decodeURIComponent","detectEmail","trim","s","prev","seed","hue","abs","saturation","lightness","background-color","font-weight","text-align","line-height","font-size","toUpperCase","ready","rosterAppend","hideOffline","mute","toggle","slimScroll","distance","opacity","notice","load","bud","insert","rename","expandClick","dblclick","scrollTo","li","listElements","thisStatus","reorder","detach","purge","removeUserElement","_close","input","replaceWith","keypress","which","_rename","newname","iq","$iq","c","xmlns","sendIQ","duration","wl","roster_width","innerWidth","roster_right","parseFloat","state","animate","link","o","opt","onComplete","preventDefault","closeButton","onClosed","onCleanup","overlayClose","escKey","colorbox","outerWidth","innerHeight","outerHeight","toggleTransfer","clear","getSelection","resizable","handles","minHeight","minWidth","event","ui","size","position","top","inArray","unread","ins","restoreChat","highlight","left","parents","_show","scrollDown","_hide","chat","scrollHeight","direction","encrypted","forwarded","stamp","sender","html_msg","MSGSTATE_FINISHED","post","saveMessage","sendMessage","_postMessage","url","source","protocol","p1","esc","msgDiv","msgTsDiv","received","title","avatarDiv","prependTo","pop","ph","my_priv_fingerprint","my_jid","my_node","getNodeFromJid","root","app_name","bid_priv_fingerprint","fingerprint","bid_jid","bid_name","ret","authenticationDialog","fingerprintsDialog","chatWindow","windowList","rosterBuddy","loginBox","contactDialog","approveDialog","removeDialog","waitAlert","alert","authFailDialog","confirmDialog","pleaseAccept","aboutDialog","joinChat","muc","AFFILIATION","ADMIN","MEMBER","OUTCAST","OWNER","NONE","ROLE","MODERATOR","PARTICIPANT","VISITOR","ROOMSTATE","INIT","ENTERED","EXITED","AWAIT_DESTRUCTION","DESTROYED","server","initMenu","onPresence","onPresenceError","addHandler","onGroupchatMessage","onErrorMessage","roomNames","disco","items","discovered","mucFeature","MUC","mucIdentity","showJoinChat","error_handler","condition","room","roomIndex","splice","rooms","listRooms","r","rjid","rnode","rname","count","nickname","discoReceived","roomName","subject","table","feature","exists","tr","keydown","leave","own","onExited","destroy","handler_cb","error_cb","MUC_OWNER","tree","roomdata","emptyMembers","initWindow","ownNickname","mlIcon","after","ml","scrollMemberListBy","toggleMl","slimOptions","slimHeight","maxHeight","slimscroll","member","insertMember","affiliation","presence","xdata","getResourceFromJid","unescapeNode","codes","code","bl","removeMember","newNickname","oldNickname","escapeInterpolation","roomJid","role","onStatus",110,170,201,"createInstantRoom",301,"postReason",307,321,322,332,"actor","reason","memberdata","m","isNaN","onAddRoster","_num","saved","description","nid","now","notify","has","audio","soundFile","playSound","stopSound","force","loop","icon","popup","Notification","popupDuration","webkitNotifications","createNotification","cancel","permission","checkPermission","func","Audio","play","pause","ERROR_START_AKE","SEND_WHITESPACE_TAG","WHITESPACE_START_AKE","priority","online","away","xa","dnd","onConnected","onAuthFail","numberOfMsg","muteNotification","carbons","dsaFallback","receiveMessage","MSGSTATE_PLAINTEXT","backup","_sendMessage","priv","ol","STATUS_SEND_QUERY","STATUS_AKE_SUCCESS","their_priv_pk","STATUS_END_OTR","STATUS_SMP_HANDLE","sm","abort","onSmpQuestion","meta","smpSecret","goEncrypt","goPlain","sendQueryMsg","cb","endOtr","savekey","packPublic","ake","otr_version","parse","DSA","parsePublic","_smInit","worker","Worker","dsa","DSAready","onmessage","e","parsePrivate","imports","BigInt","getSeed","_createDSA","packPrivate","PREFIX","SEP","getPrefix","uk","localStorage","removeItem","prefix","variable","Number","removeElement","isArray","grep","re","newValue","oldValue","n","posts","transferReq","approve","unshift","incomingCall","allowMediaAccess","videoWindow","webrtc","localStream","remoteStream","last_caller","AUTO_ACCEPT","reqVideoFeatures","chatJids","browser","jingle","media_constraints","mandatory","MozDontOfferDataChannel","PRANSWER","AUTOACCEPT","ice_config","MULTIPARTY","pc_constraints","proxy","onMessage","onMediaReady","onMediaFailure","onCallIncoming","onCallTerminated","onCallRinging","onRemoteStreamAdded","onRemoteStreamRemoved","onIceConnectionStateChanged","noStunCandidates","sid","addFeature","caps","onCaps","getTurnCrendentials","turnCredentialsPath","ttl","ajax","async","success","iceConfig","iceServers","credential","dataType","getCapableRes","available","hasFeatureByJid","onAddRosterItem","videoIcon","startCall","updateIcon","capableRes","targetRes","setStatus","txt","margin-left","display","stop","stream","showVideoWindow","getAudioTracks","label","getVideoTracks","hangUp","sess","sessions","peerjid","sendRinging","mediaready.jingle","peerconnection","addStream","sendAnswer","accept","mediafailure.jingle","sendTerminate","terminate","reqUserMedia","isVideoDevice","isAudioDevice","remoteDevices","video","attachMediaStream","sigState","signalingState","iceCon","iceConnectionState","iceGatheringState","localSDP","localDescription","sdp","remoteSDP","remoteDescription","local_fp","SDPUtil","parse_fingerprint","find_line","remote_fp","ip_regex","remote_ip","local_ip","regex","um","finish.mediaready.jsxc","initiate","MediaStreamTrack","getSources","sourceInfo","availableDevices","map","kind","filter","getUserMediaWithConstraints","snapshot","canvas","ctx","getContext","drawImage","toDataURL","target","muted","volume","rv","lv","draggable","containment","w_dialog","w_remote","scale","new_h","new_w","vc","toggleMulti","elem","not","chatarea","support","fullscreen","KEYCODE_ENTER","KEYCODE_ESC","setupRTC","connected","rid","attached","disconnected","onRidChange","onConnfail","addNamespace","Connection","stropheGetUniqueId","getUniqueId","suffix","_uniqueId","xmlInput","xmlOutput","callback","Object","getOwnPropertyNames","Status","CONNECTED","ATTACHED","DISCONNECTED","CONNFAIL","AUTHFAIL","node","attach","_addSysHandler","querySelector","ver","getAttribute","_jidNodeIndex","_jidVerIndex","CAPS","connect","numOtr","keys","disReady","flush","disconnect","nomJid","_proto","connectionReady","resume","onRosterChanged","onReceived","conditionalEnable","_knownCapabilities","_requestCapabilities","onRoster","addIdentity","DISCO_INFO","RECEIPTS","$pres","generateCapsAttrs","up","presState","send","location","temp","notices","noticeKey","ptype","xVCard","maxVal","carbon","mid","request","$msg","receiveMsg","subscription","receivedId","sendMsg","isBar","xmlMsg","enabled","result","jidVerIndex","knownCapabilities","disable","refresh","jQuery"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"jsxc.min.js","sources":["jsxc.js"],"names":["jsxc","RTC","RTCPeerconnection","$","version","master","role_allocation","to","toBusy","toNotification","toNotificationDelay","keepalive","restore","restoreCompleted","triggeredFromBox","triggeredFromElement","triggeredFromLogout","ls","storageNotConform","toSNC","bid","CONST","NOTIFICATION_DEFAULT","NOTIFICATION_GRANTED","NOTIFICATION_DENIED","STATUS","SOUNDS","MSG","CALL","NOTICE","REGEX","JID","RegExp","URL","NS","CARBONS","FORWARD","getFormattedTime","unixtime","msgDate","Date","parseInt","date","getDate","slice","month","getMonth","year","getFullYear","hours","getHours","minutes","getMinutes","dateNow","time","setHours","getTime","debug","msg","data","level","storage","getItem","console","log","d","prepend","clone","html","err","JSON","stringify","err2","warn","error","init","options","extend","get","key","local","getUserItem","set","value","updateItem","lang","autoLang","navigator","language","substr","defaultLang","i18n","lng","fallbackLng","resStore","I18next","useLocalStorage","localStorageExpirationTime","otr","window","addEventListener","onStorage","lastActivity","loginTimeout","document","on","logoutElement","length","logout","this","xmpp","off","one","jidToBid","gui","checkMaster","onMaster","loginForm","form","el_exists","jid","pass","displayRosterMinimized","setUserItem","roster","noConnection","formFound","call","events","submit","submits","each","index","val","push","handler","settings","prepareLogin","onlogin","triggered","login","username","password","loadSettings","showWaitAlert","t","resource","domain","match","preJid","split","onSlave","restoreRoster","restoreWindows","trigger","setItem","startKeepAlive","enable","createDSA","_onMaster","create","noti","notification","hasSupport","hasPermission","prepareRequest","updateAvatar","setTimeout","ink","setInterval","keepAlive","timeout","keepBusyAlive","clearTimeout","clearInterval","busyTimeout","random","max","Math","floor","selector","jidToCid","cid","Strophe","getBareJidFromJid","replace","toLowerCase","buddies","add","empty","windows","minimize","hide","show","setText","text","submitLoginForm","find","click","escapeHTML","removeHTML","switchEvents","obj","ns","toString","self","apply","arguments","isHidden","hidden","webkitHidden","mozHidden","msHidden","hasFocus","focus","exec","fnName","fnParams","i","fnList","fn","hashStr","str","hash","charCodeAt","emotions","queryActions","message","params","win","open","body","remove","showRemoveDialog","subscribe","showContactDialog","name","vcard","showVcard","append","template","resize","updateWindowListSB","scrollWindowListBy","ev","originalEvent","wheelDelta","tooltip","reg","join","windowTemplate","buddyTemplate","delay","content","attr","update","ri","we","ue","spot","removeClass","addClass","status","msgstate","trust","sub","info","avatar","el","aid","setAvatar","src","defaultAvatar","avatarPlaceholder","removeAttr","css","background-image","text-indent","avatarSrc","conn","stanza","vCard","img","type","width","offset","scrollWidth","right","padding","getWindow","toggleList","disableSelection","ul","slideUp","complete","is","slideToggle","toggleClass","mouseleave","mouseenter","showLoginBox","dialog","prop","showAuthFail","showFingerprints","showVerification","OTR","MSGSTATE_ENCRYPTED","change","slideDown","objects","updateUserItem","close","postMessage","div","sec","quest","keyup","sendSmpReq","showApproveDialog","from","noClose","stopPropagation","resFriendReq","getUsers","list","uid","displayname","option","appendTo","alias","getDomainFromJid","addBuddy","removeBuddy","showAlert","showConfirmDialog","confirm","dismiss","showAboutDialog","showDebugLog","userInfo","hasOwnProperty","screen","height","j","res","identities","cap","client","identity","getCapabilitiesByJid","category","printProp","depth","item","children","tagName","before","failedToLoad","loadVcard","photo","img_el","showSettings","overwrite","id","checked","saveSettinsPermanent","effect","color","showRequestNotification","notificationready.jsxc","notificationfailure.jsxc","requestPermission","showUnknownSender","confirmationText","saveBuddy","removeUserItem","changePresence","pres","external","sendPres","updatePresence","muteSound","unmuteSound","unreadMsg","readMsg","hasClass","detectUriScheme","container","action","element","href","indexOf","pairs","substring","decodeURIComponent","detectEmail","trim","s","prev","seed","hue","abs","saturation","lightness","background-color","font-weight","text-align","line-height","font-size","toUpperCase","ready","rosterAppend","hideOffline","mute","toggle","slimScroll","distance","opacity","notice","load","bud","insert","rename","expandClick","dblclick","scrollTo","li","listElements","thisStatus","reorder","detach","purge","removeUserElement","_close","input","replaceWith","keypress","which","_rename","newname","iq","$iq","c","xmlns","sendIQ","duration","wl","roster_width","innerWidth","roster_right","parseFloat","state","animate","link","o","opt","onComplete","preventDefault","closeButton","onClosed","onCleanup","overlayClose","escKey","colorbox","outerWidth","innerHeight","outerHeight","toggleTransfer","clear","getSelection","resizable","handles","minHeight","minWidth","event","ui","size","position","top","inArray","unread","ins","restoreChat","highlight","left","parents","_show","scrollDown","_hide","chat","scrollHeight","direction","encrypted","forwarded","stamp","sender","html_msg","MSGSTATE_FINISHED","post","saveMessage","sendMessage","_postMessage","url","source","protocol","p1","esc","msgDiv","msgTsDiv","received","title","avatarDiv","prependTo","pop","ph","my_priv_fingerprint","my_jid","my_node","getNodeFromJid","root","app_name","bid_priv_fingerprint","fingerprint","bid_jid","bid_name","ret","authenticationDialog","fingerprintsDialog","chatWindow","windowList","rosterBuddy","loginBox","contactDialog","approveDialog","removeDialog","waitAlert","alert","authFailDialog","confirmDialog","pleaseAccept","aboutDialog","joinChat","muc","AFFILIATION","ADMIN","MEMBER","OUTCAST","OWNER","NONE","ROLE","MODERATOR","PARTICIPANT","VISITOR","ROOMSTATE","INIT","ENTERED","EXITED","AWAIT_DESTRUCTION","DESTROYED","server","initMenu","onPresence","onPresenceError","addHandler","onGroupchatMessage","onErrorMessage","roomNames","disco","items","discovered","mucFeature","MUC","mucIdentity","showJoinChat","error_handler","condition","room","roomIndex","splice","rooms","listRooms","r","rjid","rnode","rname","count","nickname","discoReceived","roomName","subject","table","feature","exists","tr","keydown","leave","own","onExited","destroy","handler_cb","error_cb","MUC_OWNER","tree","roomdata","emptyMembers","initWindow","ownNickname","mlIcon","after","ml","scrollMemberListBy","toggleMl","slimOptions","slimHeight","maxHeight","slimscroll","member","insertMember","affiliation","presence","xdata","getResourceFromJid","unescapeNode","codes","code","bl","removeMember","newNickname","oldNickname","escapeInterpolation","roomJid","role","onStatus",110,170,201,"createInstantRoom",301,"postReason",307,321,322,332,"actor","reason","memberdata","m","isNaN","onAddRoster","_num","saved","description","nid","now","notify","has","audio","soundFile","playSound","stopSound","force","loop","icon","popup","Notification","popupDuration","webkitNotifications","createNotification","cancel","permission","checkPermission","func","Audio","play","pause","ERROR_START_AKE","SEND_WHITESPACE_TAG","WHITESPACE_START_AKE","priority","online","away","xa","dnd","onConnected","onAuthFail","numberOfMsg","muteNotification","carbons","dsaFallback","receiveMessage","MSGSTATE_PLAINTEXT","backup","_sendMessage","priv","ol","STATUS_SEND_QUERY","STATUS_AKE_SUCCESS","their_priv_pk","STATUS_END_OTR","STATUS_SMP_HANDLE","sm","abort","onSmpQuestion","meta","smpSecret","goEncrypt","goPlain","sendQueryMsg","cb","endOtr","savekey","packPublic","ake","otr_version","parse","DSA","parsePublic","_smInit","worker","Worker","dsa","DSAready","onmessage","e","parsePrivate","imports","BigInt","getSeed","_createDSA","packPrivate","PREFIX","SEP","getPrefix","uk","localStorage","removeItem","prefix","variable","Number","removeElement","isArray","grep","re","newValue","oldValue","n","posts","transferReq","approve","unshift","incomingCall","allowMediaAccess","videoWindow","webrtc","localStream","remoteStream","last_caller","AUTO_ACCEPT","reqVideoFeatures","chatJids","browser","jingle","media_constraints","mandatory","MozDontOfferDataChannel","PRANSWER","AUTOACCEPT","ice_config","MULTIPARTY","pc_constraints","proxy","onMessage","onMediaReady","onMediaFailure","onCallIncoming","onCallTerminated","onCallRinging","onRemoteStreamAdded","onRemoteStreamRemoved","onIceConnectionStateChanged","noStunCandidates","sid","addFeature","caps","onCaps","getTurnCrendentials","turnCredentialsPath","ttl","ajax","async","success","iceConfig","iceServers","credential","dataType","getCapableRes","available","hasFeatureByJid","onAddRosterItem","videoIcon","startCall","updateIcon","capableRes","targetRes","setStatus","txt","margin-left","display","stop","stream","showVideoWindow","getAudioTracks","label","getVideoTracks","hangUp","sess","sessions","peerjid","sendRinging","mediaready.jingle","peerconnection","addStream","sendAnswer","accept","mediafailure.jingle","sendTerminate","terminate","reqUserMedia","isVideoDevice","isAudioDevice","remoteDevices","video","attachMediaStream","sigState","signalingState","iceCon","iceConnectionState","iceGatheringState","localSDP","localDescription","sdp","remoteSDP","remoteDescription","local_fp","SDPUtil","parse_fingerprint","find_line","remote_fp","ip_regex","remote_ip","local_ip","regex","um","finish.mediaready.jsxc","initiate","MediaStreamTrack","getSources","sourceInfo","availableDevices","map","kind","filter","getUserMediaWithConstraints","snapshot","canvas","ctx","getContext","drawImage","toDataURL","target","muted","volume","rv","lv","draggable","containment","w_dialog","w_remote","scale","new_h","new_w","vc","toggleMulti","elem","not","chatarea","support","fullscreen","KEYCODE_ENTER","KEYCODE_ESC","setupRTC","connected","rid","attached","disconnected","onRidChange","onConnfail","addNamespace","Connection","stropheGetUniqueId","getUniqueId","suffix","_uniqueId","xmlInput","xmlOutput","callback","Object","getOwnPropertyNames","Status","CONNECTED","ATTACHED","DISCONNECTED","CONNFAIL","AUTHFAIL","node","attach","_addSysHandler","querySelector","ver","getAttribute","_jidNodeIndex","_jidVerIndex","CAPS","connect","numOtr","keys","disReady","flush","disconnect","nomJid","_proto","connectionReady","resume","onRosterChanged","onReceived","conditionalEnable","_knownCapabilities","_requestCapabilities","onRoster","addIdentity","DISCO_INFO","RECEIPTS","$pres","generateCapsAttrs","up","presState","send","location","temp","notices","noticeKey","ptype","xVCard","maxVal","carbon","mid","request","$msg","receiveMsg","subscription","receivedId","sendMsg","isBar","xmlMsg","enabled","result","jidVerIndex","knownCapabilities","disable","refresh","jQuery"],"mappings":"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"} \ No newline at end of file
diff --git a/build/lib/jsxc.dep.js b/build/lib/jsxc.dep.js
index 3cce3afd..3e0e9f3a 100644
--- a/build/lib/jsxc.dep.js
+++ b/build/lib/jsxc.dep.js
@@ -1,10 +1,14 @@
/*!
- * jsxc v2.0.0-beta2 - 2015-04-29
+ * jsxc v2.0.0 - 2015-05-08
*
* This file concatenates all dependencies of jsxc.
*
*/
+
+/*!
+ * Source: lib/strophe.js, license: multiple, url: http://strophe.im/strophejs/
+ */
/**
* Modified by
* Klaus Herberth, 2014
@@ -5159,6 +5163,10 @@ Strophe.Websocket.prototype = {
}
};
+
+/*!
+ * Source: lib/strophe.muc.js, license: MIT, url: https://github.com/strophe/strophejs-plugins
+ */
// Generated by CoffeeScript 1.3.3
/*
*Plugin to implement the MUC extension.
@@ -6179,6 +6187,10 @@ Occupant = (function() {
return Occupant;
})();
+
+/*!
+ * Source: lib/strophe.disco.js, license: MIT, url: https://github.com/strophe/strophejs-plugins
+ */
/*
Copyright 2010, François de Metz <francois@2metz.fr>
*/
@@ -6412,6 +6424,10 @@ Strophe.addConnectionPlugin('disco',
}
});
+
+/*!
+ * Source: lib/strophe.caps.js, license: MIT, url: https://github.com/strophe/strophejs-plugins
+ */
/**
* Entity Capabilities (XEP-0115)
*
@@ -6682,6 +6698,10 @@ Strophe.addConnectionPlugin('disco',
}
});
}(jQuery));
+
+/*!
+ * Source: lib/strophe.vcard.js, license: MIT, url: https://github.com/strophe/strophejs-plugins
+ */
// Generated by CoffeeScript 1.3.3
/*
Plugin to implement the vCard extension.
@@ -6748,6 +6768,10 @@ Strophe.addConnectionPlugin('vcard', {
return this._connection.sendIQ(iq, handler_cb, error_rb);
}
});
+
+/*!
+ * Source: lib/strophe.jingle/strophe.jingle.js, license: MIT, url: https://github.com/ESTOS/strophe.jingle
+ */
/* jshint -W117 */
(function($){
Strophe.addConnectionPlugin('jingle', {
@@ -7015,6 +7039,10 @@ Strophe.addConnectionPlugin('jingle', {
});
}(jQuery));
+
+/*!
+ * Source: lib/strophe.jingle/strophe.jingle.session.js, license: MIT, url: https://github.com/ESTOS/strophe.jingle
+ */
/* jshint -W117 */
// Jingle stuff
var JingleSession;
@@ -7930,6 +7958,10 @@ JingleSession.prototype.getStats = function (interval) {
}(jQuery));
+
+/*!
+ * Source: lib/strophe.jingle/strophe.jingle.sdp.js, license: MIT, url: https://github.com/ESTOS/strophe.jingle
+ */
/* jshint -W117 */
var SDP;
@@ -8753,6 +8785,10 @@ SDPUtil = {
};
}(jQuery));
+
+/*!
+ * Source: lib/strophe.jingle/strophe.jingle.adapter.js, license: MIT, url: https://github.com/ESTOS/strophe.jingle
+ */
/* jshint -W117 */
var setupRTC, getUserMediaWithConstraints, TraceablePeerConnection;
@@ -9140,6 +9176,10 @@ getUserMediaWithConstraints = function(um, resolution, bandwidth, fps) {
}
}(jQuery));
+
+/*!
+ * Source: lib/otr/build/dep/salsa20.js, license: AGPL3, url: https://github.com/neoatlantis/node-salsa20
+ */
// Salsa20 implementation
// Contributed to Cryptocat by Dmitry Chestnykh
// 21-01-2013
@@ -9394,6 +9434,10 @@ getUserMediaWithConstraints = function(um, resolution, bandwidth, fps) {
return Salsa20
}))
+
+/*!
+ * Source: lib/otr/build/dep/bigint.js, license: public domain, url: www.leemon.com
+ */
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
@@ -11099,6 +11143,10 @@ getUserMediaWithConstraints = function(um, resolution, bandwidth, fps) {
}
}))
+
+/*!
+ * Source: lib/otr/build/dep/crypto.js, license: code.google.com/p/crypto-js/wiki/license, url: code.google.com/p/crypto-js
+ */
;(function (root, factory) {
if (typeof define === "function" && define.amd) {
@@ -13533,6 +13581,10 @@ CryptoJS.mode.CTR = (function () {
return CryptoJS
}));
+
+/*!
+ * Source: lib/otr/build/dep/eventemitter.js, license: MIT, url: http://git.io/ee
+ */
/*!
* EventEmitter v4.2.3 - git.io/ee
* Oliver Caldwell
@@ -13989,6 +14041,10 @@ CryptoJS.mode.CTR = (function () {
}
}.call(this));
+
+/*!
+ * Source: lib/otr/build/otr.js, license: MPL v2.0, url: https://arlolra.github.io/otr/
+ */
/*!
otr.js v0.2.14 - 2015-01-16
@@ -16623,9 +16679,17 @@ CryptoJS.mode.CTR = (function () {
}
}))
+
+/*!
+ * Source: lib/i18next/release/i18next-latest.min.js, license: MIT, url: http://i18next.com/
+ */
// i18next, v1.7.7
// Copyright (c)2014 Jan Mühlemann (jamuhl).
// Distributed under MIT license
// http://i18next.com
!function(){function a(a,b){if(!b||"function"==typeof b)return a;for(var c in b)a[c]=b[c];return a}function b(a,c){for(var d in c)d in a?b(a[d],c[d]):a[d]=c[d];return a}function c(a,b,c){var d,e=0,f=a.length,g=void 0===f||"[object Array]"!==Object.prototype.toString.apply(a)||"function"==typeof a;if(c)if(g){for(d in a)if(b.apply(a[d],c)===!1)break}else for(;f>e&&b.apply(a[e++],c)!==!1;);else if(g){for(d in a)if(b.call(a[d],d,a[d])===!1)break}else for(;f>e&&b.call(a[e],e,a[e++])!==!1;);return a}function d(a){return"string"==typeof a?a.replace(/[&<>"'\/]/g,function(a){return Q[a]}):a}function e(a){var b=function(a){if(window.XMLHttpRequest)return a(null,new XMLHttpRequest);if(window.ActiveXObject)try{return a(null,new ActiveXObject("Msxml2.XMLHTTP"))}catch(b){return a(null,new ActiveXObject("Microsoft.XMLHTTP"))}return a(new Error)},c=function(a){if("string"==typeof a)return a;var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")},d=function(a){a=a.replace(/\r\n/g,"\n");for(var b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);128>d?b+=String.fromCharCode(d):d>127&&2048>d?(b+=String.fromCharCode(192|d>>6),b+=String.fromCharCode(128|63&d)):(b+=String.fromCharCode(224|d>>12),b+=String.fromCharCode(128|63&d>>6),b+=String.fromCharCode(128|63&d))}return b},e=function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";a=d(a);var c,e,f,g,h,i,j,k="",l=0;do c=a.charCodeAt(l++),e=a.charCodeAt(l++),f=a.charCodeAt(l++),g=c>>2,h=(3&c)<<4|e>>4,i=(15&e)<<2|f>>6,j=63&f,isNaN(e)?i=j=64:isNaN(f)&&(j=64),k+=b.charAt(g)+b.charAt(h)+b.charAt(i)+b.charAt(j),c=e=f="",g=h=i=j="";while(l<a.length);return k},f=function(){for(var a=arguments[0],b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}return a},g=function(a,d,e,h){"function"==typeof e&&(h=e,e={}),e.cache=e.cache||!1,e.data=e.data||{},e.headers=e.headers||{},e.jsonp=e.jsonp||!1,e.async=void 0===e.async?!0:e.async;var i,j=f({accept:"*/*","content-type":"application/x-www-form-urlencoded;charset=UTF-8"},g.headers,e.headers);if(i="application/json"===j["content-type"]?JSON.stringify(e.data):c(e.data),"GET"===a){var k=[];if(i&&(k.push(i),i=null),e.cache||k.push("_="+(new Date).getTime()),e.jsonp&&(k.push("callback="+e.jsonp),k.push("jsonp="+e.jsonp)),k=k.join("&"),k.length>1&&(d+=d.indexOf("?")>-1?"&"+k:"?"+k),e.jsonp){var l=document.getElementsByTagName("head")[0],m=document.createElement("script");return m.type="text/javascript",m.src=d,l.appendChild(m),void 0}}b(function(b,c){if(b)return h(b);c.open(a,d,e.async);for(var f in j)j.hasOwnProperty(f)&&c.setRequestHeader(f,j[f]);c.onreadystatechange=function(){if(4===c.readyState){var a=c.responseText||"";if(!h)return;h(c.status,{text:function(){return a},json:function(){try{return JSON.parse(a)}catch(b){return T.error("Can not parse JSON. URL: "+d),{}}}})}},c.send(i)})},h={authBasic:function(a,b){g.headers.Authorization="Basic "+e(a+":"+b)},connect:function(a,b,c){return g("CONNECT",a,b,c)},del:function(a,b,c){return g("DELETE",a,b,c)},get:function(a,b,c){return g("GET",a,b,c)},head:function(a,b,c){return g("HEAD",a,b,c)},headers:function(a){g.headers=a||{}},isAllowed:function(a,b,c){this.options(a,function(a,d){c(-1!==d.text().indexOf(b))})},options:function(a,b,c){return g("OPTIONS",a,b,c)},patch:function(a,b,c){return g("PATCH",a,b,c)},post:function(a,b,c){return g("POST",a,b,c)},put:function(a,b,c){return g("PUT",a,b,c)},trace:function(a,b,c){return g("TRACE",a,b,c)}},i=a.type?a.type.toLowerCase():"get";h[i](a.url,a,function(b,c){200===b||0===b&&c.text()?a.success(c.json(),b,null):a.error(c.text(),b,null)})}function f(a,b){"function"==typeof a&&(b=a,a={}),a=a||{},T.extend(P,a),delete P.fixLng,P.functions&&(delete P.functions,T.extend(T,a.functions)),"string"==typeof P.ns&&(P.ns={namespaces:[P.ns],defaultNs:P.ns}),"string"==typeof P.fallbackNS&&(P.fallbackNS=[P.fallbackNS]),("string"==typeof P.fallbackLng||"boolean"==typeof P.fallbackLng)&&(P.fallbackLng=[P.fallbackLng]),P.interpolationPrefixEscaped=T.regexEscape(P.interpolationPrefix),P.interpolationSuffixEscaped=T.regexEscape(P.interpolationSuffix),P.lng||(P.lng=T.detectLanguage()),L=T.toLanguages(P.lng),F=L[0],T.log("currentLng set to: "+F),P.useCookie&&T.cookie.read(P.cookieName)!==F&&T.cookie.create(P.cookieName,F,P.cookieExpirationTime,P.cookieDomain),P.detectLngFromLocalStorage&&"undefined"!=typeof document&&window.localStorage&&T.localStorage.setItem("i18next_lng",F);var c=z;a.fixLng&&(c=function(a,b){return b=b||{},b.lng=b.lng||c.lng,z(a,b)},c.lng=F),W.setCurrentLng(F),H&&P.setJqueryExt&&s();var d;if(H&&H.Deferred&&(d=H.Deferred()),!P.resStore){var e=T.toLanguages(P.lng);"string"==typeof P.preload&&(P.preload=[P.preload]);for(var f=0,g=P.preload.length;g>f;f++)for(var h=T.toLanguages(P.preload[f]),i=0,j=h.length;j>i;i++)e.indexOf(h[i])<0&&e.push(h[i]);return I.sync.load(e,P,function(a,e){J=e,M=!0,b&&b(c),d&&d.resolve(c)}),d?d.promise():void 0}return J=P.resStore,M=!0,b&&b(c),d&&d.resolve(c),d?d.promise():void 0}function g(a,b){"string"==typeof a&&(a=[a]);for(var c=0,d=a.length;d>c;c++)P.preload.indexOf(a[c])<0&&P.preload.push(a[c]);return f(b)}function h(a,b,c,d){"string"!=typeof b?(c=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b),J[a]=J[a]||{},J[a][b]=J[a][b]||{},d?T.deepExtend(J[a][b],c):T.extend(J[a][b],c)}function i(a,b){"string"!=typeof b&&(b=P.ns.defaultNs),J[a]=J[a]||{};var c=J[a][b]||{},d=!1;for(var e in c)c.hasOwnProperty(e)&&(d=!0);return d}function j(a,b){"string"!=typeof b&&(b=P.ns.defaultNs),J[a]=J[a]||{},J[a][b]={}}function k(a,b,c,d){"string"!=typeof b?(resource=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b),J[a]=J[a]||{},J[a][b]=J[a][b]||{};for(var e=c.split(P.keyseparator),f=0,g=J[a][b];e[f];)f==e.length-1?g[e[f]]=d:(null==g[e[f]]&&(g[e[f]]={}),g=g[e[f]]),f++}function l(a,b,c){"string"!=typeof b?(resource=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b);for(var d in c)"string"==typeof c[d]&&k(a,b,d,c[d])}function m(a){P.ns.defaultNs=a}function n(a,b){o([a],b)}function o(a,b){var c={dynamicLoad:P.dynamicLoad,resGetPath:P.resGetPath,getAsync:P.getAsync,customLoad:P.customLoad,ns:{namespaces:a,defaultNs:""}},d=T.toLanguages(P.lng);"string"==typeof P.preload&&(P.preload=[P.preload]);for(var e=0,f=P.preload.length;f>e;e++)for(var g=T.toLanguages(P.preload[e]),h=0,i=g.length;i>h;h++)d.indexOf(g[h])<0&&d.push(g[h]);for(var j=[],k=0,l=d.length;l>k;k++){var m=!1,n=J[d[k]];if(n)for(var o=0,p=a.length;p>o;o++)n[a[o]]||(m=!0);else m=!0;m&&j.push(d[k])}j.length?I.sync._fetch(j,c,function(c,d){var e=a.length*j.length;T.each(a,function(a,c){P.ns.namespaces.indexOf(c)<0&&P.ns.namespaces.push(c),T.each(j,function(a,f){J[f]=J[f]||{},J[f][c]=d[f][c],e--,0===e&&b&&(P.useLocalStorage&&I.sync._storeLocal(J),b())})})}):b&&b()}function p(a,b,c){return"function"==typeof b?(c=b,b={}):b||(b={}),b.lng=a,f(b,c)}function q(){return F}function r(a){J={},p(F,a)}function s(){function a(a,b,c){if(0!==b.length){var d="text";if(0===b.indexOf("[")){var e=b.split("]");b=e[1],d=e[0].substr(1,e[0].length-1)}b.indexOf(";")===b.length-1&&(b=b.substr(0,b.length-2));var f;if("html"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.html(H.t(b,f));else if("text"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.text()},c):c,a.text(H.t(b,f));else if("prepend"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.prepend(H.t(b,f));else if("append"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.append(H.t(b,f));else if(0===d.indexOf("data-")){var g=d.substr("data-".length);f=P.defaultValueFromContent?H.extend({defaultValue:a.data(g)},c):c;var h=H.t(b,f);a.data(g,h),a.attr(d,h)}else f=P.defaultValueFromContent?H.extend({defaultValue:a.attr(d)},c):c,a.attr(d,H.t(b,f))}}function b(b,c){var d=b.attr(P.selectorAttr);if(d||"undefined"==typeof d||d===!1||(d=b.text()||b.val()),d){var e=b,f=b.data("i18n-target");if(f&&(e=b.find(f)||b),c||P.useDataAttrOptions!==!0||(c=b.data("i18n-options")),c=c||{},d.indexOf(";")>=0){var g=d.split(";");H.each(g,function(b,d){""!==d&&a(e,d,c)})}else a(e,d,c);P.useDataAttrOptions===!0&&b.data("i18n-options",c)}}H.t=H.t||z,H.fn.i18n=function(a){return this.each(function(){b(H(this),a);var c=H(this).find("["+P.selectorAttr+"]");c.each(function(){b(H(this),a)})})}}function t(a,b,c,d){if(!a)return a;if(d=d||b,a.indexOf(d.interpolationPrefix||P.interpolationPrefix)<0)return a;var e=d.interpolationPrefix?T.regexEscape(d.interpolationPrefix):P.interpolationPrefixEscaped,f=d.interpolationSuffix?T.regexEscape(d.interpolationSuffix):P.interpolationSuffixEscaped,g="HTML"+f,h=b.replace&&"object"==typeof b.replace?b.replace:b;return T.each(h,function(b,h){var i=c?c+P.keyseparator+b:b;"object"==typeof h&&null!==h?a=t(a,h,i,d):d.escapeInterpolation||P.escapeInterpolation?(a=a.replace(new RegExp([e,i,g].join(""),"g"),T.regexReplacementEscape(h)),a=a.replace(new RegExp([e,i,f].join(""),"g"),T.regexReplacementEscape(T.escape(h)))):a=a.replace(new RegExp([e,i,f].join(""),"g"),T.regexReplacementEscape(h))}),a}function u(a,b){var c=",",d="{",e="}",f=T.extend({},b);for(delete f.postProcess;-1!=a.indexOf(P.reusePrefix)&&(K++,!(K>P.maxRecursion));){var g=a.lastIndexOf(P.reusePrefix),h=a.indexOf(P.reuseSuffix,g)+P.reuseSuffix.length,i=a.substring(g,h),j=i.replace(P.reusePrefix,"").replace(P.reuseSuffix,"");if(g>=h)return T.error("there is an missing closing in following translation value",a),"";if(-1!=j.indexOf(c)){var k=j.indexOf(c);if(-1!=j.indexOf(d,k)&&-1!=j.indexOf(e,k)){var l=j.indexOf(d,k),m=j.indexOf(e,l)+e.length;try{f=T.extend(f,JSON.parse(j.substring(l,m))),j=j.substring(0,k)}catch(n){}}}var o=C(j,f);a=a.replace(i,T.regexReplacementEscape(o))}return a}function v(a){return a.context&&("string"==typeof a.context||"number"==typeof a.context)}function w(a){return void 0!==a.count&&"string"!=typeof a.count}function x(a){return void 0!==a.indefinite_article&&"string"!=typeof a.indefinite_article&&a.indefinite_article}function y(a,b){b=b||{};var c=A(a,b),d=D(a,b);return void 0!==d||d===c}function z(a,b){return b=b||{},M?(K=0,C.apply(null,arguments)):(T.log("i18next not finished initialization. you might have called t function before loading resources finished."),b.defaultValue||"")}function A(a,b){return void 0!==b.defaultValue?b.defaultValue:a}function B(){for(var a=[],b=1;b<arguments.length;b++)a.push(arguments[b]);return{postProcess:"sprintf",sprintf:a}}function C(a,b){if(b&&"object"!=typeof b?"sprintf"===P.shortcutFunction?b=B.apply(null,arguments):"defaultValue"===P.shortcutFunction&&(b={defaultValue:b}):b=b||{},"object"==typeof P.defaultVariables&&(b=T.extend({},P.defaultVariables,b)),void 0===a||null===a||""===a)return"";"string"==typeof a&&(a=[a]);var c=a[0];if(a.length>1)for(var d=0;d<a.length&&(c=a[d],!y(c,b));d++);var e,f=A(c,b),g=D(c,b),h=b.lng?T.toLanguages(b.lng,b.fallbackLng):L,i=b.ns||P.ns.defaultNs;c.indexOf(P.nsseparator)>-1&&(e=c.split(P.nsseparator),i=e[0],c=e[1]),void 0===g&&P.sendMissing&&"function"==typeof P.missingKeyHandler&&(b.lng?P.missingKeyHandler(h[0],i,c,f,h):P.missingKeyHandler(P.lng,i,c,f,h));var j=b.postProcess||P.postProcess;void 0!==g&&j&&X[j]&&(g=X[j](g,c,b));var k=f;if(f.indexOf(P.nsseparator)>-1&&(e=f.split(P.nsseparator),k=e[1]),k===c&&P.parseMissingKey&&(f=P.parseMissingKey(f)),void 0===g&&(f=t(f,b),f=u(f,b),j&&X[j])){var l=A(c,b);g=X[j](l,c,b)}return void 0!==g?g:f}function D(a,b){b=b||{};var c,d,e=A(a,b),f=L;if(!J)return e;if("cimode"===f[0].toLowerCase())return e;if(b.lngs&&(f=b.lngs),b.lng&&(f=T.toLanguages(b.lng,b.fallbackLng),!J[f[0]])){var g=P.getAsync;P.getAsync=!1,I.sync.load(f,P,function(a,b){T.extend(J,b),P.getAsync=g})}var h=b.ns||P.ns.defaultNs;if(a.indexOf(P.nsseparator)>-1){var i=a.split(P.nsseparator);h=i[0],a=i[1]}if(v(b)){c=T.extend({},b),delete c.context,c.defaultValue=P.contextNotFound;var j=h+P.nsseparator+a+"_"+b.context;if(d=z(j,c),d!=P.contextNotFound)return t(d,{context:b.context})}if(w(b,f[0])){c=T.extend({lngs:[f[0]]},b),delete c.count,delete c.lng,c.defaultValue=P.pluralNotFound;var k;if(W.needsPlural(f[0],b.count)){k=h+P.nsseparator+a+P.pluralSuffix;var l=W.get(f[0],b.count);l>=0?k=k+"_"+l:1===l&&(k=h+P.nsseparator+a)}else k=h+P.nsseparator+a;if(d=z(k,c),d!=P.pluralNotFound)return t(d,{count:b.count,interpolationPrefix:b.interpolationPrefix,interpolationSuffix:b.interpolationSuffix});if(!(f.length>1))return d;var m=f.slice();if(m.shift(),b=T.extend(b,{lngs:m}),delete b.lng,d=z(h+P.nsseparator+a,b),d!=P.pluralNotFound)return d}if(x(b)){var n=T.extend({},b);delete n.indefinite_article,n.defaultValue=P.indefiniteNotFound;var o=h+P.nsseparator+a+(b.count&&!w(b,f[0])||!b.count?P.indefiniteSuffix:"");if(d=z(o,n),d!=P.indefiniteNotFound)return d}for(var p,q=a.split(P.keyseparator),r=0,s=f.length;s>r&&void 0===p;r++){for(var y=f[r],B=0,E=J[y]&&J[y][h];q[B];)E=E&&E[q[B]],B++;if(void 0!==E){var F=Object.prototype.toString.apply(E);if("string"==typeof E)E=t(E,b),E=u(E,b);else if("[object Array]"!==F||P.returnObjectTrees||b.returnObjectTrees){if(null===E&&P.fallbackOnNull===!0)E=void 0;else if(null!==E)if(P.returnObjectTrees||b.returnObjectTrees){if("[object Number]"!==F&&"[object Function]"!==F&&"[object RegExp]"!==F){var G="[object Array]"===F?[]:{};T.each(E,function(c){G[c]=C(h+P.nsseparator+a+P.keyseparator+c,b)}),E=G}}else P.objectTreeKeyHandler&&"function"==typeof P.objectTreeKeyHandler?E=P.objectTreeKeyHandler(a,E,y,h,b):(E="key '"+h+":"+a+" ("+y+")' "+"returned an object instead of string.",T.log(E))}else E=E.join("\n"),E=t(E,b),E=u(E,b);"string"==typeof E&&""===E.trim()&&P.fallbackOnEmpty===!0&&(E=void 0),p=E}}if(void 0===p&&!b.isFallbackLookup&&(P.fallbackToDefaultNS===!0||P.fallbackNS&&P.fallbackNS.length>0)){if(b.isFallbackLookup=!0,P.fallbackNS.length){for(var H=0,K=P.fallbackNS.length;K>H;H++)if(p=D(P.fallbackNS[H]+P.nsseparator+a,b),p||""===p&&P.fallbackOnEmpty===!1){var M=p.indexOf(P.nsseparator)>-1?p.split(P.nsseparator)[1]:p,N=e.indexOf(P.nsseparator)>-1?e.split(P.nsseparator)[1]:e;if(M!==N)break}}else p=D(a,b);b.isFallbackLookup=!1}return p}function E(){var a,b=P.lngWhitelist||[],c=[];if("undefined"!=typeof window&&!function(){for(var a=window.location.search.substring(1),b=a.split("&"),d=0;d<b.length;d++){var e=b[d].indexOf("=");if(e>0){var f=b[d].substring(0,e);f==P.detectLngQS&&c.push(b[d].substring(e+1))}}}(),P.useCookie&&"undefined"!=typeof document){var d=T.cookie.read(P.cookieName);d&&c.push(d)}if(P.detectLngFromLocalStorage&&"undefined"!=typeof window&&window.localStorage&&c.push(window.localStorage.getItem("i18next_lng")),"undefined"!=typeof navigator){if(navigator.languages)for(var e=0;e<navigator.languages.length;e++)c.push(navigator.languages[e]);navigator.userLanguage&&c.push(navigator.userLanguage),navigator.language&&c.push(navigator.language)}return function(){for(var d=0;d<c.length;d++){var e=c[d];if(e.indexOf("-")>-1){var f=e.split("-");e=P.lowerCaseLng?f[0].toLowerCase()+"-"+f[1].toLowerCase():f[0].toLowerCase()+"-"+f[1].toUpperCase()}if(0===b.length||b.indexOf(e)>-1){a=e;break}}}(),a||(a=P.fallbackLng[0]),a}Array.prototype.indexOf||(Array.prototype.indexOf=function(a){"use strict";if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>0&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&1/0!=d&&d!=-1/0&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){"use strict";if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=c;arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d))));for(var e=d>=0?Math.min(d,c-1):c-Math.abs(d);e>=0;e--)if(e in b&&b[e]===a)return e;return-1}),"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});var F,G=this,H=G.jQuery||G.Zepto,I={},J={},K=0,L=[],M=!1,N={};if("undefined"!=typeof module&&module.exports){if(!H)try{H=require("jquery")}catch(O){}H&&(H.i18n=H.i18n||I),module.exports=I}else H&&(H.i18n=H.i18n||I),G.i18n=G.i18n||I;N={load:function(a,b,c){b.useLocalStorage?N._loadLocal(a,b,function(d,e){for(var f=[],g=0,h=a.length;h>g;g++)e[a[g]]||f.push(a[g]);f.length>0?N._fetch(f,b,function(a,b){T.extend(e,b),N._storeLocal(b),c(null,e)}):c(null,e)}):N._fetch(a,b,function(a,b){c(null,b)})},_loadLocal:function(a,b,c){var d={},e=(new Date).getTime();if(window.localStorage){var f=a.length;T.each(a,function(a,g){var h=window.localStorage.getItem("res_"+g);h&&(h=JSON.parse(h),h.i18nStamp&&h.i18nStamp+b.localStorageExpirationTime>e&&(d[g]=h)),f--,0===f&&c(null,d)})}},_storeLocal:function(a){if(window.localStorage)for(var b in a)a[b].i18nStamp=(new Date).getTime(),T.localStorage.setItem("res_"+b,JSON.stringify(a[b]))},_fetch:function(a,b,c){var d=b.ns,e={};if(b.dynamicLoad){var f=function(a,b){c(null,b)};if("function"==typeof b.customLoad)b.customLoad(a,d.namespaces,b,f);else{var g=t(b.resGetPath,{lng:a.join("+"),ns:d.namespaces.join("+")});T.ajax({url:g,success:function(a){T.log("loaded: "+g),f(null,a)},error:function(a,b,c){T.log("failed loading: "+g),f("failed loading resource.json error: "+c)},dataType:"json",async:b.getAsync})}}else{var h,i=d.namespaces.length*a.length;T.each(d.namespaces,function(d,f){T.each(a,function(a,d){var g=function(a,b){a&&(h=h||[],h.push(a)),e[d]=e[d]||{},e[d][f]=b,i--,0===i&&c(h,e)};"function"==typeof b.customLoad?b.customLoad(d,f,b,g):N._fetchOne(d,f,b,g)})})}},_fetchOne:function(a,b,c,d){var e=t(c.resGetPath,{lng:a,ns:b});T.ajax({url:e,success:function(a){T.log("loaded: "+e),d(null,a)},error:function(a,b,c){if(b&&200==b||a&&a.status&&200==a.status)T.error("There is a typo in: "+e);else if(b&&404==b||a&&a.status&&404==a.status)T.log("Does not exist: "+e);else{var f=b?b:a&&a.status?a.status:null;T.log(f+" when loading "+e)}d(c,{})},dataType:"json",async:c.getAsync})},postMissing:function(a,b,c,d,e){var f={};f[c]=d;var g=[];if("fallback"===P.sendMissingTo&&P.fallbackLng[0]!==!1)for(var h=0;h<P.fallbackLng.length;h++)g.push({lng:P.fallbackLng[h],url:t(P.resPostPath,{lng:P.fallbackLng[h],ns:b})});else if("current"===P.sendMissingTo||"fallback"===P.sendMissingTo&&P.fallbackLng[0]===!1)g.push({lng:a,url:t(P.resPostPath,{lng:a,ns:b})});else if("all"===P.sendMissingTo)for(var h=0,i=e.length;i>h;h++)g.push({lng:e[h],url:t(P.resPostPath,{lng:e[h],ns:b})});for(var j=0,k=g.length;k>j;j++){var l=g[j];T.ajax({url:l.url,type:P.sendType,data:f,success:function(){T.log("posted missing key '"+c+"' to: "+l.url);for(var a=c.split("."),e=0,f=J[l.lng][b];a[e];)f=f[a[e]]=e===a.length-1?d:f[a[e]]||{},e++},error:function(){T.log("failed posting missing key '"+c+"' to: "+l.url)},dataType:"json",async:P.postAsync})}},reload:r};var P={lng:void 0,load:"all",preload:[],lowerCaseLng:!1,returnObjectTrees:!1,fallbackLng:["dev"],fallbackNS:[],detectLngQS:"setLng",detectLngFromLocalStorage:!1,ns:"translation",fallbackOnNull:!0,fallbackOnEmpty:!1,fallbackToDefaultNS:!1,nsseparator:":",keyseparator:".",selectorAttr:"data-i18n",debug:!1,resGetPath:"locales/__lng__/__ns__.json",resPostPath:"locales/add/__lng__/__ns__",getAsync:!0,postAsync:!0,resStore:void 0,useLocalStorage:!1,localStorageExpirationTime:6048e5,dynamicLoad:!1,sendMissing:!1,sendMissingTo:"fallback",sendType:"POST",interpolationPrefix:"__",interpolationSuffix:"__",defaultVariables:!1,reusePrefix:"$t(",reuseSuffix:")",pluralSuffix:"_plural",pluralNotFound:["plural_not_found",Math.random()].join(""),contextNotFound:["context_not_found",Math.random()].join(""),escapeInterpolation:!1,indefiniteSuffix:"_indefinite",indefiniteNotFound:["indefinite_not_found",Math.random()].join(""),setJqueryExt:!0,defaultValueFromContent:!0,useDataAttrOptions:!1,cookieExpirationTime:void 0,useCookie:!0,cookieName:"i18next",cookieDomain:void 0,objectTreeKeyHandler:void 0,postProcess:void 0,parseMissingKey:void 0,missingKeyHandler:N.postMissing,shortcutFunction:"sprintf"},Q={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},R={create:function(a,b,c,d){var e;if(c){var f=new Date;f.setTime(f.getTime()+1e3*60*c),e="; expires="+f.toGMTString()}else e="";d=d?"domain="+d+";":"",document.cookie=a+"="+b+e+";"+d+"path=/"},read:function(a){for(var b=a+"=",c=document.cookie.split(";"),d=0;d<c.length;d++){for(var e=c[d];" "==e.charAt(0);)e=e.substring(1,e.length);if(0===e.indexOf(b))return e.substring(b.length,e.length)}return null},remove:function(a){this.create(a,"",-1)}},S={create:function(){},read:function(){return null},remove:function(){}},T={extend:H?H.extend:a,deepExtend:b,each:H?H.each:c,ajax:H?H.ajax:"undefined"!=typeof document?e:function(){},cookie:"undefined"!=typeof document?R:S,detectLanguage:E,escape:d,log:function(a){P.debug&&"undefined"!=typeof console&&console.log(a)},error:function(a){"undefined"!=typeof console&&console.error(a)},getCountyIndexOfLng:function(a){var b=0;return("nb-NO"===a||"nn-NO"===a||"nb-no"===a||"nn-no"===a)&&(b=1),b},toLanguages:function(a){function b(a){var b=a;if("string"==typeof a&&a.indexOf("-")>-1){var c=a.split("-");b=P.lowerCaseLng?c[0].toLowerCase()+"-"+c[1].toLowerCase():c[0].toLowerCase()+"-"+c[1].toUpperCase()}else b=P.lowerCaseLng?a.toLowerCase():a;return b}var c=this.log,d=[],e=P.lngWhitelist||!1,f=function(a){!e||e.indexOf(a)>-1?d.push(a):c("rejecting non-whitelisted language: "+a)};if("string"==typeof a&&a.indexOf("-")>-1){var g=a.split("-");"unspecific"!==P.load&&f(b(a)),"current"!==P.load&&f(b(g[this.getCountyIndexOfLng(a)]))}else f(b(a));for(var h=0;h<P.fallbackLng.length;h++)-1===d.indexOf(P.fallbackLng[h])&&P.fallbackLng[h]&&d.push(b(P.fallbackLng[h]));return d},regexEscape:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},regexReplacementEscape:function(a){return"string"==typeof a?a.replace(/\$/g,"$$$$"):a},localStorage:{setItem:function(a,b){if(window.localStorage)try{window.localStorage.setItem(a,b)}catch(c){T.log('failed to set value for key "'+a+'" to localStorage.')}}}};T.applyReplacement=t;var U=[["ach","Acholi",[1,2],1],["af","Afrikaans",[1,2],2],["ak","Akan",[1,2],1],["am","Amharic",[1,2],1],["an","Aragonese",[1,2],2],["ar","Arabic",[0,1,2,3,11,100],5],["arn","Mapudungun",[1,2],1],["ast","Asturian",[1,2],2],["ay","Aymará",[1],3],["az","Azerbaijani",[1,2],2],["be","Belarusian",[1,2,5],4],["bg","Bulgarian",[1,2],2],["bn","Bengali",[1,2],2],["bo","Tibetan",[1],3],["br","Breton",[1,2],1],["bs","Bosnian",[1,2,5],4],["ca","Catalan",[1,2],2],["cgg","Chiga",[1],3],["cs","Czech",[1,2,5],6],["csb","Kashubian",[1,2,5],7],["cy","Welsh",[1,2,3,8],8],["da","Danish",[1,2],2],["de","German",[1,2],2],["dev","Development Fallback",[1,2],2],["dz","Dzongkha",[1],3],["el","Greek",[1,2],2],["en","English",[1,2],2],["eo","Esperanto",[1,2],2],["es","Spanish",[1,2],2],["es_ar","Argentinean Spanish",[1,2],2],["et","Estonian",[1,2],2],["eu","Basque",[1,2],2],["fa","Persian",[1],3],["fi","Finnish",[1,2],2],["fil","Filipino",[1,2],1],["fo","Faroese",[1,2],2],["fr","French",[1,2],9],["fur","Friulian",[1,2],2],["fy","Frisian",[1,2],2],["ga","Irish",[1,2,3,7,11],10],["gd","Scottish Gaelic",[1,2,3,20],11],["gl","Galician",[1,2],2],["gu","Gujarati",[1,2],2],["gun","Gun",[1,2],1],["ha","Hausa",[1,2],2],["he","Hebrew",[1,2],2],["hi","Hindi",[1,2],2],["hr","Croatian",[1,2,5],4],["hu","Hungarian",[1,2],2],["hy","Armenian",[1,2],2],["ia","Interlingua",[1,2],2],["id","Indonesian",[1],3],["is","Icelandic",[1,2],12],["it","Italian",[1,2],2],["ja","Japanese",[1],3],["jbo","Lojban",[1],3],["jv","Javanese",[0,1],13],["ka","Georgian",[1],3],["kk","Kazakh",[1],3],["km","Khmer",[1],3],["kn","Kannada",[1,2],2],["ko","Korean",[1],3],["ku","Kurdish",[1,2],2],["kw","Cornish",[1,2,3,4],14],["ky","Kyrgyz",[1],3],["lb","Letzeburgesch",[1,2],2],["ln","Lingala",[1,2],1],["lo","Lao",[1],3],["lt","Lithuanian",[1,2,10],15],["lv","Latvian",[1,2,0],16],["mai","Maithili",[1,2],2],["mfe","Mauritian Creole",[1,2],1],["mg","Malagasy",[1,2],1],["mi","Maori",[1,2],1],["mk","Macedonian",[1,2],17],["ml","Malayalam",[1,2],2],["mn","Mongolian",[1,2],2],["mnk","Mandinka",[0,1,2],18],["mr","Marathi",[1,2],2],["ms","Malay",[1],3],["mt","Maltese",[1,2,11,20],19],["nah","Nahuatl",[1,2],2],["nap","Neapolitan",[1,2],2],["nb","Norwegian Bokmal",[1,2],2],["ne","Nepali",[1,2],2],["nl","Dutch",[1,2],2],["nn","Norwegian Nynorsk",[1,2],2],["no","Norwegian",[1,2],2],["nso","Northern Sotho",[1,2],2],["oc","Occitan",[1,2],1],["or","Oriya",[2,1],2],["pa","Punjabi",[1,2],2],["pap","Papiamento",[1,2],2],["pl","Polish",[1,2,5],7],["pms","Piemontese",[1,2],2],["ps","Pashto",[1,2],2],["pt","Portuguese",[1,2],2],["pt_br","Brazilian Portuguese",[1,2],2],["rm","Romansh",[1,2],2],["ro","Romanian",[1,2,20],20],["ru","Russian",[1,2,5],4],["sah","Yakut",[1],3],["sco","Scots",[1,2],2],["se","Northern Sami",[1,2],2],["si","Sinhala",[1,2],2],["sk","Slovak",[1,2,5],6],["sl","Slovenian",[5,1,2,3],21],["so","Somali",[1,2],2],["son","Songhay",[1,2],2],["sq","Albanian",[1,2],2],["sr","Serbian",[1,2,5],4],["su","Sundanese",[1],3],["sv","Swedish",[1,2],2],["sw","Swahili",[1,2],2],["ta","Tamil",[1,2],2],["te","Telugu",[1,2],2],["tg","Tajik",[1,2],1],["th","Thai",[1],3],["ti","Tigrinya",[1,2],1],["tk","Turkmen",[1,2],2],["tr","Turkish",[1,2],1],["tt","Tatar",[1],3],["ug","Uyghur",[1],3],["uk","Ukrainian",[1,2,5],4],["ur","Urdu",[1,2],2],["uz","Uzbek",[1,2],1],["vi","Vietnamese",[1],3],["wa","Walloon",[1,2],1],["wo","Wolof",[1],3],["yo","Yoruba",[1,2],2],["zh","Chinese",[1],3]],V={1:function(a){return Number(a>1)},2:function(a){return Number(1!=a)},3:function(){return 0},4:function(a){return Number(1==a%10&&11!=a%100?0:a%10>=2&&4>=a%10&&(10>a%100||a%100>=20)?1:2)},5:function(a){return Number(0===a?0:1==a?1:2==a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5)},6:function(a){return Number(1==a?0:a>=2&&4>=a?1:2)},7:function(a){return Number(1==a?0:a%10>=2&&4>=a%10&&(10>a%100||a%100>=20)?1:2)},8:function(a){return Number(1==a?0:2==a?1:8!=a&&11!=a?2:3)},9:function(a){return Number(a>=2)},10:function(a){return Number(1==a?0:2==a?1:7>a?2:11>a?3:4)},11:function(a){return Number(1==a||11==a?0:2==a||12==a?1:a>2&&20>a?2:3)},12:function(a){return Number(1!=a%10||11==a%100)},13:function(a){return Number(0!==a)},14:function(a){return Number(1==a?0:2==a?1:3==a?2:3)},15:function(a){return Number(1==a%10&&11!=a%100?0:a%10>=2&&(10>a%100||a%100>=20)?1:2)},16:function(a){return Number(1==a%10&&11!=a%100?0:0!==a?1:2)},17:function(a){return Number(1==a||1==a%10?0:1)},18:function(a){return Number(1==a?1:2)},19:function(a){return Number(1==a?0:0===a||a%100>1&&11>a%100?1:a%100>10&&20>a%100?2:3)},20:function(a){return Number(1==a?0:0===a||a%100>0&&20>a%100?1:2)},21:function(a){return Number(1==a%100?1:2==a%100?2:3==a%100||4==a%100?3:0)}},W={rules:function(){var a,b={};for(a=U.length;a--;)b[U[a][0]]={name:U[a][1],numbers:U[a][2],plurals:V[U[a][3]]};return b}(),addRule:function(a,b){W.rules[a]=b},setCurrentLng:function(a){if(!W.currentRule||W.currentRule.lng!==a){var b=a.split("-");W.currentRule={lng:a,rule:W.rules[b[0]]}}},needsPlural:function(a,b){var c,d=a.split("-");return c=W.currentRule&&W.currentRule.lng===a?W.currentRule.rule:W.rules[d[T.getCountyIndexOfLng(a)]],c&&c.numbers.length<=1?!1:1!==this.get(a,b)},get:function(a,b){function c(b,c){var d;if(d=W.currentRule&&W.currentRule.lng===a?W.currentRule.rule:W.rules[b]){var e;e=d.noAbs?d.plurals(c):d.plurals(Math.abs(c));var f=d.numbers[e];return 2===d.numbers.length&&1===d.numbers[0]&&(2===f?f=-1:1===f&&(f=1)),f}return 1===c?"1":"-1"}var d=a.split("-");return c(d[T.getCountyIndexOfLng(a)],b)}},X={},Y=function(a,b){X[a]=b},Z=function(){function a(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function b(a,b){for(var c=[];b>0;c[--b]=a);return c.join("")}var c=function(){return c.cache.hasOwnProperty(arguments[0])||(c.cache[arguments[0]]=c.parse(arguments[0])),c.format.call(null,c.cache[arguments[0]],arguments)};return c.format=function(c,d){var e,f,g,h,i,j,k,l=1,m=c.length,n="",o=[];for(f=0;m>f;f++)if(n=a(c[f]),"string"===n)o.push(c[f]);else if("array"===n){if(h=c[f],h[2])for(e=d[l],g=0;g<h[2].length;g++){if(!e.hasOwnProperty(h[2][g]))throw Z('[sprintf] property "%s" does not exist',h[2][g]);e=e[h[2][g]]}else e=h[1]?d[h[1]]:d[l++];if(/[^s]/.test(h[8])&&"number"!=a(e))throw Z("[sprintf] expecting number but found %s",a(e));switch(h[8]){case"b":e=e.toString(2);break;case"c":e=String.fromCharCode(e);break;case"d":e=parseInt(e,10);break;case"e":e=h[7]?e.toExponential(h[7]):e.toExponential();break;case"f":e=h[7]?parseFloat(e).toFixed(h[7]):parseFloat(e);break;case"o":e=e.toString(8);break;case"s":e=(e=String(e))&&h[7]?e.substring(0,h[7]):e;break;case"u":e=Math.abs(e);break;case"x":e=e.toString(16);break;case"X":e=e.toString(16).toUpperCase()}e=/[def]/.test(h[8])&&h[3]&&e>=0?"+"+e:e,j=h[4]?"0"==h[4]?"0":h[4].charAt(1):" ",k=h[6]-String(e).length,i=h[6]?b(j,k):"",o.push(h[5]?e+i:i+e)}return o.join("")},c.cache={},c.parse=function(a){for(var b=a,c=[],d=[],e=0;b;){if(null!==(c=/^[^\x25]+/.exec(b)))d.push(c[0]);else if(null!==(c=/^\x25{2}/.exec(b)))d.push("%");else{if(null===(c=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b)))throw"[sprintf] huh?";if(c[2]){e|=1;var f=[],g=c[2],h=[];if(null===(h=/^([a-z_][a-z_\d]*)/i.exec(g)))throw"[sprintf] huh?";for(f.push(h[1]);""!==(g=g.substring(h[0].length));)if(null!==(h=/^\.([a-z_][a-z_\d]*)/i.exec(g)))f.push(h[1]);else{if(null===(h=/^\[(\d+)\]/.exec(g)))throw"[sprintf] huh?";f.push(h[1])}c[2]=f}else e|=2;if(3===e)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";d.push(c)}b=b.substring(c[0].length)}return d},c}(),$=function(a,b){return b.unshift(a),Z.apply(null,b)};Y("sprintf",function(a,b,c){return c.sprintf?"[object Array]"===Object.prototype.toString.apply(c.sprintf)?$(a,c.sprintf):"object"==typeof c.sprintf?Z(a,c.sprintf):a:a}),I.init=f,I.setLng=p,I.preload=g,I.addResourceBundle=h,I.hasResourceBundle=i,I.addResource=k,I.addResources=l,I.removeResourceBundle=j,I.loadNamespace=n,I.loadNamespaces=o,I.setDefaultNamespace=m,I.t=z,I.translate=z,I.exists=y,I.detectLanguage=T.detectLanguage,I.pluralExtensions=W,I.sync=N,I.functions=T,I.lng=q,I.addPostProcessor=Y,I.options=P}();
-var I18next = {"de":{"translation":{"Logging_in":"Login läuft…","your_connection_is_unencrypted":"Deine Verbindung ist Unverschlüsselt.","your_connection_is_encrypted":"Deine Verbindung ist verschlüsselt.","your_buddy_closed_the_private_connection":"Dein Kontakt hat die private Verbindung getrennt.","start_private":"Privat starten","close_private":"Privat abbrechen","your_buddy_is_verificated":"Dein Kontakt ist verifiziert.","you_have_only_a_subscription_in_one_way":"Der Kontaktstatus ist einseitig.","authentication_query_sent":"Authentifizierungsanfrage gesendet.","your_message_wasnt_send_please_end_your_private_conversation":"Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.","unencrypted_message_received":"Unverschlüsselte Nachricht erhalten.","your_message_wasnt_send_because_you_have_no_valid_subscription":"Deine Nachricht wurde nicht gesandt, da der Kontaktstatus einseitig ist.","not_available":"Nicht verfügbar.","no_connection":"Keine Verbindung.","relogin":"Neu anmelden.","trying_to_start_private_conversation":"Versuche private Konversation zu starten.","Verified":"Verifiziert","Unverified":"Unverifiziert","private_conversation_started":"Private Konversation gestartet.","private_conversation_aborted":"Private Konversation abgebrochen.","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Dein Kontakt hat die private Konversation beendet. Das solltest du auch tun!","conversation_is_now_verified":"Konversation ist jetzt verifiziert","authentication_failed":"Authentifizierung fehlgeschlagen.","your_buddy_is_attempting_to_determine_":"Dein Kontakt versucht herauszufinden ob er wirklich mit dir redet.","to_authenticate_to_your_buddy":"Um dich gegenüber deinem Kontakt zu verifizieren ","enter_the_answer_and_click_answer":"gib die Antwort ein und klick auf Antworten.","enter_the_secret":"gib das Geheimnis ein.","Creating_your_private_key_":"Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.","Authenticating_a_buddy_helps_":"Einen Kontakt zu authentifizieren hilft sicher zustellen, dass die Person mit der du sprichst auch die ist die sie sagt.","How_do_you_want_to_authenticate_your_buddy":"Wie willst du {{bid_name}} (<b>{{bid_jid}}</b>) authentifizieren?","Select_method":"Wähle...","Manual":"Manual","Question":"Frage","Secret":"Geheimnis","To_verify_the_fingerprint_":"Um den Fingerprint zu verifizieren kontaktiere dein Kontakt über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.","Your_fingerprint":"Dein Fingerprint","Buddy_fingerprint":"Sein/Ihr Fingerprint","Close":"Schließen","Compared":"Verglichen","To_authenticate_using_a_question_":"Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Kontakt die Antwort weiß.","Ask":"Frage","To_authenticate_pick_a_secret_":"Um deinen Kontakt zu authentifizieren, wähle ein Geheimnis welches nur deinem Kontakt und dir bekannt ist.","Compare":"Vergleiche","Fingerprints":"Fingerprints","Authentication":"Authentifizierung","Message":"Nachricht","Add_buddy":"Kontakt hinzufügen","rename_buddy":"Kontakt umbenennen","delete_buddy":"Kontakt löschen","Login":"Anmeldung","Username":"Benutzername","Password":"Passwort","Cancel":"Abbrechen","Connect":"Verbinden","Type_in_the_full_username_":"Gib bitte den vollen Benutzernamen und optional ein Alias an.","Alias":"Alias","Add":"Hinzufügen","Subscription_request":"Kontaktanfrage","You_have_a_request_from":"Du hast eine Anfrage von","Deny":"Ablehnen","Approve":"Bestätigen","Remove_buddy":"Kontakt entfernen","You_are_about_to_remove_":"Du bist gerade dabei {{bid_name}} (<b>{{bid_jid}}</b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.","Continue_without_chat":"Weiter ohne Chat","Please_wait":"Bitte warten","Login_failed":"Chat-Anmeldung fehlgeschlagen","Sorry_we_cant_authentikate_":"Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?","Retry":"Zurück","clear_history":"Lösche Verlauf","New_message_from":"Neue Nachricht von","Should_we_notify_you_":"Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?","Please_accept_":"Bitte klick auf den \"Zulassen\" Button oben.","Hide_offline":"Offline ausblenden","Show_offline":"Offline einblenden","About":"Über","dnd":"Beschäftigt","Mute":"Ton aus","Unmute":"Ton an","Subscription":"Bezug","both":"beidseitig","Status":"Status","online":"online","chat":"chat","away":"abwesend","xa":"länger abwesend","offline":"offline","none":"keine","Unknown_instance_tag":"Unbekannter instance tag.","Not_one_of_our_latest_keys":"Nicht einer unserer letzten Schlüssel.","Received_an_unreadable_encrypted_message":"Eine unlesbare verschlüsselte Nachricht erhalten.","Online":"Online","Chatty":"Gesprächig","Away":"Abwesend","Extended_away":"Länger abwesend","Offline":"Offline","Friendship_request":"Kontaktanfrage","Confirm":"Bestätigen","Dismiss":"Ablehnen","Remove":"Löschen","Online_help":"Online Hilfe","FN":"Name","N":" ","FAMILY":"Familienname","GIVEN":"Vorname","NICKNAME":"Spitzname","URL":"URL","ADR":"Adresse","STREET":"Straße","EXTADD":"Zusätzliche Adresse","LOCALITY":"Ortschaft","REGION":"Region","PCODE":"Postleitzahl","CTRY":"Land","TEL":"Telefon","NUMBER":"Nummer","EMAIL":"E-Mail","USERID":" ","ORG":"Organisation","ORGNAME":"Name","ORGUNIT":"Abteilung","TITLE":"Titel","ROLE":"Rolle","BDAY":"Geburtstag","DESC":"Beschreibung","PHOTO":" ","send_message":"Sende Nachricht","get_info":"Benutzerinformationen","Settings":"Einstellungen","Priority":"Priorität","Save":"Speichern","User_settings":"Benutzereinstellungen","A_fingerprint_":"Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.","Your_roster_is_empty_add_a":"Deine Kontaktliste ist leer, füge einen neuen Kontakt ","new_buddy":"hinzu","is":"ist","Login_options":"Anmeldeoptionen","BOSH_url":"BOSH url","Domain":"Domain","Resource":"Ressource","On_login":"Beim Anmelden","Received_an_unencrypted_message":"Unverschlüsselte Nachricht empfangen","Sorry_your_buddy_doesnt_provide_any_information":"Dein Kontakt stellt leider keine Informationen bereit.","Info_about":"Info über","Authentication_aborted":"Authentifizierung abgebrochen.","Authentication_request_received":"Authentifizierunganfrage empfangen.","Do_you_want_to_display_them":"Möchtest du sie sehen?","Log_in_without_chat":"Anmelden ohne Chat","has_come_online":"ist online gekommen","Unknown_sender":"Unbekannter Sender","You_received_a_message_from_an_unknown_sender":"Du hast eine Nachricht von einem unbekannten Sender erhalten","Please_allow_access_to_microphone_and_camera":"Bitte klick auf den \"Zulassen\" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.","Incoming_call":"Eingehender Anruf","from":"von","Do_you_want_to_accept_the_call_from":"Möchtest Du den Anruf annehmen von","Reject":"Ablehnen","Accept":"Annehmen","hang_up":"Auflegen","snapshot":"Schnappschuss","mute_my_audio":"Mein Ton aus","pause_my_video":"Mein Video pausieren","fullscreen":"Vollbild","Info":"Info","Local_IP":"Lokale IP","Remote_IP":"Remote IP","Local_Fingerprint":"Lokaler Fingerprint","Remote_Fingerprint":"Remote Fingerprint","Video_call_not_possible":"Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.","Start_video_call":"Starte Videoanruf"}},"el":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null}},"en":{"translation":{"Logging_in":"Logging in…","your_connection_is_unencrypted":"Your connection is unencrypted.","your_connection_is_encrypted":"Your connection is encrypted.","your_buddy_closed_the_private_connection":"Your buddy closed the private connection.","start_private":"Start private","close_private":"Close private","your_buddy_is_verificated":"Your buddy is verified.","you_have_only_a_subscription_in_one_way":"You only have a one-way subscription.","authentication_query_sent":"Authentication query sent.","your_message_wasnt_send_please_end_your_private_conversation":"Your message was not sent. Please end your private conversation.","unencrypted_message_received":"Unencrypted message received","your_message_wasnt_send_because_you_have_no_valid_subscription":"Your message was not sent because you have no valid subscription.","not_available":"Not available","no_connection":"No connection!","relogin":"relogin","trying_to_start_private_conversation":"Trying to start private conversation!","Verified":"Verified","Unverified":"Unverified","private_conversation_started":"Private conversation started.","private_conversation_aborted":"Private conversation aborted!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Your buddy closed the private conversation! You should do the same.","conversation_is_now_verified":"Conversation is now verified.","authentication_failed":"Authentication failed.","your_buddy_is_attempting_to_determine_":"You buddy is attempting to determine if he or she is really talking to you.","to_authenticate_to_your_buddy":"To authenticate to your buddy, ","enter_the_answer_and_click_answer":"enter the answer and click Answer.","enter_the_secret":"enter the secret.","Creating_your_private_key_":"Creating your private key; this may take a while.","Authenticating_a_buddy_helps_":"Authenticating a buddy helps ensure that the person you are talking to is really the one he or she claims to be.","How_do_you_want_to_authenticate_your_buddy":"How do you want to authenticate {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Select method...","Manual":"Manual","Question":"Question","Secret":"Secret","To_verify_the_fingerprint_":"To verify the fingerprint, contact your buddy via some other trustworthy channel, such as the telephone.","Your_fingerprint":"Your fingerprint","Buddy_fingerprint":"Buddy fingerprint","Close":"Close","Compared":"Compared","To_authenticate_using_a_question_":"To authenticate using a question, pick a question whose answer is known only you and your buddy.","Ask":"Ask","To_authenticate_pick_a_secret_":"To authenticate, pick a secret known only to you and your buddy.","Compare":"Compare","Fingerprints":"Fingerprints","Authentication":"Authentication","Message":"Message","Add_buddy":"Add buddy","rename_buddy":"rename buddy","delete_buddy":"delete buddy","Login":"Login","Username":"Username","Password":"Password","Cancel":"Cancel","Connect":"Connect","Type_in_the_full_username_":"Type in the full username and an optional alias.","Alias":"Alias","Add":"Add","Subscription_request":"Subscription request","You_have_a_request_from":"You have a request from","Deny":"Deny","Approve":"Approve","Remove_buddy":"Remove buddy","You_are_about_to_remove_":"You are about to remove {{bid_name}} (<b>{{bid_jid}}</b>) from your buddy list. All related chats will be closed.","Continue_without_chat":"Continue without chat","Please_wait":"Please wait","Login_failed":"Chat login failed","Sorry_we_cant_authentikate_":"Authentication failed with the chat server. Maybe the password is wrong?","Retry":"Back","clear_history":"Clear history","New_message_from":"New message from","Should_we_notify_you_":"Should we notify you about new messages in the future?","Please_accept_":"Please click the \"Allow\" button at the top.","Hide_offline":"Hide offline contacts","Show_offline":"Show offline contacts","About":"About","dnd":"Do Not Disturb","Mute":"Mute","Unmute":"Unmute","Subscription":"Subscription","both":"both","Status":"Status","online":"online","chat":"chat","away":"away","xa":"extended away","offline":"offline","none":"none","Unknown_instance_tag":"Unknown instance tag.","Not_one_of_our_latest_keys":"Not one of our latest keys.","Received_an_unreadable_encrypted_message":"Received an unreadable encrypted message.","Online":"Online","Chatty":"Chatty","Away":"Away","Extended_away":"Extended away","Offline":"Offline","Friendship_request":"Friendship request","Confirm":"Confirm","Dismiss":"Dismiss","Remove":"Remove","Online_help":"Online help","FN":"Full name","N":" ","FAMILY":"Family name","GIVEN":"Given name","NICKNAME":"Nickname","URL":"URL","ADR":"Address","STREET":"Street Address","EXTADD":"Extended Address","LOCALITY":"Locality","REGION":"Region","PCODE":"Postal Code","CTRY":"Country","TEL":"Telephone","NUMBER":"Number","EMAIL":"Email","USERID":" ","ORG":"Organization","ORGNAME":"Name","ORGUNIT":"Unit","TITLE":"Job title","ROLE":"Role","BDAY":"Birthday","DESC":"Description","PHOTO":" ","send_message":"Send message","get_info":"Show information","Settings":"Settings","Priority":"Priority","Save":"Save","User_settings":"User settings","A_fingerprint_":"A fingerprint is used to make sure that the person you are talking to is who he or she is saying.","Your_roster_is_empty_add_a":"Your roster is empty, add a ","new_buddy":"new buddy","is":"is","Login_options":"Login options","BOSH_url":"BOSH URL","Domain":"Domain","Resource":"Resource","On_login":"On login","Received_an_unencrypted_message":"Received an unencrypted message","Sorry_your_buddy_doesnt_provide_any_information":"Sorry, your buddy does not provide any information.","Info_about":"Info about","Authentication_aborted":"Authentication aborted.","Authentication_request_received":"Authentication request received.","Do_you_want_to_display_them":"Do you want to display them?","Log_in_without_chat":"Log in without chat","has_come_online":"has come online","Unknown_sender":"Unknown sender","You_received_a_message_from_an_unknown_sender":"You received a message from an unknown sender","Please_allow_access_to_microphone_and_camera":"Please click the \"Allow\" button at the top, to allow access to microphone and camera.","Incoming_call":"Incoming call","from":"from","Do_you_want_to_accept_the_call_from":"Do you want to accept the call from","Reject":"Reject","Accept":"Accept","hang_up":"hang up","snapshot":"snapshot","mute_my_audio":"mute my audio","pause_my_video":"pause my video","fullscreen":"fullscreen","Info":"Info","Local_IP":"Local IP","Remote_IP":"Remote IP","Local_Fingerprint":"Local fingerprint","Remote_Fingerprint":"Remote fingerprint","Video_call_not_possible":"Video call not possible. Your buddy does not support video calls.","Start_video_call":"Start video call","Join_chat":"Join chat","Join":"Join","Room":"Room","Nickname":"Nickname","left_the_building":"__nickname__ left the building","entered_the_room":"__nickname__ entered the room","is_now_known_as":"__oldNickname__ is now known as __newNickname__","This_room_is":"This room is","muc_hidden":{"keyword":"hidden","description":"can not be found through search"},"muc_membersonly":{"keyword":"members-only","description":"you need to be on the member list"},"muc_moderated":{"keyword":"moderated","description":"only persons with \"voice\" are allowed to send messages"},"muc_nonanonymous":{"keyword":"non-anonymous","description":"your jabber id is exposed to all other occupants"},"muc_open":{"keyword":"open","description":"everyone is allowed to join"},"muc_passwordprotected":{"keyword":"password-protected","description":"you need to provide the correct password"},"muc_persistent":{"keyword":"persistent","description":"will not be destroyed if the last occupant left"},"muc_public":{"keyword":"public","description":"can be found through search"},"muc_semianonymous":{"keyword":"semi-anonymous","description":"your jabber id is only exposed to room admins"},"muc_temporary":{"keyword":"temporary","description":"will be destroyed if the last occupant left"},"muc_unmoderated":{"keyword":"unmoderated","description":"everyone is allowed to send messages"},"muc_unsecured":{"keyword":"unsecured","description":"you need no password to enter"},"Continue":"Continue","Server":"Server","Rooms_are_loaded":"Rooms are loaded","Could_load_only":"Could load only __count__ rooms for autocomplete","muc_explanation":"Please enter room name and optional a nickname and password to join a chat","You_already_joined_this_room":"You already joined this room","This_room_will_be_closed":"This room will be closed","Room_not_found_":"A new room will be created","Loading_room_information":"Loading room information","Destroy":"Destroy","Leave":"Leave","changed_subject_to":"__nickname__ changed the room subject to \"__subject__\"","muc_removed_kicked":"You have been kicked from the room","muc_removed_info_kicked":"__nickname__ has been kicked from the room","muc_removed_banned":"You have been banned from the room","muc_removed_info_banned":"__nickname__ has been banned from the room","muc_removed_affiliation":"You have been removed from the room, because of an affiliation change","muc_removed_info_affiliation":"__nickname__ has been removed from the room, because of an affiliation change","muc_removed_membersonly":"You have been removed from the room, because the room has been changed to members-only and you are no member","muc_removed_info_membersonly":"__nickname__ has been removed from the room, because the room has been changed to members-only and you are no member","muc_removed_shutdown":"You have been removed from the room, because the MUC service is being shut down","Reason":"Reason","message_not_send":"Your message was not send because of an error","message_not_send_item-not-found":"Your message was not send because this room does not exist","message_not_send_forbidden":"Your message was not send because you have no voice in this room","message_not_send_not-acceptable":"Your message was not send because you are no occupant of this room","This_room_has_been_closed":"This room has been closed","Room_logging_is_enabled":"Room logging is enabled","A_password_is_required":"A password is required","You_are_not_on_the_member_list":"You are not on the member list","You_are_banned_from_this_room":"You are banned from this room","Your_desired_nickname_":"Your desired nickname is already in use. Please choose another","The_maximum_number_":"The maximum number of user is reached in this room","This_room_is_locked_":"This room is locked","You_are_not_allowed_to_create_":"You are not allowed to create a room"}},"es":{"translation":{"Logging_in":"Por favor, espere...","your_connection_is_unencrypted":"Su conexión no está cifrada.","your_connection_is_encrypted":"Su conexión está cifrada.","your_buddy_closed_the_private_connection":"Su amigo ha cerrado la conexión privada.","start_private":"Iniciar privado","close_private":"Cerrar privado","your_buddy_is_verificated":"Tu amigo está verificado.","you_have_only_a_subscription_in_one_way":"Sólo tienes una suscripción de un modo.","authentication_query_sent":"Consulta de verificación enviada.","your_message_wasnt_send_please_end_your_private_conversation":"Su mensaje no fue enviado. Por favor, termine su conversación privada.","unencrypted_message_received":"Mensaje no cifrado recibido:","your_message_wasnt_send_because_you_have_no_valid_subscription":"Su mensaje no se ha enviado, porque usted no tiene suscripción válida.","not_available":"No disponible","no_connection":"Sin conexión!","relogin":"iniciar sesión nuevamente","trying_to_start_private_conversation":"Intentando iniciar una conversación privada!","Verified":"Verificado","Unverified":"No verificado","private_conversation_started":"se inició una conversación privada.","private_conversation_aborted":"Conversación privada abortada!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Su amigo cerró la conversación privada! Usted debería hacer lo mismo.","conversation_is_now_verified":"La conversación es ahora verificada.","authentication_failed":"Fallo la verificación.","your_buddy_is_attempting_to_determine_":"Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.","to_authenticate_to_your_buddy":"Para autenticar a su amigo, ","enter_the_answer_and_click_answer":"introduce la respuesta y haga clic en Contestar.","enter_the_secret":"especifique el secreto.","Creating_your_private_key_":"Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.","Authenticating_a_buddy_helps_":"Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.","How_do_you_want_to_authenticate_your_buddy":"¿Cómo desea autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Escoja un método...","Manual":"Manual","Question":"Pregunta","Secret":"Secreto","To_verify_the_fingerprint_":"Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.","Your_fingerprint":"Tu firma digital","Buddy_fingerprint":"firma digital de tu amigo","Close":"Cerrar","Compared":"Comparado","To_authenticate_using_a_question_":"Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.","Ask":"Preguntar","To_authenticate_pick_a_secret_":"Para autenticar, elija un secreto conocido sólo por usted y su amigo.","Compare":"Comparar","Fingerprints":"Firmas digitales","Authentication":"Autenticación","Message":"Mensaje","Add_buddy":"Añadir amigo","rename_buddy":"renombrar amigo","delete_buddy":"eliminar amigo","Login":"Iniciar Sesión","Username":"Usuario","Password":"Contraseña","Cancel":"Cancelar","Connect":"Conectar","Type_in_the_full_username_":"Escriba el usuario completo y un alias opcional.","Alias":"Alias","Add":"Añadir","Subscription_request":"Solicitud de suscripción","You_have_a_request_from":"Tienes una petición de","Deny":"Rechazar","Approve":"Aprobar","Remove_buddy":"Eliminar amigo","You_are_about_to_remove_":"Vas a eliminar a {{bid_name}} (<b>{{bid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.","Continue_without_chat":"Continuar","Please_wait":"Espere por favor","Login_failed":"Fallo el inicio de sesión","Sorry_we_cant_authentikate_":"Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?","Retry":"Reintentar","clear_history":"Borrar el historial","New_message_from":"Nuevo mensaje de","Should_we_notify_you_":"¿Debemos notificarle sobre nuevos mensajes en el futuro?","Please_accept_":"Por favor, haga clic en el botón \"Permitir\" en la parte superior.","Hide_offline":"Ocultar contactos desconectados","Show_offline":"Mostrar contactos desconectados","About":"Acerca de","dnd":"No Molestar","Mute":"Desactivar sonido","Unmute":"Activar sonido","Subscription":"Suscripción","both":"ambos","Status":"Estado","online":"en línea","chat":"chat","away":"ausente","xa":"mas ausente","offline":"desconectado","none":"nadie","Unknown_instance_tag":"Etiqueta de instancia desconocida.","Not_one_of_our_latest_keys":"No de nuestra ultima tecla.","Received_an_unreadable_encrypted_message":"Se recibió un mensaje cifrado ilegible.","Online":"En linea","Chatty":"Hablador","Away":"Ausente","Extended_away":"Mas ausente","Offline":"Desconectado","Friendship_request":"Solicitud de amistad","Confirm":"Confirmar","Dismiss":"Rechazar","Remove":"Eliminar","Online_help":"Ayuda en línea","FN":"Nombre completo ","N":" ","FAMILY":"Apellido","GIVEN":"Nombre","NICKNAME":"Apodar","URL":"URL","ADR":"Dirección","STREET":"Calle","EXTADD":"Extendido dirección","LOCALITY":"Población","REGION":"Región","PCODE":"Código postal","CTRY":"País","TEL":"Teléfono","NUMBER":"Número","EMAIL":"Emilio","USERID":" ","ORG":"Organización","ORGNAME":"Nombre","ORGUNIT":"Departamento","TITLE":"Título","ROLE":"Rol","BDAY":"Cumpleaños","DESC":"Descripción","PHOTO":" ","send_message":"mandar un texto","get_info":"obtener información","Settings":"Ajustes","Priority":"Prioridad","Save":"Guardar","User_settings":"Configuración de usuario","A_fingerprint_":"La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser","Your_roster_is_empty_add_a":"Tu lista de amigos esta vacia","new_buddy":"Nuevo amigo","is":"es","Login_options":"Opciones de login","BOSH_url":"BOSH url","Domain":"Dominio","Resource":"Recurso","On_login":"Iniciar sesión","Received_an_unencrypted_message":"Recibe un mensaje no cifrado","Sorry_your_buddy_doesnt_provide_any_information":"Lo sentimos, su amigo no provee ninguna información.","Info_about":"Info acerca de","Authentication_aborted":"Autenticación abortada","Authentication_request_received":"Pedido de autenticación recibido.","Do_you_want_to_display_them":"¿Quiere mostrarlos?","Log_in_without_chat":"Ingresar sin chat","has_come_online":"se ha conectado","Unknown_sender":"Remitente desconocido","You_received_a_message_from_an_unknown_sender":"Ha recibido un mensaje de un remitente desconocido","Please_allow_access_to_microphone_and_camera":"Por favor, permitir el acceso al micrófono y la cámara.","Incoming_call":"Llamada entrante","from":"de","Do_you_want_to_accept_the_call_from":"Desea aceptar la llamada de","Reject":"Rechazar","Accept":"Aceptar","hang_up":"colgar","snapshot":"instantánea","mute_my_audio":"silenciar mi audio","pause_my_video":"pausar mi vídeo","fullscreen":"pantalla completa","Info":"Info","Local_IP":"IP local","Remote_IP":"IP remota","Local_Fingerprint":"Firma digital local","Remote_Fingerprint":"Firma digital remota","Video_call_not_possible":"Llamada de vídeo no es posible","Start_video_call":"Iniciar llamada de vídeo"}},"fr":{"translation":{"Logging_in":"Connexion...","your_connection_is_unencrypted":"Connexion non chiffrée.","your_connection_is_encrypted":"Connexion chiffrée.","your_buddy_closed_the_private_connection":"Votre ami a fermé la connexion privée.","start_private":"Démarrer une conversation privé","close_private":"Clôturer une conversation privée","your_buddy_is_verificated":"Votre ami est vérifié.","you_have_only_a_subscription_in_one_way":"Vous ne pouvez souscrire qu'une fois.","authentication_query_sent":"Requête d’authentification envoyée.","your_message_wasnt_send_please_end_your_private_conversation":"Votre message n'a pas été envoyé. Veuillez terminer votre conversation privée.","unencrypted_message_received":"Message non chiffré reçu","your_message_wasnt_send_because_you_have_no_valid_subscription":"Votre message n'a pas été envoyé car votre abonnement n'est pas valide.","not_available":"Pas disponible","no_connection":"Pas de connexion !","relogin":"Re-connexion","trying_to_start_private_conversation":"Essai de démarrage d'une conversation privée !","Verified":"Vérifié","Unverified":"Non vérifié","private_conversation_started":"Conversation privé démarrée.","private_conversation_aborted":"Conversation privée interrompue !","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Votre ami a fermé la conversation privée ! Vous devriez faire de même.","conversation_is_now_verified":"La conversation est maintenant vérifiée.","authentication_failed":"L'authentification a échoué.","your_buddy_is_attempting_to_determine_":"Votre ami tente de déterminer si il ou elle parle vraiment à vous.","to_authenticate_to_your_buddy":"Vous authentifier à votre ami, ","enter_the_answer_and_click_answer":"Saisissez une réponse et cliquer sur Répondre.","enter_the_secret":"Entrez le mot secret","Creating_your_private_key_":"Création de votre clé privée; cela peut prendre un moment.","Authenticating_a_buddy_helps_":"L'authentification d'un ami permet de s'assurer que la personne à qui vous parlez est vraiment celui qu'il ou elle prétend être.","How_do_you_want_to_authenticate_your_buddy":"Comment voulez-vous vous authentifier {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Sélection de la méthode...","Manual":"Manuel","Question":"Question","Secret":"Sécurité","To_verify_the_fingerprint_":"Pour vérifier l'empreinte, contactez votre ami via un autre canal digne de confiance, tel que le téléphone.","Your_fingerprint":"Votre empreinte","Buddy_fingerprint":"Empreinte de l'ami","Close":"Fermer","Compared":"Comparé","To_authenticate_using_a_question_":"Pour s'authentifier à l'aide d'une question, choisissez une question dont la réponse n'est connue que vous et de votre ami.","Ask":"Demander","To_authenticate_pick_a_secret_":"Pour vous authentifier, choisissez un secret connu seulement de vous et de votre ami.","Compare":"Comparer","Fingerprints":"Empreintes","Authentication":"Authentification","Message":"Message","Add_buddy":"Ajouter comme ami","rename_buddy":"Renommer l'ami","delete_buddy":"Supprimer l'ami","Login":"Connexion","Username":"Nom d'utilisateur","Password":"Mot de passe","Cancel":"Annuler","Connect":"Connecter","Type_in_the_full_username_":"Tapez un nom d'utilisateur complet et un alias(optionnel).","Alias":"Alias","Add":"Ajouter","Subscription_request":"Demande d'abonnement","You_have_a_request_from":"Vous avez une requête de ","Deny":"Refuser","Approve":"Approuver","Remove_buddy":"Supprimer l'ami","You_are_about_to_remove_":"Vous allez retirer {{bid_name}} (<b>{{bid_jid}}</b>) de votre liste d'amis. Toutes les fenêtres de chat en lien avec celui-ci seront fermées.","Continue_without_chat":"Continuer sans tchat","Please_wait":"Merci de patienter","Login_failed":"Authentification échouée","Sorry_we_cant_authentikate_":"La connexion avec le serveur de tchat a échoué. Vérifiez le mot de passe.","Retry":"Retour","clear_history":"Effacer l’historique","New_message_from":"Nouveau message de","Should_we_notify_you_":"Dans le futur, devrons-nous vous notifier les nouveaux messages ?","Please_accept_":"Merci de cliquer sur le bouton \"autoriser\" en haut de page","Hide_offline":"Masquer les contacts non connectés","Show_offline":"Afficher les contacts non connectés","About":"À propos","dnd":"Ne pas déranger","Mute":"Muet","Unmute":"Son actif","Subscription":"Abonnement","both":"Les deux","Status":"Status","online":"En ligne","chat":"tchat","away":"Absent","xa":"Options étendues","offline":"Hors ligne","none":"Aucun","Unknown_instance_tag":"Tag inconnu","Not_one_of_our_latest_keys":"Ce n'est pas l'une des dernières touches","Received_an_unreadable_encrypted_message":"Message chiffré non lisible","Online":"En ligne","Chatty":"tchatty","Away":"Absent","Extended_away":"Options étendues","Offline":"Hors ligne","Friendship_request":"Demande d'amitié","Confirm":"Valider","Dismiss":"Rejeter","Remove":"Supprimer","Online_help":"Aide en ligne","FN":"Nom","N":" N ","FAMILY":"Nom de famille","GIVEN":"prénom","NICKNAME":"Surnom","URL":"URL","ADR":"Adresse","STREET":"Rue","EXTADD":"Adresse (suite)","LOCALITY":"Localité","REGION":"Région","PCODE":"Code Postal","CTRY":"Pays","TEL":"Téléphone","NUMBER":"Numéro","EMAIL":"Courriel","USERID":" USERID ","ORG":"Organisation","ORGNAME":"Nom","ORGUNIT":"Unité","TITLE":"Qualité:","ROLE":"Rôle","BDAY":"Date de naissance","DESC":"Description","PHOTO":"Photo","send_message":"Envoyer le message","get_info":"Montrer les informations","Settings":"Réglages","Priority":"Priorité","Save":"Enregistrer","User_settings":"Paramètres utilisateur","A_fingerprint_":"Une empreinte est utilisée pour s'assurer de l'identité de la personne à qui vous parlez","Your_roster_is_empty_add_a":"Votre liste est vide, ajouter ","new_buddy":"Nouvel ami","is":"est","Login_options":"Options d'identification","BOSH_url":"URL BOSH","Domain":"Domaine","Resource":"Ressource","On_login":"Après authentification","Received_an_unencrypted_message":"Reçu un message non chiffré","Sorry_your_buddy_doesnt_provide_any_information":"Désolé, votre ami n'a pas fourni d'informations","Info_about":"A propos de","Authentication_aborted":"Authentification interrompue.","Authentication_request_received":"Requête d'authentification reçue.","Do_you_want_to_display_them":"Voulez-vous les afficher ?","Log_in_without_chat":"S'identifier sans tchat","has_come_online":"vient d'arriver","Unknown_sender":"Expéditeur inconnu","You_received_a_message_from_an_unknown_sender":"Vous avez reçu un message d'un expéditeur inconnu","Please_allow_access_to_microphone_and_camera":"Veuillez cliquez sur le bouton \"Autoriser\" en haut, pour permettre l'accès au micro et à la caméra.","Incoming_call":"Appel entrant","from":"de","Do_you_want_to_accept_the_call_from":"Voulez-vous accepter l'appel de","Reject":"Rejeté","Accept":"Accepté","hang_up":"Décrochez","snapshot":"Capture d’écran","mute_my_audio":"Couper l'audio","pause_my_video":"Mettre ma vidéo en pause","fullscreen":"Plein écran","Info":"Info","Local_IP":"IP locale","Remote_IP":"IP distante","Local_Fingerprint":"Empreinte locale","Remote_Fingerprint":"Empreinte distante","Video_call_not_possible":"L'appel vidéo n'est possible. Votre ami ne supporte pas les appels vidéo.","Start_video_call":"Démarrer l'appel vidéo"}},"it":{"translation":{"Logging_in":"login…","your_connection_is_unencrypted":"La sua connessione è non cifrata.","your_connection_is_encrypted":"La sua connessione è cifrata.","your_buddy_closed_the_private_connection":"La sua connessione privata è stato chiuso dal suo compagno.","start_private":"Inizia privata","close_private":"Chiude privata","your_buddy_is_verificated":"Il tuo compagno è stato verificato","you_have_only_a_subscription_in_one_way":"Hai solo una one-way inscrizione.","authentication_query_sent":"Domanda d'autenticità inviata.","your_message_wasnt_send_please_end_your_private_conversation":"Il tuo messaggio non è stato inviato. Si prega di finire la sua conversazione privata.","unencrypted_message_received":"Messaggio non cifrato ricevuto","your_message_wasnt_send_because_you_have_no_valid_subscription":"Il tuo messaggio non è stato inviato perché non hai una sottoscrizione valida.","not_available":"non disponibile","no_connection":"nessun collegamento!","relogin":"nuovo login","trying_to_start_private_conversation":"Cercando di avviare una conversazione privata!","Verified":"verificato","Unverified":"non verificato","private_conversation_started":"Conversazione privata iniziato.","private_conversation_aborted":"Conversazione privata abortito!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Il tuo compagno ha chiuso la conversazione privata! Si dovrebbe fare lo stesso.","conversation_is_now_verified":"Conversazione è ora verificato.","authentication_failed":"autenticazione fallita.","your_buddy_is_attempting_to_determine_":"Il tuo compagno sta cercando di determinare se lui o lei sta davvero parlando con te.","to_authenticate_to_your_buddy":"Per autenticare a il tuo compagno. ","enter_the_answer_and_click_answer":"inserisci la risposta e fare click su risposta.","enter_the_secret":"inserire il segreto.","Creating_your_private_key_":"Creare la propria chiave privata; questo potrebbe richiedere un po'.","Authenticating_a_buddy_helps_":"Autenticazione un compagno aiuta a garantire che la persona si sta parlando è davvero quello che lui o lei sostiene di essere.","How_do_you_want_to_authenticate_your_buddy":"Come si desidera autenticare {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Seleziona metodo ..","Manual":"manuale","Question":"domanda","Secret":"segreto","To_verify_the_fingerprint_":"Per verificare l'impronta digitale, contattare il proprio compagno attraverso qualche altro canale affidabile, come il telefono.","Your_fingerprint":"il tuo impronta digitale","Buddy_fingerprint":"impronta digitale da compagno","Close":"chiude","Compared":"comparato","To_authenticate_using_a_question_":"Per autenticare tramite una questione, scegli una questione la cui risposta è nota solo voi e il tuo compagno","Ask":"chiedi","To_authenticate_pick_a_secret_":"Per autenticare, scegli un segreto noto solo a te e il tuo compagno.","Compare":"Comparare","Fingerprints":"Impronta digitale","Authentication":"Autenticazione","Message":"Messagio","Add_buddy":"Aggiungi un compagno","rename_buddy":"rinomina compagno","delete_buddy":"elimina compagno","Login":"Login","Username":"Identificazione dell'utente","Password":"Password","Cancel":"Cancella","Connect":"Collega","Type_in_the_full_username_":"Digita l'identificazione utente completo e un alias opzionale.","Alias":"Alias","Add":"Aggiungi","Subscription_request":"Rrichiesta di sottoscrizione","You_have_a_request_from":"Hai una richiesta da","Deny":"Refiuta","Approve":"Approva","Remove_buddy":"Rimuova il compagno","You_are_about_to_remove_":"Stai rimovendo {{bid_name}} (<b>{{bid_jid}}</b>) del suo lista di compagni. Tutte le chat appartenente saranno chiuse.","Continue_without_chat":"Continua senza chat","Please_wait":"Si prega d'attendere","Login_failed":"Chat login è fallito","Sorry_we_cant_authentikate_":"Autenticazione non riuscita con il server di chat. Forse la password è sbagliata?","Retry":"Indietro","clear_history":"Cancella la cronologia","New_message_from":"Nuovo messaggio da","Should_we_notify_you_":"Vuoi ricevere una notifica di nuovi messaggi in futuro?","Please_accept_":"Si prega di fare clic sul bottone \"Autorizzazione\" sopra.","Hide_offline":"Nascondere i contatti non in linea","Show_offline":"Mostra i contatti non in linea","About":"Informazione legale","dnd":"Non disturbare","Mute":"Muto attivo","Unmute":"Muto inattivo","Subscription":"Sottoscrizione","both":"etrambi","Status":"Status","online":"In linea","chat":"chat","away":"via","xa":"via estensivo","offline":"non in linea","none":"nessuno","Unknown_instance_tag":"Instance tag sconosciuta.","Not_one_of_our_latest_keys":"Non è una delle nostre ultime chiavi.","Received_an_unreadable_encrypted_message":"Ricevuto un messaggio crittografato illeggibile.","Online":"In linea","Chatty":"Chiacchierino","Away":"Via","Extended_away":"Via estensivo","Offline":"Non in linea","Friendship_request":"Amicizia richiesto","Confirm":"Conferma","Dismiss":"Rifiuta","Remove":"Rimuovi","Online_help":"Guida in linea","FN":"Nome e cognome","N":null,"FAMILY":"Cognome","GIVEN":"Nome","NICKNAME":"Soprannome","URL":"URL","ADR":"Indirizzo","STREET":"Via","EXTADD":"Esteso Indirizzo","LOCALITY":"Località","REGION":"Regione","PCODE":"Codice Postale","CTRY":"Paese","TEL":"Telefono","NUMBER":"Numero","EMAIL":"E-mail","USERID":null,"ORG":"Organizzazione","ORGNAME":"Nome","ORGUNIT":"Unità","TITLE":"Titolo di lavoro","ROLE":"Funzione","BDAY":"Compleanno","DESC":"Descrizione","PHOTO":null,"send_message":"Messagio inviato","get_info":"Mostra informazioni","Settings":"Impostazione","Priority":"Priorità","Save":"Salva","User_settings":"Impostazione dell'utente","A_fingerprint_":"Una impronta digitale è usato per assicurarsi che la persona con cui stai parlando è lui o lei che sta dicendo.","Your_roster_is_empty_add_a":"Il suo elenco è vuoto, aggiungi un ","new_buddy":"compagno nuovo","is":"è","Login_options":"Opzioni di login","BOSH_url":"BOSH URL","Domain":"Domain","Resource":"Risorsa","On_login":"Login on","Received_an_unencrypted_message":"Ricevuto un messaggio non crittografato","Sorry_your_buddy_doesnt_provide_any_information":"Spiace, il tuo compagno non fornisce alcuna informazione.","Info_about":"Informazioni","Authentication_aborted":"Autenticazione interrotta","Authentication_request_received":"Richiesta di autenticazione ricevuto.","Do_you_want_to_display_them":"Vuoi che venga visualizzato?","Log_in_without_chat":"Log in senza chat","has_come_online":"È venuto in linea","Unknown_sender":"Mittente sconosciuto","You_received_a_message_from_an_unknown_sender":"Hai ricevuto un messaggio da un mittente sconosciuto","Please_allow_access_to_microphone_and_camera":"Si prega di fare clic sul bottone \"Autorizzazione\" sopra per autorizzazione del l'accesso al microfono e fotocamera.","Incoming_call":"Chiamata in arrivo","from":"di","Do_you_want_to_accept_the_call_from":"Vuoi accettare la chiamata di","Reject":"Rifiuta","Accept":"Accetta","hang_up":"Riattacca","snapshot":"istantanea","mute_my_audio":"disattiva il mio audio","pause_my_video":"pausa il mio audio","fullscreen":"schermo intero","Info":"Informazione","Local_IP":"IP locale","Remote_IP":"IP remoto","Local_Fingerprint":"Impronta digitale locale","Remote_Fingerprint":"Impronta digitale remoto","Video_call_not_possible":"Videochiamata non è possibile. Il tuo compagno non può effettuare videochiamate.","Start_video_call":"Inizia videochiamata"}},"nds":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null}},"pl":{"translation":{"Logging_in":"Logowanie...","your_connection_is_unencrypted":"Twoje połączenie nie jest szyfrowane.","your_connection_is_encrypted":"Twoje połączenie jest szyfrowane.","your_buddy_closed_the_private_connection":"Twój rozmówca zamknął połączenie.","start_private":"Rozpocznij rozmowę.","close_private":"Zakończ rozmowę.","your_buddy_is_verificated":"Twój rozmówca został zweryfikowany.","you_have_only_a_subscription_in_one_way":"Masz jednostronną subskrypcję.","authentication_query_sent":"Wysłano proźbę o autentykację.","your_message_wasnt_send_please_end_your_private_conversation":"Twoja wiadomość nie została wysłana. Proszę, zamknij rozmowę.","unencrypted_message_received":"Zwrotna niezaszyfrowana wiadomość.","your_message_wasnt_send_because_you_have_no_valid_subscription":"Wiadomość nie została wysłana ponieważ nie posiadasz subskrybcji u rozmówcy.","not_available":"Niedostępny.","no_connection":"Brak połączenia!","relogin":"Połącz ponownie","trying_to_start_private_conversation":"Rozpocznij rozmowę!","Verified":"Zweryfikowano","Unverified":"Niezweryfikowano","private_conversation_started":"Rozmowa prywatna rozpoczęta.","private_conversation_aborted":"Anulowano rozmowę!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Rozmówca przerwał połączenie!","conversation_is_now_verified":"Zweryfikowano połączenie.","authentication_failed":"Weryfikacja się nie powiodła.","your_buddy_is_attempting_to_determine_":"Twój rozmówca próbuje się z Tobą połączyć.","to_authenticate_to_your_buddy":"Autoryzacja z rozmówcą, ","enter_the_answer_and_click_answer":"napisz odpowiedź.","enter_the_secret":"wpisz hasło.","Creating_your_private_key_":"Tworzenie klucza prywatnego; może to chwilę potrwać","Authenticating_a_buddy_helps_":"Autoryzacja pomoże w ustaleniu faktycznej tożsamości rozmówcy ;).","How_do_you_want_to_authenticate_your_buddy":"Jakiej autoryzacji chcesz użyć {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Wybierz sposób...","Manual":"Ręcznie","Question":"Pytanie","Secret":"Hasło","To_verify_the_fingerprint_":"Aby zweryfikować kod najpierw skontaktuj się z rozmówcą np. za pomocą telefonu.","Your_fingerprint":"Twój kod:","Buddy_fingerprint":"Kod rozmówcy","Close":"Zamknij","Compared":"Porównano","To_authenticate_using_a_question_":"Aby autoryzować za pomocą pytania, wybierz pytanie na które tylko Twój rozmówca zna odpowiedź.","Ask":"Zadaj pytanie","To_authenticate_pick_a_secret_":"Aby autoryzować za pomocą hasła, wybierz hasło na które zna tylko Twój rozmówca.","Compare":"Dopasuj","Fingerprints":"Kody autoryzacyjne","Authentication":"Autoryzacja","Message":"Wiadomość","Add_buddy":"Dodaj kontakt","rename_buddy":"Zmień nazwę","delete_buddy":"Usuń kontakt","Login":"Login","Username":"Nazwa Użytkownika","Password":"Hasło","Cancel":"Anuluj","Connect":"Połączenie","Type_in_the_full_username_":"Wpisz pełną nazwę użytkownika (np. <B>imię.nazwisko@zajezdnia.local</B>) oraz jego nazwę wyświetlaną (Alias).","Alias":"Alias","Add":"Dodaj","Subscription_request":"Potwierdzenie subskrypcji","You_have_a_request_from":"Masz potwierdzenie od","Deny":"Odmów","Approve":"Zatwierdź","Remove_buddy":"Usuń rozmówcę","You_are_about_to_remove_":"Twój rozmówca {{bid_name}} (<b>{{bid_jid}}</b>) usunął Cię ze swojej listy kontaktów.","Continue_without_chat":"Kontynuuj bez komunikatora","Please_wait":"Proszę czekać","Login_failed":"Błędne logowanie","Sorry_we_cant_authentikate_":"Błędna autoryzacja z serwerem. Może hasło jest nieprawidłowe?","Retry":"Powrót","clear_history":"Wyczyść historię","New_message_from":"Nowa wiadomość od","Should_we_notify_you_":"Czy chcesz otrzymywać powiadomienia o nowych wiadomościach w przyszłości?","Please_accept_":"Kliknij \"Zezwól\" na górze.","Hide_offline":"Schowaj niedostępne kontakty","Show_offline":"Pokaż niedostępne kontakty","About":"Info","dnd":"Nie przeszkadzać","Mute":"Wycisz","Unmute":"Włącz dźwięk","Subscription":"Subskrybcja","both":"obustronna","Status":"Status","online":"Dostępny","chat":"czat","away":"z dala od kompa","xa":"hen hen...","offline":"niedostępny","none":"brak","Unknown_instance_tag":"Nieznany przypadek.","Not_one_of_our_latest_keys":"Not one of our latest keys.","Received_an_unreadable_encrypted_message":"Received an unreadable encrypted message.","Online":"Połączony","Chatty":"Pogawędzimy?","Away":"Daleko","Extended_away":"Hen Hen...","Offline":"Niedostępny","Friendship_request":"Zapytanie od znajomego?","Confirm":"Potwierdzenie","Dismiss":"Odwołaj","Remove":"Usuń","Online_help":"Pomoc Online","FN":"Pełna nazwa","N":" ","FAMILY":"Nazwisko","GIVEN":"Imię","NICKNAME":"Pseudonim","URL":"Strona WWW","ADR":"Adres","STREET":"Ulica","EXTADD":"Extended Address","LOCALITY":"Lokalizacja","REGION":"Region","PCODE":"Kod pocztowy","CTRY":"Kraj","TEL":"Telefon","NUMBER":"Numer","EMAIL":"Email","USERID":" ","ORG":"Organizacja","ORGNAME":"Nazwa","ORGUNIT":"Jednostka","TITLE":"Stanowisko","ROLE":"Rola","BDAY":"Data urodzin","DESC":"Opis","PHOTO":" ","send_message":"Wyślij wiadomość","get_info":"Pokaż informację","Settings":"Ustawienia","Priority":"Priorytet","Save":"Zapisz","User_settings":"Ustawienia Użytkownika","A_fingerprint_":"Kod służy do autoryzacji Twojego rozmówcy aby potwierdzić jego tożsamość.","Your_roster_is_empty_add_a":"Twoja lista jest pusta, dodaj kontakty ","new_buddy":"Nowy kontakt","is":"jest","Login_options":"opcje logowania","BOSH_url":"Adres BOSH","Domain":"Domena","Resource":"Źródło","On_login":"Na login","Received_an_unencrypted_message":"Zatwierdzono nieszyfrowaną wiadomość.","Sorry_your_buddy_doesnt_provide_any_information":"Twój rozmówca nie posiada żadnych informacji.","Info_about":"Informacja o...","Authentication_aborted":"Autoryzacja anulowana.","Authentication_request_received":"Prośba o autoryzację została przyjęta.","Do_you_want_to_display_them":"Chcesz to wyświetlić?","Log_in_without_chat":"Zaloguj bez komunikatora","has_come_online":"jest teraz dostępny","Unknown_sender":"Nieznany nadawca","You_received_a_message_from_an_unknown_sender":"Masz wiadomość od nieznanego nadawcy.","Please_allow_access_to_microphone_and_camera":"Kliknij \"Potwierdź\" na górze, aby móc korzystać z mikrofonu oraz kamery.","Incoming_call":"Przychodzące połączenie","from":"z","Do_you_want_to_accept_the_call_from":"Akceptujesz połączenie od","Reject":"Odrzuć","Accept":"Zaakceptuj","hang_up":"odbierz","snapshot":"zrób zdjęcie","mute_my_audio":"wycisz dźwięk","pause_my_video":"zatrzymaj moje wideo","fullscreen":"Pełny ekran","Info":"Informacja","Local_IP":"Adres IP","Remote_IP":"Zdalny adres IP","Local_Fingerprint":"Kod lokalny","Remote_Fingerprint":"Zdalny kod","Video_call_not_possible":"Rozmowa wideo jest niemożliwa. Twój rozmówca nie ma możliwości prowadzenia takich rozmów.","Start_video_call":"Rozpocznij rozmowę wideo"}},"pt-BR":{"translation":{"Logging_in":"Entrando...","your_connection_is_unencrypted":"Sua conexão não é encriptada","your_connection_is_encrypted":"Sua conexão é encriptada","your_buddy_closed_the_private_connection":"Seu contato fechou a conexão privada","start_private":"Iniciar conversa privada","close_private":"Fechar conversa privada","your_buddy_is_verificated":"Seu contato está verificado","you_have_only_a_subscription_in_one_way":"Você só tem a inscrição one-way","authentication_query_sent":"Pergunta de autenticação enviada","your_message_wasnt_send_please_end_your_private_conversation":"Sua mensagem não foi enviada. Por favor finalize sua conversa privada","unencrypted_message_received":"Mensagem não encriptada recebida","your_message_wasnt_send_because_you_have_no_valid_subscription":"Sua mensagem não foi enviada porque sua inscrição não é válida","not_available":"Indisponível","no_connection":"Sem conexão!","relogin":"reentrar","trying_to_start_private_conversation":"Tentando iniciar conversa privada","Verified":"Verificado","Unverified":"Não verificado","private_conversation_started":"Conversa privada iniciada.","private_conversation_aborted":"Conversa privada abortada!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Seu contato encerrou a conversa privada! Você deveria fazer o mesmo.","conversation_is_now_verified":"Conversa verificada.","authentication_failed":"Autenticação falhou.","your_buddy_is_attempting_to_determine_":"Seu contato está tentando determinar se ele realmente está falando contigo.","to_authenticate_to_your_buddy":"Para autenticar seu contato, ","enter_the_answer_and_click_answer":"entre com a resposta e clique em Responder.","enter_the_secret":"escreva a senha.","Creating_your_private_key_":"Criando sua chave privada: isso pode demorar um pouco.","Authenticating_a_buddy_helps_":"Autenticar seu contato ajuda a garantir que a pessoa com a qual você está falando é realmente a pessoa que ela alega ser.","How_do_you_want_to_authenticate_your_buddy":"Como você gostaria de se autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Selecione o método...","Manual":"Manual","Question":"Pergunta","Secret":"Senha","To_verify_the_fingerprint_":"Para verificar o fingerprint, entre em contato com seu contato usando outro meio, de preferência seguro, como o telefone.","Your_fingerprint":"Seu fingerprint","Buddy_fingerprint":"Fingerprint do contato","Close":"Fechar","Compared":"Comparado","To_authenticate_using_a_question_":"Para autenticar seu contato faça uma pergunta, mas escolha que só ele saiba a resposta.","Ask":"Pergunta","To_authenticate_pick_a_secret_":"Para autenticar, escolha um segredo que somente você e seu contato saibam.","Compare":"Compare","Fingerprints":"Fingerprints","Authentication":"Autenticação","Message":"Mensagem","Add_buddy":"Adicionar contato","rename_buddy":"renomear contato","delete_buddy":"remover contato","Login":"Entrar","Username":"Usuário","Password":"Senha","Cancel":"Cancelar","Connect":"Conectar","Type_in_the_full_username_":"Digite seu nome completo e um apelido opcional.","Alias":"Apelido","Add":"Adicionar","Subscription_request":"Pedido de inscrição","You_have_a_request_from":"Você tem um pedido de","Deny":"Negar","Approve":"Aprovar","Remove_buddy":"Remover contato","You_are_about_to_remove_":"Você está prestes a remover {{bid_name}} (<b>{{bid_jid}}</b>) de sua lista de contatos. Todas as conversas serão fechadas.","Continue_without_chat":"Continue sem converar","Please_wait":"Por favor aguarde","Login_failed":"Autenticação da conversa falhou","Sorry_we_cant_authentikate_":"A autenticação com o servidor falhou. Talvez seja a senha errada?","Retry":"Voltar","clear_history":"Limpar histórico","New_message_from":"Nova mensagem de","Should_we_notify_you_":"Devemos continuar notificando sobre novas mensagens no futuro?","Please_accept_":"Por favor clique no botão \"Permitir\" na parte superior.","Hide_offline":"Esconder contatos desconectados","Show_offline":"Mostrar contatos desconectados","About":"Sobre","dnd":"Não perturbe","Mute":"Mudo","Unmute":"Ligar","Subscription":"Inscrição","both":"ambos","Status":"Status","online":"online","chat":"conversa","away":"ausente","xa":"ausente por mais tempo","offline":"desativado","none":"nenhum","Unknown_instance_tag":"Marcação desconhecida da instância","Not_one_of_our_latest_keys":"Nenhuma de nossas ultimas chaves.","Received_an_unreadable_encrypted_message":"Mensagem encriptada ilegível foi recebida.","Online":"Online","Chatty":"Tagarela","Away":"Ausente","Extended_away":"Ausente por mais tempo","Offline":"Desativado","Friendship_request":"Pedido de amizade","Confirm":"Confirmar","Dismiss":"Ignorar","Remove":"Remover","Online_help":"Ajuda online","FN":"Nome completo","N":" ","FAMILY":"Sobrenome","GIVEN":"Nome","NICKNAME":"Apelido","URL":"URL","ADR":"Endereço","STREET":"Rua, Av, etc","EXTADD":"Complemento","LOCALITY":"Localidade","REGION":"Região","PCODE":"CEP","CTRY":"País","TEL":"Telefone","NUMBER":"Número","EMAIL":"Email","USERID":" ","ORG":"Empresa","ORGNAME":"Nome","ORGUNIT":"Unidade","TITLE":"Cargo","ROLE":"Rol","BDAY":"Data de nascimento","DESC":"Descrição","PHOTO":" ","send_message":"Enviar mensagem","get_info":"Exibir informações","Settings":"Configurações","Priority":"Prioridade","Save":"Salvar","User_settings":"Configurações do usuário","A_fingerprint_":"O fingerprint é usado para certificar que a pessoa com a qual se está falando é que ela diz ser.","Your_roster_is_empty_add_a":"Sua lista está vazia, adicione um ","new_buddy":"novo contato","is":"é","Login_options":"Opções de login","BOSH_url":"BOSH URL","Domain":"Domínio","Resource":"Recurso","On_login":"Ao autenticar","Received_an_unencrypted_message":"Mensagem não encriptada recebida","Sorry_your_buddy_doesnt_provide_any_information":"Desculpe, seu contato não forneceu nenhuma informação","Info_about":"Informações sobre","Authentication_aborted":"Autenticação encerrada.","Authentication_request_received":"Pedido de autenticação recebido","Do_you_want_to_display_them":"Você quer mostrá-los?","Log_in_without_chat":"Entrar sem conversar","has_come_online":"ficou online","Unknown_sender":"Emissor desconhecido","You_received_a_message_from_an_unknown_sender":"Você recebeu uma mensagem de um emissor desconhecido","Please_allow_access_to_microphone_and_camera":"Por favor clique no botão \"Permitir\" no topo, para conceder acesso ao seu microfone e câmera.","Incoming_call":"Recebendo chamada","from":"de","Do_you_want_to_accept_the_call_from":"Você aceita a chamada de","Reject":"Negar","Accept":"Aceitar","hang_up":"desligar","snapshot":"registrar imagem","mute_my_audio":"mudo","pause_my_video":"pausar vídeo","fullscreen":"tela cheia","Info":"Informações","Local_IP":"IP local","Remote_IP":"IP remoto","Local_Fingerprint":"Fingerprint local","Remote_Fingerprint":"Fingerprint remoto","Video_call_not_possible":"Chamada de vídeo impossível. Seu contato não suporta chamadas desse tipo.","Start_video_call":"Iniciar chamada de vídeo"}},"ro":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null}}}; \ No newline at end of file
+
+/*!
+ * Source: lib/translation.js, license: MIT, url: https://webtranslateit.com/en/projects/10365-JSXC
+ */
+var I18next = {"de":{"translation":{"Logging_in":"Login läuft…","your_connection_is_unencrypted":"Deine Verbindung ist unverschlüsselt.","your_connection_is_encrypted":"Deine Verbindung ist verschlüsselt.","your_buddy_closed_the_private_connection":"Dein Kontakt hat die private Verbindung getrennt.","start_private":"Privat starten","close_private":"Privat abbrechen","your_buddy_is_verificated":"Dein Kontakt ist verifiziert.","you_have_only_a_subscription_in_one_way":"Der Kontaktstatus ist einseitig.","authentication_query_sent":"Authentifizierungsanfrage gesendet.","your_message_wasnt_send_please_end_your_private_conversation":"Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.","unencrypted_message_received":"Unverschlüsselte Nachricht erhalten.","your_message_wasnt_send_because_you_have_no_valid_subscription":"Deine Nachricht wurde nicht gesandt, da der Kontaktstatus einseitig ist.","not_available":"Nicht verfügbar.","no_connection":"Keine Verbindung.","relogin":"Neu anmelden.","trying_to_start_private_conversation":"Versuche private Konversation zu starten.","Verified":"Verifiziert","Unverified":"Unverifiziert","private_conversation_started":"Private Konversation gestartet.","private_conversation_aborted":"Private Konversation abgebrochen.","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Dein Kontakt hat die private Konversation beendet. Das solltest du auch tun!","conversation_is_now_verified":"Konversation ist jetzt verifiziert","authentication_failed":"Authentifizierung fehlgeschlagen.","your_buddy_is_attempting_to_determine_":"Dein Kontakt versucht herauszufinden ob er wirklich mit dir redet.","to_authenticate_to_your_buddy":"Um dich gegenüber deinem Kontakt zu verifizieren ","enter_the_answer_and_click_answer":"gib die Antwort ein und klick auf Antworten.","enter_the_secret":"gib das Geheimnis ein.","Creating_your_private_key_":"Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.","Authenticating_a_buddy_helps_":"Einen Kontakt zu authentifizieren hilft sicherzustellen, dass die Person mit der du sprichst auch die ist die sie sagt.","How_do_you_want_to_authenticate_your_buddy":"Wie willst du {{bid_name}} (<b>{{bid_jid}}</b>) authentifizieren?","Select_method":"Wähle...","Manual":"Manual","Question":"Frage","Secret":"Geheimnis","To_verify_the_fingerprint_":"Um den Fingerprint zu verifizieren kontaktiere dein Kontakt über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.","Your_fingerprint":"Dein Fingerprint","Buddy_fingerprint":"Sein/Ihr Fingerprint","Close":"Schließen","Compared":"Verglichen","To_authenticate_using_a_question_":"Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Kontakt die Antwort kennt.","Ask":"Frage","To_authenticate_pick_a_secret_":"Um deinen Kontakt zu authentifizieren, wähle ein Geheimnis welches nur deinem Kontakt und dir bekannt ist.","Compare":"Vergleiche","Fingerprints":"Fingerprints","Authentication":"Authentifizierung","Message":"Nachricht","Add_buddy":"Kontakt hinzufügen","rename_buddy":"Kontakt umbenennen","delete_buddy":"Kontakt löschen","Login":"Anmeldung","Username":"Benutzername","Password":"Passwort","Cancel":"Abbrechen","Connect":"Verbinden","Type_in_the_full_username_":"Gib bitte den vollen Benutzernamen und optional ein Alias an.","Alias":"Alias","Add":"Hinzufügen","Subscription_request":"Kontaktanfrage","You_have_a_request_from":"Du hast eine Anfrage von","Deny":"Ablehnen","Approve":"Bestätigen","Remove_buddy":"Kontakt entfernen","You_are_about_to_remove_":"Du bist gerade dabei {{bid_name}} (<b>{{bid_jid}}</b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.","Continue_without_chat":"Weiter ohne Chat","Please_wait":"Bitte warten","Login_failed":"Chat-Anmeldung fehlgeschlagen","Sorry_we_cant_authentikate_":"Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?","Retry":"Zurück","clear_history":"Lösche Verlauf","New_message_from":"Neue Nachricht von","Should_we_notify_you_":"Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?","Please_accept_":"Bitte klick auf den \"Zulassen\" Button oben.","Hide_offline":"Offline ausblenden","Show_offline":"Offline einblenden","About":"Über","dnd":"Beschäftigt","Mute":"Ton aus","Unmute":"Ton an","Subscription":"Bezug","both":"beidseitig","Status":"Status","online":"online","chat":"chat","away":"abwesend","xa":"länger abwesend","offline":"offline","none":"keine","Unknown_instance_tag":"Unbekannter instance tag.","Not_one_of_our_latest_keys":"Nicht einer unserer letzten Schlüssel.","Received_an_unreadable_encrypted_message":"Eine unlesbare verschlüsselte Nachricht erhalten.","Online":"Online","Chatty":"Gesprächig","Away":"Abwesend","Extended_away":"Länger abwesend","Offline":"Offline","Friendship_request":"Kontaktanfrage","Confirm":"Bestätigen","Dismiss":"Ablehnen","Remove":"Löschen","Online_help":"Online Hilfe","FN":"Name","N":" ","FAMILY":"Familienname","GIVEN":"Vorname","NICKNAME":"Spitzname","URL":"URL","ADR":"Adresse","STREET":"Straße","EXTADD":"Zusätzliche Adresse","LOCALITY":"Ortschaft","REGION":"Region","PCODE":"Postleitzahl","CTRY":"Land","TEL":"Telefon","NUMBER":"Nummer","EMAIL":"E-Mail","USERID":" ","ORG":"Organisation","ORGNAME":"Name","ORGUNIT":"Abteilung","TITLE":"Titel","ROLE":"Rolle","BDAY":"Geburtstag","DESC":"Beschreibung","PHOTO":" ","send_message":"Sende Nachricht","get_info":"Benutzerinformationen","Settings":"Einstellungen","Priority":"Priorität","Save":"Speichern","User_settings":"Benutzereinstellungen","A_fingerprint_":"Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.","Your_roster_is_empty_add_a":"Deine Kontaktliste ist leer, füge einen neuen Kontakt ","new_buddy":"hinzu","is":"ist","Login_options":"Anmeldeoptionen","BOSH_url":"BOSH url","Domain":"Domain","Resource":"Ressource","On_login":"Beim Anmelden","Received_an_unencrypted_message":"Unverschlüsselte Nachricht empfangen","Sorry_your_buddy_doesnt_provide_any_information":"Dein Kontakt stellt leider keine Informationen bereit.","Info_about":"Info über","Authentication_aborted":"Authentifizierung abgebrochen.","Authentication_request_received":"Authentifizierungsanfrage empfangen.","Do_you_want_to_display_them":"Möchtest du sie sehen?","Log_in_without_chat":"Anmelden ohne Chat","has_come_online":"ist online gekommen","Unknown_sender":"Unbekannter Sender","You_received_a_message_from_an_unknown_sender":"Du hast eine Nachricht von einem unbekannten Sender erhalten","Please_allow_access_to_microphone_and_camera":"Bitte klick auf den \"Zulassen\" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.","Incoming_call":"Eingehender Anruf","from":"von","Do_you_want_to_accept_the_call_from":"Möchtest Du den Anruf annehmen von","Reject":"Ablehnen","Accept":"Annehmen","hang_up":"Auflegen","snapshot":"Schnappschuss","mute_my_audio":"Mein Ton aus","pause_my_video":"Mein Video pausieren","fullscreen":"Vollbild","Info":"Info","Local_IP":"Lokale IP","Remote_IP":"Remote IP","Local_Fingerprint":"Lokaler Fingerprint","Remote_Fingerprint":"Remote Fingerprint","Video_call_not_possible":"Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.","Start_video_call":"Starte Videoanruf","Join_chat":"Gruppe beitreten","Join":"Betreten","Room":"Gruppe","Nickname":"Nickname","left_the_building":"__nickname__ hat die Gruppe verlassen","entered_the_room":"__nickname__ ist der Gruppe beigetreten","is_now_known_as":"__oldNickname__ ist nun unter __newNickname__ bekannt","This_room_is":"Diese Gruppe ist","muc_hidden":{"keyword":"versteckt","description":"kann durch die Suche nicht gefunden werden"},"muc_membersonly":{"keyword":"nur für Mitglieder","description":"du musst auf der Mitgliederliste stehen"},"muc_moderated":{"keyword":"moderiert","description":"Nur Personen die \"Mitspracherecht\" haben dürfen Nachrichten senden"},"muc_nonanonymous":{"keyword":"nicht anonym","description":"deine Jabber ID wird für alle Mitglieder sichtbar sein"},"muc_open":{"keyword":"offen","description":"jeder darf dieser Gruppe beitreten"},"muc_passwordprotected":{"keyword":"passwortgeschützt","description":"du benötigst das korrekte Passwort"},"muc_persistent":{"keyword":"permanent","description":"wird nicht geschlossen, wenn das letzte Mitglied die Gruppe verlässt"},"muc_public":{"keyword":"öffentlich","description":"kann durch die Suche gefunden werden"},"muc_semianonymous":{"keyword":"teilweise anonym","description":"deine Jabber ID wird nur für die Gruppen Administratoren sichtbar sein"},"muc_temporary":{"keyword":"temporär","description":"wird geschlossen, wenn das letzte Mitglied die Gruppe verlässt"},"muc_unmoderated":{"keyword":"nicht moderiert","description":"jeder darf Nachrichten senden"},"muc_unsecured":{"keyword":"ungesichert","description":"es wird kein Passwort benötigt"},"Continue":"Weiter","Server":"Server","Rooms_are_loaded":"Gruppen werden geladen","Could_load_only":"Es konnten nur __count__ Gruppen für die Autovervollständigung geladen werden","muc_explanation":"Bitte trage den Gruppennamen und optional ein Nickname und Passwort ein um einer Gruppe beizutreten","You_already_joined_this_room":"Du bist dieser Gruppe bereits beigetreten","This_room_will_be_closed":"Diese Gruppe wird geschlossen","Room_not_found_":"Es wird eine neue Gruppe erstellt","Loading_room_information":"Informationen über Gruppe werden geladen","Destroy":"Auflösen","Leave":"Verlassen","changed_subject_to":"__nickname__ hat das Thema auf __subject__ geändert","muc_removed_kicked":"Du wurdest aus der Gruppe entfernt","muc_removed_info_kicked":"__nickname__ wurde aus der Gruppe entfernt","muc_removed_banned":"Du wurdest aus der Gruppe ausgeschlossen","muc_removed_info_banned":"__nickname__ wurde aus der Gruppe ausgeschlossen","muc_removed_affiliation":"Du wurdest aus der Gruppe entfernt wegen einer Änderung deines Mitgliedstatus","muc_removed_info_affiliation":"__nickname__ wurde aus der Gruppe entfernt wegen einer Änderung seines Mitgliedstatus","muc_removed_membersonly":"Diese Gruppe erlaubt jetzt nur noch eingetragene Mitglieder und da du nicht dazugehörst, wurdest du aus der Gruppen entfernt","muc_removed_info_membersonly":"Diese Gruppe erlaubt jetzt nur noch eingetragene Mitglieder und __nickname__ gehört nicht dazu, daher wurde er aus der Gruppe entfernt","muc_removed_shutdown":"Du wurdest aus der Gruppe entfernt, da der MUC Server heruntergefahren wird","Reason":"Grund","message_not_send":"Deine Nachricht wurde aufgrund eines Fehlers nicht versandt","message_not_send_item-not-found":"Deine Nachricht wurde nicht versandt, da der Raum nicht mehr existiert","message_not_send_forbidden":"Deine Nachricht wurde nicht versandt, da du kein \"Mitspracherecht\" hast","message_not_send_not-acceptable":"Deine Nachricht wurde nicht versandt, da du kein Mitglied dieser Gruppe bist","This_room_has_been_closed":"Diese Gruppe wurde geschlossen","Room_logging_is_enabled":"Gesprächsverlauf kann öffentlich einsehbar sein","A_password_is_required":"Es wird ein Passwort benötigt","You_are_not_on_the_member_list":"Du bist kein eingetragenes Mitglied","You_are_banned_from_this_room":"Du wurdest von dieser Gruppe ausgeschlossen","Your_desired_nickname_":"Dein gewünschter Nickname wird bereits verwendet. Bitte wähle einen anderen.","The_maximum_number_":"Die maximale Anzahl der Mitglieder wurde erreicht.","This_room_is_locked_":"Diese Gruppe ist gesperrt","You_are_not_allowed_to_create_":"Du darfst keine neue Gruppe erstellen","Carbon_copy":null,"Enable":"Aktivieren"}},"el":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null,"Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}},"en":{"translation":{"Logging_in":"Logging in…","your_connection_is_unencrypted":"Your connection is unencrypted.","your_connection_is_encrypted":"Your connection is encrypted.","your_buddy_closed_the_private_connection":"Your contact closed the private connection.","start_private":"Start private","close_private":"Close private","your_buddy_is_verificated":"Your contact is verified.","you_have_only_a_subscription_in_one_way":"You only have a one-way subscription.","authentication_query_sent":"Authentication query sent.","your_message_wasnt_send_please_end_your_private_conversation":"Your message was not sent. Please end your private conversation.","unencrypted_message_received":"Unencrypted message received","your_message_wasnt_send_because_you_have_no_valid_subscription":"Your message was not sent because you have no valid subscription.","not_available":"Not available","no_connection":"No connection!","relogin":"relogin","trying_to_start_private_conversation":"Trying to start private conversation!","Verified":"Verified","Unverified":"Unverified","private_conversation_started":"Private conversation started.","private_conversation_aborted":"Private conversation aborted!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Your contact closed the private conversation! You should do the same.","conversation_is_now_verified":"Conversation is now verified.","authentication_failed":"Authentication failed.","your_buddy_is_attempting_to_determine_":"You contact is attempting to determine if they are really talking to you.","to_authenticate_to_your_buddy":"To authenticate to your contact, ","enter_the_answer_and_click_answer":"enter the answer and click Answer.","enter_the_secret":"enter the secret.","Creating_your_private_key_":"Creating your private key; this may take a while.","Authenticating_a_buddy_helps_":"Authenticating a contact helps ensure that the person you are talking to is really the one they claim to be.","How_do_you_want_to_authenticate_your_buddy":"How do you want to authenticate {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Select method...","Manual":"Manual","Question":"Question","Secret":"Secret","To_verify_the_fingerprint_":"To verify the fingerprint, contact your contact via some other trustworthy channel, such as the telephone.","Your_fingerprint":"Your fingerprint","Buddy_fingerprint":"Contact fingerprint","Close":"Close","Compared":"Compared","To_authenticate_using_a_question_":"To authenticate using a question, pick a question whose answer is known only you and your contact.","Ask":"Ask","To_authenticate_pick_a_secret_":"To authenticate, pick a secret known only to you and your contact.","Compare":"Compare","Fingerprints":"Fingerprints","Authentication":"Authentication","Message":"Message","Add_buddy":"Add contact","rename_buddy":"rename contact","delete_buddy":"delete contact","Login":"Login","Username":"Username","Password":"Password","Cancel":"Cancel","Connect":"Connect","Type_in_the_full_username_":"Type in the full username and an optional alias.","Alias":"Alias","Add":"Add","Subscription_request":"Subscription request","You_have_a_request_from":"You have a request from","Deny":"Deny","Approve":"Approve","Remove_buddy":"Remove contact","You_are_about_to_remove_":"You are about to remove {{bid_name}} (<b>{{bid_jid}}</b>) from your contact list. All related chats will be closed.","Continue_without_chat":"Continue without chat","Please_wait":"Please wait","Login_failed":"Chat login failed","Sorry_we_cant_authentikate_":"Authentication failed with the chat server. Maybe the password is wrong?","Retry":"Back","clear_history":"Clear history","New_message_from":"New message from","Should_we_notify_you_":"Should we notify you about new messages in the future?","Please_accept_":"Please click the \"Allow\" button at the top.","Hide_offline":"Hide offline contacts","Show_offline":"Show offline contacts","About":"About","dnd":"Do Not Disturb","Mute":"Mute","Unmute":"Unmute","Subscription":"Subscription","both":"both","Status":"Status","online":"online","chat":"chat","away":"away","xa":"extended away","offline":"offline","none":"none","Unknown_instance_tag":"Unknown instance tag.","Not_one_of_our_latest_keys":"Not one of our latest keys.","Received_an_unreadable_encrypted_message":"Received an unreadable encrypted message.","Online":"Online","Chatty":"Chatty","Away":"Away","Extended_away":"Extended away","Offline":"Offline","Friendship_request":"Contact request","Confirm":"Confirm","Dismiss":"Dismiss","Remove":"Remove","Online_help":"Online help","FN":"Full name","N":" ","FAMILY":"Family name","GIVEN":"Given name","NICKNAME":"Nickname","URL":"URL","ADR":"Address","STREET":"Street Address","EXTADD":"Extended Address","LOCALITY":"Locality","REGION":"Region","PCODE":"Postal Code","CTRY":"Country","TEL":"Telephone","NUMBER":"Number","EMAIL":"Email","USERID":" ","ORG":"Organization","ORGNAME":"Name","ORGUNIT":"Unit","TITLE":"Job title","ROLE":"Role","BDAY":"Birthday","DESC":"Description","PHOTO":" ","send_message":"Send message","get_info":"Show information","Settings":"Settings","Priority":"Priority","Save":"Save","User_settings":"User settings","A_fingerprint_":"A fingerprint is used to make sure that the person you are talking to is who he or she is saying.","Your_roster_is_empty_add_a":"Your roster is empty, add a ","new_buddy":"new contact","is":"is","Login_options":"Login options","BOSH_url":"BOSH URL","Domain":"Domain","Resource":"Resource","On_login":"On login","Received_an_unencrypted_message":"Received an unencrypted message","Sorry_your_buddy_doesnt_provide_any_information":"Sorry, your contact does not provide any information.","Info_about":"Info about","Authentication_aborted":"Authentication aborted.","Authentication_request_received":"Authentication request received.","Do_you_want_to_display_them":"Do you want to display them?","Log_in_without_chat":"Log in without chat","has_come_online":"has come online","Unknown_sender":"Unknown sender","You_received_a_message_from_an_unknown_sender":"You received a message from an unknown sender","Please_allow_access_to_microphone_and_camera":"Please click the \"Allow\" button at the top, to allow access to microphone and camera.","Incoming_call":"Incoming call","from":"from","Do_you_want_to_accept_the_call_from":"Do you want to accept the call from","Reject":"Reject","Accept":"Accept","hang_up":"hang up","snapshot":"snapshot","mute_my_audio":"mute my audio","pause_my_video":"pause my video","fullscreen":"fullscreen","Info":"Info","Local_IP":"Local IP","Remote_IP":"Remote IP","Local_Fingerprint":"Local fingerprint","Remote_Fingerprint":"Remote fingerprint","Video_call_not_possible":"Video call not possible. Your contact does not support video calls.","Start_video_call":"Start video call","Join_chat":"Join chat","Join":"Join","Room":"Room","Nickname":"Nickname","left_the_building":"__nickname__ left the building","entered_the_room":"__nickname__ entered the room","is_now_known_as":"__oldNickname__ is now known as __newNickname__","This_room_is":"This room is","muc_hidden":{"keyword":"hidden","description":"can not be found through search"},"muc_membersonly":{"keyword":"members-only","description":"you need to be on the member list"},"muc_moderated":{"keyword":"moderated","description":"only persons with \"voice\" are allowed to send messages"},"muc_nonanonymous":{"keyword":"non-anonymous","description":"your jabber id is exposed to all other occupants"},"muc_open":{"keyword":"open","description":"everyone is allowed to join"},"muc_passwordprotected":{"keyword":"password-protected","description":"you need to provide the correct password"},"muc_persistent":{"keyword":"persistent","description":"will not be destroyed if the last occupant left"},"muc_public":{"keyword":"public","description":"can be found through search"},"muc_semianonymous":{"keyword":"semi-anonymous","description":"your jabber id is only exposed to room admins"},"muc_temporary":{"keyword":"temporary","description":"will be destroyed if the last occupant left"},"muc_unmoderated":{"keyword":"unmoderated","description":"everyone is allowed to send messages"},"muc_unsecured":{"keyword":"unsecured","description":"you need no password to enter"},"Continue":"Continue","Server":"Server","Rooms_are_loaded":"Rooms are loaded","Could_load_only":"Could load only __count__ rooms for autocomplete","muc_explanation":"Please enter room name and optional a nickname and password to join a chat","You_already_joined_this_room":"You already joined this room","This_room_will_be_closed":"This room will be closed","Room_not_found_":"A new room will be created","Loading_room_information":"Loading room information","Destroy":"Destroy","Leave":"Leave","changed_subject_to":"__nickname__ changed the room subject to \"__subject__\"","muc_removed_kicked":"You have been kicked from the room","muc_removed_info_kicked":"__nickname__ has been kicked from the room","muc_removed_banned":"You have been banned from the room","muc_removed_info_banned":"__nickname__ has been banned from the room","muc_removed_affiliation":"You have been removed from the room, because of an affiliation change","muc_removed_info_affiliation":"__nickname__ has been removed from the room, because of an affiliation change","muc_removed_membersonly":"You have been removed from the room, because the room has been changed to members-only and you are no member","muc_removed_info_membersonly":"__nickname__ has been removed from the room, because the room has been changed to members-only and you are no member","muc_removed_shutdown":"You have been removed from the room, because the MUC service is being shut down","Reason":"Reason","message_not_send":"Your message was not send because of an error","message_not_send_item-not-found":"Your message was not send because this room does not exist","message_not_send_forbidden":"Your message was not send because you have no voice in this room","message_not_send_not-acceptable":"Your message was not send because you are no occupant of this room","This_room_has_been_closed":"This room has been closed","Room_logging_is_enabled":"Room logging is enabled","A_password_is_required":"A password is required","You_are_not_on_the_member_list":"You are not on the member list","You_are_banned_from_this_room":"You are banned from this room","Your_desired_nickname_":"Your desired nickname is already in use. Please choose another","The_maximum_number_":"The maximum number of user is reached in this room","This_room_is_locked_":"This room is locked","You_are_not_allowed_to_create_":"You are not allowed to create a room","Carbon_copy":"Carbon copy","Enable":"Enable"}},"es":{"translation":{"Logging_in":"Por favor, espere...","your_connection_is_unencrypted":"Su conexión no está cifrada.","your_connection_is_encrypted":"Su conexión está cifrada.","your_buddy_closed_the_private_connection":"Su amigo ha cerrado la conexión privada.","start_private":"Iniciar privado","close_private":"Cerrar privado","your_buddy_is_verificated":"Tu amigo está verificado.","you_have_only_a_subscription_in_one_way":"Sólo tienes una suscripción de un modo.","authentication_query_sent":"Consulta de verificación enviada.","your_message_wasnt_send_please_end_your_private_conversation":"Su mensaje no fue enviado. Por favor, termine su conversación privada.","unencrypted_message_received":"Mensaje no cifrado recibido:","your_message_wasnt_send_because_you_have_no_valid_subscription":"Su mensaje no se ha enviado, porque usted no tiene suscripción válida.","not_available":"No disponible","no_connection":"Sin conexión!","relogin":"iniciar sesión nuevamente","trying_to_start_private_conversation":"Intentando iniciar una conversación privada!","Verified":"Verificado","Unverified":"No verificado","private_conversation_started":"se inició una conversación privada.","private_conversation_aborted":"Conversación privada abortada!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Su amigo cerró la conversación privada! Usted debería hacer lo mismo.","conversation_is_now_verified":"La conversación es ahora verificada.","authentication_failed":"Fallo la verificación.","your_buddy_is_attempting_to_determine_":"Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.","to_authenticate_to_your_buddy":"Para autenticar a su amigo, ","enter_the_answer_and_click_answer":"introduce la respuesta y haga clic en Contestar.","enter_the_secret":"especifique el secreto.","Creating_your_private_key_":"Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.","Authenticating_a_buddy_helps_":"Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.","How_do_you_want_to_authenticate_your_buddy":"¿Cómo desea autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Escoja un método...","Manual":"Manual","Question":"Pregunta","Secret":"Secreto","To_verify_the_fingerprint_":"Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.","Your_fingerprint":"Tu firma digital","Buddy_fingerprint":"firma digital de tu amigo","Close":"Cerrar","Compared":"Comparado","To_authenticate_using_a_question_":"Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.","Ask":"Preguntar","To_authenticate_pick_a_secret_":"Para autenticar, elija un secreto conocido sólo por usted y su amigo.","Compare":"Comparar","Fingerprints":"Firmas digitales","Authentication":"Autenticación","Message":"Mensaje","Add_buddy":"Añadir amigo","rename_buddy":"renombrar amigo","delete_buddy":"eliminar amigo","Login":"Iniciar Sesión","Username":"Usuario","Password":"Contraseña","Cancel":"Cancelar","Connect":"Conectar","Type_in_the_full_username_":"Escriba el usuario completo y un alias opcional.","Alias":"Alias","Add":"Añadir","Subscription_request":"Solicitud de suscripción","You_have_a_request_from":"Tienes una petición de","Deny":"Rechazar","Approve":"Aprobar","Remove_buddy":"Eliminar amigo","You_are_about_to_remove_":"Vas a eliminar a {{bid_name}} (<b>{{bid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.","Continue_without_chat":"Continuar","Please_wait":"Espere por favor","Login_failed":"Fallo el inicio de sesión","Sorry_we_cant_authentikate_":"Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?","Retry":"Reintentar","clear_history":"Borrar el historial","New_message_from":"Nuevo mensaje de","Should_we_notify_you_":"¿Debemos notificarle sobre nuevos mensajes en el futuro?","Please_accept_":"Por favor, haga clic en el botón \"Permitir\" en la parte superior.","Hide_offline":"Ocultar contactos desconectados","Show_offline":"Mostrar contactos desconectados","About":"Acerca de","dnd":"No Molestar","Mute":"Desactivar sonido","Unmute":"Activar sonido","Subscription":"Suscripción","both":"ambos","Status":"Estado","online":"en línea","chat":"chat","away":"ausente","xa":"mas ausente","offline":"desconectado","none":"nadie","Unknown_instance_tag":"Etiqueta de instancia desconocida.","Not_one_of_our_latest_keys":"No de nuestra ultima tecla.","Received_an_unreadable_encrypted_message":"Se recibió un mensaje cifrado ilegible.","Online":"En linea","Chatty":"Hablador","Away":"Ausente","Extended_away":"Mas ausente","Offline":"Desconectado","Friendship_request":"Solicitud de amistad","Confirm":"Confirmar","Dismiss":"Rechazar","Remove":"Eliminar","Online_help":"Ayuda en línea","FN":"Nombre completo ","N":" ","FAMILY":"Apellido","GIVEN":"Nombre","NICKNAME":"Apodar","URL":"URL","ADR":"Dirección","STREET":"Calle","EXTADD":"Extendido dirección","LOCALITY":"Población","REGION":"Región","PCODE":"Código postal","CTRY":"País","TEL":"Teléfono","NUMBER":"Número","EMAIL":"Emilio","USERID":" ","ORG":"Organización","ORGNAME":"Nombre","ORGUNIT":"Departamento","TITLE":"Título","ROLE":"Rol","BDAY":"Cumpleaños","DESC":"Descripción","PHOTO":" ","send_message":"mandar un texto","get_info":"obtener información","Settings":"Ajustes","Priority":"Prioridad","Save":"Guardar","User_settings":"Configuración de usuario","A_fingerprint_":"La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser","Your_roster_is_empty_add_a":"Tu lista de amigos esta vacia","new_buddy":"Nuevo amigo","is":"es","Login_options":"Opciones de login","BOSH_url":"BOSH url","Domain":"Dominio","Resource":"Recurso","On_login":"Iniciar sesión","Received_an_unencrypted_message":"Recibe un mensaje no cifrado","Sorry_your_buddy_doesnt_provide_any_information":"Lo sentimos, su amigo no provee ninguna información.","Info_about":"Info acerca de","Authentication_aborted":"Autenticación abortada","Authentication_request_received":"Pedido de autenticación recibido.","Do_you_want_to_display_them":"¿Quiere mostrarlos?","Log_in_without_chat":"Ingresar sin chat","has_come_online":"se ha conectado","Unknown_sender":"Remitente desconocido","You_received_a_message_from_an_unknown_sender":"Ha recibido un mensaje de un remitente desconocido","Please_allow_access_to_microphone_and_camera":"Por favor, permitir el acceso al micrófono y la cámara.","Incoming_call":"Llamada entrante","from":"de","Do_you_want_to_accept_the_call_from":"Desea aceptar la llamada de","Reject":"Rechazar","Accept":"Aceptar","hang_up":"colgar","snapshot":"instantánea","mute_my_audio":"silenciar mi audio","pause_my_video":"pausar mi vídeo","fullscreen":"pantalla completa","Info":"Info","Local_IP":"IP local","Remote_IP":"IP remota","Local_Fingerprint":"Firma digital local","Remote_Fingerprint":"Firma digital remota","Video_call_not_possible":"Llamada de vídeo no es posible","Start_video_call":"Iniciar llamada de vídeo","Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":"Activar"}},"fr":{"translation":{"Logging_in":"Connexion...","your_connection_is_unencrypted":"Connexion non chiffrée.","your_connection_is_encrypted":"Connexion chiffrée.","your_buddy_closed_the_private_connection":"Votre ami a fermé la connexion privée.","start_private":"Démarrer une conversation privé","close_private":"Clôturer une conversation privée","your_buddy_is_verificated":"Votre contact est vérifié.","you_have_only_a_subscription_in_one_way":"Vous ne pouvez souscrire qu'une fois.","authentication_query_sent":"Requête d’authentification envoyée.","your_message_wasnt_send_please_end_your_private_conversation":"Votre message n'a pas été envoyé. Veuillez terminer votre conversation privée.","unencrypted_message_received":"Message non chiffré reçu","your_message_wasnt_send_because_you_have_no_valid_subscription":"Votre message n'a pas été envoyé car votre abonnement n'est pas valide.","not_available":"Pas disponible","no_connection":"Pas de connexion !","relogin":"Re-connexion","trying_to_start_private_conversation":"Essai de démarrage d'une conversation privée !","Verified":"Vérifié","Unverified":"Non vérifié","private_conversation_started":"Conversation privé démarrée.","private_conversation_aborted":"Conversation privée interrompue !","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Votre ami a fermé la conversation privée ! Vous devriez faire de même.","conversation_is_now_verified":"La conversation est maintenant vérifiée.","authentication_failed":"L'authentification a échoué.","your_buddy_is_attempting_to_determine_":"Votre ami tente de déterminer si il ou elle parle vraiment à vous.","to_authenticate_to_your_buddy":"Vous authentifier à votre ami, ","enter_the_answer_and_click_answer":"Saisissez une réponse et cliquer sur Répondre.","enter_the_secret":"Entrez le mot secret","Creating_your_private_key_":"Création de votre clé privée; cela peut prendre un moment.","Authenticating_a_buddy_helps_":"L'authentification d'un ami permet de s'assurer que la personne à qui vous parlez est vraiment celui qu'il ou elle prétend être.","How_do_you_want_to_authenticate_your_buddy":"Comment voulez-vous vous authentifier {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Sélection de la méthode...","Manual":"Manuel","Question":"Question","Secret":"Sécurité","To_verify_the_fingerprint_":"Pour vérifier l'empreinte, contactez votre ami via un autre canal digne de confiance, tel que le téléphone.","Your_fingerprint":"Votre empreinte","Buddy_fingerprint":"Empreinte de l'ami","Close":"Fermer","Compared":"Comparé","To_authenticate_using_a_question_":"Pour s'authentifier à l'aide d'une question, choisissez une question dont la réponse n'est connue que vous et de votre ami.","Ask":"Demander","To_authenticate_pick_a_secret_":"Pour vous authentifier, choisissez un secret connu seulement de vous et de votre ami.","Compare":"Comparer","Fingerprints":"Empreintes","Authentication":"Authentification","Message":"Message","Add_buddy":"Ajouter comme ami","rename_buddy":"Renommer l'ami","delete_buddy":"Supprimer l'ami","Login":"Connexion","Username":"Nom d'utilisateur","Password":"Mot de passe","Cancel":"Annuler","Connect":"Connecter","Type_in_the_full_username_":"Tapez un nom d'utilisateur complet et un alias(optionnel).","Alias":"Alias","Add":"Ajouter","Subscription_request":"Demande d'abonnement","You_have_a_request_from":"Vous avez une requête de ","Deny":"Refuser","Approve":"Approuver","Remove_buddy":"Supprimer l'ami","You_are_about_to_remove_":"Vous allez retirer {{bid_name}} (<b>{{bid_jid}}</b>) de votre liste d'amis. Toutes les fenêtres de chat en lien avec celui-ci seront fermées.","Continue_without_chat":"Continuer sans tchat","Please_wait":"Merci de patienter","Login_failed":"Authentification échouée","Sorry_we_cant_authentikate_":"La connexion avec le serveur de tchat a échoué. Vérifiez le mot de passe.","Retry":"Retour","clear_history":"Effacer l’historique","New_message_from":"Nouveau message de","Should_we_notify_you_":"Dans le futur, devrons-nous vous notifier les nouveaux messages ?","Please_accept_":"Merci de cliquer sur le bouton \"autoriser\" en haut de page","Hide_offline":"Masquer les contacts non connectés","Show_offline":"Afficher les contacts non connectés","About":"À propos","dnd":"Ne pas déranger","Mute":"Muet","Unmute":"Son actif","Subscription":"Abonnement","both":"Les deux","Status":"Status","online":"En ligne","chat":"tchat","away":"Absent","xa":"Options étendues","offline":"Hors ligne","none":"Aucun","Unknown_instance_tag":"Tag inconnu","Not_one_of_our_latest_keys":"Ce n'est pas l'une des dernières touches","Received_an_unreadable_encrypted_message":"Message chiffré non lisible","Online":"En ligne","Chatty":"tchatty","Away":"Absent","Extended_away":"Options étendues","Offline":"Hors ligne","Friendship_request":"Demande d'amitié","Confirm":"Valider","Dismiss":"Rejeter","Remove":"Supprimer","Online_help":"Aide en ligne","FN":"Nom","N":" N ","FAMILY":"Nom de famille","GIVEN":"prénom","NICKNAME":"Surnom","URL":"URL","ADR":"Adresse","STREET":"Rue","EXTADD":"Adresse (suite)","LOCALITY":"Localité","REGION":"Région","PCODE":"Code Postal","CTRY":"Pays","TEL":"Téléphone","NUMBER":"Numéro","EMAIL":"Courriel","USERID":" USERID ","ORG":"Organisation","ORGNAME":"Nom","ORGUNIT":"Unité","TITLE":"Qualité:","ROLE":"Rôle","BDAY":"Date de naissance","DESC":"Description","PHOTO":"Photo","send_message":"Envoyer le message","get_info":"Montrer les informations","Settings":"Réglages","Priority":"Priorité","Save":"Enregistrer","User_settings":"Paramètres utilisateur","A_fingerprint_":"Une empreinte est utilisée pour s'assurer de l'identité de la personne à qui vous parlez","Your_roster_is_empty_add_a":"Votre liste est vide, ajouter ","new_buddy":"Nouvel ami","is":"est","Login_options":"Options d'identification","BOSH_url":"URL BOSH","Domain":"Domaine","Resource":"Ressource","On_login":"Après authentification","Received_an_unencrypted_message":"Reçu un message non chiffré","Sorry_your_buddy_doesnt_provide_any_information":"Désolé, votre ami n'a pas fourni d'informations","Info_about":"A propos de","Authentication_aborted":"Authentification interrompue.","Authentication_request_received":"Requête d'authentification reçue.","Do_you_want_to_display_them":"Voulez-vous les afficher ?","Log_in_without_chat":"S'identifier sans tchat","has_come_online":"vient d'arriver","Unknown_sender":"Expéditeur inconnu","You_received_a_message_from_an_unknown_sender":"Vous avez reçu un message d'un expéditeur inconnu","Please_allow_access_to_microphone_and_camera":"Veuillez cliquez sur le bouton \"Autoriser\" en haut, pour permettre l'accès au micro et à la caméra.","Incoming_call":"Appel entrant","from":"de","Do_you_want_to_accept_the_call_from":"Voulez-vous accepter l'appel de","Reject":"Rejeté","Accept":"Accepté","hang_up":"Décrochez","snapshot":"Capture d’écran","mute_my_audio":"Couper l'audio","pause_my_video":"Mettre ma vidéo en pause","fullscreen":"Plein écran","Info":"Info","Local_IP":"IP locale","Remote_IP":"IP distante","Local_Fingerprint":"Empreinte locale","Remote_Fingerprint":"Empreinte distante","Video_call_not_possible":"L'appel vidéo n'est possible. Votre ami ne supporte pas les appels vidéo.","Start_video_call":"Démarrer l'appel vidéo","Join_chat":"Joindre la discution","Join":"Joindre","Room":"Salon","Nickname":"Surnom","left_the_building":"__nickname__ a quitté l'immeuble","entered_the_room":"__nickname__ entre dans le salon","is_now_known_as":null,"This_room_is":"Ce salon est","muc_hidden":{"keyword":"caché","description":null},"muc_membersonly":{"keyword":"pour les membres seulement","description":"Vous devez être sur la liste des membres"},"muc_moderated":{"keyword":"modéré","description":"Seulement les personnes avec la \"voix\" sont autorisés à envoyer des messages"},"muc_nonanonymous":{"keyword":"non anonyme","description":"Votre identifiant Jabber est visible de tous les autres occupants"},"muc_open":{"keyword":"ouvert","description":"Tout le monde est autorisé à se connecter"},"muc_passwordprotected":{"keyword":"protégé par un mot de passe","description":"Vous devez fournir un mot de passe correct"},"muc_persistent":{"keyword":"persistent","description":null},"muc_public":{"keyword":"public","description":null},"muc_semianonymous":{"keyword":"semi-anonyme","description":"Votre identifiant Jabber est seulement visible aux administrateurs de ce salon"},"muc_temporary":{"keyword":"temporaire","description":"sera détruit au départ de son dernier occupant"},"muc_unmoderated":{"keyword":"non modéré","description":"Tout le monde est autorisé à envoyer des messages"},"muc_unsecured":{"keyword":"non sécurisé","description":"un mot de passe n'est pas nécessaire pour entrer"},"Continue":"Continuer","Server":"Serveur","Rooms_are_loaded":"Les salons sont chargés","Could_load_only":null,"muc_explanation":"Veuillez saisir le nom du salon, un surnom (optionnel) et un mot de passe pour joindre la conversation","You_already_joined_this_room":"Vous avez déjà rejoins ce salon","This_room_will_be_closed":"Ce salon va être fermé","Room_not_found_":"Un nouveau salon va être créé","Loading_room_information":"Chargement des informations du salon","Destroy":"Détruire","Leave":"Quitter","changed_subject_to":"__nickname__ a changé le sujet du salon à \"__subject__\"","muc_removed_kicked":"Vous avez été éjecté de ce salon","muc_removed_info_kicked":"__nickname__ a été éjecté de ce salon","muc_removed_banned":"Vous avez été banni de ce salon","muc_removed_info_banned":"__nickname__ a été banni de ce salon","muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":"Raison","message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":"Votre message n'a pas été envoyé car il n'y a personne dans ce salon","This_room_has_been_closed":"Ce salon a été fermé","Room_logging_is_enabled":null,"A_password_is_required":"Un mot de passe est requis","You_are_not_on_the_member_list":"Vous n'êtes pas sur la liste des membres","You_are_banned_from_this_room":"Vous avez été banni de ce salon","Your_desired_nickname_":"Votre Surnom souhaité est déjà utilisé.Veuillez en choisir un autre","The_maximum_number_":"Le nombre maximum d'utilisateur est atteint dans ce salon","This_room_is_locked_":"Ce salon est vérouillé","You_are_not_allowed_to_create_":"Vous n'êtes pas autorisé à créer un salon","Carbon_copy":null,"Enable":null}},"it":{"translation":{"Logging_in":"login…","your_connection_is_unencrypted":"La sua connessione è non cifrata.","your_connection_is_encrypted":"La sua connessione è cifrata.","your_buddy_closed_the_private_connection":"La sua connessione privata è stato chiuso dal suo compagno.","start_private":"Inizia privata","close_private":"Chiude privata","your_buddy_is_verificated":"Il tuo compagno è stato verificato","you_have_only_a_subscription_in_one_way":"Hai solo una one-way inscrizione.","authentication_query_sent":"Domanda d'autenticità inviata.","your_message_wasnt_send_please_end_your_private_conversation":"Il tuo messaggio non è stato inviato. Si prega di finire la sua conversazione privata.","unencrypted_message_received":"Messaggio non cifrato ricevuto","your_message_wasnt_send_because_you_have_no_valid_subscription":"Il tuo messaggio non è stato inviato perché non hai una sottoscrizione valida.","not_available":"non disponibile","no_connection":"nessun collegamento!","relogin":"nuovo login","trying_to_start_private_conversation":"Cercando di avviare una conversazione privata!","Verified":"verificato","Unverified":"non verificato","private_conversation_started":"Conversazione privata iniziato.","private_conversation_aborted":"Conversazione privata abortito!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Il tuo compagno ha chiuso la conversazione privata! Si dovrebbe fare lo stesso.","conversation_is_now_verified":"Conversazione è ora verificato.","authentication_failed":"autenticazione fallita.","your_buddy_is_attempting_to_determine_":"Il tuo compagno sta cercando di determinare se lui o lei sta davvero parlando con te.","to_authenticate_to_your_buddy":"Per autenticare a il tuo compagno. ","enter_the_answer_and_click_answer":"inserisci la risposta e fare click su risposta.","enter_the_secret":"inserire il segreto.","Creating_your_private_key_":"Creare la propria chiave privata; questo potrebbe richiedere un po'.","Authenticating_a_buddy_helps_":"Autenticazione un compagno aiuta a garantire che la persona si sta parlando è davvero quello che lui o lei sostiene di essere.","How_do_you_want_to_authenticate_your_buddy":"Come si desidera autenticare {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Seleziona metodo ..","Manual":"manuale","Question":"domanda","Secret":"segreto","To_verify_the_fingerprint_":"Per verificare l'impronta digitale, contattare il proprio compagno attraverso qualche altro canale affidabile, come il telefono.","Your_fingerprint":"il tuo impronta digitale","Buddy_fingerprint":"impronta digitale da compagno","Close":"chiude","Compared":"comparato","To_authenticate_using_a_question_":"Per autenticare tramite una questione, scegli una questione la cui risposta è nota solo voi e il tuo compagno","Ask":"chiedi","To_authenticate_pick_a_secret_":"Per autenticare, scegli un segreto noto solo a te e il tuo compagno.","Compare":"Comparare","Fingerprints":"Impronta digitale","Authentication":"Autenticazione","Message":"Messagio","Add_buddy":"Aggiungi un compagno","rename_buddy":"rinomina compagno","delete_buddy":"elimina compagno","Login":"Login","Username":"Identificazione dell'utente","Password":"Password","Cancel":"Cancella","Connect":"Collega","Type_in_the_full_username_":"Digita l'identificazione utente completo e un alias opzionale.","Alias":"Alias","Add":"Aggiungi","Subscription_request":"Rrichiesta di sottoscrizione","You_have_a_request_from":"Hai una richiesta da","Deny":"Refiuta","Approve":"Approva","Remove_buddy":"Rimuova il compagno","You_are_about_to_remove_":"Stai rimovendo {{bid_name}} (<b>{{bid_jid}}</b>) del suo lista di compagni. Tutte le chat appartenente saranno chiuse.","Continue_without_chat":"Continua senza chat","Please_wait":"Si prega d'attendere","Login_failed":"Chat login è fallito","Sorry_we_cant_authentikate_":"Autenticazione non riuscita con il server di chat. Forse la password è sbagliata?","Retry":"Indietro","clear_history":"Cancella la cronologia","New_message_from":"Nuovo messaggio da","Should_we_notify_you_":"Vuoi ricevere una notifica di nuovi messaggi in futuro?","Please_accept_":"Si prega di fare clic sul bottone \"Autorizzazione\" sopra.","Hide_offline":"Nascondere i contatti non in linea","Show_offline":"Mostra i contatti non in linea","About":"Informazione legale","dnd":"Non disturbare","Mute":"Muto attivo","Unmute":"Muto inattivo","Subscription":"Sottoscrizione","both":"etrambi","Status":"Status","online":"In linea","chat":"chat","away":"via","xa":"via estensivo","offline":"non in linea","none":"nessuno","Unknown_instance_tag":"Instance tag sconosciuta.","Not_one_of_our_latest_keys":"Non è una delle nostre ultime chiavi.","Received_an_unreadable_encrypted_message":"Ricevuto un messaggio crittografato illeggibile.","Online":"In linea","Chatty":"Chiacchierino","Away":"Via","Extended_away":"Via estensivo","Offline":"Non in linea","Friendship_request":"Amicizia richiesto","Confirm":"Conferma","Dismiss":"Rifiuta","Remove":"Rimuovi","Online_help":"Guida in linea","FN":"Nome e cognome","N":null,"FAMILY":"Cognome","GIVEN":"Nome","NICKNAME":"Soprannome","URL":"URL","ADR":"Indirizzo","STREET":"Via","EXTADD":"Esteso Indirizzo","LOCALITY":"Località","REGION":"Regione","PCODE":"Codice Postale","CTRY":"Paese","TEL":"Telefono","NUMBER":"Numero","EMAIL":"E-mail","USERID":null,"ORG":"Organizzazione","ORGNAME":"Nome","ORGUNIT":"Unità","TITLE":"Titolo di lavoro","ROLE":"Funzione","BDAY":"Compleanno","DESC":"Descrizione","PHOTO":null,"send_message":"Messagio inviato","get_info":"Mostra informazioni","Settings":"Impostazione","Priority":"Priorità","Save":"Salva","User_settings":"Impostazione dell'utente","A_fingerprint_":"Una impronta digitale è usato per assicurarsi che la persona con cui stai parlando è lui o lei che sta dicendo.","Your_roster_is_empty_add_a":"Il suo elenco è vuoto, aggiungi un ","new_buddy":"compagno nuovo","is":"è","Login_options":"Opzioni di login","BOSH_url":"BOSH URL","Domain":"Domain","Resource":"Risorsa","On_login":"Login on","Received_an_unencrypted_message":"Ricevuto un messaggio non crittografato","Sorry_your_buddy_doesnt_provide_any_information":"Spiace, il tuo compagno non fornisce alcuna informazione.","Info_about":"Informazioni","Authentication_aborted":"Autenticazione interrotta","Authentication_request_received":"Richiesta di autenticazione ricevuto.","Do_you_want_to_display_them":"Vuoi che venga visualizzato?","Log_in_without_chat":"Log in senza chat","has_come_online":"È venuto in linea","Unknown_sender":"Mittente sconosciuto","You_received_a_message_from_an_unknown_sender":"Hai ricevuto un messaggio da un mittente sconosciuto","Please_allow_access_to_microphone_and_camera":"Si prega di fare clic sul bottone \"Autorizzazione\" sopra per autorizzazione del l'accesso al microfono e fotocamera.","Incoming_call":"Chiamata in arrivo","from":"di","Do_you_want_to_accept_the_call_from":"Vuoi accettare la chiamata di","Reject":"Rifiuta","Accept":"Accetta","hang_up":"Riattacca","snapshot":"istantanea","mute_my_audio":"disattiva il mio audio","pause_my_video":"pausa il mio audio","fullscreen":"schermo intero","Info":"Informazione","Local_IP":"IP locale","Remote_IP":"IP remoto","Local_Fingerprint":"Impronta digitale locale","Remote_Fingerprint":"Impronta digitale remoto","Video_call_not_possible":"Videochiamata non è possibile. Il tuo compagno non può effettuare videochiamate.","Start_video_call":"Inizia videochiamata","Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}},"nds":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null,"Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}},"pl":{"translation":{"Logging_in":"Logowanie...","your_connection_is_unencrypted":"Twoje połączenie nie jest szyfrowane.","your_connection_is_encrypted":"Twoje połączenie jest szyfrowane.","your_buddy_closed_the_private_connection":"Twój rozmówca zamknął połączenie.","start_private":"Rozpocznij rozmowę.","close_private":"Zakończ rozmowę.","your_buddy_is_verificated":"Twój rozmówca został zweryfikowany.","you_have_only_a_subscription_in_one_way":"Masz jednostronną subskrypcję.","authentication_query_sent":"Wysłano proźbę o autentykację.","your_message_wasnt_send_please_end_your_private_conversation":"Twoja wiadomość nie została wysłana. Proszę, zamknij rozmowę.","unencrypted_message_received":"Zwrotna niezaszyfrowana wiadomość.","your_message_wasnt_send_because_you_have_no_valid_subscription":"Wiadomość nie została wysłana ponieważ nie posiadasz subskrybcji u rozmówcy.","not_available":"Niedostępny.","no_connection":"Brak połączenia!","relogin":"Połącz ponownie","trying_to_start_private_conversation":"Rozpocznij rozmowę!","Verified":"Zweryfikowano","Unverified":"Niezweryfikowano","private_conversation_started":"Rozmowa prywatna rozpoczęta.","private_conversation_aborted":"Anulowano rozmowę!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Rozmówca przerwał połączenie!","conversation_is_now_verified":"Zweryfikowano połączenie.","authentication_failed":"Weryfikacja się nie powiodła.","your_buddy_is_attempting_to_determine_":"Twój rozmówca próbuje się z Tobą połączyć.","to_authenticate_to_your_buddy":"Autoryzacja z rozmówcą, ","enter_the_answer_and_click_answer":"napisz odpowiedź.","enter_the_secret":"wpisz hasło.","Creating_your_private_key_":"Tworzenie klucza prywatnego; może to chwilę potrwać","Authenticating_a_buddy_helps_":"Autoryzacja pomoże w ustaleniu faktycznej tożsamości rozmówcy ;).","How_do_you_want_to_authenticate_your_buddy":"Jakiej autoryzacji chcesz użyć {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Wybierz sposób...","Manual":"Ręcznie","Question":"Pytanie","Secret":"Hasło","To_verify_the_fingerprint_":"Aby zweryfikować kod najpierw skontaktuj się z rozmówcą np. za pomocą telefonu.","Your_fingerprint":"Twój kod:","Buddy_fingerprint":"Kod rozmówcy","Close":"Zamknij","Compared":"Porównano","To_authenticate_using_a_question_":"Aby autoryzować za pomocą pytania, wybierz pytanie na które tylko Twój rozmówca zna odpowiedź.","Ask":"Zadaj pytanie","To_authenticate_pick_a_secret_":"Aby autoryzować za pomocą hasła, wybierz hasło na które zna tylko Twój rozmówca.","Compare":"Dopasuj","Fingerprints":"Kody autoryzacyjne","Authentication":"Autoryzacja","Message":"Wiadomość","Add_buddy":"Dodaj kontakt","rename_buddy":"Zmień nazwę","delete_buddy":"Usuń kontakt","Login":"Login","Username":"Nazwa Użytkownika","Password":"Hasło","Cancel":"Anuluj","Connect":"Połączenie","Type_in_the_full_username_":"Wpisz pełną nazwę użytkownika (np. <B>imię.nazwisko@zajezdnia.local</B>) oraz jego nazwę wyświetlaną (Alias).","Alias":"Alias","Add":"Dodaj","Subscription_request":"Potwierdzenie subskrypcji","You_have_a_request_from":"Masz potwierdzenie od","Deny":"Odmów","Approve":"Zatwierdź","Remove_buddy":"Usuń rozmówcę","You_are_about_to_remove_":"Twój rozmówca {{bid_name}} (<b>{{bid_jid}}</b>) usunął Cię ze swojej listy kontaktów.","Continue_without_chat":"Kontynuuj bez komunikatora","Please_wait":"Proszę czekać","Login_failed":"Błędne logowanie","Sorry_we_cant_authentikate_":"Błędna autoryzacja z serwerem. Może hasło jest nieprawidłowe?","Retry":"Powrót","clear_history":"Wyczyść historię","New_message_from":"Nowa wiadomość od","Should_we_notify_you_":"Czy chcesz otrzymywać powiadomienia o nowych wiadomościach w przyszłości?","Please_accept_":"Kliknij \"Zezwól\" na górze.","Hide_offline":"Schowaj niedostępne kontakty","Show_offline":"Pokaż niedostępne kontakty","About":"Info","dnd":"Nie przeszkadzać","Mute":"Wycisz","Unmute":"Włącz dźwięk","Subscription":"Subskrybcja","both":"obustronna","Status":"Status","online":"Dostępny","chat":"czat","away":"z dala od kompa","xa":"hen hen...","offline":"niedostępny","none":"brak","Unknown_instance_tag":"Nieznany przypadek.","Not_one_of_our_latest_keys":"Not one of our latest keys.","Received_an_unreadable_encrypted_message":"Otrzymano nieczytelną, zaszyfrowaną wiadomość.","Online":"Połączony","Chatty":"Pogawędzimy?","Away":"Daleko","Extended_away":"Hen Hen...","Offline":"Niedostępny","Friendship_request":"Zapytanie od znajomego?","Confirm":"Potwierdzenie","Dismiss":"Odwołaj","Remove":"Usuń","Online_help":"Pomoc Online","FN":"Pełna nazwa","N":" ","FAMILY":"Nazwisko","GIVEN":"Imię","NICKNAME":"Pseudonim","URL":"Strona WWW","ADR":"Adres","STREET":"Ulica","EXTADD":"Pełny adres","LOCALITY":"Lokalizacja","REGION":"Region","PCODE":"Kod pocztowy","CTRY":"Kraj","TEL":"Telefon","NUMBER":"Numer","EMAIL":"Email","USERID":" ","ORG":"Organizacja","ORGNAME":"Nazwa","ORGUNIT":"Jednostka","TITLE":"Stanowisko","ROLE":"Rola","BDAY":"Data urodzin","DESC":"Opis","PHOTO":" ","send_message":"Wyślij wiadomość","get_info":"Pokaż informację","Settings":"Ustawienia","Priority":"Priorytet","Save":"Zapisz","User_settings":"Ustawienia Użytkownika","A_fingerprint_":"Kod służy do autoryzacji Twojego rozmówcy aby potwierdzić jego tożsamość.","Your_roster_is_empty_add_a":"Twoja lista jest pusta, dodaj kontakty ","new_buddy":"Nowy kontakt","is":"jest","Login_options":"opcje logowania","BOSH_url":"Adres BOSH","Domain":"Domena","Resource":"Źródło","On_login":"Na login","Received_an_unencrypted_message":"Zatwierdzono nieszyfrowaną wiadomość.","Sorry_your_buddy_doesnt_provide_any_information":"Twój rozmówca nie posiada żadnych informacji.","Info_about":"Informacja o...","Authentication_aborted":"Autoryzacja anulowana.","Authentication_request_received":"Prośba o autoryzację została przyjęta.","Do_you_want_to_display_them":"Chcesz to wyświetlić?","Log_in_without_chat":"Zaloguj bez komunikatora","has_come_online":"jest teraz dostępny","Unknown_sender":"Nieznany nadawca","You_received_a_message_from_an_unknown_sender":"Masz wiadomość od nieznanego nadawcy.","Please_allow_access_to_microphone_and_camera":"Kliknij \"Potwierdź\" na górze, aby móc korzystać z mikrofonu oraz kamery.","Incoming_call":"Przychodzące połączenie","from":"z","Do_you_want_to_accept_the_call_from":"Akceptujesz połączenie od","Reject":"Odrzuć","Accept":"Zaakceptuj","hang_up":"odbierz","snapshot":"zrób zdjęcie","mute_my_audio":"wycisz dźwięk","pause_my_video":"zatrzymaj moje wideo","fullscreen":"Pełny ekran","Info":"Informacja","Local_IP":"Adres IP","Remote_IP":"Zdalny adres IP","Local_Fingerprint":"Kod lokalny","Remote_Fingerprint":"Zdalny kod","Video_call_not_possible":"Rozmowa wideo jest niemożliwa. Twój rozmówca nie ma możliwości prowadzenia takich rozmów.","Start_video_call":"Rozpocznij rozmowę wideo","Join_chat":"Dołącz do czata","Join":"Dołącz","Room":"Pokój","Nickname":"Nazwa użytkownika","left_the_building":"__nickname__ wyszedł","entered_the_room":"__nickname__ wszedł do pokoju","is_now_known_as":"__oldNickname__ zmienił nazwę na __newNickname__","This_room_is":"Ten pokój jest","muc_hidden":{"keyword":"ukryty","description":"nie można odnaleźć elementów wyszukiwania"},"muc_membersonly":{"keyword":"tylko zalogowani","description":"musisz być członkiem listy"},"muc_moderated":{"keyword":"moderowano","description":"tylko osoby z opcją \"głos\" mogą wysyłać wiadomość"},"muc_nonanonymous":{"keyword":"nie-anonimowy","description":"Twój identyfikator jabber jest widoczny dla wszystkich innych osób"},"muc_open":{"keyword":"otwarty","description":"wszyscy mają pozwolenie aby dołączyć"},"muc_passwordprotected":{"keyword":"ograniczone hasłem","description":"musisz wpisać prawidłowe hasło"},"muc_persistent":{"keyword":"trwale","description":"nie zostaną zniszczone, jeśli ostatnia osoba wyszła"},"muc_public":{"keyword":"publiczny","description":"wyszukawno"},"muc_semianonymous":{"keyword":"pół-anonimowy","description":"Twój identyfikator jabber jest widoczny w pokoju adminów"},"muc_temporary":{"keyword":"tymczasowy","description":"zostanie usunięty jeżeli ostatnia osoba wyjdzie"},"muc_unmoderated":{"keyword":"niemoderowany","description":"wszyscy są uprawnieni do pisania wiadomości"},"muc_unsecured":{"keyword":"niezabezpieczone","description":"nie musisz wpisywać hasła"},"Continue":"Kontynuuj","Server":"Serwer","Rooms_are_loaded":"Pokoje zostały załadowane","Could_load_only":"Nie załadowano __count__ pokoi","muc_explanation":"Aby się zalogować, wpisz nazwę pokoju oraz opcjonalnie nazwę użytkownika i hasło","You_already_joined_this_room":"Już dołączyłeś do tego pokoju","This_room_will_be_closed":"Ten pokój będzie zamknięty","Room_not_found_":"Nowy pokój będzie stworzony","Loading_room_information":"Ładowani informacji o pokoju","Destroy":"Zniszczony","Leave":"Opuść","changed_subject_to":"__nickname__ zmienił temat pokoju na \"__subject__\"","muc_removed_kicked":"Zostałeś wyrzucony z pokoju","muc_removed_info_kicked":"__nickname__ został wyrzucony z pokoju","muc_removed_banned":"Zostałeś zbanowany","muc_removed_info_banned":"__nickname__ został zbanowany","muc_removed_affiliation":"Zostałeś usunięty z pokoju ze względu na zmianę przynależnosci","muc_removed_info_affiliation":"__nickname__ został usunięty z pokoju ze względu na zmianę przynależnosci","muc_removed_membersonly":"Zostałeś usunięty z pokoju ze względu na zmianę pokoju tylko dla członków, a Ty nie jesteś członkiem...","muc_removed_info_membersonly":"__nickname__ został usunięty z pokoju ze względu na zmianę pokoju na tylko dla członków","muc_removed_shutdown":"Zostałeś usunięty z pokoju ze względu na zamknięcie usługi","Reason":"Powód","message_not_send":"Wystąpił błąd i twoja wiadomość nie została wysłana.","message_not_send_item-not-found":"Twoja wiadomość nie została wysłana ponieważ ten pokój nie istnieje","message_not_send_forbidden":"Twoja wiadomość nie została wysłana ponieważ nie masz głosu w tym pokoju","message_not_send_not-acceptable":"Twoja wiadomość nie została wysłana ponieważ nie jesteś właścicielem tego pokoju","This_room_has_been_closed":"Ten pokój został zamknięty","Room_logging_is_enabled":"Logowanie do pokoju jest włączone","A_password_is_required":"Hasło jest wymagane","You_are_not_on_the_member_list":"Nie jesteś na liście członków","You_are_banned_from_this_room":"Zostałeś zbanowany w tym pokoju","Your_desired_nickname_":"Twoja nazwa użytkownika jest już użyta. Spróbuj wybrać inną","The_maximum_number_":"Została osiągnięta maksymalna liczba użytkowników w tym pokoju","This_room_is_locked_":"Ten pokój jest zablokowany","You_are_not_allowed_to_create_":"Nie masz uprawnień do tworzenia pokoju","Carbon_copy":"Do wiadomości","Enable":null}},"pt-BR":{"translation":{"Logging_in":"Entrando...","your_connection_is_unencrypted":"Sua conexão não é encriptada","your_connection_is_encrypted":"Sua conexão é encriptada","your_buddy_closed_the_private_connection":"Seu contato fechou a conexão privada","start_private":"Iniciar conversa privada","close_private":"Fechar conversa privada","your_buddy_is_verificated":"Seu contato está verificado","you_have_only_a_subscription_in_one_way":"Você só tem a inscrição one-way","authentication_query_sent":"Pergunta de autenticação enviada","your_message_wasnt_send_please_end_your_private_conversation":"Sua mensagem não foi enviada. Por favor finalize sua conversa privada","unencrypted_message_received":"Mensagem não encriptada recebida","your_message_wasnt_send_because_you_have_no_valid_subscription":"Sua mensagem não foi enviada porque sua inscrição não é válida","not_available":"Indisponível","no_connection":"Sem conexão!","relogin":"reentrar","trying_to_start_private_conversation":"Tentando iniciar conversa privada","Verified":"Verificado","Unverified":"Não verificado","private_conversation_started":"Conversa privada iniciada.","private_conversation_aborted":"Conversa privada abortada!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Seu contato encerrou a conversa privada! Você deveria fazer o mesmo.","conversation_is_now_verified":"Conversa verificada.","authentication_failed":"Autenticação falhou.","your_buddy_is_attempting_to_determine_":"Seu contato está tentando determinar se ele realmente está falando contigo.","to_authenticate_to_your_buddy":"Para autenticar seu contato, ","enter_the_answer_and_click_answer":"entre com a resposta e clique em Responder.","enter_the_secret":"escreva a senha.","Creating_your_private_key_":"Criando sua chave privada: isso pode demorar um pouco.","Authenticating_a_buddy_helps_":"Autenticar seu contato ajuda a garantir que a pessoa com a qual você está falando é realmente a pessoa que ela alega ser.","How_do_you_want_to_authenticate_your_buddy":"Como você gostaria de se autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Selecione o método...","Manual":"Manual","Question":"Pergunta","Secret":"Senha","To_verify_the_fingerprint_":"Para verificar o fingerprint, entre em contato com seu contato usando outro meio, de preferência seguro, como o telefone.","Your_fingerprint":"Seu fingerprint","Buddy_fingerprint":"Fingerprint do contato","Close":"Fechar","Compared":"Comparado","To_authenticate_using_a_question_":"Para autenticar seu contato faça uma pergunta, mas escolha que só ele saiba a resposta.","Ask":"Pergunta","To_authenticate_pick_a_secret_":"Para autenticar, escolha um segredo que somente você e seu contato saibam.","Compare":"Compare","Fingerprints":"Fingerprints","Authentication":"Autenticação","Message":"Mensagem","Add_buddy":"Adicionar contato","rename_buddy":"renomear contato","delete_buddy":"remover contato","Login":"Entrar","Username":"Usuário","Password":"Senha","Cancel":"Cancelar","Connect":"Conectar","Type_in_the_full_username_":"Digite seu nome completo e um apelido opcional.","Alias":"Apelido","Add":"Adicionar","Subscription_request":"Pedido de inscrição","You_have_a_request_from":"Você tem um pedido de","Deny":"Negar","Approve":"Aprovar","Remove_buddy":"Remover contato","You_are_about_to_remove_":"Você está prestes a remover {{bid_name}} (<b>{{bid_jid}}</b>) de sua lista de contatos. Todas as conversas serão fechadas.","Continue_without_chat":"Continue sem converar","Please_wait":"Por favor aguarde","Login_failed":"Autenticação da conversa falhou","Sorry_we_cant_authentikate_":"A autenticação com o servidor falhou. Talvez seja a senha errada?","Retry":"Voltar","clear_history":"Limpar histórico","New_message_from":"Nova mensagem de","Should_we_notify_you_":"Devemos continuar notificando sobre novas mensagens no futuro?","Please_accept_":"Por favor clique no botão \"Permitir\" na parte superior.","Hide_offline":"Esconder contatos desconectados","Show_offline":"Mostrar contatos desconectados","About":"Sobre","dnd":"Não perturbe","Mute":"Mudo","Unmute":"Ligar","Subscription":"Inscrição","both":"ambos","Status":"Status","online":"online","chat":"conversa","away":"ausente","xa":"ausente por mais tempo","offline":"desativado","none":"nenhum","Unknown_instance_tag":"Marcação desconhecida da instância","Not_one_of_our_latest_keys":"Nenhuma de nossas ultimas chaves.","Received_an_unreadable_encrypted_message":"Mensagem encriptada ilegível foi recebida.","Online":"Online","Chatty":"Tagarela","Away":"Ausente","Extended_away":"Ausente por mais tempo","Offline":"Desativado","Friendship_request":"Pedido de amizade","Confirm":"Confirmar","Dismiss":"Ignorar","Remove":"Remover","Online_help":"Ajuda online","FN":"Nome completo","N":" ","FAMILY":"Sobrenome","GIVEN":"Nome","NICKNAME":"Apelido","URL":"URL","ADR":"Endereço","STREET":"Rua, Av, etc","EXTADD":"Complemento","LOCALITY":"Localidade","REGION":"Região","PCODE":"CEP","CTRY":"País","TEL":"Telefone","NUMBER":"Número","EMAIL":"Email","USERID":" ","ORG":"Empresa","ORGNAME":"Nome","ORGUNIT":"Unidade","TITLE":"Cargo","ROLE":"Rol","BDAY":"Data de nascimento","DESC":"Descrição","PHOTO":" ","send_message":"Enviar mensagem","get_info":"Exibir informações","Settings":"Configurações","Priority":"Prioridade","Save":"Salvar","User_settings":"Configurações do usuário","A_fingerprint_":"O fingerprint é usado para certificar que a pessoa com a qual se está falando é que ela diz ser.","Your_roster_is_empty_add_a":"Sua lista está vazia, adicione um ","new_buddy":"novo contato","is":"é","Login_options":"Opções de login","BOSH_url":"BOSH URL","Domain":"Domínio","Resource":"Recurso","On_login":"Ao autenticar","Received_an_unencrypted_message":"Mensagem não encriptada recebida","Sorry_your_buddy_doesnt_provide_any_information":"Desculpe, seu contato não forneceu nenhuma informação","Info_about":"Informações sobre","Authentication_aborted":"Autenticação encerrada.","Authentication_request_received":"Pedido de autenticação recebido","Do_you_want_to_display_them":"Você quer mostrá-los?","Log_in_without_chat":"Entrar sem conversar","has_come_online":"ficou online","Unknown_sender":"Emissor desconhecido","You_received_a_message_from_an_unknown_sender":"Você recebeu uma mensagem de um emissor desconhecido","Please_allow_access_to_microphone_and_camera":"Por favor clique no botão \"Permitir\" no topo, para conceder acesso ao seu microfone e câmera.","Incoming_call":"Recebendo chamada","from":"de","Do_you_want_to_accept_the_call_from":"Você aceita a chamada de","Reject":"Negar","Accept":"Aceitar","hang_up":"desligar","snapshot":"registrar imagem","mute_my_audio":"mudo","pause_my_video":"pausar vídeo","fullscreen":"tela cheia","Info":"Informações","Local_IP":"IP local","Remote_IP":"IP remoto","Local_Fingerprint":"Fingerprint local","Remote_Fingerprint":"Fingerprint remoto","Video_call_not_possible":"Chamada de vídeo impossível. Seu contato não suporta chamadas desse tipo.","Start_video_call":"Iniciar chamada de vídeo","Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}},"ro":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null,"Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}}}; \ No newline at end of file
diff --git a/build/lib/jsxc.dep.min.js b/build/lib/jsxc.dep.min.js
index 33553086..1c88c342 100644
--- a/build/lib/jsxc.dep.min.js
+++ b/build/lib/jsxc.dep.min.js
@@ -1,9 +1,12 @@
/*!
- * jsxc v2.0.0-beta2 - 2015-04-29
+ * jsxc v2.0.0 - 2015-05-08
*
* This file concatenates all dependencies of jsxc.
*
*/
+/*!
+ * Source: lib/strophe.js, license: multiple, url: http://strophe.im/strophejs/
+ */
/*! This code was written by Tyler Akins and has been placed in the
public domain. It would be nice if you left this header intact.
Base64 code from Tyler Akins -- http://rumkin.com
@@ -16,15 +19,23 @@
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for details.
*/
-function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),8*s.length))}function str_sha1(s){return binb2str(core_sha1(str2binb(s),8*s.length))}function b64_hmac_sha1(key,data){return binb2b64(core_hmac_sha1(key,data))}function str_hmac_sha1(key,data){return binb2str(core_hmac_sha1(key,data))}function core_sha1(x,len){x[len>>5]|=128<<24-len%32,x[(len+64>>9<<4)+15]=len;var i,j,t,olda,oldb,oldc,oldd,olde,w=new Array(80),a=1732584193,b=-271733879,c=-1732584194,d=271733878,e=-1009589776;for(i=0;i<x.length;i+=16){for(olda=a,oldb=b,oldc=c,oldd=d,olde=e,j=0;80>j;j++)16>j?w[j]=x[i+j]:w[j]=rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1),t=safe_add(safe_add(rol(a,5),sha1_ft(j,b,c,d)),safe_add(safe_add(e,w[j]),sha1_kt(j))),e=d,d=c,c=rol(b,30),b=a,a=t;a=safe_add(a,olda),b=safe_add(b,oldb),c=safe_add(c,oldc),d=safe_add(d,oldd),e=safe_add(e,olde)}return[a,b,c,d,e]}function sha1_ft(t,b,c,d){return 20>t?b&c|~b&d:40>t?b^c^d:60>t?b&c|b&d|c&d:b^c^d}function sha1_kt(t){return 20>t?1518500249:40>t?1859775393:60>t?-1894007588:-899497514}function core_hmac_sha1(key,data){var bkey=str2binb(key);bkey.length>16&&(bkey=core_sha1(bkey,8*key.length));for(var ipad=new Array(16),opad=new Array(16),i=0;16>i;i++)ipad[i]=909522486^bkey[i],opad[i]=1549556828^bkey[i];var hash=core_sha1(ipad.concat(str2binb(data)),512+8*data.length);return core_sha1(opad.concat(hash),672)}function safe_add(x,y){var lsw=(65535&x)+(65535&y),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|65535&lsw}function rol(num,cnt){return num<<cnt|num>>>32-cnt}function str2binb(str){for(var bin=[],mask=255,i=0;i<8*str.length;i+=8)bin[i>>5]|=(str.charCodeAt(i/8)&mask)<<24-i%32;return bin}function binb2str(bin){for(var str="",mask=255,i=0;i<32*bin.length;i+=8)str+=String.fromCharCode(bin[i>>5]>>>24-i%32&mask);return str}function binb2b64(binarray){for(var triplet,j,tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",str="",i=0;i<4*binarray.length;i+=3)for(triplet=(binarray[i>>2]>>8*(3-i%4)&255)<<16|(binarray[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|binarray[i+2>>2]>>8*(3-(i+2)%4)&255,j=0;4>j;j++)str+=8*i+6*j>32*binarray.length?"=":tab.charAt(triplet>>6*(3-j)&63);return str}var Base64=function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",obj={encode:function(input){var chr1,chr2,chr3,enc1,enc2,enc3,enc4,output="",i=0;do chr1=input.charCodeAt(i++),chr2=input.charCodeAt(i++),chr3=input.charCodeAt(i++),enc1=chr1>>2,enc2=(3&chr1)<<4|chr2>>4,enc3=(15&chr2)<<2|chr3>>6,enc4=63&chr3,isNaN(chr2)?enc3=enc4=64:isNaN(chr3)&&(enc4=64),output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);while(i<input.length);return output},decode:function(input){var chr1,chr2,chr3,enc1,enc2,enc3,enc4,output="",i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do enc1=keyStr.indexOf(input.charAt(i++)),enc2=keyStr.indexOf(input.charAt(i++)),enc3=keyStr.indexOf(input.charAt(i++)),enc4=keyStr.indexOf(input.charAt(i++)),chr1=enc1<<2|enc2>>4,chr2=(15&enc2)<<4|enc3>>2,chr3=(3&enc3)<<6|enc4,output+=String.fromCharCode(chr1),64!=enc3&&(output+=String.fromCharCode(chr2)),64!=enc4&&(output+=String.fromCharCode(chr3));while(i<input.length);return output}};return obj}(),MD5=function(){var safe_add=function(x,y){var lsw=(65535&x)+(65535&y),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|65535&lsw},bit_rol=function(num,cnt){return num<<cnt|num>>>32-cnt},str2binl=function(str){for(var bin=[],i=0;i<8*str.length;i+=8)bin[i>>5]|=(255&str.charCodeAt(i/8))<<i%32;return bin},binl2str=function(bin){for(var str="",i=0;i<32*bin.length;i+=8)str+=String.fromCharCode(bin[i>>5]>>>i%32&255);return str},binl2hex=function(binarray){for(var hex_tab="0123456789abcdef",str="",i=0;i<4*binarray.length;i++)str+=hex_tab.charAt(binarray[i>>2]>>i%4*8+4&15)+hex_tab.charAt(binarray[i>>2]>>i%4*8&15);return str},md5_cmn=function(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)},md5_ff=function(a,b,c,d,x,s,t){return md5_cmn(b&c|~b&d,a,b,x,s,t)},md5_gg=function(a,b,c,d,x,s,t){return md5_cmn(b&d|c&~d,a,b,x,s,t)},md5_hh=function(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)},md5_ii=function(a,b,c,d,x,s,t){return md5_cmn(c^(b|~d),a,b,x,s,t)},core_md5=function(x,len){x[len>>5]|=128<<len%32,x[(len+64>>>9<<4)+14]=len;for(var olda,oldb,oldc,oldd,a=1732584193,b=-271733879,c=-1732584194,d=271733878,i=0;i<x.length;i+=16)olda=a,oldb=b,oldc=c,oldd=d,a=md5_ff(a,b,c,d,x[i+0],7,-680876936),d=md5_ff(d,a,b,c,x[i+1],12,-389564586),c=md5_ff(c,d,a,b,x[i+2],17,606105819),b=md5_ff(b,c,d,a,x[i+3],22,-1044525330),a=md5_ff(a,b,c,d,x[i+4],7,-176418897),d=md5_ff(d,a,b,c,x[i+5],12,1200080426),c=md5_ff(c,d,a,b,x[i+6],17,-1473231341),b=md5_ff(b,c,d,a,x[i+7],22,-45705983),a=md5_ff(a,b,c,d,x[i+8],7,1770035416),d=md5_ff(d,a,b,c,x[i+9],12,-1958414417),c=md5_ff(c,d,a,b,x[i+10],17,-42063),b=md5_ff(b,c,d,a,x[i+11],22,-1990404162),a=md5_ff(a,b,c,d,x[i+12],7,1804603682),d=md5_ff(d,a,b,c,x[i+13],12,-40341101),c=md5_ff(c,d,a,b,x[i+14],17,-1502002290),b=md5_ff(b,c,d,a,x[i+15],22,1236535329),a=md5_gg(a,b,c,d,x[i+1],5,-165796510),d=md5_gg(d,a,b,c,x[i+6],9,-1069501632),c=md5_gg(c,d,a,b,x[i+11],14,643717713),b=md5_gg(b,c,d,a,x[i+0],20,-373897302),a=md5_gg(a,b,c,d,x[i+5],5,-701558691),d=md5_gg(d,a,b,c,x[i+10],9,38016083),c=md5_gg(c,d,a,b,x[i+15],14,-660478335),b=md5_gg(b,c,d,a,x[i+4],20,-405537848),a=md5_gg(a,b,c,d,x[i+9],5,568446438),d=md5_gg(d,a,b,c,x[i+14],9,-1019803690),c=md5_gg(c,d,a,b,x[i+3],14,-187363961),b=md5_gg(b,c,d,a,x[i+8],20,1163531501),a=md5_gg(a,b,c,d,x[i+13],5,-1444681467),d=md5_gg(d,a,b,c,x[i+2],9,-51403784),c=md5_gg(c,d,a,b,x[i+7],14,1735328473),b=md5_gg(b,c,d,a,x[i+12],20,-1926607734),a=md5_hh(a,b,c,d,x[i+5],4,-378558),d=md5_hh(d,a,b,c,x[i+8],11,-2022574463),c=md5_hh(c,d,a,b,x[i+11],16,1839030562),b=md5_hh(b,c,d,a,x[i+14],23,-35309556),a=md5_hh(a,b,c,d,x[i+1],4,-1530992060),d=md5_hh(d,a,b,c,x[i+4],11,1272893353),c=md5_hh(c,d,a,b,x[i+7],16,-155497632),b=md5_hh(b,c,d,a,x[i+10],23,-1094730640),a=md5_hh(a,b,c,d,x[i+13],4,681279174),d=md5_hh(d,a,b,c,x[i+0],11,-358537222),c=md5_hh(c,d,a,b,x[i+3],16,-722521979),b=md5_hh(b,c,d,a,x[i+6],23,76029189),a=md5_hh(a,b,c,d,x[i+9],4,-640364487),d=md5_hh(d,a,b,c,x[i+12],11,-421815835),c=md5_hh(c,d,a,b,x[i+15],16,530742520),b=md5_hh(b,c,d,a,x[i+2],23,-995338651),a=md5_ii(a,b,c,d,x[i+0],6,-198630844),d=md5_ii(d,a,b,c,x[i+7],10,1126891415),c=md5_ii(c,d,a,b,x[i+14],15,-1416354905),b=md5_ii(b,c,d,a,x[i+5],21,-57434055),a=md5_ii(a,b,c,d,x[i+12],6,1700485571),d=md5_ii(d,a,b,c,x[i+3],10,-1894986606),c=md5_ii(c,d,a,b,x[i+10],15,-1051523),b=md5_ii(b,c,d,a,x[i+1],21,-2054922799),a=md5_ii(a,b,c,d,x[i+8],6,1873313359),d=md5_ii(d,a,b,c,x[i+15],10,-30611744),c=md5_ii(c,d,a,b,x[i+6],15,-1560198380),b=md5_ii(b,c,d,a,x[i+13],21,1309151649),a=md5_ii(a,b,c,d,x[i+4],6,-145523070),d=md5_ii(d,a,b,c,x[i+11],10,-1120210379),c=md5_ii(c,d,a,b,x[i+2],15,718787259),b=md5_ii(b,c,d,a,x[i+9],21,-343485551),a=safe_add(a,olda),b=safe_add(b,oldb),c=safe_add(c,oldc),d=safe_add(d,oldd);return[a,b,c,d]},obj={hexdigest:function(s){return binl2hex(core_md5(str2binl(s),8*s.length))},hash:function(s){return binl2str(core_md5(str2binl(s),8*s.length))}};return obj}();/*!
+function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),8*s.length))}function str_sha1(s){return binb2str(core_sha1(str2binb(s),8*s.length))}function b64_hmac_sha1(key,data){return binb2b64(core_hmac_sha1(key,data))}function str_hmac_sha1(key,data){return binb2str(core_hmac_sha1(key,data))}function core_sha1(x,len){x[len>>5]|=128<<24-len%32,x[(len+64>>9<<4)+15]=len;var i,j,t,olda,oldb,oldc,oldd,olde,w=new Array(80),a=1732584193,b=-271733879,c=-1732584194,d=271733878,e=-1009589776;for(i=0;i<x.length;i+=16){for(olda=a,oldb=b,oldc=c,oldd=d,olde=e,j=0;80>j;j++)w[j]=16>j?x[i+j]:rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1),t=safe_add(safe_add(rol(a,5),sha1_ft(j,b,c,d)),safe_add(safe_add(e,w[j]),sha1_kt(j))),e=d,d=c,c=rol(b,30),b=a,a=t;a=safe_add(a,olda),b=safe_add(b,oldb),c=safe_add(c,oldc),d=safe_add(d,oldd),e=safe_add(e,olde)}return[a,b,c,d,e]}function sha1_ft(t,b,c,d){return 20>t?b&c|~b&d:40>t?b^c^d:60>t?b&c|b&d|c&d:b^c^d}function sha1_kt(t){return 20>t?1518500249:40>t?1859775393:60>t?-1894007588:-899497514}function core_hmac_sha1(key,data){var bkey=str2binb(key);bkey.length>16&&(bkey=core_sha1(bkey,8*key.length));for(var ipad=new Array(16),opad=new Array(16),i=0;16>i;i++)ipad[i]=909522486^bkey[i],opad[i]=1549556828^bkey[i];var hash=core_sha1(ipad.concat(str2binb(data)),512+8*data.length);return core_sha1(opad.concat(hash),672)}function safe_add(x,y){var lsw=(65535&x)+(65535&y),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|65535&lsw}function rol(num,cnt){return num<<cnt|num>>>32-cnt}function str2binb(str){for(var bin=[],mask=255,i=0;i<8*str.length;i+=8)bin[i>>5]|=(str.charCodeAt(i/8)&mask)<<24-i%32;return bin}function binb2str(bin){for(var str="",mask=255,i=0;i<32*bin.length;i+=8)str+=String.fromCharCode(bin[i>>5]>>>24-i%32&mask);return str}function binb2b64(binarray){for(var triplet,j,tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",str="",i=0;i<4*binarray.length;i+=3)for(triplet=(binarray[i>>2]>>8*(3-i%4)&255)<<16|(binarray[i+1>>2]>>8*(3-(i+1)%4)&255)<<8|binarray[i+2>>2]>>8*(3-(i+2)%4)&255,j=0;4>j;j++)str+=8*i+6*j>32*binarray.length?"=":tab.charAt(triplet>>6*(3-j)&63);return str}var Base64=function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",obj={encode:function(input){var chr1,chr2,chr3,enc1,enc2,enc3,enc4,output="",i=0;do chr1=input.charCodeAt(i++),chr2=input.charCodeAt(i++),chr3=input.charCodeAt(i++),enc1=chr1>>2,enc2=(3&chr1)<<4|chr2>>4,enc3=(15&chr2)<<2|chr3>>6,enc4=63&chr3,isNaN(chr2)?enc3=enc4=64:isNaN(chr3)&&(enc4=64),output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4);while(i<input.length);return output},decode:function(input){var chr1,chr2,chr3,enc1,enc2,enc3,enc4,output="",i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do enc1=keyStr.indexOf(input.charAt(i++)),enc2=keyStr.indexOf(input.charAt(i++)),enc3=keyStr.indexOf(input.charAt(i++)),enc4=keyStr.indexOf(input.charAt(i++)),chr1=enc1<<2|enc2>>4,chr2=(15&enc2)<<4|enc3>>2,chr3=(3&enc3)<<6|enc4,output+=String.fromCharCode(chr1),64!=enc3&&(output+=String.fromCharCode(chr2)),64!=enc4&&(output+=String.fromCharCode(chr3));while(i<input.length);return output}};return obj}(),MD5=function(){var safe_add=function(x,y){var lsw=(65535&x)+(65535&y),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|65535&lsw},bit_rol=function(num,cnt){return num<<cnt|num>>>32-cnt},str2binl=function(str){for(var bin=[],i=0;i<8*str.length;i+=8)bin[i>>5]|=(255&str.charCodeAt(i/8))<<i%32;return bin},binl2str=function(bin){for(var str="",i=0;i<32*bin.length;i+=8)str+=String.fromCharCode(bin[i>>5]>>>i%32&255);return str},binl2hex=function(binarray){for(var hex_tab="0123456789abcdef",str="",i=0;i<4*binarray.length;i++)str+=hex_tab.charAt(binarray[i>>2]>>i%4*8+4&15)+hex_tab.charAt(binarray[i>>2]>>i%4*8&15);return str},md5_cmn=function(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)},md5_ff=function(a,b,c,d,x,s,t){return md5_cmn(b&c|~b&d,a,b,x,s,t)},md5_gg=function(a,b,c,d,x,s,t){return md5_cmn(b&d|c&~d,a,b,x,s,t)},md5_hh=function(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)},md5_ii=function(a,b,c,d,x,s,t){return md5_cmn(c^(b|~d),a,b,x,s,t)},core_md5=function(x,len){x[len>>5]|=128<<len%32,x[(len+64>>>9<<4)+14]=len;for(var olda,oldb,oldc,oldd,a=1732584193,b=-271733879,c=-1732584194,d=271733878,i=0;i<x.length;i+=16)olda=a,oldb=b,oldc=c,oldd=d,a=md5_ff(a,b,c,d,x[i+0],7,-680876936),d=md5_ff(d,a,b,c,x[i+1],12,-389564586),c=md5_ff(c,d,a,b,x[i+2],17,606105819),b=md5_ff(b,c,d,a,x[i+3],22,-1044525330),a=md5_ff(a,b,c,d,x[i+4],7,-176418897),d=md5_ff(d,a,b,c,x[i+5],12,1200080426),c=md5_ff(c,d,a,b,x[i+6],17,-1473231341),b=md5_ff(b,c,d,a,x[i+7],22,-45705983),a=md5_ff(a,b,c,d,x[i+8],7,1770035416),d=md5_ff(d,a,b,c,x[i+9],12,-1958414417),c=md5_ff(c,d,a,b,x[i+10],17,-42063),b=md5_ff(b,c,d,a,x[i+11],22,-1990404162),a=md5_ff(a,b,c,d,x[i+12],7,1804603682),d=md5_ff(d,a,b,c,x[i+13],12,-40341101),c=md5_ff(c,d,a,b,x[i+14],17,-1502002290),b=md5_ff(b,c,d,a,x[i+15],22,1236535329),a=md5_gg(a,b,c,d,x[i+1],5,-165796510),d=md5_gg(d,a,b,c,x[i+6],9,-1069501632),c=md5_gg(c,d,a,b,x[i+11],14,643717713),b=md5_gg(b,c,d,a,x[i+0],20,-373897302),a=md5_gg(a,b,c,d,x[i+5],5,-701558691),d=md5_gg(d,a,b,c,x[i+10],9,38016083),c=md5_gg(c,d,a,b,x[i+15],14,-660478335),b=md5_gg(b,c,d,a,x[i+4],20,-405537848),a=md5_gg(a,b,c,d,x[i+9],5,568446438),d=md5_gg(d,a,b,c,x[i+14],9,-1019803690),c=md5_gg(c,d,a,b,x[i+3],14,-187363961),b=md5_gg(b,c,d,a,x[i+8],20,1163531501),a=md5_gg(a,b,c,d,x[i+13],5,-1444681467),d=md5_gg(d,a,b,c,x[i+2],9,-51403784),c=md5_gg(c,d,a,b,x[i+7],14,1735328473),b=md5_gg(b,c,d,a,x[i+12],20,-1926607734),a=md5_hh(a,b,c,d,x[i+5],4,-378558),d=md5_hh(d,a,b,c,x[i+8],11,-2022574463),c=md5_hh(c,d,a,b,x[i+11],16,1839030562),b=md5_hh(b,c,d,a,x[i+14],23,-35309556),a=md5_hh(a,b,c,d,x[i+1],4,-1530992060),d=md5_hh(d,a,b,c,x[i+4],11,1272893353),c=md5_hh(c,d,a,b,x[i+7],16,-155497632),b=md5_hh(b,c,d,a,x[i+10],23,-1094730640),a=md5_hh(a,b,c,d,x[i+13],4,681279174),d=md5_hh(d,a,b,c,x[i+0],11,-358537222),c=md5_hh(c,d,a,b,x[i+3],16,-722521979),b=md5_hh(b,c,d,a,x[i+6],23,76029189),a=md5_hh(a,b,c,d,x[i+9],4,-640364487),d=md5_hh(d,a,b,c,x[i+12],11,-421815835),c=md5_hh(c,d,a,b,x[i+15],16,530742520),b=md5_hh(b,c,d,a,x[i+2],23,-995338651),a=md5_ii(a,b,c,d,x[i+0],6,-198630844),d=md5_ii(d,a,b,c,x[i+7],10,1126891415),c=md5_ii(c,d,a,b,x[i+14],15,-1416354905),b=md5_ii(b,c,d,a,x[i+5],21,-57434055),a=md5_ii(a,b,c,d,x[i+12],6,1700485571),d=md5_ii(d,a,b,c,x[i+3],10,-1894986606),c=md5_ii(c,d,a,b,x[i+10],15,-1051523),b=md5_ii(b,c,d,a,x[i+1],21,-2054922799),a=md5_ii(a,b,c,d,x[i+8],6,1873313359),d=md5_ii(d,a,b,c,x[i+15],10,-30611744),c=md5_ii(c,d,a,b,x[i+6],15,-1560198380),b=md5_ii(b,c,d,a,x[i+13],21,1309151649),a=md5_ii(a,b,c,d,x[i+4],6,-145523070),d=md5_ii(d,a,b,c,x[i+11],10,-1120210379),c=md5_ii(c,d,a,b,x[i+2],15,718787259),b=md5_ii(b,c,d,a,x[i+9],21,-343485551),a=safe_add(a,olda),b=safe_add(b,oldb),c=safe_add(c,oldc),d=safe_add(d,oldd);return[a,b,c,d]},obj={hexdigest:function(s){return binl2hex(core_md5(str2binl(s),8*s.length))},hash:function(s){return binl2str(core_md5(str2binl(s),8*s.length))}};return obj}();/*!
This program is distributed under the terms of the MIT license.
Please see the LICENSE file for details.
Copyright 2006-2008, OGG, LLC
*/
-Function.prototype.bind||(Function.prototype.bind=function(obj){var func=this,_slice=Array.prototype.slice,_concat=Array.prototype.concat,_args=_slice.call(arguments,1);return function(){return func.apply(obj?obj:this,_concat.call(_args,_slice.call(arguments,0)))}}),Array.prototype.indexOf||(Array.prototype.indexOf=function(elt){var len=this.length,from=Number(arguments[1])||0;for(from=0>from?Math.ceil(from):Math.floor(from),0>from&&(from+=len);len>from;from++)if(from in this&&this[from]===elt)return from;return-1}),function(callback){function $build(name,attrs){return new Strophe.Builder(name,attrs)}function $msg(attrs){return new Strophe.Builder("message",attrs)}function $iq(attrs){return new Strophe.Builder("iq",attrs)}function $pres(attrs){return new Strophe.Builder("presence",attrs)}var Strophe;Strophe={VERSION:"1.1.3",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas",XHTML_IM:"http://jabber.org/protocol/xhtml-im",XHTML:"http://www.w3.org/1999/xhtml"},XHTML:{tags:["a","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body"],attributes:{a:["href"],blockquote:["style"],br:[],cite:["style"],em:[],img:["src","alt","style","height","width"],li:["style"],ol:["style"],p:["style"],span:["style"],strong:[],ul:["style"],body:[]},css:["background-color","color","font-family","font-size","font-style","font-weight","margin-left","margin-right","text-align","text-decoration"],validTag:function(tag){for(var i=0;i<Strophe.XHTML.tags.length;i++)if(tag==Strophe.XHTML.tags[i])return!0;return!1},validAttribute:function(tag,attribute){if("undefined"!=typeof Strophe.XHTML.attributes[tag]&&Strophe.XHTML.attributes[tag].length>0)for(var i=0;i<Strophe.XHTML.attributes[tag].length;i++)if(attribute==Strophe.XHTML.attributes[tag][i])return!0;return!1},validCSS:function(style){for(var i=0;i<Strophe.XHTML.css.length;i++)if(style==Strophe.XHTML.css[i])return!0;return!1}},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3,CDATA:4,FRAGMENT:11},TIMEOUT:1.1,SECONDARY_TIMEOUT:.1,addNamespace:function(name,value){Strophe.NS[name]=value},forEachChild:function(elem,elemName,func){var i,childNode;for(i=0;i<elem.childNodes.length;i++)childNode=elem.childNodes[i],childNode.nodeType!=Strophe.ElementType.NORMAL||elemName&&!this.isTagEqual(childNode,elemName)||func(childNode)},isTagEqual:function(el,name){return el.tagName.toLowerCase()==name.toLowerCase()},_xmlGenerator:null,_makeGenerator:function(){var doc;return void 0===document.implementation.createDocument||document.implementation.createDocument&&document.documentMode&&document.documentMode<10?(doc=this._getIEXmlDom(),doc.appendChild(doc.createElement("strophe"))):doc=document.implementation.createDocument("jabber:client","strophe",null),doc},xmlGenerator:function(){return Strophe._xmlGenerator||(Strophe._xmlGenerator=Strophe._makeGenerator()),Strophe._xmlGenerator},_getIEXmlDom:function(){for(var doc=null,docStrings=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"],d=0;d<docStrings.length&&null===doc;d++)try{doc=new ActiveXObject(docStrings[d])}catch(e){doc=null}return doc},xmlElement:function(name){if(!name)return null;var a,i,k,node=Strophe.xmlGenerator().createElement(name);for(a=1;a<arguments.length;a++)if(arguments[a])if("string"==typeof arguments[a]||"number"==typeof arguments[a])node.appendChild(Strophe.xmlTextNode(arguments[a]));else if("object"==typeof arguments[a]&&"function"==typeof arguments[a].sort)for(i=0;i<arguments[a].length;i++)"object"==typeof arguments[a][i]&&"function"==typeof arguments[a][i].sort&&node.setAttribute(arguments[a][i][0],arguments[a][i][1]);else if("object"==typeof arguments[a])for(k in arguments[a])arguments[a].hasOwnProperty(k)&&node.setAttribute(k,arguments[a][k]);return node},xmlescape:function(text){return text=text.replace(/\&/g,"&amp;"),text=text.replace(/</g,"&lt;"),text=text.replace(/>/g,"&gt;"),text=text.replace(/'/g,"&apos;"),text=text.replace(/"/g,"&quot;")},xmlTextNode:function(text){return Strophe.xmlGenerator().createTextNode(text)},xmlHtmlNode:function(html){var node;if(window.DOMParser){var parser=new DOMParser;node=parser.parseFromString(html,"text/xml")}else node=new ActiveXObject("Microsoft.XMLDOM"),node.async="false",node.loadXML(html);return node},getText:function(elem){if(!elem)return null;var str="";0===elem.childNodes.length&&elem.nodeType==Strophe.ElementType.TEXT&&(str+=elem.nodeValue);for(var i=0;i<elem.childNodes.length;i++)elem.childNodes[i].nodeType==Strophe.ElementType.TEXT&&(str+=elem.childNodes[i].nodeValue);return Strophe.xmlescape(str)},copyElement:function(elem){var i,el;if(elem.nodeType==Strophe.ElementType.NORMAL){for(el=Strophe.xmlElement(elem.tagName),i=0;i<elem.attributes.length;i++)el.setAttribute(elem.attributes[i].nodeName.toLowerCase(),elem.attributes[i].value);for(i=0;i<elem.childNodes.length;i++)el.appendChild(Strophe.copyElement(elem.childNodes[i]))}else elem.nodeType==Strophe.ElementType.TEXT&&(el=Strophe.xmlGenerator().createTextNode(elem.nodeValue));return el},createHtml:function(elem){var i,el,j,tag,attribute,value,css,cssAttrs,attr,cssName,cssValue;if(elem.nodeType==Strophe.ElementType.NORMAL)if(tag=elem.nodeName.toLowerCase(),Strophe.XHTML.validTag(tag))try{for(el=Strophe.xmlElement(tag),i=0;i<Strophe.XHTML.attributes[tag].length;i++)if(attribute=Strophe.XHTML.attributes[tag][i],value=elem.getAttribute(attribute),"undefined"!=typeof value&&null!==value&&""!==value&&value!==!1&&0!==value)if("style"==attribute&&"object"==typeof value&&"undefined"!=typeof value.cssText&&(value=value.cssText),"style"==attribute){for(css=[],cssAttrs=value.split(";"),j=0;j<cssAttrs.length;j++)attr=cssAttrs[j].split(":"),cssName=attr[0].replace(/^\s*/,"").replace(/\s*$/,"").toLowerCase(),Strophe.XHTML.validCSS(cssName)&&(cssValue=attr[1].replace(/^\s*/,"").replace(/\s*$/,""),css.push(cssName+": "+cssValue));css.length>0&&(value=css.join("; "),el.setAttribute(attribute,value))}else el.setAttribute(attribute,value);for(i=0;i<elem.childNodes.length;i++)el.appendChild(Strophe.createHtml(elem.childNodes[i]))}catch(e){el=Strophe.xmlTextNode("")}else for(el=Strophe.xmlGenerator().createDocumentFragment(),i=0;i<elem.childNodes.length;i++)el.appendChild(Strophe.createHtml(elem.childNodes[i]));else if(elem.nodeType==Strophe.ElementType.FRAGMENT)for(el=Strophe.xmlGenerator().createDocumentFragment(),i=0;i<elem.childNodes.length;i++)el.appendChild(Strophe.createHtml(elem.childNodes[i]));else elem.nodeType==Strophe.ElementType.TEXT&&(el=Strophe.xmlTextNode(elem.nodeValue));return el},escapeNode:function(node){return node.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40")},unescapeNode:function(node){return node.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\")},getNodeFromJid:function(jid){return jid.indexOf("@")<0?null:jid.split("@")[0]},getDomainFromJid:function(jid){var bare=Strophe.getBareJidFromJid(jid);if(bare.indexOf("@")<0)return bare;var parts=bare.split("@");return parts.splice(0,1),parts.join("@")},getResourceFromJid:function(jid){var s=jid.split("/");return s.length<2?null:(s.splice(0,1),s.join("/"))},getBareJidFromJid:function(jid){return jid?jid.split("/")[0]:null},log:function(level,msg){},debug:function(msg){this.log(this.LogLevel.DEBUG,msg)},info:function(msg){this.log(this.LogLevel.INFO,msg)},warn:function(msg){this.log(this.LogLevel.WARN,msg)},error:function(msg){this.log(this.LogLevel.ERROR,msg)},fatal:function(msg){this.log(this.LogLevel.FATAL,msg)},serialize:function(elem){var result;if(!elem)return null;"function"==typeof elem.tree&&(elem=elem.tree());var i,child,nodeName=elem.nodeName;for(elem.getAttribute("_realname")&&(nodeName=elem.getAttribute("_realname")),result="<"+nodeName,i=0;i<elem.attributes.length;i++)"_realname"!=elem.attributes[i].nodeName&&(result+=" "+elem.attributes[i].nodeName.toLowerCase()+"='"+elem.attributes[i].value.replace(/&/g,"&amp;").replace(/\'/g,"&apos;").replace(/>/g,"&gt;").replace(/</g,"&lt;")+"'");if(elem.childNodes.length>0){for(result+=">",i=0;i<elem.childNodes.length;i++)switch(child=elem.childNodes[i],child.nodeType){case Strophe.ElementType.NORMAL:result+=Strophe.serialize(child);break;case Strophe.ElementType.TEXT:result+=Strophe.xmlescape(child.nodeValue);break;case Strophe.ElementType.CDATA:result+="<![CDATA["+child.nodeValue+"]]>"}result+="</"+nodeName+">"}else result+="/>";return result},_requestId:0,_connectionPlugins:{},addConnectionPlugin:function(name,ptype){Strophe._connectionPlugins[name]=ptype}},Strophe.Builder=function(name,attrs){("presence"==name||"message"==name||"iq"==name)&&(attrs&&!attrs.xmlns?attrs.xmlns=Strophe.NS.CLIENT:attrs||(attrs={xmlns:Strophe.NS.CLIENT})),this.nodeTree=Strophe.xmlElement(name,attrs),this.node=this.nodeTree},Strophe.Builder.prototype={tree:function(){return this.nodeTree},toString:function(){return Strophe.serialize(this.nodeTree)},up:function(){return this.node=this.node.parentNode,this},attrs:function(moreattrs){for(var k in moreattrs)moreattrs.hasOwnProperty(k)&&this.node.setAttribute(k,moreattrs[k]);return this},c:function(name,attrs,text){var child=Strophe.xmlElement(name,attrs,text);return this.node.appendChild(child),text||(this.node=child),this},cnode:function(elem){var impNode,xmlGen=Strophe.xmlGenerator();try{impNode=void 0!==xmlGen.importNode}catch(e){impNode=!1}var newElem=impNode?xmlGen.importNode(elem,!0):Strophe.copyElement(elem);return this.node.appendChild(newElem),this.node=newElem,this},t:function(text){var child=Strophe.xmlTextNode(text);return this.node.appendChild(child),this},h:function(html){var fragment=document.createElement("body");fragment.innerHTML=html;for(var xhtml=Strophe.createHtml(fragment);xhtml.childNodes.length>0;)this.node.appendChild(xhtml.childNodes[0]);return this}},Strophe.Handler=function(handler,ns,name,type,id,from,options){this.handler=handler,this.ns=ns,this.name=name,this.type=type,this.id=id,this.options=options||{matchBare:!1},this.options.matchBare||(this.options.matchBare=!1),this.options.matchBare?this.from=from?Strophe.getBareJidFromJid(from):null:this.from=from,this.user=!0},Strophe.Handler.prototype={isMatch:function(elem){var nsMatch,from=null;if(from=this.options.matchBare?Strophe.getBareJidFromJid(elem.getAttribute("from")):elem.getAttribute("from"),nsMatch=!1,this.ns){var that=this;Strophe.forEachChild(elem,null,function(elem){elem.getAttribute("xmlns")==that.ns&&(nsMatch=!0)}),nsMatch=nsMatch||elem.getAttribute("xmlns")==this.ns}else nsMatch=!0;return!nsMatch||this.name&&!Strophe.isTagEqual(elem,this.name)||this.type&&elem.getAttribute("type")!=this.type||this.id&&elem.getAttribute("id")!=this.id||this.from&&from!=this.from?!1:!0},run:function(elem){var result=null;try{result=this.handler(elem)}catch(e){throw e.sourceURL?Strophe.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?("undefined"!=typeof console&&(console.trace(),console.error(this.handler," - error - ",e,e.message)),Strophe.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message)):Strophe.fatal("error: "+e.message+"\n"+e.stack),e}return result},toString:function(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},Strophe.TimedHandler=function(period,handler){this.period=period,this.handler=handler,this.lastCalled=(new Date).getTime(),this.user=!0},Strophe.TimedHandler.prototype={run:function(){return this.lastCalled=(new Date).getTime(),this.handler()},reset:function(){this.lastCalled=(new Date).getTime()},toString:function(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},Strophe.Connection=function(service,options){this.service=service,this.options=options||{};var proto=this.options.protocol||"";0===service.indexOf("ws:")||0===service.indexOf("wss:")||0===proto.indexOf("ws")?this._proto=new Strophe.Websocket(this):this._proto=new Strophe.Bosh(this),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._authentication={},this._idleTimeout=null,this._disconnectTimeout=null,this.do_authentication=!0,this.authenticated=!1,this.disconnecting=!1,this.connected=!1,this.errors=0,this.paused=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout(this._onIdle.bind(this),100);for(var k in Strophe._connectionPlugins)if(Strophe._connectionPlugins.hasOwnProperty(k)){var ptype=Strophe._connectionPlugins[k],F=function(){};F.prototype=ptype,this[k]=new F,this[k].init(this)}},Strophe.Connection.prototype={reset:function(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._authentication={},this.authenticated=!1,this.disconnecting=!1,this.connected=!1,this.errors=0,this._requests=[],this._uniqueId=0},pause:function(){this.paused=!0},resume:function(){this.paused=!1},getUniqueId:function(suffix){return"string"==typeof suffix||"number"==typeof suffix?++this._uniqueId+":"+suffix:++this._uniqueId+""},connect:function(jid,pass,callback,wait,hold,route){this.jid=jid,this.authzid=Strophe.getBareJidFromJid(this.jid),this.authcid=Strophe.getNodeFromJid(this.jid),this.pass=pass,this.servtype="xmpp",this.connect_callback=callback,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.errors=0,this.domain=Strophe.getDomainFromJid(this.jid),this._changeConnectStatus(Strophe.Status.CONNECTING,null),this._proto._connect(wait,hold,route)},attach:function(jid,sid,rid,callback,wait,hold,wind){this._proto._attach(jid,sid,rid,callback,wait,hold,wind)},xmlInput:function(elem){},xmlOutput:function(elem){},rawInput:function(data){},rawOutput:function(data){},send:function(elem){if(null!==elem){if("function"==typeof elem.sort)for(var i=0;i<elem.length;i++)this._queueData(elem[i]);else this._queueData("function"==typeof elem.tree?elem.tree():elem);this._proto._send()}},flush:function(){clearTimeout(this._idleTimeout),this._onIdle()},sendIQ:function(elem,callback,errback,timeout){var timeoutHandler=null,that=this;"function"==typeof elem.tree&&(elem=elem.tree());var id=elem.getAttribute("id");id||(id=this.getUniqueId("sendIQ"),elem.setAttribute("id",id));var handler=this.addHandler(function(stanza){timeoutHandler&&that.deleteTimedHandler(timeoutHandler);var iqtype=stanza.getAttribute("type");if("result"==iqtype)callback&&callback(stanza);else{if("error"!=iqtype)throw{name:"StropheError",message:"Got bad IQ type of "+iqtype};errback&&errback(stanza)}},null,"iq",null,id);return timeout&&(timeoutHandler=this.addTimedHandler(timeout,function(){return that.deleteHandler(handler),errback&&errback(null),!1})),this.send(elem),id},_queueData:function(element){if(null===element||!element.tagName||!element.childNodes)throw{name:"StropheError",message:"Cannot queue non-DOMElement."};this._data.push(element)},_sendRestart:function(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout(this._onIdle.bind(this),100)},addTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);return this.addTimeds.push(thand),thand},deleteTimedHandler:function(handRef){this.removeTimeds.push(handRef)},addHandler:function(handler,ns,name,type,id,from,options){var hand=new Strophe.Handler(handler,ns,name,type,id,from,options);return this.addHandlers.push(hand),hand},deleteHandler:function(handRef){this.removeHandlers.push(handRef)},disconnect:function(reason){if(this._changeConnectStatus(Strophe.Status.DISCONNECTING,reason),Strophe.info("Disconnect was called because: "+reason),this.connected){var pres=!1;this.disconnecting=!0,this.authenticated&&(pres=$pres({xmlns:Strophe.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(3e3,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(pres)}},_changeConnectStatus:function(status,condition){for(var k in Strophe._connectionPlugins)if(Strophe._connectionPlugins.hasOwnProperty(k)){var plugin=this[k];if(plugin.statusChanged)try{plugin.statusChanged(status,condition)}catch(err){Strophe.error(""+k+" plugin caused an exception changing status: "+err)}}if(this.connect_callback)try{this.connect_callback(status,condition)}catch(e){Strophe.error("User connection callback caused an exception: "+e)}},_doDisconnect:function(){null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),Strophe.info("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(Strophe.Status.DISCONNECTED,null),this.connected=!1},_dataRecv:function(req,raw){Strophe.info("_dataRecv called");var elem=this._proto._reqToData(req);if(null!==elem){this.xmlInput!==Strophe.Connection.prototype.xmlInput&&this.xmlInput(elem.nodeName===this._proto.strip&&elem.childNodes.length?elem.childNodes[0]:elem),this.rawInput!==Strophe.Connection.prototype.rawInput&&this.rawInput(raw?raw:Strophe.serialize(elem));for(var i,hand;this.removeHandlers.length>0;)hand=this.removeHandlers.pop(),i=this.handlers.indexOf(hand),i>=0&&this.handlers.splice(i,1);for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();var cond,conflict,typ=elem.getAttribute("type");if(null!==typ&&"terminate"==typ){if(this.disconnecting)return;return cond=elem.getAttribute("condition"),conflict=elem.getElementsByTagName("conflict"),null!==cond?("remote-stream-error"==cond&&conflict.length>0&&(cond="conflict"),this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)):this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown"),void this.disconnect("unknown stream-error")}var that=this;Strophe.forEachChild(elem,null,function(child){var i,newList;for(newList=that.handlers,that.handlers=[],i=0;i<newList.length;i++){var hand=newList[i];try{!hand.isMatch(child)||!that.authenticated&&hand.user?that.handlers.push(hand):hand.run(child)&&that.handlers.push(hand)}catch(e){Strophe.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}}})}},mechanisms:{},_connect_cb:function(req,_callback,raw){Strophe.info("_connect_cb was called"),this.connected=!0;var bodyWrap=this._proto._reqToData(req);if(bodyWrap){this.xmlInput!==Strophe.Connection.prototype.xmlInput&&this.xmlInput(bodyWrap.nodeName===this._proto.strip&&bodyWrap.childNodes.length?bodyWrap.childNodes[0]:bodyWrap),this.rawInput!==Strophe.Connection.prototype.rawInput&&this.rawInput(raw?raw:Strophe.serialize(bodyWrap));var conncheck=this._proto._connect_cb(bodyWrap);if(conncheck!==Strophe.Status.CONNFAIL){this._authentication.sasl_scram_sha1=!1,this._authentication.sasl_plain=!1,this._authentication.sasl_digest_md5=!1,this._authentication.sasl_anonymous=!1,this._authentication.legacy_auth=!1;var hasFeatures=bodyWrap.getElementsByTagName("stream:features").length>0;hasFeatures||(hasFeatures=bodyWrap.getElementsByTagName("features").length>0);var i,mech,mechanisms=bodyWrap.getElementsByTagName("mechanism"),matched=[],found_authentication=!1;if(!hasFeatures)return void this._proto._no_auth_received(_callback);if(mechanisms.length>0)for(i=0;i<mechanisms.length;i++)mech=Strophe.getText(mechanisms[i]),this.mechanisms[mech]&&matched.push(this.mechanisms[mech]);return this._authentication.legacy_auth=bodyWrap.getElementsByTagName("auth").length>0,(found_authentication=this._authentication.legacy_auth||matched.length>0)?void(this.do_authentication!==!1&&this.authenticate(matched)):void this._proto._no_auth_received(_callback)}}},authenticate:function(matched){var i;for(i=0;i<matched.length-1;++i){for(var higher=i,j=i+1;j<matched.length;++j)matched[j].prototype.priority>matched[higher].prototype.priority&&(higher=j);if(higher!=i){var swap=matched[i];matched[i]=matched[higher],matched[higher]=swap}}var mechanism_found=!1;for(i=0;i<matched.length;++i)if(matched[i].test(this)){this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null),this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null),this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge_cb.bind(this),null,"challenge",null,null),this._sasl_mechanism=new matched[i],this._sasl_mechanism.onStart(this);var request_auth_exchange=$build("auth",{xmlns:Strophe.NS.SASL,mechanism:this._sasl_mechanism.name});if(this._sasl_mechanism.isClientFirst){var response=this._sasl_mechanism.onChallenge(this,null);request_auth_exchange.t(Base64.encode(response))}this.send(request_auth_exchange.tree()),mechanism_found=!0;break}mechanism_found||(null===Strophe.getNodeFromJid(this.jid)?(this._changeConnectStatus(Strophe.Status.CONNFAIL,"x-strophe-bad-non-anon-jid"),this.disconnect("x-strophe-bad-non-anon-jid")):(this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null),this._addSysHandler(this._auth1_cb.bind(this),null,null,null,"_auth_1"),this.send($iq({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).tree())))},_sasl_challenge_cb:function(elem){var challenge=Base64.decode(Strophe.getText(elem)),response=this._sasl_mechanism.onChallenge(this,challenge),stanza=$build("response",{xmlns:Strophe.NS.SASL});return""!==response&&stanza.t(Base64.encode(response)),this.send(stanza.tree()),!0},_auth1_cb:function(elem){var iq=$iq({type:"set",id:"_auth_2"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).up().c("password").t(this.pass);return Strophe.getResourceFromJid(this.jid)||(this.jid=Strophe.getBareJidFromJid(this.jid)+"/strophe"),iq.up().c("resource",{}).t(Strophe.getResourceFromJid(this.jid)),this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2"),this.send(iq.tree()),!1},_sasl_success_cb:function(elem){if(this._sasl_data["server-signature"]){var serverSignature,success=Base64.decode(Strophe.getText(elem)),attribMatch=/([a-z]+)=([^,]+)(,|$)/,matches=success.match(attribMatch);if("v"==matches[1]&&(serverSignature=matches[2]),serverSignature!=this._sasl_data["server-signature"])return this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_data={},this._sasl_failure_cb(null)}return Strophe.info("SASL authentication succeeded."),this._sasl_mechanism&&this._sasl_mechanism.onSuccess(),this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._addSysHandler(this._sasl_auth1_cb.bind(this),null,"stream:features",null,null),this._sendRestart(),!1},_sasl_auth1_cb:function(elem){this.features=elem;var i,child;for(i=0;i<elem.childNodes.length;i++)child=elem.childNodes[i],"bind"==child.nodeName&&(this.do_bind=!0),"session"==child.nodeName&&(this.do_session=!0);if(!this.do_bind)return this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1;this._addSysHandler(this._sasl_bind_cb.bind(this),null,null,null,"_bind_auth_2");var resource=Strophe.getResourceFromJid(this.jid);return this.send(resource?$iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).c("resource",{}).t(resource).tree():$iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).tree()),!1},_sasl_bind_cb:function(elem){if("error"==elem.getAttribute("type")){Strophe.info("SASL binding failed.");var condition,conflict=elem.getElementsByTagName("conflict");return conflict.length>0&&(condition="conflict"),this._changeConnectStatus(Strophe.Status.AUTHFAIL,condition),!1}var jidNode,bind=elem.getElementsByTagName("bind");return bind.length>0?(jidNode=bind[0].getElementsByTagName("jid"),void(jidNode.length>0&&(this.jid=Strophe.getText(jidNode[0]),this.do_session?(this._addSysHandler(this._sasl_session_cb.bind(this),null,null,null,"_session_auth_2"),this.send($iq({type:"set",id:"_session_auth_2"}).c("session",{xmlns:Strophe.NS.SESSION}).tree())):(this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null))))):(Strophe.info("SASL binding failed."),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1)},_sasl_session_cb:function(elem){if("result"==elem.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null);else if("error"==elem.getAttribute("type"))return Strophe.info("Session creation failed."),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1;return!1},_sasl_failure_cb:function(elem){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1},_auth2_cb:function(elem){return"result"==elem.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null)):"error"==elem.getAttribute("type")&&(this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),this.disconnect("authentication failed")),!1},_addSysTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);return thand.user=!1,this.addTimeds.push(thand),thand},_addSysHandler:function(handler,ns,name,type,id){var hand=new Strophe.Handler(handler,ns,name,type,id);return hand.user=!1,this.addHandlers.push(hand),hand},_onDisconnectTimeout:function(){return Strophe.info("_onDisconnectTimeout was called"),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1},_onIdle:function(){for(var i,thand,since,newList;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;)thand=this.removeTimeds.pop(),i=this.timedHandlers.indexOf(thand),i>=0&&this.timedHandlers.splice(i,1);var now=(new Date).getTime();for(newList=[],i=0;i<this.timedHandlers.length;i++)thand=this.timedHandlers[i],(this.authenticated||!thand.user)&&(since=thand.lastCalled+thand.period,0>=since-now?thand.run()&&newList.push(thand):newList.push(thand));this.timedHandlers=newList,clearTimeout(this._idleTimeout),this._proto._onIdle(),this.connected&&(this._idleTimeout=setTimeout(this._onIdle.bind(this),100))}},callback&&callback(Strophe,$build,$msg,$iq,$pres),Strophe.SASLMechanism=function(name,isClientFirst,priority){this.name=name,this.isClientFirst=isClientFirst,this.priority=priority},Strophe.SASLMechanism.prototype={test:function(connection){return!0},onStart:function(connection){this._connection=connection},onChallenge:function(connection,challenge){throw new Error("You should implement challenge handling!")},onFailure:function(){this._connection=null},onSuccess:function(){this._connection=null}},Strophe.SASLAnonymous=function(){},Strophe.SASLAnonymous.prototype=new Strophe.SASLMechanism("ANONYMOUS",!1,10),Strophe.SASLAnonymous.test=function(connection){return null===connection.authcid},Strophe.Connection.prototype.mechanisms[Strophe.SASLAnonymous.prototype.name]=Strophe.SASLAnonymous,Strophe.SASLPlain=function(){},Strophe.SASLPlain.prototype=new Strophe.SASLMechanism("PLAIN",!0,20),Strophe.SASLPlain.test=function(connection){return null!==connection.authcid},Strophe.SASLPlain.prototype.onChallenge=function(connection){var auth_str=connection.authzid;return auth_str+="\x00",auth_str+=connection.authcid,auth_str+="\x00",auth_str+=connection.pass},Strophe.Connection.prototype.mechanisms[Strophe.SASLPlain.prototype.name]=Strophe.SASLPlain,Strophe.SASLSHA1=function(){},Strophe.SASLSHA1.prototype=new Strophe.SASLMechanism("SCRAM-SHA-1",!0,40),Strophe.SASLSHA1.test=function(connection){return null!==connection.authcid},Strophe.SASLSHA1.prototype.onChallenge=function(connection,challenge,test_cnonce){var cnonce=test_cnonce||MD5.hexdigest(1234567890*Math.random()),auth_str="n="+connection.authcid;return auth_str+=",r=",auth_str+=cnonce,connection._sasl_data.cnonce=cnonce,connection._sasl_data["client-first-message-bare"]=auth_str,auth_str="n,,"+auth_str,this.onChallenge=function(connection,challenge){for(var nonce,salt,iter,Hi,U,U_old,i,k,clientKey,serverKey,clientSignature,responseText="c=biws,",authMessage=connection._sasl_data["client-first-message-bare"]+","+challenge+",",cnonce=connection._sasl_data.cnonce,attribMatch=/([a-z]+)=([^,]+)(,|$)/;challenge.match(attribMatch);){var matches=challenge.match(attribMatch);switch(challenge=challenge.replace(matches[0],""),matches[1]){case"r":nonce=matches[2];break;case"s":salt=matches[2];break;case"i":iter=matches[2]}}if(nonce.substr(0,cnonce.length)!==cnonce)return connection._sasl_data={},connection._sasl_failure_cb();for(responseText+="r="+nonce,authMessage+=responseText,salt=Base64.decode(salt),salt+="\x00\x00\x00",Hi=U_old=core_hmac_sha1(connection.pass,salt),i=1;iter>i;i++){for(U=core_hmac_sha1(connection.pass,binb2str(U_old)),k=0;5>k;k++)Hi[k]^=U[k];U_old=U}for(Hi=binb2str(Hi),clientKey=core_hmac_sha1(Hi,"Client Key"),serverKey=str_hmac_sha1(Hi,"Server Key"),clientSignature=core_hmac_sha1(str_sha1(binb2str(clientKey)),authMessage),connection._sasl_data["server-signature"]=b64_hmac_sha1(serverKey,authMessage),k=0;5>k;k++)clientKey[k]^=clientSignature[k];return responseText+=",p="+Base64.encode(binb2str(clientKey))}.bind(this),auth_str},Strophe.Connection.prototype.mechanisms[Strophe.SASLSHA1.prototype.name]=Strophe.SASLSHA1,Strophe.SASLMD5=function(){},Strophe.SASLMD5.prototype=new Strophe.SASLMechanism("DIGEST-MD5",!1,30),Strophe.SASLMD5.test=function(connection){return null!==connection.authcid},Strophe.SASLMD5.prototype._quote=function(str){return'"'+str.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'},Strophe.SASLMD5.prototype.onChallenge=function(connection,challenge,test_cnonce){for(var matches,attribMatch=/([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/,cnonce=test_cnonce||MD5.hexdigest(""+1234567890*Math.random()),realm="",host=null,nonce="",qop="";challenge.match(attribMatch);)switch(matches=challenge.match(attribMatch),challenge=challenge.replace(matches[0],""),matches[2]=matches[2].replace(/^"(.+)"$/,"$1"),matches[1]){case"realm":realm=matches[2];break;case"nonce":nonce=matches[2];break;case"qop":qop=matches[2];break;case"host":host=matches[2]}var digest_uri=connection.servtype+"/"+connection.domain;null!==host&&(digest_uri=digest_uri+"/"+host);var A1=MD5.hash(connection.authcid+":"+realm+":"+this._connection.pass)+":"+nonce+":"+cnonce,A2="AUTHENTICATE:"+digest_uri,responseText="";return responseText+="charset=utf-8,",responseText+="username="+this._quote(connection.authcid)+",",
-responseText+="realm="+this._quote(realm)+",",responseText+="nonce="+this._quote(nonce)+",",responseText+="nc=00000001,",responseText+="cnonce="+this._quote(cnonce)+",",responseText+="digest-uri="+this._quote(digest_uri)+",",responseText+="response="+MD5.hexdigest(MD5.hexdigest(A1)+":"+nonce+":00000001:"+cnonce+":auth:"+MD5.hexdigest(A2))+",",responseText+="qop=auth",this.onChallenge=function(){return""}.bind(this),responseText},Strophe.Connection.prototype.mechanisms[Strophe.SASLMD5.prototype.name]=Strophe.SASLMD5}(function(){window.Strophe=arguments[0],window.$build=arguments[1],window.$msg=arguments[2],window.$iq=arguments[3],window.$pres=arguments[4]}),Strophe.Request=function(elem,func,rid,sends){this.id=++Strophe._requestId,this.xmlData=elem,this.data=Strophe.serialize(elem),this.origFunc=func,this.func=func,this.rid=rid,this.date=0/0,this.sends=sends||0,this.abort=!1,this.dead=null,this.age=function(){if(!this.date)return 0;var now=new Date;return(now-this.date)/1e3},this.timeDead=function(){if(!this.dead)return 0;var now=new Date;return(now-this.dead)/1e3},this.xhr=this._newXHR()},Strophe.Request.prototype={getResponse:function(){var node=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(node=this.xhr.responseXML.documentElement,"parsererror"==node.tagName)throw Strophe.error("invalid response received"),Strophe.error("responseText: "+this.xhr.responseText),Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML)),"parsererror"}else this.xhr.responseText&&(Strophe.error("invalid response received"),Strophe.error("responseText: "+this.xhr.responseText),Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML)));return node},_newXHR:function(){var xhr=null;return window.XMLHttpRequest?(xhr=new XMLHttpRequest,xhr.overrideMimeType&&xhr.overrideMimeType("text/xml")):window.ActiveXObject&&(xhr=new ActiveXObject("Microsoft.XMLHTTP")),xhr.onreadystatechange=this.func.bind(null,this),xhr}},Strophe.Bosh=function(connection){this._conn=connection,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this._requests=[]},Strophe.Bosh.prototype={strip:null,_buildBody:function(){var bodyWrap=$build("body",{rid:this.rid++,xmlns:Strophe.NS.HTTPBIND});return null!==this.sid&&bodyWrap.attrs({sid:this.sid}),bodyWrap},_reset:function(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,jQuery(document).trigger("ridChange",{rid:this.rid})},_connect:function(wait,hold,route){this.wait=wait||this.wait,this.hold=hold||this.hold;var body=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":Strophe.NS.BOSH});route&&body.attrs({route:route});var _connect_cb=this._conn._connect_cb;this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,_connect_cb.bind(this._conn)),body.tree().getAttribute("rid"))),this._throttledRequestHandler()},_attach:function(jid,sid,rid,callback,wait,hold,wind){this._conn.jid=jid,this.sid=sid,this.rid=rid,this._conn.connect_callback=callback,this._conn.domain=Strophe.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=wait||this.wait,this.hold=hold||this.hold,this.window=wind||this.window,this._conn._changeConnectStatus(Strophe.Status.ATTACHED,null)},_connect_cb:function(bodyWrap){var cond,conflict,typ=bodyWrap.getAttribute("type");if(null!==typ&&"terminate"==typ)return Strophe.error("BOSH-Connection failed: "+cond),cond=bodyWrap.getAttribute("condition"),conflict=bodyWrap.getElementsByTagName("conflict"),null!==cond?("remote-stream-error"==cond&&conflict.length>0&&(cond="conflict"),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,cond)):this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(),Strophe.Status.CONNFAIL;this.sid||(this.sid=bodyWrap.getAttribute("sid"));var wind=bodyWrap.getAttribute("requests");wind&&(this.window=parseInt(wind,10));var hold=bodyWrap.getAttribute("hold");hold&&(this.hold=parseInt(hold,10));var wait=bodyWrap.getAttribute("wait");wait&&(this.wait=parseInt(wait,10))},_disconnect:function(pres){this._sendTerminate(pres)},_doDisconnect:function(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),jQuery(document).trigger("ridChange",{rid:this.rid})},_emptyQueue:function(){return 0===this._requests.length},_hitError:function(reqStatus){this.errors++,Strophe.warn("request errored, status: "+reqStatus+", number of errors: "+this.errors),this.errors>4&&this._onDisconnectTimeout()},_no_auth_received:function(_callback){_callback=_callback?_callback.bind(this._conn):this._conn._connect_cb.bind(this._conn);var body=this._buildBody();this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,_callback.bind(this._conn)),body.tree().getAttribute("rid"))),this._throttledRequestHandler()},_onDisconnectTimeout:function(){for(var req;this._requests.length>0;)req=this._requests.pop(),req.abort=!0,req.xhr.abort(),req.xhr.onreadystatechange=function(){}},_onIdle:function(){var data=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===data.length&&!this._conn.disconnecting&&(Strophe.info("no requests during idle cycle, sending blank request"),data.push(null)),this._requests.length<2&&data.length>0&&!this._conn.paused){for(var body=this._buildBody(),i=0;i<data.length;i++)null!==data[i]&&("restart"===data[i]?body.attrs({to:this._conn.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":Strophe.NS.BOSH}):body.cnode(data[i]).up());delete this._conn._data,this._conn._data=[],this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),body.tree().getAttribute("rid"))),this._processRequest(this._requests.length-1)}if(this._requests.length>0){var time_elapsed=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait)&&(Strophe.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(Strophe.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}},_onRequestStateChange:function(func,req){if(Strophe.debug("request id "+req.id+"."+req.sends+" state changed to "+req.xhr.readyState),req.abort)return void(req.abort=!1);2==req.xhr.readyState&&jQuery(document).trigger("ridChange",{rid:Number(req.rid)+1});var reqStatus;if(4==req.xhr.readyState){reqStatus=0;try{reqStatus=req.xhr.status}catch(e){}if("undefined"==typeof reqStatus&&(reqStatus=0),this.disconnecting&&reqStatus>=400)return void this._hitError(reqStatus);var reqIs0=this._requests[0]==req,reqIs1=this._requests[1]==req;(reqStatus>0&&500>reqStatus||req.sends>5)&&(this._removeRequest(req),Strophe.debug("request id "+req.id+" should now be removed")),200==reqStatus?((reqIs1||reqIs0&&this._requests.length>0&&this._requests[0].age()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),Strophe.debug("request id "+req.id+"."+req.sends+" got 200"),func(req),this.errors=0):(Strophe.error("request id "+req.id+"."+req.sends+" error "+reqStatus+" happened"),(0===reqStatus||reqStatus>=400&&600>reqStatus||reqStatus>=12e3)&&(this._hitError(reqStatus),reqStatus>=400&&500>reqStatus&&(this._conn._changeConnectStatus(Strophe.Status.DISCONNECTING,null),this._conn._doDisconnect()))),reqStatus>0&&500>reqStatus||req.sends>5||this._throttledRequestHandler()}},_processRequest:function(i){var self=this,req=this._requests[i],reqStatus=-1;try{4==req.xhr.readyState&&(reqStatus=req.xhr.status)}catch(e){Strophe.error("caught an error in _requests["+i+"], reqStatus: "+reqStatus)}if("undefined"==typeof reqStatus&&(reqStatus=-1),req.sends>this.maxRetries)return void this._onDisconnectTimeout();var time_elapsed=req.age(),primaryTimeout=!isNaN(time_elapsed)&&time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait),secondaryTimeout=null!==req.dead&&req.timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait),requestCompletedWithServerError=4==req.xhr.readyState&&(1>reqStatus||reqStatus>=500);if((primaryTimeout||secondaryTimeout||requestCompletedWithServerError)&&(secondaryTimeout&&Strophe.error("Request "+this._requests[i].id+" timed out (secondary), restarting"),req.abort=!0,req.xhr.abort(),req.xhr.onreadystatechange=function(){},this._requests[i]=new Strophe.Request(req.xmlData,req.origFunc,req.rid,req.sends),req=this._requests[i]),0===req.xhr.readyState){Strophe.debug("request id "+req.id+"."+req.sends+" posting");try{req.xhr.open("POST",this._conn.service,this._conn.options.sync?!1:!0)}catch(e2){return Strophe.error("XHR open failed."),this._conn.connected||this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}var sendFunc=function(){if(req.date=new Date,self._conn.options.customHeaders){var headers=self._conn.options.customHeaders;for(var header in headers)headers.hasOwnProperty(header)&&req.xhr.setRequestHeader(header,headers[header])}req.xhr.send(req.data)};if(req.sends>1){var backoff=1e3*Math.min(Math.floor(Strophe.TIMEOUT*this.wait),Math.pow(req.sends,3));setTimeout(sendFunc,backoff)}else sendFunc();req.sends++,this._conn.xmlOutput!==Strophe.Connection.prototype.xmlOutput&&this._conn.xmlOutput(req.xmlData.nodeName===this.strip&&req.xmlData.childNodes.length?req.xmlData.childNodes[0]:req.xmlData),this._conn.rawOutput!==Strophe.Connection.prototype.rawOutput&&this._conn.rawOutput(req.data)}else Strophe.debug("_processRequest: "+(0===i?"first":"second")+" request has readyState of "+req.xhr.readyState)},_removeRequest:function(req){Strophe.debug("removing request");var i;for(i=this._requests.length-1;i>=0;i--)req==this._requests[i]&&this._requests.splice(i,1);req.xhr.onreadystatechange=function(){},this._throttledRequestHandler()},_restartRequest:function(i){var req=this._requests[i];null===req.dead&&(req.dead=new Date),this._processRequest(i)},_reqToData:function(req){try{return req.getResponse()}catch(e){if("parsererror"!=e)throw e;this._conn.disconnect("strophe-parsererror")}},_sendTerminate:function(pres){Strophe.info("_sendTerminate was called");var body=this._buildBody().attrs({type:"terminate"});pres&&body.cnode(pres.tree());var req=new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),body.tree().getAttribute("rid"));this._requests.push(req),this._throttledRequestHandler()},_send:function(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout(this._conn._onIdle.bind(this._conn),100)},_sendRestart:function(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)},_throttledRequestHandler:function(){Strophe.debug(this._requests?"_throttledRequestHandler called with "+this._requests.length+" requests":"_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window&&this._processRequest(1))}},Strophe.Websocket=function(connection){this._conn=connection,this.strip="stream:stream";var service=connection.service;if(0!==service.indexOf("ws:")&&0!==service.indexOf("wss:")){var new_service="";new_service+="ws"===connection.options.protocol&&"https:"!==window.location.protocol?"ws":"wss",new_service+="://"+window.location.host,new_service+=0!==service.indexOf("/")?window.location.pathname+service:service,connection.service=new_service}},Strophe.Websocket.prototype={_buildStream:function(){return $build("stream:stream",{to:this._conn.domain,xmlns:Strophe.NS.CLIENT,"xmlns:stream":Strophe.NS.STREAM,version:"1.0"})},_check_streamerror:function(bodyWrap,connectstatus){var errors=bodyWrap.getElementsByTagName("stream:error");if(0===errors.length)return!1;for(var error=errors[0],condition="",text="",ns="urn:ietf:params:xml:ns:xmpp-streams",i=0;i<error.childNodes.length;i++){var e=error.childNodes[i];if(e.getAttribute("xmlns")!==ns)break;"text"===e.nodeName?text=e.textContent:condition=e.nodeName}var errorString="WebSocket stream error: ";return errorString+=condition?condition:"unknown",text&&(errorString+=" - "+condition),Strophe.error(errorString),this._conn._changeConnectStatus(connectstatus,condition),this._conn._doDisconnect(),!0},_reset:function(){},_connect:function(){this._closeSocket(),this.socket=new WebSocket(this._conn.service,"xmpp"),this.socket.onopen=this._onOpen.bind(this),this.socket.onerror=this._onError.bind(this),this.socket.onclose=this._onClose.bind(this),this.socket.onmessage=this._connect_cb_wrapper.bind(this)},_connect_cb:function(bodyWrap){var error=this._check_streamerror(bodyWrap,Strophe.Status.CONNFAIL);return error?Strophe.Status.CONNFAIL:void 0},_handleStreamStart:function(message){var error=!1,ns=message.getAttribute("xmlns");"string"!=typeof ns?error="Missing xmlns in stream:stream":ns!==Strophe.NS.CLIENT&&(error="Wrong xmlns in stream:stream: "+ns);var ns_stream=message.namespaceURI;"string"!=typeof ns_stream?error="Missing xmlns:stream in stream:stream":ns_stream!==Strophe.NS.STREAM&&(error="Wrong xmlns:stream in stream:stream: "+ns_stream);var ver=message.getAttribute("version");return"string"!=typeof ver?error="Missing version in stream:stream":"1.0"!==ver&&(error="Wrong version in stream:stream: "+ver),error?(this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,error),this._conn._doDisconnect(),!1):!0},_connect_cb_wrapper:function(message){if(0===message.data.indexOf("<stream:stream ")||0===message.data.indexOf("<?xml")){var data=message.data.replace(/^(<\?.*?\?>\s*)*/,"");if(""===data)return;data=message.data.replace(/<stream:stream (.*[^\/])>/,"<stream:stream $1/>");var streamStart=(new DOMParser).parseFromString(data,"text/xml").documentElement;this._conn.xmlInput(streamStart),this._conn.rawInput(message.data),this._handleStreamStart(streamStart)&&(this._connect_cb(streamStart),this.streamStart=message.data.replace(/^<stream:(.*)\/>$/,"<stream:$1>"))}else{if("</stream:stream>"===message.data)return this._conn.rawInput(message.data),this._conn.xmlInput(document.createElement("stream:stream")),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"Received closing stream"),void this._conn._doDisconnect();var string=this._streamWrap(message.data),elem=(new DOMParser).parseFromString(string,"text/xml").documentElement;this.socket.onmessage=this._onMessage.bind(this),this._conn._connect_cb(elem,null,message.data)}},_disconnect:function(pres){if(this.socket.readyState!==WebSocket.CLOSED){pres&&this._conn.send(pres);var close="</stream:stream>";this._conn.xmlOutput(document.createElement("stream:stream")),this._conn.rawOutput(close);try{this.socket.send(close)}catch(e){Strophe.info("Couldn't send closing stream tag.")}}this._conn._doDisconnect()},_doDisconnect:function(){Strophe.info("WebSockets _doDisconnect was called"),this._closeSocket()},_streamWrap:function(stanza){return this.streamStart+stanza+"</stream:stream>"},_closeSocket:function(){if(this.socket)try{this.socket.close()}catch(e){}this.socket=null},_emptyQueue:function(){return!0},_onClose:function(){this._conn.connected&&!this._conn.disconnecting?(Strophe.error("Websocket closed unexcectedly"),this._conn._doDisconnect()):Strophe.info("Websocket closed")},_no_auth_received:function(_callback){Strophe.error("Server did not send any auth methods"),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"Server did not send any auth methods"),_callback&&(_callback=_callback.bind(this._conn))(),this._conn._doDisconnect()},_onDisconnectTimeout:function(){},_onError:function(error){Strophe.error("Websocket error "+error),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"The WebSocket connection could not be established was disconnected."),this._disconnect()},_onIdle:function(){var data=this._conn._data;if(data.length>0&&!this._conn.paused){for(var i=0;i<data.length;i++)if(null!==data[i]){var stanza,rawStanza;"restart"===data[i]?(stanza=this._buildStream(),rawStanza=this._removeClosingTag(stanza),stanza=stanza.tree()):(stanza=data[i],rawStanza=Strophe.serialize(stanza)),this._conn.xmlOutput(stanza),this._conn.rawOutput(rawStanza),this.socket.send(rawStanza)}this._conn._data=[]}},_onMessage:function(message){var elem,data;if("</stream:stream>"===message.data){var close="</stream:stream>";return this._conn.rawInput(close),this._conn.xmlInput(document.createElement("stream:stream")),void(this._conn.disconnecting||this._conn._doDisconnect())}if(0===message.data.search("<stream:stream ")){if(data=message.data.replace(/<stream:stream (.*[^\/])>/,"<stream:stream $1/>"),elem=(new DOMParser).parseFromString(data,"text/xml").documentElement,!this._handleStreamStart(elem))return}else data=this._streamWrap(message.data),elem=(new DOMParser).parseFromString(data,"text/xml").documentElement;if(!this._check_streamerror(elem,Strophe.Status.ERROR))return this._conn.disconnecting&&"presence"===elem.firstChild.nodeName&&"unavailable"===elem.firstChild.getAttribute("type")?(this._conn.xmlInput(elem),void this._conn.rawInput(Strophe.serialize(elem))):void this._conn._dataRecv(elem,message.data)},_onOpen:function(){Strophe.info("Websocket open");var start=this._buildStream();this._conn.xmlOutput(start.tree());var startString=this._removeClosingTag(start);this._conn.rawOutput(startString),this.socket.send(startString)},_removeClosingTag:function(elem){var string=Strophe.serialize(elem);return string=string.replace(/<(stream:stream .*[^\/])\/>$/,"<$1>")},_reqToData:function(stanza){return stanza},_send:function(){this._conn.flush()},_sendRestart:function(){clearTimeout(this._conn._idleTimeout),this._conn._onIdle.bind(this._conn)()}};var Occupant,RoomConfig,XmppRoom,__bind=function(fn,me){return function(){return fn.apply(me,arguments)}};Strophe.addConnectionPlugin("muc",{_connection:null,rooms:{},roomNames:[],init:function(conn){return this._connection=conn,this._muc_handler=null,Strophe.addNamespace("MUC_OWNER",Strophe.NS.MUC+"#owner"),Strophe.addNamespace("MUC_ADMIN",Strophe.NS.MUC+"#admin"),Strophe.addNamespace("MUC_USER",Strophe.NS.MUC+"#user"),Strophe.addNamespace("MUC_ROOMCONF",Strophe.NS.MUC+"#roomconfig")},join:function(room,nick,msg_handler_cb,pres_handler_cb,roster_cb,password,history_attrs,extended_presence){var msg,room_nick,_ref,_this=this;return room_nick=this.test_append_nick(room,nick),msg=$pres({from:this._connection.jid,to:room_nick}).c("x",{xmlns:Strophe.NS.MUC}),null!=history_attrs&&(msg=msg.c("history",history_attrs).up()),null!=password&&msg.cnode(Strophe.xmlElement("password",[],password)),null!=extended_presence&&msg.up().cnode(extended_presence),null==(_ref=this._muc_handler)&&(this._muc_handler=this._connection.addHandler(function(stanza){var from,handler,handlers,id,roomname,x,xmlns,xquery,_i,_len;if(from=stanza.getAttribute("from"),!from)return!0;if(roomname=from.split("/")[0],!_this.rooms[roomname])return!0;if(room=_this.rooms[roomname],handlers={},"message"===stanza.nodeName)handlers=room._message_handlers;else if("presence"===stanza.nodeName&&(xquery=stanza.getElementsByTagName("x"),xquery.length>0))for(_i=0,_len=xquery.length;_len>_i;_i++)if(x=xquery[_i],xmlns=x.getAttribute("xmlns"),xmlns&&xmlns.match(Strophe.NS.MUC)){handlers=room._presence_handlers;break}for(id in handlers)handler=handlers[id],handler(stanza,room)||delete handlers[id];return!0})),this.rooms.hasOwnProperty(room)||(this.rooms[room]=new XmppRoom(this,room,nick,password),this.roomNames.push(room)),pres_handler_cb&&this.rooms[room].addHandler("presence",pres_handler_cb),msg_handler_cb&&this.rooms[room].addHandler("message",msg_handler_cb),roster_cb&&this.rooms[room].addHandler("roster",roster_cb),this._connection.send(msg)},leave:function(room,nick,handler_cb,exit_msg){var id,presence,presenceid,room_nick;return id=this.roomNames.indexOf(room),delete this.rooms[room],id>=0&&(this.roomNames.splice(id,1),0===this.roomNames.length&&(this._connection.deleteHandler(this._muc_handler),this._muc_handler=null)),room_nick=this.test_append_nick(room,nick),presenceid=this._connection.getUniqueId(),presence=$pres({type:"unavailable",id:presenceid,from:this._connection.jid,to:room_nick}),null!=exit_msg&&presence.c("status",exit_msg),null!=handler_cb&&this._connection.addHandler(handler_cb,null,"presence",null,presenceid),this._connection.send(presence),presenceid},message:function(room,nick,message,html_message,type){var msg,msgid,parent,room_nick;return room_nick=this.test_append_nick(room,nick),type=type||(null!=nick?"chat":"groupchat"),msgid=this._connection.getUniqueId(),msg=$msg({to:room_nick,from:this._connection.jid,type:type,id:msgid}).c("body",{xmlns:Strophe.NS.CLIENT}).t(message),msg.up(),null!=html_message&&(msg.c("html",{xmlns:Strophe.NS.XHTML_IM}).c("body",{xmlns:Strophe.NS.XHTML}).t(html_message),0===msg.node.childNodes.length?(parent=msg.node.parentNode,msg.up().up(),msg.node.removeChild(parent)):msg.up().up()),msg.c("x",{xmlns:"jabber:x:event"}).c("composing"),this._connection.send(msg),msgid},groupchat:function(room,message,html_message){return this.message(room,null,message,html_message)},invite:function(room,receiver,reason){var invitation,msgid;return msgid=this._connection.getUniqueId(),invitation=$msg({from:this._connection.jid,to:room,id:msgid}).c("x",{xmlns:Strophe.NS.MUC_USER}).c("invite",{to:receiver}),null!=reason&&invitation.c("reason",reason),this._connection.send(invitation),msgid},directInvite:function(room,receiver,reason,password){var attrs,invitation,msgid;return msgid=this._connection.getUniqueId(),attrs={xmlns:"jabber:x:conference",jid:room},null!=reason&&(attrs.reason=reason),null!=password&&(attrs.password=password),invitation=$msg({from:this._connection.jid,to:receiver,id:msgid}).c("x",attrs),this._connection.send(invitation),msgid},queryOccupants:function(room,success_cb,error_cb){var attrs,info;return attrs={xmlns:Strophe.NS.DISCO_ITEMS},info=$iq({from:this._connection.jid,to:room,type:"get"}).c("query",attrs),this._connection.sendIQ(info,success_cb,error_cb)},configure:function(room,handler_cb,error_cb){var config,stanza;return config=$iq({to:room,type:"get"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}),stanza=config.tree(),this._connection.sendIQ(stanza,handler_cb,error_cb)},cancelConfigure:function(room){var config,stanza;return config=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}).c("x",{xmlns:"jabber:x:data",type:"cancel"}),stanza=config.tree(),this._connection.sendIQ(stanza)},saveConfiguration:function(room,config,success_cb,error_cb){var conf,iq,stanza,_i,_len;if(iq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}),config instanceof Form)config.type="submit",iq.cnode(config.toXML());else for(iq.c("x",{xmlns:"jabber:x:data",type:"submit"}),_i=0,_len=config.length;_len>_i;_i++)conf=config[_i],iq.cnode(conf).up();return stanza=iq.tree(),this._connection.sendIQ(stanza,success_cb,error_cb)},createInstantRoom:function(room,success_cb,error_cb){var roomiq;return roomiq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}).c("x",{xmlns:"jabber:x:data",type:"submit"}),this._connection.sendIQ(roomiq.tree(),success_cb,error_cb)},setTopic:function(room,topic){var msg;return msg=$msg({to:room,from:this._connection.jid,type:"groupchat"}).c("subject",{xmlns:"jabber:client"}).t(topic),this._connection.send(msg.tree())},_modifyPrivilege:function(room,item,reason,handler_cb,error_cb){var iq;return iq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_ADMIN}).cnode(item.node),null!=reason&&iq.c("reason",reason),this._connection.sendIQ(iq.tree(),handler_cb,error_cb)},modifyRole:function(room,nick,role,reason,handler_cb,error_cb){var item;return item=$build("item",{nick:nick,role:role}),this._modifyPrivilege(room,item,reason,handler_cb,error_cb)},kick:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"none",reason,handler_cb,error_cb)},voice:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"participant",reason,handler_cb,error_cb)},mute:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"visitor",reason,handler_cb,error_cb)},op:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"moderator",reason,handler_cb,error_cb)},deop:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"participant",reason,handler_cb,error_cb)},modifyAffiliation:function(room,jid,affiliation,reason,handler_cb,error_cb){var item;return item=$build("item",{jid:jid,affiliation:affiliation}),this._modifyPrivilege(room,item,reason,handler_cb,error_cb)},ban:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"outcast",reason,handler_cb,error_cb)},member:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"member",reason,handler_cb,error_cb)},revoke:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"none",reason,handler_cb,error_cb)},owner:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"owner",reason,handler_cb,error_cb)},admin:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"admin",reason,handler_cb,error_cb)},changeNick:function(room,user){var presence,room_nick;return room_nick=this.test_append_nick(room,user),presence=$pres({from:this._connection.jid,to:room_nick,id:this._connection.getUniqueId()}),this._connection.send(presence.tree())},setStatus:function(room,user,show,status){var presence,room_nick;return room_nick=this.test_append_nick(room,user),presence=$pres({from:this._connection.jid,to:room_nick}),null!=show&&presence.c("show",show).up(),null!=status&&presence.c("status",status),this._connection.send(presence.tree())},listRooms:function(server,handle_cb,error_cb){var iq;return iq=$iq({to:server,from:this._connection.jid,type:"get"}).c("query",{xmlns:Strophe.NS.DISCO_ITEMS}),this._connection.sendIQ(iq,handle_cb,error_cb)},test_append_nick:function(room,nick){return room+(null!=nick?"/"+Strophe.escapeNode(nick):"")}}),XmppRoom=function(){function XmppRoom(client,name,nick,password){this.client=client,this.name=name,this.nick=nick,this.password=password,this._roomRosterHandler=__bind(this._roomRosterHandler,this),this._addOccupant=__bind(this._addOccupant,this),this.roster={},this._message_handlers={},this._presence_handlers={},this._roster_handlers={},this._handler_ids=0,client.muc&&(this.client=client.muc),this.name=Strophe.getBareJidFromJid(name),this.addHandler("presence",this._roomRosterHandler)}return XmppRoom.prototype.join=function(msg_handler_cb,pres_handler_cb,roster_cb){return this.client.join(this.name,this.nick,msg_handler_cb,pres_handler_cb,roster_cb,this.password)},XmppRoom.prototype.leave=function(handler_cb,message){return this.client.leave(this.name,this.nick,handler_cb,message),delete this.client.rooms[this.name]},XmppRoom.prototype.message=function(nick,message,html_message,type){return this.client.message(this.name,nick,message,html_message,type)},XmppRoom.prototype.groupchat=function(message,html_message){return this.client.groupchat(this.name,message,html_message)},XmppRoom.prototype.invite=function(receiver,reason){return this.client.invite(this.name,receiver,reason)},XmppRoom.prototype.directInvite=function(receiver,reason){return this.client.directInvite(this.name,receiver,reason,this.password)},XmppRoom.prototype.configure=function(handler_cb){return this.client.configure(this.name,handler_cb)},XmppRoom.prototype.cancelConfigure=function(){return this.client.cancelConfigure(this.name)},XmppRoom.prototype.saveConfiguration=function(config){return this.client.saveConfiguration(this.name,config)},XmppRoom.prototype.queryOccupants=function(success_cb,error_cb){return this.client.queryOccupants(this.name,success_cb,error_cb)},XmppRoom.prototype.setTopic=function(topic){return this.client.setTopic(this.name,topic)},XmppRoom.prototype.modifyRole=function(nick,role,reason,success_cb,error_cb){return this.client.modifyRole(this.name,nick,role,reason,success_cb,error_cb)},XmppRoom.prototype.kick=function(nick,reason,handler_cb,error_cb){return this.client.kick(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.voice=function(nick,reason,handler_cb,error_cb){return this.client.voice(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.mute=function(nick,reason,handler_cb,error_cb){return this.client.mute(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.op=function(nick,reason,handler_cb,error_cb){return this.client.op(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.deop=function(nick,reason,handler_cb,error_cb){return this.client.deop(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.modifyAffiliation=function(jid,affiliation,reason,success_cb,error_cb){return this.client.modifyAffiliation(this.name,jid,affiliation,reason,success_cb,error_cb)},XmppRoom.prototype.ban=function(jid,reason,handler_cb,error_cb){return this.client.ban(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.member=function(jid,reason,handler_cb,error_cb){return this.client.member(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.revoke=function(jid,reason,handler_cb,error_cb){return this.client.revoke(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.owner=function(jid,reason,handler_cb,error_cb){return this.client.owner(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.admin=function(jid,reason,handler_cb,error_cb){return this.client.admin(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.changeNick=function(nick){return this.nick=nick,this.client.changeNick(this.name,nick)},XmppRoom.prototype.setStatus=function(show,status){return this.client.setStatus(this.name,this.nick,show,status)},XmppRoom.prototype.addHandler=function(handler_type,handler){var id;switch(id=this._handler_ids++,handler_type){case"presence":this._presence_handlers[id]=handler;break;case"message":this._message_handlers[id]=handler;break;case"roster":this._roster_handlers[id]=handler;break;default:return this._handler_ids--,null}return id},XmppRoom.prototype.removeHandler=function(id){return delete this._presence_handlers[id],delete this._message_handlers[id],delete this._roster_handlers[id]},XmppRoom.prototype._addOccupant=function(data){var occ;return occ=new Occupant(data,this),this.roster[occ.nick]=occ,occ},XmppRoom.prototype._roomRosterHandler=function(pres){var data,handler,id,newnick,nick,_ref;switch(data=XmppRoom._parsePresence(pres),nick=data.nick,newnick=data.newnick||null,data.type){case"error":return;case"unavailable":newnick&&(data.nick=newnick,this.roster[nick]&&this.roster[newnick]&&(this.roster[nick].update(this.roster[newnick]),this.roster[newnick]=this.roster[nick]),this.roster[nick]&&!this.roster[newnick]&&(this.roster[newnick]=this.roster[nick].update(data))),delete this.roster[nick];break;default:this.roster[nick]?this.roster[nick].update(data):this._addOccupant(data)}_ref=this._roster_handlers;for(id in _ref)handler=_ref[id],handler(this.roster,this)||delete this._roster_handlers[id];return!0},XmppRoom._parsePresence=function(pres){var a,c,c2,data,_i,_j,_len,_len1,_ref,_ref1,_ref2,_ref3,_ref4,_ref5,_ref6,_ref7;for(data={},a=pres.attributes,data.nick=Strophe.getResourceFromJid(a.from.textContent),data.type=(null!=(_ref=a.type)?_ref.textContent:void 0)||null,data.states=[],_ref1=pres.childNodes,_i=0,_len=_ref1.length;_len>_i;_i++)switch(c=_ref1[_i],c.nodeName){case"status":data.status=c.textContent||null;break;case"show":data.show=c.textContent||null;break;case"x":if(a=c.attributes,(null!=(_ref2=a.xmlns)?_ref2.textContent:void 0)===Strophe.NS.MUC_USER)for(_ref3=c.childNodes,_j=0,_len1=_ref3.length;_len1>_j;_j++)switch(c2=_ref3[_j],c2.nodeName){
-case"item":a=c2.attributes,data.affiliation=(null!=(_ref4=a.affiliation)?_ref4.textContent:void 0)||null,data.role=(null!=(_ref5=a.role)?_ref5.textContent:void 0)||null,data.jid=(null!=(_ref6=a.jid)?_ref6.textContent:void 0)||null,data.newnick=(null!=(_ref7=a.nick)?_ref7.textContent:void 0)||null;break;case"status":c2.attributes.code&&data.states.push(c2.attributes.code.textContent)}}return data},XmppRoom}(),RoomConfig=function(){function RoomConfig(info){this.parse=__bind(this.parse,this),null!=info&&this.parse(info)}return RoomConfig.prototype.parse=function(result){var attr,attrs,child,field,identity,query,_i,_j,_k,_len,_len1,_len2,_ref;for(query=result.getElementsByTagName("query")[0].childNodes,this.identities=[],this.features=[],this.x=[],_i=0,_len=query.length;_len>_i;_i++)switch(child=query[_i],attrs=child.attributes,child.nodeName){case"identity":for(identity={},_j=0,_len1=attrs.length;_len1>_j;_j++)attr=attrs[_j],identity[attr.name]=attr.textContent;this.identities.push(identity);break;case"feature":this.features.push(attrs["var"].textContent);break;case"x":if(attrs=child.childNodes[0].attributes,"FORM_TYPE"===!attrs["var"].textContent||"hidden"===!attrs.type.textContent)break;for(_ref=child.childNodes,_k=0,_len2=_ref.length;_len2>_k;_k++)field=_ref[_k],field.attributes.type||(attrs=field.attributes,this.x.push({"var":attrs["var"].textContent,label:attrs.label.textContent||"",value:field.firstChild.textContent||""}))}return{identities:this.identities,features:this.features,x:this.x}},RoomConfig}(),Occupant=function(){function Occupant(data,room){this.room=room,this.update=__bind(this.update,this),this.admin=__bind(this.admin,this),this.owner=__bind(this.owner,this),this.revoke=__bind(this.revoke,this),this.member=__bind(this.member,this),this.ban=__bind(this.ban,this),this.modifyAffiliation=__bind(this.modifyAffiliation,this),this.deop=__bind(this.deop,this),this.op=__bind(this.op,this),this.mute=__bind(this.mute,this),this.voice=__bind(this.voice,this),this.kick=__bind(this.kick,this),this.modifyRole=__bind(this.modifyRole,this),this.update(data)}return Occupant.prototype.modifyRole=function(role,reason,success_cb,error_cb){return this.room.modifyRole(this.nick,role,reason,success_cb,error_cb)},Occupant.prototype.kick=function(reason,handler_cb,error_cb){return this.room.kick(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.voice=function(reason,handler_cb,error_cb){return this.room.voice(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.mute=function(reason,handler_cb,error_cb){return this.room.mute(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.op=function(reason,handler_cb,error_cb){return this.room.op(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.deop=function(reason,handler_cb,error_cb){return this.room.deop(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.modifyAffiliation=function(affiliation,reason,success_cb,error_cb){return this.room.modifyAffiliation(this.jid,affiliation,reason,success_cb,error_cb)},Occupant.prototype.ban=function(reason,handler_cb,error_cb){return this.room.ban(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.member=function(reason,handler_cb,error_cb){return this.room.member(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.revoke=function(reason,handler_cb,error_cb){return this.room.revoke(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.owner=function(reason,handler_cb,error_cb){return this.room.owner(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.admin=function(reason,handler_cb,error_cb){return this.room.admin(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.update=function(data){return this.nick=data.nick||null,this.affiliation=data.affiliation||null,this.role=data.role||null,this.jid=data.jid||null,this.status=data.status||null,this.show=data.show||null,this},Occupant}(),Strophe.addConnectionPlugin("disco",{_connection:null,_identities:[],_features:[],_items:[],init:function(conn){this._connection=conn,this._identities=[],this._features=[],this._items=[],conn.addHandler(this._onDiscoInfo.bind(this),Strophe.NS.DISCO_INFO,"iq","get",null,null),conn.addHandler(this._onDiscoItems.bind(this),Strophe.NS.DISCO_ITEMS,"iq","get",null,null)},addIdentity:function(category,type,name,lang){for(var i=0;i<this._identities.length;i++)if(this._identities[i].category==category&&this._identities[i].type==type&&this._identities[i].name==name&&this._identities[i].lang==lang)return!1;return this._identities.push({category:category,type:type,name:name,lang:lang}),!0},addFeature:function(var_name){for(var i=0;i<this._features.length;i++)if(this._features[i]==var_name)return!1;return this._features.push(var_name),!0},removeFeature:function(var_name){for(var i=0;i<this._features.length;i++)if(this._features[i]===var_name)return this._features.splice(i,1),!0;return!1},addItem:function(jid,name,node,call_back){return node&&!call_back?!1:(this._items.push({jid:jid,name:name,node:node,call_back:call_back}),!0)},info:function(jid,node,success,error,timeout){var attrs={xmlns:Strophe.NS.DISCO_INFO};node&&(attrs.node=node);var info=$iq({from:this._connection.jid,to:jid,type:"get"}).c("query",attrs);this._connection.sendIQ(info,success,error,timeout)},items:function(jid,node,success,error,timeout){var attrs={xmlns:Strophe.NS.DISCO_ITEMS};node&&(attrs.node=node);var items=$iq({from:this._connection.jid,to:jid,type:"get"}).c("query",attrs);this._connection.sendIQ(items,success,error,timeout)},_buildIQResult:function(stanza,query_attrs){var id=stanza.getAttribute("id"),from=stanza.getAttribute("from"),iqresult=$iq({type:"result",id:id});return null!==from&&iqresult.attrs({to:from}),iqresult.c("query",query_attrs)},_onDiscoInfo:function(stanza){var node=stanza.getElementsByTagName("query")[0].getAttribute("node"),attrs={xmlns:Strophe.NS.DISCO_INFO};node&&(attrs.node=node);for(var iqresult=this._buildIQResult(stanza,attrs),i=0;i<this._identities.length;i++){var attrs={category:this._identities[i].category,type:this._identities[i].type};this._identities[i].name&&(attrs.name=this._identities[i].name),this._identities[i].lang&&(attrs["xml:lang"]=this._identities[i].lang),iqresult.c("identity",attrs).up()}for(var i=0;i<this._features.length;i++)iqresult.c("feature",{"var":this._features[i]}).up();return this._connection.send(iqresult.tree()),!0},_onDiscoItems:function(stanza){var query_attrs={xmlns:Strophe.NS.DISCO_ITEMS},node=stanza.getElementsByTagName("query")[0].getAttribute("node");if(node){query_attrs.node=node;for(var items=[],i=0;i<this._items.length;i++)if(this._items[i].node==node){items=this._items[i].call_back(stanza);break}}else var items=this._items;for(var iqresult=this._buildIQResult(stanza,query_attrs),i=0;i<items.length;i++){var attrs={jid:items[i].jid};items[i].name&&(attrs.name=items[i].name),items[i].node&&(attrs.node=items[i].node),iqresult.c("item",attrs).up()}return this._connection.send(iqresult.tree()),!0}}),/**
+Function.prototype.bind||(Function.prototype.bind=function(obj){var func=this,_slice=Array.prototype.slice,_concat=Array.prototype.concat,_args=_slice.call(arguments,1);return function(){return func.apply(obj?obj:this,_concat.call(_args,_slice.call(arguments,0)))}}),Array.prototype.indexOf||(Array.prototype.indexOf=function(elt){var len=this.length,from=Number(arguments[1])||0;for(from=0>from?Math.ceil(from):Math.floor(from),0>from&&(from+=len);len>from;from++)if(from in this&&this[from]===elt)return from;return-1}),function(callback){function $build(name,attrs){return new Strophe.Builder(name,attrs)}function $msg(attrs){return new Strophe.Builder("message",attrs)}function $iq(attrs){return new Strophe.Builder("iq",attrs)}function $pres(attrs){return new Strophe.Builder("presence",attrs)}var Strophe;Strophe={VERSION:"1.1.3",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas",XHTML_IM:"http://jabber.org/protocol/xhtml-im",XHTML:"http://www.w3.org/1999/xhtml"},XHTML:{tags:["a","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body"],attributes:{a:["href"],blockquote:["style"],br:[],cite:["style"],em:[],img:["src","alt","style","height","width"],li:["style"],ol:["style"],p:["style"],span:["style"],strong:[],ul:["style"],body:[]},css:["background-color","color","font-family","font-size","font-style","font-weight","margin-left","margin-right","text-align","text-decoration"],validTag:function(tag){for(var i=0;i<Strophe.XHTML.tags.length;i++)if(tag==Strophe.XHTML.tags[i])return!0;return!1},validAttribute:function(tag,attribute){if("undefined"!=typeof Strophe.XHTML.attributes[tag]&&Strophe.XHTML.attributes[tag].length>0)for(var i=0;i<Strophe.XHTML.attributes[tag].length;i++)if(attribute==Strophe.XHTML.attributes[tag][i])return!0;return!1},validCSS:function(style){for(var i=0;i<Strophe.XHTML.css.length;i++)if(style==Strophe.XHTML.css[i])return!0;return!1}},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3,CDATA:4,FRAGMENT:11},TIMEOUT:1.1,SECONDARY_TIMEOUT:.1,addNamespace:function(name,value){Strophe.NS[name]=value},forEachChild:function(elem,elemName,func){var i,childNode;for(i=0;i<elem.childNodes.length;i++)childNode=elem.childNodes[i],childNode.nodeType!=Strophe.ElementType.NORMAL||elemName&&!this.isTagEqual(childNode,elemName)||func(childNode)},isTagEqual:function(el,name){return el.tagName.toLowerCase()==name.toLowerCase()},_xmlGenerator:null,_makeGenerator:function(){var doc;return void 0===document.implementation.createDocument||document.implementation.createDocument&&document.documentMode&&document.documentMode<10?(doc=this._getIEXmlDom(),doc.appendChild(doc.createElement("strophe"))):doc=document.implementation.createDocument("jabber:client","strophe",null),doc},xmlGenerator:function(){return Strophe._xmlGenerator||(Strophe._xmlGenerator=Strophe._makeGenerator()),Strophe._xmlGenerator},_getIEXmlDom:function(){for(var doc=null,docStrings=["Msxml2.DOMDocument.6.0","Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","MSXML.DOMDocument","Microsoft.XMLDOM"],d=0;d<docStrings.length&&null===doc;d++)try{doc=new ActiveXObject(docStrings[d])}catch(e){doc=null}return doc},xmlElement:function(name){if(!name)return null;var a,i,k,node=Strophe.xmlGenerator().createElement(name);for(a=1;a<arguments.length;a++)if(arguments[a])if("string"==typeof arguments[a]||"number"==typeof arguments[a])node.appendChild(Strophe.xmlTextNode(arguments[a]));else if("object"==typeof arguments[a]&&"function"==typeof arguments[a].sort)for(i=0;i<arguments[a].length;i++)"object"==typeof arguments[a][i]&&"function"==typeof arguments[a][i].sort&&node.setAttribute(arguments[a][i][0],arguments[a][i][1]);else if("object"==typeof arguments[a])for(k in arguments[a])arguments[a].hasOwnProperty(k)&&node.setAttribute(k,arguments[a][k]);return node},xmlescape:function(text){return text=text.replace(/\&/g,"&amp;"),text=text.replace(/</g,"&lt;"),text=text.replace(/>/g,"&gt;"),text=text.replace(/'/g,"&apos;"),text=text.replace(/"/g,"&quot;")},xmlTextNode:function(text){return Strophe.xmlGenerator().createTextNode(text)},xmlHtmlNode:function(html){var node;if(window.DOMParser){var parser=new DOMParser;node=parser.parseFromString(html,"text/xml")}else node=new ActiveXObject("Microsoft.XMLDOM"),node.async="false",node.loadXML(html);return node},getText:function(elem){if(!elem)return null;var str="";0===elem.childNodes.length&&elem.nodeType==Strophe.ElementType.TEXT&&(str+=elem.nodeValue);for(var i=0;i<elem.childNodes.length;i++)elem.childNodes[i].nodeType==Strophe.ElementType.TEXT&&(str+=elem.childNodes[i].nodeValue);return Strophe.xmlescape(str)},copyElement:function(elem){var i,el;if(elem.nodeType==Strophe.ElementType.NORMAL){for(el=Strophe.xmlElement(elem.tagName),i=0;i<elem.attributes.length;i++)el.setAttribute(elem.attributes[i].nodeName.toLowerCase(),elem.attributes[i].value);for(i=0;i<elem.childNodes.length;i++)el.appendChild(Strophe.copyElement(elem.childNodes[i]))}else elem.nodeType==Strophe.ElementType.TEXT&&(el=Strophe.xmlGenerator().createTextNode(elem.nodeValue));return el},createHtml:function(elem){var i,el,j,tag,attribute,value,css,cssAttrs,attr,cssName,cssValue;if(elem.nodeType==Strophe.ElementType.NORMAL)if(tag=elem.nodeName.toLowerCase(),Strophe.XHTML.validTag(tag))try{for(el=Strophe.xmlElement(tag),i=0;i<Strophe.XHTML.attributes[tag].length;i++)if(attribute=Strophe.XHTML.attributes[tag][i],value=elem.getAttribute(attribute),"undefined"!=typeof value&&null!==value&&""!==value&&value!==!1&&0!==value)if("style"==attribute&&"object"==typeof value&&"undefined"!=typeof value.cssText&&(value=value.cssText),"style"==attribute){for(css=[],cssAttrs=value.split(";"),j=0;j<cssAttrs.length;j++)attr=cssAttrs[j].split(":"),cssName=attr[0].replace(/^\s*/,"").replace(/\s*$/,"").toLowerCase(),Strophe.XHTML.validCSS(cssName)&&(cssValue=attr[1].replace(/^\s*/,"").replace(/\s*$/,""),css.push(cssName+": "+cssValue));css.length>0&&(value=css.join("; "),el.setAttribute(attribute,value))}else el.setAttribute(attribute,value);for(i=0;i<elem.childNodes.length;i++)el.appendChild(Strophe.createHtml(elem.childNodes[i]))}catch(e){el=Strophe.xmlTextNode("")}else for(el=Strophe.xmlGenerator().createDocumentFragment(),i=0;i<elem.childNodes.length;i++)el.appendChild(Strophe.createHtml(elem.childNodes[i]));else if(elem.nodeType==Strophe.ElementType.FRAGMENT)for(el=Strophe.xmlGenerator().createDocumentFragment(),i=0;i<elem.childNodes.length;i++)el.appendChild(Strophe.createHtml(elem.childNodes[i]));else elem.nodeType==Strophe.ElementType.TEXT&&(el=Strophe.xmlTextNode(elem.nodeValue));return el},escapeNode:function(node){return node.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40")},unescapeNode:function(node){return node.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\")},getNodeFromJid:function(jid){return jid.indexOf("@")<0?null:jid.split("@")[0]},getDomainFromJid:function(jid){var bare=Strophe.getBareJidFromJid(jid);if(bare.indexOf("@")<0)return bare;var parts=bare.split("@");return parts.splice(0,1),parts.join("@")},getResourceFromJid:function(jid){var s=jid.split("/");return s.length<2?null:(s.splice(0,1),s.join("/"))},getBareJidFromJid:function(jid){return jid?jid.split("/")[0]:null},log:function(){},debug:function(msg){this.log(this.LogLevel.DEBUG,msg)},info:function(msg){this.log(this.LogLevel.INFO,msg)},warn:function(msg){this.log(this.LogLevel.WARN,msg)},error:function(msg){this.log(this.LogLevel.ERROR,msg)},fatal:function(msg){this.log(this.LogLevel.FATAL,msg)},serialize:function(elem){var result;if(!elem)return null;"function"==typeof elem.tree&&(elem=elem.tree());var i,child,nodeName=elem.nodeName;for(elem.getAttribute("_realname")&&(nodeName=elem.getAttribute("_realname")),result="<"+nodeName,i=0;i<elem.attributes.length;i++)"_realname"!=elem.attributes[i].nodeName&&(result+=" "+elem.attributes[i].nodeName.toLowerCase()+"='"+elem.attributes[i].value.replace(/&/g,"&amp;").replace(/\'/g,"&apos;").replace(/>/g,"&gt;").replace(/</g,"&lt;")+"'");if(elem.childNodes.length>0){for(result+=">",i=0;i<elem.childNodes.length;i++)switch(child=elem.childNodes[i],child.nodeType){case Strophe.ElementType.NORMAL:result+=Strophe.serialize(child);break;case Strophe.ElementType.TEXT:result+=Strophe.xmlescape(child.nodeValue);break;case Strophe.ElementType.CDATA:result+="<![CDATA["+child.nodeValue+"]]>"}result+="</"+nodeName+">"}else result+="/>";return result},_requestId:0,_connectionPlugins:{},addConnectionPlugin:function(name,ptype){Strophe._connectionPlugins[name]=ptype}},Strophe.Builder=function(name,attrs){("presence"==name||"message"==name||"iq"==name)&&(attrs&&!attrs.xmlns?attrs.xmlns=Strophe.NS.CLIENT:attrs||(attrs={xmlns:Strophe.NS.CLIENT})),this.nodeTree=Strophe.xmlElement(name,attrs),this.node=this.nodeTree},Strophe.Builder.prototype={tree:function(){return this.nodeTree},toString:function(){return Strophe.serialize(this.nodeTree)},up:function(){return this.node=this.node.parentNode,this},attrs:function(moreattrs){for(var k in moreattrs)moreattrs.hasOwnProperty(k)&&this.node.setAttribute(k,moreattrs[k]);return this},c:function(name,attrs,text){var child=Strophe.xmlElement(name,attrs,text);return this.node.appendChild(child),text||(this.node=child),this},cnode:function(elem){var impNode,xmlGen=Strophe.xmlGenerator();try{impNode=void 0!==xmlGen.importNode}catch(e){impNode=!1}var newElem=impNode?xmlGen.importNode(elem,!0):Strophe.copyElement(elem);return this.node.appendChild(newElem),this.node=newElem,this},t:function(text){var child=Strophe.xmlTextNode(text);return this.node.appendChild(child),this},h:function(html){var fragment=document.createElement("body");fragment.innerHTML=html;for(var xhtml=Strophe.createHtml(fragment);xhtml.childNodes.length>0;)this.node.appendChild(xhtml.childNodes[0]);return this}},Strophe.Handler=function(handler,ns,name,type,id,from,options){this.handler=handler,this.ns=ns,this.name=name,this.type=type,this.id=id,this.options=options||{matchBare:!1},this.options.matchBare||(this.options.matchBare=!1),this.from=this.options.matchBare?from?Strophe.getBareJidFromJid(from):null:from,this.user=!0},Strophe.Handler.prototype={isMatch:function(elem){var nsMatch,from=null;if(from=this.options.matchBare?Strophe.getBareJidFromJid(elem.getAttribute("from")):elem.getAttribute("from"),nsMatch=!1,this.ns){var that=this;Strophe.forEachChild(elem,null,function(elem){elem.getAttribute("xmlns")==that.ns&&(nsMatch=!0)}),nsMatch=nsMatch||elem.getAttribute("xmlns")==this.ns}else nsMatch=!0;return!nsMatch||this.name&&!Strophe.isTagEqual(elem,this.name)||this.type&&elem.getAttribute("type")!=this.type||this.id&&elem.getAttribute("id")!=this.id||this.from&&from!=this.from?!1:!0},run:function(elem){var result=null;try{result=this.handler(elem)}catch(e){throw e.sourceURL?Strophe.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message):e.fileName?("undefined"!=typeof console&&(console.trace(),console.error(this.handler," - error - ",e,e.message)),Strophe.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message)):Strophe.fatal("error: "+e.message+"\n"+e.stack),e}return result},toString:function(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}},Strophe.TimedHandler=function(period,handler){this.period=period,this.handler=handler,this.lastCalled=(new Date).getTime(),this.user=!0},Strophe.TimedHandler.prototype={run:function(){return this.lastCalled=(new Date).getTime(),this.handler()},reset:function(){this.lastCalled=(new Date).getTime()},toString:function(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}},Strophe.Connection=function(service,options){this.service=service,this.options=options||{};var proto=this.options.protocol||"";this._proto=0===service.indexOf("ws:")||0===service.indexOf("wss:")||0===proto.indexOf("ws")?new Strophe.Websocket(this):new Strophe.Bosh(this),this.jid="",this.domain=null,this.features=null,this._sasl_data={},this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._authentication={},this._idleTimeout=null,this._disconnectTimeout=null,this.do_authentication=!0,this.authenticated=!1,this.disconnecting=!1,this.connected=!1,this.errors=0,this.paused=!1,this._data=[],this._uniqueId=0,this._sasl_success_handler=null,this._sasl_failure_handler=null,this._sasl_challenge_handler=null,this.maxRetries=5,this._idleTimeout=setTimeout(this._onIdle.bind(this),100);for(var k in Strophe._connectionPlugins)if(Strophe._connectionPlugins.hasOwnProperty(k)){var ptype=Strophe._connectionPlugins[k],F=function(){};F.prototype=ptype,this[k]=new F,this[k].init(this)}},Strophe.Connection.prototype={reset:function(){this._proto._reset(),this.do_session=!1,this.do_bind=!1,this.timedHandlers=[],this.handlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._authentication={},this.authenticated=!1,this.disconnecting=!1,this.connected=!1,this.errors=0,this._requests=[],this._uniqueId=0},pause:function(){this.paused=!0},resume:function(){this.paused=!1},getUniqueId:function(suffix){return"string"==typeof suffix||"number"==typeof suffix?++this._uniqueId+":"+suffix:++this._uniqueId+""},connect:function(jid,pass,callback,wait,hold,route){this.jid=jid,this.authzid=Strophe.getBareJidFromJid(this.jid),this.authcid=Strophe.getNodeFromJid(this.jid),this.pass=pass,this.servtype="xmpp",this.connect_callback=callback,this.disconnecting=!1,this.connected=!1,this.authenticated=!1,this.errors=0,this.domain=Strophe.getDomainFromJid(this.jid),this._changeConnectStatus(Strophe.Status.CONNECTING,null),this._proto._connect(wait,hold,route)},attach:function(jid,sid,rid,callback,wait,hold,wind){this._proto._attach(jid,sid,rid,callback,wait,hold,wind)},xmlInput:function(){},xmlOutput:function(){},rawInput:function(){},rawOutput:function(){},send:function(elem){if(null!==elem){if("function"==typeof elem.sort)for(var i=0;i<elem.length;i++)this._queueData(elem[i]);else this._queueData("function"==typeof elem.tree?elem.tree():elem);this._proto._send()}},flush:function(){clearTimeout(this._idleTimeout),this._onIdle()},sendIQ:function(elem,callback,errback,timeout){var timeoutHandler=null,that=this;"function"==typeof elem.tree&&(elem=elem.tree());var id=elem.getAttribute("id");id||(id=this.getUniqueId("sendIQ"),elem.setAttribute("id",id));var handler=this.addHandler(function(stanza){timeoutHandler&&that.deleteTimedHandler(timeoutHandler);var iqtype=stanza.getAttribute("type");if("result"==iqtype)callback&&callback(stanza);else{if("error"!=iqtype)throw{name:"StropheError",message:"Got bad IQ type of "+iqtype};errback&&errback(stanza)}},null,"iq",null,id);return timeout&&(timeoutHandler=this.addTimedHandler(timeout,function(){return that.deleteHandler(handler),errback&&errback(null),!1})),this.send(elem),id},_queueData:function(element){if(null===element||!element.tagName||!element.childNodes)throw{name:"StropheError",message:"Cannot queue non-DOMElement."};this._data.push(element)},_sendRestart:function(){this._data.push("restart"),this._proto._sendRestart(),this._idleTimeout=setTimeout(this._onIdle.bind(this),100)},addTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);return this.addTimeds.push(thand),thand},deleteTimedHandler:function(handRef){this.removeTimeds.push(handRef)},addHandler:function(handler,ns,name,type,id,from,options){var hand=new Strophe.Handler(handler,ns,name,type,id,from,options);return this.addHandlers.push(hand),hand},deleteHandler:function(handRef){this.removeHandlers.push(handRef)},disconnect:function(reason){if(this._changeConnectStatus(Strophe.Status.DISCONNECTING,reason),Strophe.info("Disconnect was called because: "+reason),this.connected){var pres=!1;this.disconnecting=!0,this.authenticated&&(pres=$pres({xmlns:Strophe.NS.CLIENT,type:"unavailable"})),this._disconnectTimeout=this._addSysTimedHandler(3e3,this._onDisconnectTimeout.bind(this)),this._proto._disconnect(pres)}},_changeConnectStatus:function(status,condition){for(var k in Strophe._connectionPlugins)if(Strophe._connectionPlugins.hasOwnProperty(k)){var plugin=this[k];if(plugin.statusChanged)try{plugin.statusChanged(status,condition)}catch(err){Strophe.error(""+k+" plugin caused an exception changing status: "+err)}}if(this.connect_callback)try{this.connect_callback(status,condition)}catch(e){Strophe.error("User connection callback caused an exception: "+e)}},_doDisconnect:function(){null!==this._disconnectTimeout&&(this.deleteTimedHandler(this._disconnectTimeout),this._disconnectTimeout=null),Strophe.info("_doDisconnect was called"),this._proto._doDisconnect(),this.authenticated=!1,this.disconnecting=!1,this.handlers=[],this.timedHandlers=[],this.removeTimeds=[],this.removeHandlers=[],this.addTimeds=[],this.addHandlers=[],this._changeConnectStatus(Strophe.Status.DISCONNECTED,null),this.connected=!1},_dataRecv:function(req,raw){Strophe.info("_dataRecv called");var elem=this._proto._reqToData(req);if(null!==elem){this.xmlInput!==Strophe.Connection.prototype.xmlInput&&this.xmlInput(elem.nodeName===this._proto.strip&&elem.childNodes.length?elem.childNodes[0]:elem),this.rawInput!==Strophe.Connection.prototype.rawInput&&this.rawInput(raw?raw:Strophe.serialize(elem));for(var i,hand;this.removeHandlers.length>0;)hand=this.removeHandlers.pop(),i=this.handlers.indexOf(hand),i>=0&&this.handlers.splice(i,1);for(;this.addHandlers.length>0;)this.handlers.push(this.addHandlers.pop());if(this.disconnecting&&this._proto._emptyQueue())return void this._doDisconnect();var cond,conflict,typ=elem.getAttribute("type");if(null!==typ&&"terminate"==typ){if(this.disconnecting)return;return cond=elem.getAttribute("condition"),conflict=elem.getElementsByTagName("conflict"),null!==cond?("remote-stream-error"==cond&&conflict.length>0&&(cond="conflict"),this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)):this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown"),void this.disconnect("unknown stream-error")}var that=this;Strophe.forEachChild(elem,null,function(child){var i,newList;for(newList=that.handlers,that.handlers=[],i=0;i<newList.length;i++){var hand=newList[i];try{!hand.isMatch(child)||!that.authenticated&&hand.user?that.handlers.push(hand):hand.run(child)&&that.handlers.push(hand)}catch(e){Strophe.warn("Removing Strophe handlers due to uncaught exception: "+e.message)}}})}},mechanisms:{},_connect_cb:function(req,_callback,raw){Strophe.info("_connect_cb was called"),this.connected=!0;var bodyWrap=this._proto._reqToData(req);if(bodyWrap){this.xmlInput!==Strophe.Connection.prototype.xmlInput&&this.xmlInput(bodyWrap.nodeName===this._proto.strip&&bodyWrap.childNodes.length?bodyWrap.childNodes[0]:bodyWrap),this.rawInput!==Strophe.Connection.prototype.rawInput&&this.rawInput(raw?raw:Strophe.serialize(bodyWrap));var conncheck=this._proto._connect_cb(bodyWrap);if(conncheck!==Strophe.Status.CONNFAIL){this._authentication.sasl_scram_sha1=!1,this._authentication.sasl_plain=!1,this._authentication.sasl_digest_md5=!1,this._authentication.sasl_anonymous=!1,this._authentication.legacy_auth=!1;var hasFeatures=bodyWrap.getElementsByTagName("stream:features").length>0;hasFeatures||(hasFeatures=bodyWrap.getElementsByTagName("features").length>0);var i,mech,mechanisms=bodyWrap.getElementsByTagName("mechanism"),matched=[],found_authentication=!1;if(!hasFeatures)return void this._proto._no_auth_received(_callback);if(mechanisms.length>0)for(i=0;i<mechanisms.length;i++)mech=Strophe.getText(mechanisms[i]),this.mechanisms[mech]&&matched.push(this.mechanisms[mech]);return this._authentication.legacy_auth=bodyWrap.getElementsByTagName("auth").length>0,(found_authentication=this._authentication.legacy_auth||matched.length>0)?void(this.do_authentication!==!1&&this.authenticate(matched)):void this._proto._no_auth_received(_callback)}}},authenticate:function(matched){var i;for(i=0;i<matched.length-1;++i){for(var higher=i,j=i+1;j<matched.length;++j)matched[j].prototype.priority>matched[higher].prototype.priority&&(higher=j);if(higher!=i){var swap=matched[i];matched[i]=matched[higher],matched[higher]=swap}}var mechanism_found=!1;for(i=0;i<matched.length;++i)if(matched[i].test(this)){this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null),this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null),this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge_cb.bind(this),null,"challenge",null,null),this._sasl_mechanism=new matched[i],this._sasl_mechanism.onStart(this);var request_auth_exchange=$build("auth",{xmlns:Strophe.NS.SASL,mechanism:this._sasl_mechanism.name});if(this._sasl_mechanism.isClientFirst){var response=this._sasl_mechanism.onChallenge(this,null);request_auth_exchange.t(Base64.encode(response))}this.send(request_auth_exchange.tree()),mechanism_found=!0;break}mechanism_found||(null===Strophe.getNodeFromJid(this.jid)?(this._changeConnectStatus(Strophe.Status.CONNFAIL,"x-strophe-bad-non-anon-jid"),this.disconnect("x-strophe-bad-non-anon-jid")):(this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null),this._addSysHandler(this._auth1_cb.bind(this),null,null,null,"_auth_1"),this.send($iq({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).tree())))},_sasl_challenge_cb:function(elem){var challenge=Base64.decode(Strophe.getText(elem)),response=this._sasl_mechanism.onChallenge(this,challenge),stanza=$build("response",{xmlns:Strophe.NS.SASL});return""!==response&&stanza.t(Base64.encode(response)),this.send(stanza.tree()),!0},_auth1_cb:function(){var iq=$iq({type:"set",id:"_auth_2"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).up().c("password").t(this.pass);return Strophe.getResourceFromJid(this.jid)||(this.jid=Strophe.getBareJidFromJid(this.jid)+"/strophe"),iq.up().c("resource",{}).t(Strophe.getResourceFromJid(this.jid)),this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2"),this.send(iq.tree()),!1},_sasl_success_cb:function(elem){if(this._sasl_data["server-signature"]){var serverSignature,success=Base64.decode(Strophe.getText(elem)),attribMatch=/([a-z]+)=([^,]+)(,|$)/,matches=success.match(attribMatch);if("v"==matches[1]&&(serverSignature=matches[2]),serverSignature!=this._sasl_data["server-signature"])return this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_data={},this._sasl_failure_cb(null)}return Strophe.info("SASL authentication succeeded."),this._sasl_mechanism&&this._sasl_mechanism.onSuccess(),this.deleteHandler(this._sasl_failure_handler),this._sasl_failure_handler=null,this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._addSysHandler(this._sasl_auth1_cb.bind(this),null,"stream:features",null,null),this._sendRestart(),!1},_sasl_auth1_cb:function(elem){this.features=elem;var i,child;for(i=0;i<elem.childNodes.length;i++)child=elem.childNodes[i],"bind"==child.nodeName&&(this.do_bind=!0),"session"==child.nodeName&&(this.do_session=!0);if(!this.do_bind)return this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1;this._addSysHandler(this._sasl_bind_cb.bind(this),null,null,null,"_bind_auth_2");var resource=Strophe.getResourceFromJid(this.jid);return this.send(resource?$iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).c("resource",{}).t(resource).tree():$iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).tree()),!1},_sasl_bind_cb:function(elem){if("error"==elem.getAttribute("type")){Strophe.info("SASL binding failed.");var condition,conflict=elem.getElementsByTagName("conflict");return conflict.length>0&&(condition="conflict"),this._changeConnectStatus(Strophe.Status.AUTHFAIL,condition),!1}var jidNode,bind=elem.getElementsByTagName("bind");return bind.length>0?(jidNode=bind[0].getElementsByTagName("jid"),void(jidNode.length>0&&(this.jid=Strophe.getText(jidNode[0]),this.do_session?(this._addSysHandler(this._sasl_session_cb.bind(this),null,null,null,"_session_auth_2"),this.send($iq({type:"set",id:"_session_auth_2"}).c("session",{xmlns:Strophe.NS.SESSION}).tree())):(this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null))))):(Strophe.info("SASL binding failed."),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1)},_sasl_session_cb:function(elem){if("result"==elem.getAttribute("type"))this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null);else if("error"==elem.getAttribute("type"))return Strophe.info("Session creation failed."),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1;return!1},_sasl_failure_cb:function(){return this._sasl_success_handler&&(this.deleteHandler(this._sasl_success_handler),this._sasl_success_handler=null),this._sasl_challenge_handler&&(this.deleteHandler(this._sasl_challenge_handler),this._sasl_challenge_handler=null),this._sasl_mechanism&&this._sasl_mechanism.onFailure(),this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),!1},_auth2_cb:function(elem){return"result"==elem.getAttribute("type")?(this.authenticated=!0,this._changeConnectStatus(Strophe.Status.CONNECTED,null)):"error"==elem.getAttribute("type")&&(this._changeConnectStatus(Strophe.Status.AUTHFAIL,null),this.disconnect("authentication failed")),!1},_addSysTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);return thand.user=!1,this.addTimeds.push(thand),thand},_addSysHandler:function(handler,ns,name,type,id){var hand=new Strophe.Handler(handler,ns,name,type,id);return hand.user=!1,this.addHandlers.push(hand),hand},_onDisconnectTimeout:function(){return Strophe.info("_onDisconnectTimeout was called"),this._proto._onDisconnectTimeout(),this._doDisconnect(),!1},_onIdle:function(){for(var i,thand,since,newList;this.addTimeds.length>0;)this.timedHandlers.push(this.addTimeds.pop());for(;this.removeTimeds.length>0;)thand=this.removeTimeds.pop(),i=this.timedHandlers.indexOf(thand),i>=0&&this.timedHandlers.splice(i,1);var now=(new Date).getTime();for(newList=[],i=0;i<this.timedHandlers.length;i++)thand=this.timedHandlers[i],(this.authenticated||!thand.user)&&(since=thand.lastCalled+thand.period,0>=since-now?thand.run()&&newList.push(thand):newList.push(thand));this.timedHandlers=newList,clearTimeout(this._idleTimeout),this._proto._onIdle(),this.connected&&(this._idleTimeout=setTimeout(this._onIdle.bind(this),100))}},callback&&callback(Strophe,$build,$msg,$iq,$pres),Strophe.SASLMechanism=function(name,isClientFirst,priority){this.name=name,this.isClientFirst=isClientFirst,this.priority=priority},Strophe.SASLMechanism.prototype={test:function(){return!0},onStart:function(connection){this._connection=connection},onChallenge:function(){throw new Error("You should implement challenge handling!")},onFailure:function(){this._connection=null},onSuccess:function(){this._connection=null}},Strophe.SASLAnonymous=function(){},Strophe.SASLAnonymous.prototype=new Strophe.SASLMechanism("ANONYMOUS",!1,10),Strophe.SASLAnonymous.test=function(connection){return null===connection.authcid},Strophe.Connection.prototype.mechanisms[Strophe.SASLAnonymous.prototype.name]=Strophe.SASLAnonymous,Strophe.SASLPlain=function(){},Strophe.SASLPlain.prototype=new Strophe.SASLMechanism("PLAIN",!0,20),Strophe.SASLPlain.test=function(connection){return null!==connection.authcid},Strophe.SASLPlain.prototype.onChallenge=function(connection){var auth_str=connection.authzid;return auth_str+="\x00",auth_str+=connection.authcid,auth_str+="\x00",auth_str+=connection.pass},Strophe.Connection.prototype.mechanisms[Strophe.SASLPlain.prototype.name]=Strophe.SASLPlain,Strophe.SASLSHA1=function(){},Strophe.SASLSHA1.prototype=new Strophe.SASLMechanism("SCRAM-SHA-1",!0,40),Strophe.SASLSHA1.test=function(connection){return null!==connection.authcid},Strophe.SASLSHA1.prototype.onChallenge=function(connection,challenge,test_cnonce){var cnonce=test_cnonce||MD5.hexdigest(1234567890*Math.random()),auth_str="n="+connection.authcid;return auth_str+=",r=",auth_str+=cnonce,connection._sasl_data.cnonce=cnonce,connection._sasl_data["client-first-message-bare"]=auth_str,auth_str="n,,"+auth_str,this.onChallenge=function(connection,challenge){for(var nonce,salt,iter,Hi,U,U_old,i,k,clientKey,serverKey,clientSignature,responseText="c=biws,",authMessage=connection._sasl_data["client-first-message-bare"]+","+challenge+",",cnonce=connection._sasl_data.cnonce,attribMatch=/([a-z]+)=([^,]+)(,|$)/;challenge.match(attribMatch);){var matches=challenge.match(attribMatch);switch(challenge=challenge.replace(matches[0],""),matches[1]){case"r":nonce=matches[2];break;case"s":salt=matches[2];break;case"i":iter=matches[2]}}if(nonce.substr(0,cnonce.length)!==cnonce)return connection._sasl_data={},connection._sasl_failure_cb();for(responseText+="r="+nonce,authMessage+=responseText,salt=Base64.decode(salt),salt+="\x00\x00\x00",Hi=U_old=core_hmac_sha1(connection.pass,salt),i=1;iter>i;i++){for(U=core_hmac_sha1(connection.pass,binb2str(U_old)),k=0;5>k;k++)Hi[k]^=U[k];U_old=U}for(Hi=binb2str(Hi),clientKey=core_hmac_sha1(Hi,"Client Key"),serverKey=str_hmac_sha1(Hi,"Server Key"),clientSignature=core_hmac_sha1(str_sha1(binb2str(clientKey)),authMessage),connection._sasl_data["server-signature"]=b64_hmac_sha1(serverKey,authMessage),k=0;5>k;k++)clientKey[k]^=clientSignature[k];return responseText+=",p="+Base64.encode(binb2str(clientKey))}.bind(this),auth_str},Strophe.Connection.prototype.mechanisms[Strophe.SASLSHA1.prototype.name]=Strophe.SASLSHA1,Strophe.SASLMD5=function(){},Strophe.SASLMD5.prototype=new Strophe.SASLMechanism("DIGEST-MD5",!1,30),Strophe.SASLMD5.test=function(connection){return null!==connection.authcid},Strophe.SASLMD5.prototype._quote=function(str){return'"'+str.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'},Strophe.SASLMD5.prototype.onChallenge=function(connection,challenge,test_cnonce){for(var matches,attribMatch=/([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/,cnonce=test_cnonce||MD5.hexdigest(""+1234567890*Math.random()),realm="",host=null,nonce="",qop="";challenge.match(attribMatch);)switch(matches=challenge.match(attribMatch),challenge=challenge.replace(matches[0],""),matches[2]=matches[2].replace(/^"(.+)"$/,"$1"),matches[1]){case"realm":realm=matches[2];break;case"nonce":nonce=matches[2];break;case"qop":qop=matches[2];break;case"host":host=matches[2]}var digest_uri=connection.servtype+"/"+connection.domain;null!==host&&(digest_uri=digest_uri+"/"+host);var A1=MD5.hash(connection.authcid+":"+realm+":"+this._connection.pass)+":"+nonce+":"+cnonce,A2="AUTHENTICATE:"+digest_uri,responseText="";return responseText+="charset=utf-8,",responseText+="username="+this._quote(connection.authcid)+",",responseText+="realm="+this._quote(realm)+",",responseText+="nonce="+this._quote(nonce)+",",responseText+="nc=00000001,",responseText+="cnonce="+this._quote(cnonce)+",",responseText+="digest-uri="+this._quote(digest_uri)+",",responseText+="response="+MD5.hexdigest(MD5.hexdigest(A1)+":"+nonce+":00000001:"+cnonce+":auth:"+MD5.hexdigest(A2))+",",responseText+="qop=auth",this.onChallenge=function(){return""
+}.bind(this),responseText},Strophe.Connection.prototype.mechanisms[Strophe.SASLMD5.prototype.name]=Strophe.SASLMD5}(function(){window.Strophe=arguments[0],window.$build=arguments[1],window.$msg=arguments[2],window.$iq=arguments[3],window.$pres=arguments[4]}),Strophe.Request=function(elem,func,rid,sends){this.id=++Strophe._requestId,this.xmlData=elem,this.data=Strophe.serialize(elem),this.origFunc=func,this.func=func,this.rid=rid,this.date=0/0,this.sends=sends||0,this.abort=!1,this.dead=null,this.age=function(){if(!this.date)return 0;var now=new Date;return(now-this.date)/1e3},this.timeDead=function(){if(!this.dead)return 0;var now=new Date;return(now-this.dead)/1e3},this.xhr=this._newXHR()},Strophe.Request.prototype={getResponse:function(){var node=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){if(node=this.xhr.responseXML.documentElement,"parsererror"==node.tagName)throw Strophe.error("invalid response received"),Strophe.error("responseText: "+this.xhr.responseText),Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML)),"parsererror"}else this.xhr.responseText&&(Strophe.error("invalid response received"),Strophe.error("responseText: "+this.xhr.responseText),Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML)));return node},_newXHR:function(){var xhr=null;return window.XMLHttpRequest?(xhr=new XMLHttpRequest,xhr.overrideMimeType&&xhr.overrideMimeType("text/xml")):window.ActiveXObject&&(xhr=new ActiveXObject("Microsoft.XMLHTTP")),xhr.onreadystatechange=this.func.bind(null,this),xhr}},Strophe.Bosh=function(connection){this._conn=connection,this.rid=Math.floor(4294967295*Math.random()),this.sid=null,this.hold=1,this.wait=60,this.window=5,this._requests=[]},Strophe.Bosh.prototype={strip:null,_buildBody:function(){var bodyWrap=$build("body",{rid:this.rid++,xmlns:Strophe.NS.HTTPBIND});return null!==this.sid&&bodyWrap.attrs({sid:this.sid}),bodyWrap},_reset:function(){this.rid=Math.floor(4294967295*Math.random()),this.sid=null,jQuery(document).trigger("ridChange",{rid:this.rid})},_connect:function(wait,hold,route){this.wait=wait||this.wait,this.hold=hold||this.hold;var body=this._buildBody().attrs({to:this._conn.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":Strophe.NS.BOSH});route&&body.attrs({route:route});var _connect_cb=this._conn._connect_cb;this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,_connect_cb.bind(this._conn)),body.tree().getAttribute("rid"))),this._throttledRequestHandler()},_attach:function(jid,sid,rid,callback,wait,hold,wind){this._conn.jid=jid,this.sid=sid,this.rid=rid,this._conn.connect_callback=callback,this._conn.domain=Strophe.getDomainFromJid(this._conn.jid),this._conn.authenticated=!0,this._conn.connected=!0,this.wait=wait||this.wait,this.hold=hold||this.hold,this.window=wind||this.window,this._conn._changeConnectStatus(Strophe.Status.ATTACHED,null)},_connect_cb:function(bodyWrap){var cond,conflict,typ=bodyWrap.getAttribute("type");if(null!==typ&&"terminate"==typ)return Strophe.error("BOSH-Connection failed: "+cond),cond=bodyWrap.getAttribute("condition"),conflict=bodyWrap.getElementsByTagName("conflict"),null!==cond?("remote-stream-error"==cond&&conflict.length>0&&(cond="conflict"),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,cond)):this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown"),this._conn._doDisconnect(),Strophe.Status.CONNFAIL;this.sid||(this.sid=bodyWrap.getAttribute("sid"));var wind=bodyWrap.getAttribute("requests");wind&&(this.window=parseInt(wind,10));var hold=bodyWrap.getAttribute("hold");hold&&(this.hold=parseInt(hold,10));var wait=bodyWrap.getAttribute("wait");wait&&(this.wait=parseInt(wait,10))},_disconnect:function(pres){this._sendTerminate(pres)},_doDisconnect:function(){this.sid=null,this.rid=Math.floor(4294967295*Math.random()),jQuery(document).trigger("ridChange",{rid:this.rid})},_emptyQueue:function(){return 0===this._requests.length},_hitError:function(reqStatus){this.errors++,Strophe.warn("request errored, status: "+reqStatus+", number of errors: "+this.errors),this.errors>4&&this._onDisconnectTimeout()},_no_auth_received:function(_callback){_callback=_callback?_callback.bind(this._conn):this._conn._connect_cb.bind(this._conn);var body=this._buildBody();this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,_callback.bind(this._conn)),body.tree().getAttribute("rid"))),this._throttledRequestHandler()},_onDisconnectTimeout:function(){for(var req;this._requests.length>0;)req=this._requests.pop(),req.abort=!0,req.xhr.abort(),req.xhr.onreadystatechange=function(){}},_onIdle:function(){var data=this._conn._data;if(this._conn.authenticated&&0===this._requests.length&&0===data.length&&!this._conn.disconnecting&&(Strophe.info("no requests during idle cycle, sending blank request"),data.push(null)),this._requests.length<2&&data.length>0&&!this._conn.paused){for(var body=this._buildBody(),i=0;i<data.length;i++)null!==data[i]&&("restart"===data[i]?body.attrs({to:this._conn.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":Strophe.NS.BOSH}):body.cnode(data[i]).up());delete this._conn._data,this._conn._data=[],this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),body.tree().getAttribute("rid"))),this._processRequest(this._requests.length-1)}if(this._requests.length>0){var time_elapsed=this._requests[0].age();null!==this._requests[0].dead&&this._requests[0].timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait)&&this._throttledRequestHandler(),time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait)&&(Strophe.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(Strophe.TIMEOUT*this.wait)+" seconds since last activity"),this._throttledRequestHandler())}},_onRequestStateChange:function(func,req){if(Strophe.debug("request id "+req.id+"."+req.sends+" state changed to "+req.xhr.readyState),req.abort)return void(req.abort=!1);2==req.xhr.readyState&&jQuery(document).trigger("ridChange",{rid:Number(req.rid)+1});var reqStatus;if(4==req.xhr.readyState){reqStatus=0;try{reqStatus=req.xhr.status}catch(e){}if("undefined"==typeof reqStatus&&(reqStatus=0),this.disconnecting&&reqStatus>=400)return void this._hitError(reqStatus);var reqIs0=this._requests[0]==req,reqIs1=this._requests[1]==req;(reqStatus>0&&500>reqStatus||req.sends>5)&&(this._removeRequest(req),Strophe.debug("request id "+req.id+" should now be removed")),200==reqStatus?((reqIs1||reqIs0&&this._requests.length>0&&this._requests[0].age()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait))&&this._restartRequest(0),Strophe.debug("request id "+req.id+"."+req.sends+" got 200"),func(req),this.errors=0):(Strophe.error("request id "+req.id+"."+req.sends+" error "+reqStatus+" happened"),(0===reqStatus||reqStatus>=400&&600>reqStatus||reqStatus>=12e3)&&(this._hitError(reqStatus),reqStatus>=400&&500>reqStatus&&(this._conn._changeConnectStatus(Strophe.Status.DISCONNECTING,null),this._conn._doDisconnect()))),reqStatus>0&&500>reqStatus||req.sends>5||this._throttledRequestHandler()}},_processRequest:function(i){var self=this,req=this._requests[i],reqStatus=-1;try{4==req.xhr.readyState&&(reqStatus=req.xhr.status)}catch(e){Strophe.error("caught an error in _requests["+i+"], reqStatus: "+reqStatus)}if("undefined"==typeof reqStatus&&(reqStatus=-1),req.sends>this.maxRetries)return void this._onDisconnectTimeout();var time_elapsed=req.age(),primaryTimeout=!isNaN(time_elapsed)&&time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait),secondaryTimeout=null!==req.dead&&req.timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait),requestCompletedWithServerError=4==req.xhr.readyState&&(1>reqStatus||reqStatus>=500);if((primaryTimeout||secondaryTimeout||requestCompletedWithServerError)&&(secondaryTimeout&&Strophe.error("Request "+this._requests[i].id+" timed out (secondary), restarting"),req.abort=!0,req.xhr.abort(),req.xhr.onreadystatechange=function(){},this._requests[i]=new Strophe.Request(req.xmlData,req.origFunc,req.rid,req.sends),req=this._requests[i]),0===req.xhr.readyState){Strophe.debug("request id "+req.id+"."+req.sends+" posting");try{req.xhr.open("POST",this._conn.service,this._conn.options.sync?!1:!0)}catch(e2){return Strophe.error("XHR open failed."),this._conn.connected||this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"bad-service"),void this._conn.disconnect()}var sendFunc=function(){if(req.date=new Date,self._conn.options.customHeaders){var headers=self._conn.options.customHeaders;for(var header in headers)headers.hasOwnProperty(header)&&req.xhr.setRequestHeader(header,headers[header])}req.xhr.send(req.data)};if(req.sends>1){var backoff=1e3*Math.min(Math.floor(Strophe.TIMEOUT*this.wait),Math.pow(req.sends,3));setTimeout(sendFunc,backoff)}else sendFunc();req.sends++,this._conn.xmlOutput!==Strophe.Connection.prototype.xmlOutput&&this._conn.xmlOutput(req.xmlData.nodeName===this.strip&&req.xmlData.childNodes.length?req.xmlData.childNodes[0]:req.xmlData),this._conn.rawOutput!==Strophe.Connection.prototype.rawOutput&&this._conn.rawOutput(req.data)}else Strophe.debug("_processRequest: "+(0===i?"first":"second")+" request has readyState of "+req.xhr.readyState)},_removeRequest:function(req){Strophe.debug("removing request");var i;for(i=this._requests.length-1;i>=0;i--)req==this._requests[i]&&this._requests.splice(i,1);req.xhr.onreadystatechange=function(){},this._throttledRequestHandler()},_restartRequest:function(i){var req=this._requests[i];null===req.dead&&(req.dead=new Date),this._processRequest(i)},_reqToData:function(req){try{return req.getResponse()}catch(e){if("parsererror"!=e)throw e;this._conn.disconnect("strophe-parsererror")}},_sendTerminate:function(pres){Strophe.info("_sendTerminate was called");var body=this._buildBody().attrs({type:"terminate"});pres&&body.cnode(pres.tree());var req=new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this,this._conn._dataRecv.bind(this._conn)),body.tree().getAttribute("rid"));this._requests.push(req),this._throttledRequestHandler()},_send:function(){clearTimeout(this._conn._idleTimeout),this._throttledRequestHandler(),this._conn._idleTimeout=setTimeout(this._conn._onIdle.bind(this._conn),100)},_sendRestart:function(){this._throttledRequestHandler(),clearTimeout(this._conn._idleTimeout)},_throttledRequestHandler:function(){Strophe.debug(this._requests?"_throttledRequestHandler called with "+this._requests.length+" requests":"_throttledRequestHandler called with undefined requests"),this._requests&&0!==this._requests.length&&(this._requests.length>0&&this._processRequest(0),this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window&&this._processRequest(1))}},Strophe.Websocket=function(connection){this._conn=connection,this.strip="stream:stream";var service=connection.service;if(0!==service.indexOf("ws:")&&0!==service.indexOf("wss:")){var new_service="";new_service+="ws"===connection.options.protocol&&"https:"!==window.location.protocol?"ws":"wss",new_service+="://"+window.location.host,new_service+=0!==service.indexOf("/")?window.location.pathname+service:service,connection.service=new_service}},Strophe.Websocket.prototype={_buildStream:function(){return $build("stream:stream",{to:this._conn.domain,xmlns:Strophe.NS.CLIENT,"xmlns:stream":Strophe.NS.STREAM,version:"1.0"})},_check_streamerror:function(bodyWrap,connectstatus){var errors=bodyWrap.getElementsByTagName("stream:error");if(0===errors.length)return!1;for(var error=errors[0],condition="",text="",ns="urn:ietf:params:xml:ns:xmpp-streams",i=0;i<error.childNodes.length;i++){var e=error.childNodes[i];if(e.getAttribute("xmlns")!==ns)break;"text"===e.nodeName?text=e.textContent:condition=e.nodeName}var errorString="WebSocket stream error: ";return errorString+=condition?condition:"unknown",text&&(errorString+=" - "+condition),Strophe.error(errorString),this._conn._changeConnectStatus(connectstatus,condition),this._conn._doDisconnect(),!0},_reset:function(){},_connect:function(){this._closeSocket(),this.socket=new WebSocket(this._conn.service,"xmpp"),this.socket.onopen=this._onOpen.bind(this),this.socket.onerror=this._onError.bind(this),this.socket.onclose=this._onClose.bind(this),this.socket.onmessage=this._connect_cb_wrapper.bind(this)},_connect_cb:function(bodyWrap){var error=this._check_streamerror(bodyWrap,Strophe.Status.CONNFAIL);return error?Strophe.Status.CONNFAIL:void 0},_handleStreamStart:function(message){var error=!1,ns=message.getAttribute("xmlns");"string"!=typeof ns?error="Missing xmlns in stream:stream":ns!==Strophe.NS.CLIENT&&(error="Wrong xmlns in stream:stream: "+ns);var ns_stream=message.namespaceURI;"string"!=typeof ns_stream?error="Missing xmlns:stream in stream:stream":ns_stream!==Strophe.NS.STREAM&&(error="Wrong xmlns:stream in stream:stream: "+ns_stream);var ver=message.getAttribute("version");return"string"!=typeof ver?error="Missing version in stream:stream":"1.0"!==ver&&(error="Wrong version in stream:stream: "+ver),error?(this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,error),this._conn._doDisconnect(),!1):!0},_connect_cb_wrapper:function(message){if(0===message.data.indexOf("<stream:stream ")||0===message.data.indexOf("<?xml")){var data=message.data.replace(/^(<\?.*?\?>\s*)*/,"");if(""===data)return;data=message.data.replace(/<stream:stream (.*[^\/])>/,"<stream:stream $1/>");var streamStart=(new DOMParser).parseFromString(data,"text/xml").documentElement;this._conn.xmlInput(streamStart),this._conn.rawInput(message.data),this._handleStreamStart(streamStart)&&(this._connect_cb(streamStart),this.streamStart=message.data.replace(/^<stream:(.*)\/>$/,"<stream:$1>"))}else{if("</stream:stream>"===message.data)return this._conn.rawInput(message.data),this._conn.xmlInput(document.createElement("stream:stream")),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"Received closing stream"),void this._conn._doDisconnect();var string=this._streamWrap(message.data),elem=(new DOMParser).parseFromString(string,"text/xml").documentElement;this.socket.onmessage=this._onMessage.bind(this),this._conn._connect_cb(elem,null,message.data)}},_disconnect:function(pres){if(this.socket.readyState!==WebSocket.CLOSED){pres&&this._conn.send(pres);var close="</stream:stream>";this._conn.xmlOutput(document.createElement("stream:stream")),this._conn.rawOutput(close);try{this.socket.send(close)}catch(e){Strophe.info("Couldn't send closing stream tag.")}}this._conn._doDisconnect()},_doDisconnect:function(){Strophe.info("WebSockets _doDisconnect was called"),this._closeSocket()},_streamWrap:function(stanza){return this.streamStart+stanza+"</stream:stream>"},_closeSocket:function(){if(this.socket)try{this.socket.close()}catch(e){}this.socket=null},_emptyQueue:function(){return!0},_onClose:function(){this._conn.connected&&!this._conn.disconnecting?(Strophe.error("Websocket closed unexcectedly"),this._conn._doDisconnect()):Strophe.info("Websocket closed")},_no_auth_received:function(_callback){Strophe.error("Server did not send any auth methods"),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"Server did not send any auth methods"),_callback&&(_callback=_callback.bind(this._conn))(),this._conn._doDisconnect()},_onDisconnectTimeout:function(){},_onError:function(error){Strophe.error("Websocket error "+error),this._conn._changeConnectStatus(Strophe.Status.CONNFAIL,"The WebSocket connection could not be established was disconnected."),this._disconnect()},_onIdle:function(){var data=this._conn._data;if(data.length>0&&!this._conn.paused){for(var i=0;i<data.length;i++)if(null!==data[i]){var stanza,rawStanza;"restart"===data[i]?(stanza=this._buildStream(),rawStanza=this._removeClosingTag(stanza),stanza=stanza.tree()):(stanza=data[i],rawStanza=Strophe.serialize(stanza)),this._conn.xmlOutput(stanza),this._conn.rawOutput(rawStanza),this.socket.send(rawStanza)}this._conn._data=[]}},_onMessage:function(message){var elem,data;if("</stream:stream>"===message.data){var close="</stream:stream>";return this._conn.rawInput(close),this._conn.xmlInput(document.createElement("stream:stream")),void(this._conn.disconnecting||this._conn._doDisconnect())}if(0===message.data.search("<stream:stream ")){if(data=message.data.replace(/<stream:stream (.*[^\/])>/,"<stream:stream $1/>"),elem=(new DOMParser).parseFromString(data,"text/xml").documentElement,!this._handleStreamStart(elem))return}else data=this._streamWrap(message.data),elem=(new DOMParser).parseFromString(data,"text/xml").documentElement;if(!this._check_streamerror(elem,Strophe.Status.ERROR))return this._conn.disconnecting&&"presence"===elem.firstChild.nodeName&&"unavailable"===elem.firstChild.getAttribute("type")?(this._conn.xmlInput(elem),void this._conn.rawInput(Strophe.serialize(elem))):void this._conn._dataRecv(elem,message.data)},_onOpen:function(){Strophe.info("Websocket open");var start=this._buildStream();this._conn.xmlOutput(start.tree());var startString=this._removeClosingTag(start);this._conn.rawOutput(startString),this.socket.send(startString)},_removeClosingTag:function(elem){var string=Strophe.serialize(elem);return string=string.replace(/<(stream:stream .*[^\/])\/>$/,"<$1>")},_reqToData:function(stanza){return stanza},_send:function(){this._conn.flush()},_sendRestart:function(){clearTimeout(this._conn._idleTimeout),this._conn._onIdle.bind(this._conn)()}};/*!
+ * Source: lib/strophe.muc.js, license: MIT, url: https://github.com/strophe/strophejs-plugins
+ */
+var Occupant,RoomConfig,XmppRoom,__bind=function(fn,me){return function(){return fn.apply(me,arguments)}};Strophe.addConnectionPlugin("muc",{_connection:null,rooms:{},roomNames:[],init:function(conn){return this._connection=conn,this._muc_handler=null,Strophe.addNamespace("MUC_OWNER",Strophe.NS.MUC+"#owner"),Strophe.addNamespace("MUC_ADMIN",Strophe.NS.MUC+"#admin"),Strophe.addNamespace("MUC_USER",Strophe.NS.MUC+"#user"),Strophe.addNamespace("MUC_ROOMCONF",Strophe.NS.MUC+"#roomconfig")},join:function(room,nick,msg_handler_cb,pres_handler_cb,roster_cb,password,history_attrs,extended_presence){var msg,room_nick,_ref,_this=this;return room_nick=this.test_append_nick(room,nick),msg=$pres({from:this._connection.jid,to:room_nick}).c("x",{xmlns:Strophe.NS.MUC}),null!=history_attrs&&(msg=msg.c("history",history_attrs).up()),null!=password&&msg.cnode(Strophe.xmlElement("password",[],password)),null!=extended_presence&&msg.up().cnode(extended_presence),null==(_ref=this._muc_handler)&&(this._muc_handler=this._connection.addHandler(function(stanza){var from,handler,handlers,id,roomname,x,xmlns,xquery,_i,_len;if(from=stanza.getAttribute("from"),!from)return!0;if(roomname=from.split("/")[0],!_this.rooms[roomname])return!0;if(room=_this.rooms[roomname],handlers={},"message"===stanza.nodeName)handlers=room._message_handlers;else if("presence"===stanza.nodeName&&(xquery=stanza.getElementsByTagName("x"),xquery.length>0))for(_i=0,_len=xquery.length;_len>_i;_i++)if(x=xquery[_i],xmlns=x.getAttribute("xmlns"),xmlns&&xmlns.match(Strophe.NS.MUC)){handlers=room._presence_handlers;break}for(id in handlers)handler=handlers[id],handler(stanza,room)||delete handlers[id];return!0})),this.rooms.hasOwnProperty(room)||(this.rooms[room]=new XmppRoom(this,room,nick,password),this.roomNames.push(room)),pres_handler_cb&&this.rooms[room].addHandler("presence",pres_handler_cb),msg_handler_cb&&this.rooms[room].addHandler("message",msg_handler_cb),roster_cb&&this.rooms[room].addHandler("roster",roster_cb),this._connection.send(msg)},leave:function(room,nick,handler_cb,exit_msg){var id,presence,presenceid,room_nick;return id=this.roomNames.indexOf(room),delete this.rooms[room],id>=0&&(this.roomNames.splice(id,1),0===this.roomNames.length&&(this._connection.deleteHandler(this._muc_handler),this._muc_handler=null)),room_nick=this.test_append_nick(room,nick),presenceid=this._connection.getUniqueId(),presence=$pres({type:"unavailable",id:presenceid,from:this._connection.jid,to:room_nick}),null!=exit_msg&&presence.c("status",exit_msg),null!=handler_cb&&this._connection.addHandler(handler_cb,null,"presence",null,presenceid),this._connection.send(presence),presenceid},message:function(room,nick,message,html_message,type){var msg,msgid,parent,room_nick;return room_nick=this.test_append_nick(room,nick),type=type||(null!=nick?"chat":"groupchat"),msgid=this._connection.getUniqueId(),msg=$msg({to:room_nick,from:this._connection.jid,type:type,id:msgid}).c("body",{xmlns:Strophe.NS.CLIENT}).t(message),msg.up(),null!=html_message&&(msg.c("html",{xmlns:Strophe.NS.XHTML_IM}).c("body",{xmlns:Strophe.NS.XHTML}).t(html_message),0===msg.node.childNodes.length?(parent=msg.node.parentNode,msg.up().up(),msg.node.removeChild(parent)):msg.up().up()),msg.c("x",{xmlns:"jabber:x:event"}).c("composing"),this._connection.send(msg),msgid},groupchat:function(room,message,html_message){return this.message(room,null,message,html_message)},invite:function(room,receiver,reason){var invitation,msgid;return msgid=this._connection.getUniqueId(),invitation=$msg({from:this._connection.jid,to:room,id:msgid}).c("x",{xmlns:Strophe.NS.MUC_USER}).c("invite",{to:receiver}),null!=reason&&invitation.c("reason",reason),this._connection.send(invitation),msgid},directInvite:function(room,receiver,reason,password){var attrs,invitation,msgid;return msgid=this._connection.getUniqueId(),attrs={xmlns:"jabber:x:conference",jid:room},null!=reason&&(attrs.reason=reason),null!=password&&(attrs.password=password),invitation=$msg({from:this._connection.jid,to:receiver,id:msgid}).c("x",attrs),this._connection.send(invitation),msgid},queryOccupants:function(room,success_cb,error_cb){var attrs,info;return attrs={xmlns:Strophe.NS.DISCO_ITEMS},info=$iq({from:this._connection.jid,to:room,type:"get"}).c("query",attrs),this._connection.sendIQ(info,success_cb,error_cb)},configure:function(room,handler_cb,error_cb){var config,stanza;return config=$iq({to:room,type:"get"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}),stanza=config.tree(),this._connection.sendIQ(stanza,handler_cb,error_cb)},cancelConfigure:function(room){var config,stanza;return config=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}).c("x",{xmlns:"jabber:x:data",type:"cancel"}),stanza=config.tree(),this._connection.sendIQ(stanza)},saveConfiguration:function(room,config,success_cb,error_cb){var conf,iq,stanza,_i,_len;if(iq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}),config instanceof Form)config.type="submit",iq.cnode(config.toXML());else for(iq.c("x",{xmlns:"jabber:x:data",type:"submit"}),_i=0,_len=config.length;_len>_i;_i++)conf=config[_i],iq.cnode(conf).up();return stanza=iq.tree(),this._connection.sendIQ(stanza,success_cb,error_cb)},createInstantRoom:function(room,success_cb,error_cb){var roomiq;return roomiq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_OWNER}).c("x",{xmlns:"jabber:x:data",type:"submit"}),this._connection.sendIQ(roomiq.tree(),success_cb,error_cb)},setTopic:function(room,topic){var msg;return msg=$msg({to:room,from:this._connection.jid,type:"groupchat"}).c("subject",{xmlns:"jabber:client"}).t(topic),this._connection.send(msg.tree())},_modifyPrivilege:function(room,item,reason,handler_cb,error_cb){var iq;return iq=$iq({to:room,type:"set"}).c("query",{xmlns:Strophe.NS.MUC_ADMIN}).cnode(item.node),null!=reason&&iq.c("reason",reason),this._connection.sendIQ(iq.tree(),handler_cb,error_cb)},modifyRole:function(room,nick,role,reason,handler_cb,error_cb){var item;return item=$build("item",{nick:nick,role:role}),this._modifyPrivilege(room,item,reason,handler_cb,error_cb)},kick:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"none",reason,handler_cb,error_cb)},voice:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"participant",reason,handler_cb,error_cb)},mute:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"visitor",reason,handler_cb,error_cb)},op:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"moderator",reason,handler_cb,error_cb)},deop:function(room,nick,reason,handler_cb,error_cb){return this.modifyRole(room,nick,"participant",reason,handler_cb,error_cb)},modifyAffiliation:function(room,jid,affiliation,reason,handler_cb,error_cb){var item;return item=$build("item",{jid:jid,affiliation:affiliation}),this._modifyPrivilege(room,item,reason,handler_cb,error_cb)},ban:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"outcast",reason,handler_cb,error_cb)},member:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"member",reason,handler_cb,error_cb)},revoke:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"none",reason,handler_cb,error_cb)},owner:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"owner",reason,handler_cb,error_cb)},admin:function(room,jid,reason,handler_cb,error_cb){return this.modifyAffiliation(room,jid,"admin",reason,handler_cb,error_cb)},changeNick:function(room,user){var presence,room_nick;return room_nick=this.test_append_nick(room,user),presence=$pres({from:this._connection.jid,to:room_nick,id:this._connection.getUniqueId()}),this._connection.send(presence.tree())},setStatus:function(room,user,show,status){var presence,room_nick;return room_nick=this.test_append_nick(room,user),presence=$pres({from:this._connection.jid,to:room_nick}),null!=show&&presence.c("show",show).up(),null!=status&&presence.c("status",status),this._connection.send(presence.tree())},listRooms:function(server,handle_cb,error_cb){var iq;return iq=$iq({to:server,from:this._connection.jid,type:"get"}).c("query",{xmlns:Strophe.NS.DISCO_ITEMS}),this._connection.sendIQ(iq,handle_cb,error_cb)},test_append_nick:function(room,nick){return room+(null!=nick?"/"+Strophe.escapeNode(nick):"")}}),XmppRoom=function(){function XmppRoom(client,name,nick,password){this.client=client,this.name=name,this.nick=nick,this.password=password,this._roomRosterHandler=__bind(this._roomRosterHandler,this),this._addOccupant=__bind(this._addOccupant,this),this.roster={},this._message_handlers={},this._presence_handlers={},this._roster_handlers={},this._handler_ids=0,client.muc&&(this.client=client.muc),this.name=Strophe.getBareJidFromJid(name),this.addHandler("presence",this._roomRosterHandler)}return XmppRoom.prototype.join=function(msg_handler_cb,pres_handler_cb,roster_cb){return this.client.join(this.name,this.nick,msg_handler_cb,pres_handler_cb,roster_cb,this.password)},XmppRoom.prototype.leave=function(handler_cb,message){return this.client.leave(this.name,this.nick,handler_cb,message),delete this.client.rooms[this.name]},XmppRoom.prototype.message=function(nick,message,html_message,type){return this.client.message(this.name,nick,message,html_message,type)},XmppRoom.prototype.groupchat=function(message,html_message){return this.client.groupchat(this.name,message,html_message)},XmppRoom.prototype.invite=function(receiver,reason){return this.client.invite(this.name,receiver,reason)},XmppRoom.prototype.directInvite=function(receiver,reason){return this.client.directInvite(this.name,receiver,reason,this.password)},XmppRoom.prototype.configure=function(handler_cb){return this.client.configure(this.name,handler_cb)},XmppRoom.prototype.cancelConfigure=function(){return this.client.cancelConfigure(this.name)},XmppRoom.prototype.saveConfiguration=function(config){return this.client.saveConfiguration(this.name,config)},XmppRoom.prototype.queryOccupants=function(success_cb,error_cb){return this.client.queryOccupants(this.name,success_cb,error_cb)},XmppRoom.prototype.setTopic=function(topic){return this.client.setTopic(this.name,topic)},XmppRoom.prototype.modifyRole=function(nick,role,reason,success_cb,error_cb){return this.client.modifyRole(this.name,nick,role,reason,success_cb,error_cb)},XmppRoom.prototype.kick=function(nick,reason,handler_cb,error_cb){return this.client.kick(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.voice=function(nick,reason,handler_cb,error_cb){return this.client.voice(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.mute=function(nick,reason,handler_cb,error_cb){return this.client.mute(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.op=function(nick,reason,handler_cb,error_cb){return this.client.op(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.deop=function(nick,reason,handler_cb,error_cb){return this.client.deop(this.name,nick,reason,handler_cb,error_cb)},XmppRoom.prototype.modifyAffiliation=function(jid,affiliation,reason,success_cb,error_cb){return this.client.modifyAffiliation(this.name,jid,affiliation,reason,success_cb,error_cb)},XmppRoom.prototype.ban=function(jid,reason,handler_cb,error_cb){return this.client.ban(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.member=function(jid,reason,handler_cb,error_cb){return this.client.member(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.revoke=function(jid,reason,handler_cb,error_cb){return this.client.revoke(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.owner=function(jid,reason,handler_cb,error_cb){return this.client.owner(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.admin=function(jid,reason,handler_cb,error_cb){return this.client.admin(this.name,jid,reason,handler_cb,error_cb)},XmppRoom.prototype.changeNick=function(nick){return this.nick=nick,this.client.changeNick(this.name,nick)},XmppRoom.prototype.setStatus=function(show,status){return this.client.setStatus(this.name,this.nick,show,status)},XmppRoom.prototype.addHandler=function(handler_type,handler){var id;switch(id=this._handler_ids++,handler_type){case"presence":this._presence_handlers[id]=handler;break;case"message":this._message_handlers[id]=handler;break;case"roster":this._roster_handlers[id]=handler;break;default:return this._handler_ids--,null}return id},XmppRoom.prototype.removeHandler=function(id){return delete this._presence_handlers[id],delete this._message_handlers[id],delete this._roster_handlers[id]},XmppRoom.prototype._addOccupant=function(data){var occ;return occ=new Occupant(data,this),this.roster[occ.nick]=occ,occ},XmppRoom.prototype._roomRosterHandler=function(pres){var data,handler,id,newnick,nick,_ref;switch(data=XmppRoom._parsePresence(pres),nick=data.nick,newnick=data.newnick||null,data.type){case"error":return;case"unavailable":newnick&&(data.nick=newnick,this.roster[nick]&&this.roster[newnick]&&(this.roster[nick].update(this.roster[newnick]),this.roster[newnick]=this.roster[nick]),this.roster[nick]&&!this.roster[newnick]&&(this.roster[newnick]=this.roster[nick].update(data))),delete this.roster[nick];break;default:this.roster[nick]?this.roster[nick].update(data):this._addOccupant(data)}_ref=this._roster_handlers;for(id in _ref)handler=_ref[id],handler(this.roster,this)||delete this._roster_handlers[id];return!0},XmppRoom._parsePresence=function(pres){var a,c,c2,data,_i,_j,_len,_len1,_ref,_ref1,_ref2,_ref3,_ref4,_ref5,_ref6,_ref7;for(data={},a=pres.attributes,data.nick=Strophe.getResourceFromJid(a.from.textContent),data.type=(null!=(_ref=a.type)?_ref.textContent:void 0)||null,data.states=[],_ref1=pres.childNodes,_i=0,_len=_ref1.length;_len>_i;_i++)switch(c=_ref1[_i],c.nodeName){case"status":data.status=c.textContent||null;break;case"show":data.show=c.textContent||null;break;case"x":if(a=c.attributes,(null!=(_ref2=a.xmlns)?_ref2.textContent:void 0)===Strophe.NS.MUC_USER)for(_ref3=c.childNodes,_j=0,_len1=_ref3.length;_len1>_j;_j++)switch(c2=_ref3[_j],c2.nodeName){case"item":a=c2.attributes,data.affiliation=(null!=(_ref4=a.affiliation)?_ref4.textContent:void 0)||null,data.role=(null!=(_ref5=a.role)?_ref5.textContent:void 0)||null,data.jid=(null!=(_ref6=a.jid)?_ref6.textContent:void 0)||null,data.newnick=(null!=(_ref7=a.nick)?_ref7.textContent:void 0)||null;break;case"status":c2.attributes.code&&data.states.push(c2.attributes.code.textContent)}}return data},XmppRoom}(),RoomConfig=function(){function RoomConfig(info){this.parse=__bind(this.parse,this),null!=info&&this.parse(info)}return RoomConfig.prototype.parse=function(result){var attr,attrs,child,field,identity,query,_i,_j,_k,_len,_len1,_len2,_ref;for(query=result.getElementsByTagName("query")[0].childNodes,this.identities=[],this.features=[],this.x=[],_i=0,_len=query.length;_len>_i;_i++)switch(child=query[_i],attrs=child.attributes,child.nodeName){case"identity":for(identity={},_j=0,_len1=attrs.length;_len1>_j;_j++)attr=attrs[_j],identity[attr.name]=attr.textContent;this.identities.push(identity);break;case"feature":this.features.push(attrs["var"].textContent);break;case"x":if(attrs=child.childNodes[0].attributes,"FORM_TYPE"===!attrs["var"].textContent||"hidden"===!attrs.type.textContent)break;for(_ref=child.childNodes,_k=0,_len2=_ref.length;_len2>_k;_k++)field=_ref[_k],field.attributes.type||(attrs=field.attributes,this.x.push({"var":attrs["var"].textContent,label:attrs.label.textContent||"",value:field.firstChild.textContent||""}))}return{identities:this.identities,features:this.features,x:this.x}},RoomConfig}(),Occupant=function(){function Occupant(data,room){this.room=room,this.update=__bind(this.update,this),this.admin=__bind(this.admin,this),this.owner=__bind(this.owner,this),this.revoke=__bind(this.revoke,this),this.member=__bind(this.member,this),this.ban=__bind(this.ban,this),this.modifyAffiliation=__bind(this.modifyAffiliation,this),this.deop=__bind(this.deop,this),this.op=__bind(this.op,this),this.mute=__bind(this.mute,this),this.voice=__bind(this.voice,this),this.kick=__bind(this.kick,this),this.modifyRole=__bind(this.modifyRole,this),this.update(data)}return Occupant.prototype.modifyRole=function(role,reason,success_cb,error_cb){return this.room.modifyRole(this.nick,role,reason,success_cb,error_cb)},Occupant.prototype.kick=function(reason,handler_cb,error_cb){return this.room.kick(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.voice=function(reason,handler_cb,error_cb){return this.room.voice(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.mute=function(reason,handler_cb,error_cb){return this.room.mute(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.op=function(reason,handler_cb,error_cb){return this.room.op(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.deop=function(reason,handler_cb,error_cb){return this.room.deop(this.nick,reason,handler_cb,error_cb)},Occupant.prototype.modifyAffiliation=function(affiliation,reason,success_cb,error_cb){return this.room.modifyAffiliation(this.jid,affiliation,reason,success_cb,error_cb)},Occupant.prototype.ban=function(reason,handler_cb,error_cb){return this.room.ban(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.member=function(reason,handler_cb,error_cb){return this.room.member(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.revoke=function(reason,handler_cb,error_cb){return this.room.revoke(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.owner=function(reason,handler_cb,error_cb){return this.room.owner(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.admin=function(reason,handler_cb,error_cb){return this.room.admin(this.jid,reason,handler_cb,error_cb)},Occupant.prototype.update=function(data){return this.nick=data.nick||null,this.affiliation=data.affiliation||null,this.role=data.role||null,this.jid=data.jid||null,this.status=data.status||null,this.show=data.show||null,this},Occupant}(),/*!
+ * Source: lib/strophe.disco.js, license: MIT, url: https://github.com/strophe/strophejs-plugins
+ */
+Strophe.addConnectionPlugin("disco",{_connection:null,_identities:[],_features:[],_items:[],init:function(conn){this._connection=conn,this._identities=[],this._features=[],this._items=[],conn.addHandler(this._onDiscoInfo.bind(this),Strophe.NS.DISCO_INFO,"iq","get",null,null),conn.addHandler(this._onDiscoItems.bind(this),Strophe.NS.DISCO_ITEMS,"iq","get",null,null)},addIdentity:function(category,type,name,lang){for(var i=0;i<this._identities.length;i++)if(this._identities[i].category==category&&this._identities[i].type==type&&this._identities[i].name==name&&this._identities[i].lang==lang)return!1;return this._identities.push({category:category,type:type,name:name,lang:lang}),!0},addFeature:function(var_name){for(var i=0;i<this._features.length;i++)if(this._features[i]==var_name)return!1;return this._features.push(var_name),!0},removeFeature:function(var_name){for(var i=0;i<this._features.length;i++)if(this._features[i]===var_name)return this._features.splice(i,1),!0;return!1},addItem:function(jid,name,node,call_back){return node&&!call_back?!1:(this._items.push({jid:jid,name:name,node:node,call_back:call_back}),!0)},info:function(jid,node,success,error,timeout){var attrs={xmlns:Strophe.NS.DISCO_INFO};node&&(attrs.node=node);var info=$iq({from:this._connection.jid,to:jid,type:"get"}).c("query",attrs);this._connection.sendIQ(info,success,error,timeout)},items:function(jid,node,success,error,timeout){var attrs={xmlns:Strophe.NS.DISCO_ITEMS};node&&(attrs.node=node);var items=$iq({from:this._connection.jid,to:jid,type:"get"}).c("query",attrs);this._connection.sendIQ(items,success,error,timeout)},_buildIQResult:function(stanza,query_attrs){var id=stanza.getAttribute("id"),from=stanza.getAttribute("from"),iqresult=$iq({type:"result",id:id});return null!==from&&iqresult.attrs({to:from}),iqresult.c("query",query_attrs)},_onDiscoInfo:function(stanza){var node=stanza.getElementsByTagName("query")[0].getAttribute("node"),attrs={xmlns:Strophe.NS.DISCO_INFO};node&&(attrs.node=node);for(var iqresult=this._buildIQResult(stanza,attrs),i=0;i<this._identities.length;i++){var attrs={category:this._identities[i].category,type:this._identities[i].type};this._identities[i].name&&(attrs.name=this._identities[i].name),this._identities[i].lang&&(attrs["xml:lang"]=this._identities[i].lang),iqresult.c("identity",attrs).up()}for(var i=0;i<this._features.length;i++)iqresult.c("feature",{"var":this._features[i]}).up();return this._connection.send(iqresult.tree()),!0},_onDiscoItems:function(stanza){var query_attrs={xmlns:Strophe.NS.DISCO_ITEMS},node=stanza.getElementsByTagName("query")[0].getAttribute("node");if(node){query_attrs.node=node;for(var items=[],i=0;i<this._items.length;i++)if(this._items[i].node==node){items=this._items[i].call_back(stanza);break}}else var items=this._items;for(var iqresult=this._buildIQResult(stanza,query_attrs),i=0;i<items.length;i++){var attrs={jid:items[i].jid};items[i].name&&(attrs.name=items[i].name),items[i].node&&(attrs.node=items[i].node),iqresult.c("item",attrs).up()}return this._connection.send(iqresult.tree()),!0}}),/*!
+ * Source: lib/strophe.caps.js, license: MIT, url: https://github.com/strophe/strophejs-plugins
+ */
+/**
* Entity Capabilities (XEP-0115)
*
* Depends on disco plugin.
@@ -36,19 +47,38 @@ case"item":a=c2.attributes,data.affiliation=(null!=(_ref4=a.affiliation)?_ref4.t
*
* @license MIT
*/
-function($){Strophe.addConnectionPlugin("caps",{HASH:"sha-1",node:"http://strophe.im/strophejs/",_ver:"",_connection:null,_knownCapabilities:JSON.parse(localStorage.getItem("strophe.caps._knownCapabilities"))||{},_jidVerIndex:JSON.parse(localStorage.getItem("strophe.caps._jidVerIndex"))||{},init:function(conn){if(this._connection=conn,Strophe.addNamespace("CAPS","http://jabber.org/protocol/caps"),!this._connection.disco)throw"Caps plugin requires the disco plugin to be installed.";this._connection.disco.addFeature(Strophe.NS.CAPS),this._connection.addHandler(this._delegateCapabilities.bind(this),Strophe.NS.CAPS)},generateCapsAttrs:function(){return{xmlns:Strophe.NS.CAPS,hash:this.HASH,node:this.node,ver:this.generateVer()}},generateVer:function(){if(""!==this._ver)return this._ver;for(var ver="",identities=this._connection.disco._identities.sort(this._sortIdentities),identitiesLen=identities.length,features=this._connection.disco._features.sort(),featuresLen=features.length,i=0;identitiesLen>i;i++){var curIdent=identities[i];ver+=curIdent.category+"/"+curIdent.type+"/"+curIdent.lang+"/"+curIdent.name+"<"}for(var i=0;featuresLen>i;i++)ver+=features[i]+"<";return this._ver=b64_sha1(ver),this._ver},getCapabilitiesByJid:function(jid){return this._jidVerIndex[jid]?this._knownCapabilities[this._jidVerIndex[jid]]:null},hasFeatureByJid:function(jid,feature){if(this._jidVerIndex[jid]&&null!==feature&&"undefined"!=typeof feature){$.isArray(feature)||(feature=$.makeArray(feature));var i;for(i=0;i<feature.length;i++)if(this._knownCapabilities[this._jidVerIndex[jid]].features.indexOf(feature[i])<0)return!1;return!0}return!1},_delegateCapabilities:function(stanza){var from=stanza.getAttribute("from"),c=stanza.querySelector("c"),ver=c.getAttribute("ver"),node=c.getAttribute("node");return this._knownCapabilities[ver]?(this._jidVerIndex[from]=ver,this._jidVerIndex[from]&&!this._jidVerIndex[from]===ver||(this._jidVerIndex[from]=ver),localStorage.setItem("strophe.caps._jidVerIndex",JSON.stringify(this._jidVerIndex)),$(document).trigger("caps.strophe",[from]),!0):this._requestCapabilities(from,node,ver)},_requestCapabilities:function(to,node,ver){if(to!==this._connection.jid){var id=this._connection.disco.info(to,node+"#"+ver);this._connection.addHandler(this._handleDiscoInfoReply.bind(this),Strophe.NS.DISCO_INFO,"iq","result",id,to)}return!0},_handleDiscoInfoReply:function(stanza){var query=stanza.querySelector("query"),from=stanza.getAttribute("from"),node=query.getAttribute("node"),ver=node?node.split("#")[1]:this._jidVerIndex[from];if(this._knownCapabilities[ver])this._jidVerIndex[from]&&!this._jidVerIndex[from]===ver||(this._jidVerIndex[from]=ver);else{var childNodes=query.childNodes,childNodesLen=childNodes.length;this._knownCapabilities[ver]={features:[],identities:[]};for(var i=0;childNodesLen>i;i++){var node=childNodes[i];"feature"==node.nodeName?this._knownCapabilities[ver].features.push(node.getAttribute("var")):"identity"==node.nodeName?this._knownCapabilities[ver].identities.push(this._attributesToJsObject(node.attributes)):("undefined"==typeof this._knownCapabilities[ver][node.nodeName]&&(this._knownCapabilities[ver][node.nodeName]=[]),this._knownCapabilities[ver][node.nodeName].push(this._attributesToJsObject(node.attributes)))}this._jidVerIndex[from]=ver}return localStorage.setItem("strophe.caps._jidVerIndex",JSON.stringify(this._jidVerIndex)),localStorage.setItem("strophe.caps._knownCapabilities",JSON.stringify(this._knownCapabilities)),$(document).trigger("caps.strophe",[from]),!1},_attributesToJsObject:function(attr){var obj={};for(i=0;i<attr.length;i++)obj[attr[i].name]=attr[i].value;return obj},_sortIdentities:function(a,b){return a.category>b.category?1:a.category<b.category?-1:a.type>b.type?1:a.type<b.type?-1:a.lang>b.lang?1:a.lang<b.lang?-1:0}})}(jQuery);var buildIq;buildIq=function(type,jid,vCardEl){var iq;return iq=$iq(jid?{type:type,to:jid}:{type:type}),iq.c("vCard",{xmlns:Strophe.NS.VCARD}),vCardEl&&iq.cnode(vCardEl),iq},Strophe.addConnectionPlugin("vcard",{_connection:null,init:function(conn){return this._connection=conn,Strophe.addNamespace("VCARD","vcard-temp")},get:function(handler_cb,jid,error_cb){var iq;return iq=buildIq("get",jid),this._connection.sendIQ(iq,handler_cb,error_cb)},set:function(handler_cb,vCardEl,jid,error_cb){var iq;return iq=buildIq("set",jid,vCardEl),this._connection.sendIQ(iq,handler_cb,error_rb)}}),function($){Strophe.addConnectionPlugin("jingle",{connection:null,sessions:{},jid2session:{},ice_config:{iceServers:[]},pc_constraints:{},media_constraints:{mandatory:{OfferToReceiveAudio:!0,OfferToReceiveVideo:!0}},localStream:null,init:function(conn){this.connection=conn,this.connection.disco&&(this.connection.disco.addFeature("urn:xmpp:jingle:1"),this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:1"),this.connection.disco.addFeature("urn:xmpp:jingle:transports:ice-udp:1"),this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:audio"),this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:video"),this.connection.disco.addFeature("urn:ietf:rfc:5761")),this.connection.addHandler(this.onJingle.bind(this),"urn:xmpp:jingle:1","iq","set",null,null)},onJingle:function(iq){var sid=$(iq).find("jingle").attr("sid"),action=$(iq).find("jingle").attr("action"),ack=$iq({type:"result",to:iq.getAttribute("from"),id:iq.getAttribute("id")});console.log("on jingle "+action);var sess=this.sessions[sid];if("session-initiate"!=action){if(null===sess)return ack.type="error",ack.c("error",{type:"cancel"}).c("item-not-found",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("unknown-session",{xmlns:"urn:xmpp:jingle:errors:1"}),this.connection.send(ack),!0;if(Strophe.getBareJidFromJid(iq.getAttribute("from"))!=Strophe.getBareJidFromJid(sess.peerjid))return console.warn("jid mismatch for session id",sid,iq.getAttribute("from"),sess.peerjid),ack.type="error",ack.c("error",{type:"cancel"}).c("item-not-found",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("unknown-session",{xmlns:"urn:xmpp:jingle:errors:1"}),this.connection.send(ack),!0}else if(void 0!==sess)return ack.type="error",ack.c("error",{type:"cancel"}).c("service-unavailable",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up(),console.warn("duplicate session id",sid),this.connection.send(ack),!0;switch(this.connection.send(ack),action){case"session-initiate":sess=new JingleSession($(iq).attr("to"),$(iq).find("jingle").attr("sid"),this.connection),this.localStream&&sess.localStreams.push(this.localStream),sess.media_constraints=this.media_constraints,sess.pc_constraints=this.pc_constraints,sess.ice_config=this.ice_config,sess.initiate($(iq).attr("from"),!1),sess.setRemoteDescription($(iq).find(">jingle"),"offer"),$(iq).find('>jingle>muted[xmlns="http://jitsi.org/protocol/meet#startmuted"]').length&&(console.log("got a request to start muted"),sess.startmuted=!0),this.sessions[sess.sid]=sess,this.jid2session[sess.peerjid]=sess,$(document).trigger("callincoming.jingle",[sess.sid]);break;case"session-accept":sess.setRemoteDescription($(iq).find(">jingle"),"answer"),sess.accept(),$(document).trigger("callaccepted.jingle",[sess.sid]);break;case"session-terminate":console.log("terminating..."),sess.terminate(),this.terminate(sess.sid),$(iq).find(">jingle>reason").length?$(document).trigger("callterminated.jingle",[sess.sid,$(iq).find(">jingle>reason>:first")[0].tagName,$(iq).find(">jingle>reason>text").text()]):$(document).trigger("callterminated.jingle",[sess.sid]);break;case"transport-info":sess.addIceCandidate($(iq).find(">jingle>content"));break;case"session-info":var affected;$(iq).find('>jingle>ringing[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length?$(document).trigger("ringing.jingle",[sess.sid]):$(iq).find('>jingle>mute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length?(affected=$(iq).find('>jingle>mute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').attr("name"),$(document).trigger("mute.jingle",[sess.sid,affected])):$(iq).find('>jingle>unmute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length&&(affected=$(iq).find('>jingle>unmute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').attr("name"),$(document).trigger("unmute.jingle",[sess.sid,affected]));break;case"addsource":sess.addSource($(iq).find(">jingle>content"));break;case"removesource":sess.removeSource($(iq).find(">jingle>content"));break;default:console.warn("jingle action not implemented",action)}return!0},initiate:function(peerjid,myjid){var sess=new JingleSession(myjid||this.connection.jid,Math.random().toString(36).substr(2,12),this.connection);return this.localStream&&sess.localStreams.push(this.localStream),sess.media_constraints=this.media_constraints,sess.pc_constraints=this.pc_constraints,sess.ice_config=this.ice_config,sess.initiate(peerjid,!0),this.sessions[sess.sid]=sess,this.jid2session[sess.peerjid]=sess,sess.sendOffer(),sess},terminate:function(sid,reason,text){if(null===sid||void 0===sid)for(sid in this.sessions)"ended"!=this.sessions[sid].state&&(this.sessions[sid].sendTerminate(reason||!this.sessions[sid].active()?"cancel":null,text),this.sessions[sid].terminate()),delete this.jid2session[this.sessions[sid].peerjid],delete this.sessions[sid];else this.sessions.hasOwnProperty(sid)&&("ended"!=this.sessions[sid].state&&(this.sessions[sid].sendTerminate(reason||!this.sessions[sid].active()?"cancel":null,text),this.sessions[sid].terminate()),delete this.jid2session[this.sessions[sid].peerjid],delete this.sessions[sid])},terminateByJid:function(jid){if(this.jid2session.hasOwnProperty(jid)){var sess=this.jid2session[jid];sess&&(sess.terminate(),console.log("peer went away silently",jid),delete this.sessions[sess.sid],delete this.jid2session[jid],$(document).trigger("callterminated.jingle",[sess.sid,"gone"]))}},getStunAndTurnCredentials:function(){var self=this;this.connection.sendIQ($iq({type:"get",to:this.connection.domain}).c("services",{xmlns:"urn:xmpp:extdisco:1"}).c("service",{host:"turn."+this.connection.domain}),function(res){var iceservers=[];$(res).find(">services>service").each(function(idx,el){el=$(el);var dict={};switch(el.attr("type")){case"stun":dict.url="stun:"+el.attr("host"),el.attr("port")&&(dict.url+=":"+el.attr("port")),iceservers.push(dict);break;case"turn":dict.url="turn:",el.attr("username")&&(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)&&parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2],10)<28?dict.url+=el.attr("username")+"@":dict.username=el.attr("username")),dict.url+=el.attr("host"),el.attr("port")&&"3478"!=el.attr("port")&&(dict.url+=":"+el.attr("port")),el.attr("transport")&&"udp"!=el.attr("transport")&&(dict.url+="?transport="+el.attr("transport")),el.attr("password")&&(dict.credential=el.attr("password")),iceservers.push(dict)}}),self.ice_config.iceServers=iceservers},function(err){console.warn("getting turn credentials failed",err),console.warn("is mod_turncredentials or similar installed?")})}})}(jQuery);var JingleSession;!function($){JingleSession=function(me,sid,connection){this.me=me,this.sid=sid,this.connection=connection,this.initiator=null,this.responder=null,this.isInitiator=null,this.peerjid=null,this.state=null,this.peerconnection=null,this.remoteStream=null,this.localSDP=null,this.remoteSDP=null,this.localStreams=[],this.relayedStreams=[],this.remoteStreams=[],this.startTime=null,this.stopTime=null,this.media_constraints=null,this.pc_constraints=null,this.ice_config={},this.drip_container=[],this.usetrickle=!0,this.usepranswer=!1,this.usedrip=!1,this.hadstuncandidate=!1,this.hadturncandidate=!1,this.lasticecandidate=!1,this.statsinterval=null,this.reason=null,this.addssrc=[],this.removessrc=[],this.pendingop=null,this.wait=!0,this.nickname=null,this.startmuted=!1,this.filter_candidates=null},JingleSession.prototype.initiate=function(peerjid,isInitiator){var self=this;if(null!==this.state)return void console.error("attempt to initiate on session "+this.sid+"in state "+this.state);this.isInitiator=isInitiator,this.state="pending",this.initiator=isInitiator?this.me:peerjid,this.responder=isInitiator?peerjid:this.me,this.peerjid=peerjid;try{this.peerconnection=new RTCPeerconnection(this.ice_config,this.pc_constraints)}catch(e){return console.error("Failed to create PeerConnection, exception: ",e.message),void console.error(e)}this.hadstuncandidate=!1,this.hadturncandidate=!1,this.lasticecandidate=!1,this.peerconnection.onicecandidate=function(event){self.sendIceCandidate(event.candidate)},this.peerconnection.onaddstream=function(event){self.remoteStream=event.stream,self.remoteStreams.push(event.stream),$(document).trigger("remotestreamadded.jingle",[event,self.sid])},this.peerconnection.onremovestream=function(event){self.remoteStream=null,$(document).trigger("remotestreamremoved.jingle",[event,self.sid])},this.peerconnection.onsignalingstatechange=function(event){!self||!self.peerconnection},this.peerconnection.oniceconnectionstatechange=function(event){if(self&&self.peerconnection){switch(self.peerconnection.iceConnectionState){case"connected":this.startTime=new Date;break;case"disconnected":this.stopTime=new Date}$(document).trigger("iceconnectionstatechange.jingle",[self.sid,self])}},this.localStreams.forEach(function(stream){self.peerconnection.addStream(stream)}),this.relayedStreams.forEach(function(stream){self.peerconnection.addStream(stream)})},JingleSession.prototype.accept=function(){var self=this;this.state="active";var pranswer=this.peerconnection.localDescription;if(pranswer&&"pranswer"==pranswer.type){if(console.log("going from pranswer to answer"),this.usetrickle)for(var lines=SDPUtil.find_lines(pranswer.sdp,"a=candidate:"),i=0;i<lines.length;i++)pranswer.sdp=pranswer.sdp.replace(lines[i]+"\r\n","");for(;SDPUtil.find_line(pranswer.sdp,"a=inactive");)pranswer.sdp=pranswer.sdp.replace("a=inactive","a=sendrecv");var prsdp=new SDP(pranswer.sdp),accept=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:this.initiator,responder:this.responder,sid:this.sid});prsdp.toJingle(accept,this.initiator==this.me?"initiator":"responder"),this.connection.sendIQ(accept,function(){var ack={};ack.source="answer",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="answer",$(document).trigger("error.jingle",[self.sid,error])},1e4);for(var sdp=this.peerconnection.localDescription.sdp;SDPUtil.find_line(sdp,"a=inactive");)sdp=sdp.replace("a=inactive","a=sendrecv");this.peerconnection.setLocalDescription(new RTCSessionDescription({type:"answer",sdp:sdp}),function(){$(document).trigger("setLocalDescription.jingle",[self.sid])},function(e){console.error("setLocalDescription failed",e)})}},JingleSession.prototype.terminate=function(reason){this.state="ended",this.reason=reason,this.peerconnection.close(),null!==this.statsinterval&&(window.clearInterval(this.statsinterval),this.statsinterval=null)},JingleSession.prototype.active=function(){return"active"==this.state},JingleSession.prototype.sendIceCandidate=function(candidate){var self=this;if(candidate&&!this.lasticecandidate){var ice=SDPUtil.iceparams(this.localSDP.media[candidate.sdpMLineIndex],this.localSDP.session),jcand=SDPUtil.candidateToJingle(candidate.candidate);if(!ice||!jcand)return void console.error("failed to get ice && jcand");if(ice.xmlns="urn:xmpp:jingle:transports:ice-udp:1","srflx"===jcand.type?this.hadstuncandidate=!0:"relay"===jcand.type&&(this.hadturncandidate=!0),(null===this.filter_candidates||jcand.type===this.filter_candidates)&&this.usetrickle){if(console.log("sendIceCandidate using trickle"),this.usedrip)return 0===this.drip_container.length&&window.setTimeout(function(){console.log("sending drip container"),0!==self.drip_container.length&&(self.sendIceCandidates(self.drip_container),self.drip_container=[])},20),void this.drip_container.push(event.candidate);console.log("sending single candidate"),self.sendIceCandidates([event.candidate])}}else{if(console.log("sendIceCandidate: last candidate..."),!this.usetrickle){console.log("should send full offer now...");var init=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"offer"==this.peerconnection.localDescription.type?"session-initiate":"session-accept",initiator:this.initiator,sid:this.sid});null!=this.nickname&&init.c("nick",{xmlns:"http://jabber.org/protocol/nick"}).t(this.nickname).up(),this.startmuted&&init.c("muted",{xmlns:"http://jitsi.org/protocol/meet#startmuted"}).up(),this.localSDP=new SDP(this.peerconnection.localDescription.sdp),this.localSDP.toJingle(init,this.initiator==this.me?"initiator":"responder"),console.log("try to send ack(offer)..."),this.connection.sendIQ(init,function(){console.log("Sent session initiate (ACK, offer)...");var ack={};ack.source="offer",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){self.state="error",self.peerconnection.close();var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="offer",$(document).trigger("error.jingle",[self.sid,error])},1e4)}this.lasticecandidate=!0,console.log("Have we encountered any srflx candidates? "+this.hadstuncandidate),console.log("Have we encountered any relay candidates? "+this.hadturncandidate),this.hadstuncandidate||this.hadturncandidate||"closed"==this.peerconnection.signalingState||(console.log("no candidates found!"),$(document).trigger("nostuncandidates.jingle",[this.sid]))}},JingleSession.prototype.sendIceCandidates=function(candidates){console.log("sendIceCandidates",candidates);for(var cand=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-info",initiator:this.initiator,sid:this.sid}),mid=0;mid<this.localSDP.media.length;mid++){var cands=candidates.filter(function(el){return el.sdpMLineIndex==mid});if(cands.length>0){var ice=SDPUtil.iceparams(this.localSDP.media[mid],this.localSDP.session);ice.xmlns="urn:xmpp:jingle:transports:ice-udp:1",cand.c("content",{creator:this.initiator==this.me?"initiator":"responder",name:cands[0].sdpMid}).c("transport",ice);for(var i=0;i<cands.length;i++)cand.c("candidate",SDPUtil.candidateToJingle(cands[i].candidate)).up();if(SDPUtil.find_line(this.localSDP.media[mid],"a=fingerprint:",this.localSDP.session)){var tmp=SDPUtil.parse_fingerprint(SDPUtil.find_line(this.localSDP.media[mid],"a=fingerprint:",this.localSDP.session));tmp.required=!0,cand.c("fingerprint").t(tmp.fingerprint),delete tmp.fingerprint,cand.attrs(tmp),cand.up()}cand.up(),cand.up()}}console.log("try to send ack(transportinfo)..."),this.connection.sendIQ(cand,function(){var ack={};ack.source="transportinfo",console.log("Sent session initiate (ACK, transportinfo)..."),$(document).trigger("ack.jingle",[this.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="transportinfo",$(document).trigger("error.jingle",[this.sid,error])},1e4)},JingleSession.prototype.sendOffer=function(){var self=this;this.peerconnection.createOffer(function(sdp){self.createdOffer(sdp)},function(e){console.error("createOffer failed",e)},this.media_constraints)},JingleSession.prototype.createdOffer=function(sdp){var self=this;if(this.localSDP=new SDP(sdp.sdp),this.usetrickle){var init=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-initiate",initiator:this.initiator,sid:this.sid});null!=this.nickname&&init.c("nick",{xmlns:"http://jabber.org/protocol/nick"}).t(this.nickname).up(),this.startmuted&&init.c("muted",{xmlns:"http://jitsi.org/protocol/meet#startmuted"}).up(),this.localSDP.toJingle(init,this.initiator==this.me?"initiator":"responder"),this.connection.sendIQ(init,function(){var ack={};ack.source="offer",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){self.state="error",self.peerconnection.close();var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="offer",$(document).trigger("error.jingle",[self.sid,error])},1e4)}sdp.sdp=this.localSDP.raw,this.peerconnection.setLocalDescription(sdp,function(){$(document).trigger("setLocalDescription.jingle",[self.sid])},function(e){console.error("setLocalDescription failed",e)});for(var cands=SDPUtil.find_lines(this.localSDP.raw,"a=candidate:"),i=0;i<cands.length;i++){var cand=SDPUtil.parse_icecandidate(cands[i]);"srflx"==cand.type?this.hadstuncandidate=!0:"relay"==cand.type&&(this.hadturncandidate=!0)}},JingleSession.prototype.setRemoteDescription=function(elem,desctype){if(this.remoteSDP=new SDP(""),this.remoteSDP.fromJingle(elem),null!==this.peerconnection.remoteDescription&&(console.log("setRemoteDescription when remote description is not null, should be pranswer",this.peerconnection.remoteDescription),"pranswer"==this.peerconnection.remoteDescription.type)){for(var pranswer=new SDP(this.peerconnection.remoteDescription.sdp),i=0;i<pranswer.media.length;i++){SDPUtil.find_line(this.remoteSDP.media[i],"a=ice-ufrag:",this.remoteSDP.session)||(SDPUtil.find_line(pranswer.media[i],"a=ice-ufrag:",pranswer.session)?this.remoteSDP.media[i]+=SDPUtil.find_line(pranswer.media[i],"a=ice-ufrag:",pranswer.session)+"\r\n":console.warn("no ice ufrag?"),SDPUtil.find_line(pranswer.media[i],"a=ice-pwd:",pranswer.session)?this.remoteSDP.media[i]+=SDPUtil.find_line(pranswer.media[i],"a=ice-pwd:",pranswer.session)+"\r\n":console.warn("no ice pwd?"));for(var lines=SDPUtil.find_lines(pranswer.media[i],"a=candidate:"),j=0;j<lines.length;j++)this.remoteSDP.media[i]+=lines[j]+"\r\n"}this.remoteSDP.raw=this.remoteSDP.session+this.remoteSDP.media.join("")}var remotedesc=new RTCSessionDescription({type:desctype,sdp:this.remoteSDP.raw});this.peerconnection.setRemoteDescription(remotedesc,function(){},function(e){console.error("setRemoteDescription error",e)})},JingleSession.prototype.addIceCandidate=function(elem){var self=this;if("closed"!=this.peerconnection.signalingState){if(!this.peerconnection.remoteDescription&&"have-local-offer"==this.peerconnection.signalingState){if(console.log("trickle ice candidate arriving before session accept..."),!this.remoteSDP){for(var cobbled="v=0\r\no=- 1923518516 2 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\n",i=0;i<this.localSDP.media.length;i++)cobbled+=SDPUtil.find_line(this.localSDP.media[i],"m=")+"\r\n",cobbled+=SDPUtil.find_lines(this.localSDP.media[i],"a=rtpmap:").join("\r\n")+"\r\n",SDPUtil.find_line(this.localSDP.media[i],"a=mid:")&&(cobbled+=SDPUtil.find_line(this.localSDP.media[i],"a=mid:")+"\r\n"),cobbled+="a=inactive\r\n";this.remoteSDP=new SDP(cobbled)}elem.each(function(){for(var i=0;i<self.remoteSDP.media.length;i++)if((SDPUtil.find_line(self.remoteSDP.media[i],"a=mid:"+$(this).attr("name"))||0===self.remoteSDP.media[i].indexOf("m="+$(this).attr("name")))&&!SDPUtil.find_line(self.remoteSDP.media[i],"a=ice-ufrag:")){var tmp=$(this).find("transport");self.remoteSDP.media[i]+="a=ice-ufrag:"+tmp.attr("ufrag")+"\r\n",self.remoteSDP.media[i]+="a=ice-pwd:"+tmp.attr("pwd")+"\r\n",tmp=$(this).find("transport>fingerprint"),tmp.length?self.remoteSDP.media[i]+="a=fingerprint:"+tmp.attr("hash")+" "+tmp.text()+"\r\n":(console.log("no dtls fingerprint (webrtc issue #1718?)"),self.remoteSDP.media[i]+="a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:BAADBAADBAADBAADBAADBAADBAADBAADBAADBAAD\r\n");break}}),this.remoteSDP.raw=this.remoteSDP.session+this.remoteSDP.media.join("");var iscomplete=this.remoteSDP.media.filter(function(mediapart){return SDPUtil.find_line(mediapart,"a=ice-ufrag:")}).length==this.remoteSDP.media.length;if(iscomplete){console.log("setting pranswer");try{this.peerconnection.setRemoteDescription(new RTCSessionDescription({type:"pranswer",sdp:this.remoteSDP.raw}),function(){},function(e){console.log("setRemoteDescription pranswer failed",e.toString())})}catch(e){console.error("setting pranswer failed",e)}}}elem.each(function(){var i,idx=-1;for(i=0;i<self.remoteSDP.media.length;i++)if(SDPUtil.find_line(self.remoteSDP.media[i],"a=mid:"+$(this).attr("name"))||0===self.remoteSDP.media[i].indexOf("m="+$(this).attr("name"))){idx=i;break}if(-1==idx)for(i=0;i<self.localSDP.media.length;i++)if(SDPUtil.find_line(self.localSDP.media[i],"a=mid:"+$(this).attr("name"))||0===self.localSDP.media[i].indexOf("m="+$(this).attr("name"))){idx=i;break}var name=$(this).attr("name");$(this).find("transport>candidate").each(function(){var line,candidate;line=SDPUtil.candidateFromJingle(this),candidate=new RTCIceCandidate({sdpMLineIndex:idx,sdpMid:name,candidate:line});try{self.peerconnection.addIceCandidate(candidate)}catch(e){console.error("addIceCandidate failed",e.toString(),line)}})})}},JingleSession.prototype.sendAnswer=function(provisional){var self=this;this.peerconnection.createAnswer(function(sdp){self.createdAnswer(sdp,provisional)},function(e){console.error("createAnswer failed",e)},this.media_constraints)},JingleSession.prototype.createdAnswer=function(sdp,provisional){var self=this;if(this.localSDP=new SDP(sdp.sdp),this.usepranswer=provisional===!0,this.startmuted&&(console.log("we got a request to start muted..."),this.connection.jingle.localStream.getAudioTracks().forEach(function(track){track.enabled=!1}),this.connection.jingle.localStream.getVideoTracks().forEach(function(track){track.enabled=!1}),this.localSDP.media[1]=this.localSDP.media[1].replace("a=sendrecv","a=recvonly"),SDPUtil.find_lines(this.localSDP.media[1],"a=ssrc:").forEach(function(line){self.localSDP.media[1]=self.localSDP.media[1].replace(line+"\r\n","")}),this.localSDP.raw=this.localSDP.session+this.localSDP.media.join("")),this.usetrickle)if(this.usepranswer){sdp.type="pranswer";for(var i=0;i<this.localSDP.media.length;i++)this.localSDP.media[i]=this.localSDP.media[i].replace("a=sendrecv\r\n","a=inactive\r\n");this.localSDP.raw=this.localSDP.session+this.localSDP.media.join("")}else{var accept=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:this.initiator,responder:this.responder,sid:this.sid});this.localSDP.toJingle(accept,this.initiator==this.me?"initiator":"responder"),this.connection.sendIQ(accept,function(){var ack={};ack.source="answer",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="answer",$(document).trigger("error.jingle",[self.sid,error])},1e4)}sdp.sdp=this.localSDP.raw,this.peerconnection.setLocalDescription(sdp,function(){$(document).trigger("setLocalDescription.jingle",[self.sid])},function(e){console.error("setLocalDescription failed",e)});for(var cands=SDPUtil.find_lines(this.localSDP.raw,"a=candidate:"),j=0;j<cands.length;j++){var cand=SDPUtil.parse_icecandidate(cands[j]);"srflx"==cand.type?this.hadstuncandidate=!0:"relay"==cand.type&&(this.hadturncandidate=!0)}},JingleSession.prototype.sendTerminate=function(reason,text){var self=this,term=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-terminate",initiator:this.initiator,sid:this.sid}).c("reason").c(reason||"success");text&&term.up().c("text").t(text),this.connection.sendIQ(term,function(){self.peerconnection.close(),self.peerconnection=null,self.terminate();var ack={};ack.source="terminate",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};$(document).trigger("ack.jingle",[self.sid,error])},1e4),null!==this.statsinterval&&(window.clearInterval(this.statsinterval),this.statsinterval=null)},JingleSession.prototype.addSource=function(elem){console.log("addssrc",(new Date).getTime()),console.log("ice",this.peerconnection.iceConnectionState);var sdp=new SDP(this.peerconnection.remoteDescription.sdp),self=this;$(elem).each(function(idx,content){var name=$(content).attr("name"),lines="";tmp=$(content).find('>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]'),tmp.each(function(){var ssrc=$(this).attr("ssrc");$(this).find(">parameter").each(function(){lines+="a=ssrc:"+ssrc+" "+$(this).attr("name"),$(this).attr("value")&&$(this).attr("value").length&&(lines+=":"+$(this).attr("value")),lines+="\r\n"})}),sdp.media.forEach(function(media,idx){SDPUtil.find_line(media,"a=mid:"+name)&&(sdp.media[idx]+=lines,self.addssrc[idx]||(self.addssrc[idx]=""),self.addssrc[idx]+=lines)}),sdp.raw=sdp.session+sdp.media.join("")}),this.modifySources()},JingleSession.prototype.removeSource=function(elem){console.log("removessrc",(new Date).getTime()),console.log("ice",this.peerconnection.iceConnectionState);var sdp=new SDP(this.peerconnection.remoteDescription.sdp),self=this;$(elem).each(function(idx,content){var name=$(content).attr("name"),lines="";tmp=$(content).find('>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]'),tmp.each(function(){var ssrc=$(this).attr("ssrc");$(this).find(">parameter").each(function(){lines+="a=ssrc:"+ssrc+" "+$(this).attr("name"),$(this).attr("value")&&$(this).attr("value").length&&(lines+=":"+$(this).attr("value")),lines+="\r\n"})}),sdp.media.forEach(function(media,idx){SDPUtil.find_line(media,"a=mid:"+name)&&(sdp.media[idx]+=lines,self.addssrc[idx]||(self.removessrc[idx]=""),self.removessrc[idx]+=lines)}),sdp.raw=sdp.session+sdp.media.join("")}),this.modifySources()},JingleSession.prototype.modifySources=function(){var self=this;if("closed"!=this.peerconnection.signalingState&&(this.addssrc.length||this.removessrc.length||null!==this.pendingop)){if("stable"!=this.peerconnection.signalingState||"connected"!=this.peerconnection.iceConnectionState)return console.warn("modifySources not yet",this.peerconnection.signalingState,this.peerconnection.iceConnectionState),this.wait=!0,void window.setTimeout(function(){self.modifySources()},250);if(this.wait)return window.setTimeout(function(){self.modifySources()},2500),void(this.wait=!1);var sdp=new SDP(this.peerconnection.remoteDescription.sdp);this.addssrc.forEach(function(lines,idx){sdp.media[idx]+=lines}),this.addssrc=[],this.removessrc.forEach(function(lines,idx){lines=lines.split("\r\n"),lines.pop(),lines.forEach(function(line){sdp.media[idx]=sdp.media[idx].replace(line+"\r\n","")})}),this.removessrc=[],sdp.raw=sdp.session+sdp.media.join(""),this.peerconnection.setRemoteDescription(new RTCSessionDescription({type:"offer",sdp:sdp.raw}),function(){self.peerconnection.createAnswer(function(modifiedAnswer){if(null!==self.pendingop){var sdp=new SDP(modifiedAnswer.sdp);if(sdp.media.length>1){switch(self.pendingop){case"mute":sdp.media[1]=sdp.media[1].replace("a=sendrecv","a=recvonly");break;case"unmute":sdp.media[1]=sdp.media[1].replace("a=recvonly","a=sendrecv")}sdp.raw=sdp.session+sdp.media.join(""),modifiedAnswer.sdp=sdp.raw}self.pendingop=null}self.peerconnection.setLocalDescription(modifiedAnswer,function(){$(document).trigger("setLocalDescription.jingle",[self.sid])},function(error){console.log("modified setLocalDescription failed")})},function(error){console.log("modified answer failed")})},function(error){console.log("modify failed")})}},JingleSession.prototype.hardMuteVideo=function(muted){this.pendingop=muted?"mute":"unmute",this.modifySources(),this.connection.jingle.localStream.getVideoTracks().forEach(function(track){track.enabled=!muted})},JingleSession.prototype.sendMute=function(muted,content){var info=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-info",initiator:this.initiator,sid:this.sid});info.c(muted?"mute":"unmute",{xmlns:"urn:xmpp:jingle:apps:rtp:info:1"}),info.attrs({creator:this.me==this.initiator?"creator":"responder"}),content&&info.attrs({name:content}),this.connection.send(info)},JingleSession.prototype.sendRinging=function(){var info=$iq({
-to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-info",initiator:this.initiator,sid:this.sid});info.c("ringing",{xmlns:"urn:xmpp:jingle:apps:rtp:info:1"}),this.connection.send(info)},JingleSession.prototype.getStats=function(interval){var self=this,recv={audio:0,video:0},lost={audio:0,video:0},lastrecv={audio:0,video:0},lastlost={audio:0,video:0},loss={audio:0,video:0},delta={audio:0,video:0};return this.statsinterval=window.setInterval(function(){self&&self.peerconnection&&self.peerconnection.getStats&&self.peerconnection.getStats(function(stats){for(var results=stats.result(),i=0;i<results.length;++i)if("ssrc"==results[i].type){var packetsrecv=results[i].stat("packetsReceived"),packetslost=results[i].stat("packetsLost");packetsrecv&&packetslost&&(packetsrecv=parseInt(packetsrecv,10),packetslost=parseInt(packetslost,10),results[i].stat("googFrameRateReceived")?(lastlost.video=lost.video,lastrecv.video=recv.video,recv.video=packetsrecv,lost.video=packetslost):(lastlost.audio=lost.audio,lastrecv.audio=recv.audio,recv.audio=packetsrecv,lost.audio=packetslost))}delta.audio=recv.audio-lastrecv.audio,delta.video=recv.video-lastrecv.video,loss.audio=delta.audio>0?Math.ceil(100*(lost.audio-lastlost.audio)/delta.audio):0,loss.video=delta.video>0?Math.ceil(100*(lost.video-lastlost.video)/delta.video):0,$(document).trigger("packetloss.jingle",[self.sid,loss])})},interval||3e3),this.statsinterval}}(jQuery);var SDP;!function($){SDP=function(sdp){this.media=sdp.split("\r\nm=");for(var i=1;i<this.media.length;i++)this.media[i]="m="+this.media[i],i!=this.media.length-1&&(this.media[i]+="\r\n");this.session=this.media.shift()+"\r\n",this.raw=this.session+this.media.join("")},SDP.prototype.mangle=function(){var i,j,mline,lines,rtpmap,newdesc;for(i=0;i<this.media.length;i++)if(lines=this.media[i].split("\r\n"),lines.pop(),mline=SDPUtil.parse_mline(lines.shift()),"audio"==mline.media){for(newdesc="",mline.fmt.length=0,j=0;j<lines.length;j++)if("a=rtpmap:"==lines[j].substr(0,9)){if(rtpmap=SDPUtil.parse_rtpmap(lines[j]),"CN"==rtpmap.name||"ISAC"==rtpmap.name)continue;mline.fmt.push(rtpmap.id),newdesc+=lines[j]+"\r\n"}else newdesc+=lines[j]+"\r\n";this.media[i]=SDPUtil.build_mline(mline)+"\r\n",this.media[i]+=newdesc}this.raw=this.session+this.media.join("")},SDP.prototype.removeSessionLines=function(prefix){var self=this,lines=SDPUtil.find_lines(this.session,prefix);return lines.forEach(function(line){self.session=self.session.replace(line+"\r\n","")}),this.raw=this.session+this.media.join(""),lines},SDP.prototype.removeMediaLines=function(mediaindex,prefix){var self=this,lines=SDPUtil.find_lines(this.media[mediaindex],prefix);return lines.forEach(function(line){self.media[mediaindex]=self.media[mediaindex].replace(line+"\r\n","")}),this.raw=this.session+this.media.join(""),lines},SDP.prototype.toJingle=function(elem,thecreator){var i,j,k,mline,ssrc,rtpmap,tmp,lines;if(SDPUtil.find_line(this.session,"a=group:"))for(lines=SDPUtil.find_lines(this.session,"a=group:"),i=0;i<lines.length;i++){tmp=lines[i].split(" ");var semantics=tmp.shift().substr(8);for(elem.c("group",{xmlns:"urn:xmpp:jingle:apps:grouping:0",semantics:semantics}),j=0;j<tmp.length;j++)elem.c("content",{name:tmp[j]}).up();elem.up()}var bundle=[];for(SDPUtil.find_line(this.session,"a=group:BUNDLE")&&(bundle=SDPUtil.find_line(this.session,"a=group:BUNDLE ").split(" "),bundle.shift()),i=0;i<this.media.length;i++)if(mline=SDPUtil.parse_mline(this.media[i].split("\r\n")[0]),"audio"==mline.media||"video"==mline.media){if(ssrc=SDPUtil.find_line(this.media[i],"a=ssrc:")?SDPUtil.find_line(this.media[i],"a=ssrc:").substring(7).split(" ")[0]:!1,elem.c("content",{creator:thecreator,name:mline.media}),SDPUtil.find_line(this.media[i],"a=mid:")){var mid=SDPUtil.parse_mid(SDPUtil.find_line(this.media[i],"a=mid:"));elem.attrs({name:mid}),-1!=bundle.indexOf(mid)&&(elem.c("bundle",{xmlns:"http://estos.de/ns/bundle"}).up(),bundle.splice(bundle.indexOf(mid),1))}if(SDPUtil.find_line(this.media[i],"a=rtpmap:").length){for(elem.c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:mline.media}),ssrc&&elem.attrs({ssrc:ssrc}),j=0;j<mline.fmt.length;j++){if(rtpmap=SDPUtil.find_line(this.media[i],"a=rtpmap:"+mline.fmt[j]),elem.c("payload-type",SDPUtil.parse_rtpmap(rtpmap)),SDPUtil.find_line(this.media[i],"a=fmtp:"+mline.fmt[j]))for(tmp=SDPUtil.parse_fmtp(SDPUtil.find_line(this.media[i],"a=fmtp:"+mline.fmt[j])),k=0;k<tmp.length;k++)elem.c("parameter",tmp[k]).up();this.RtcpFbToJingle(i,elem,mline.fmt[j]),elem.up()}if(SDPUtil.find_line(this.media[i],"a=crypto:",this.session)){elem.c("encryption",{required:1});var crypto=SDPUtil.find_lines(this.media[i],"a=crypto:",this.session);crypto.forEach(function(line){elem.c("crypto",SDPUtil.parse_crypto(line)).up()}),elem.up()}if(ssrc){elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});var ssrclines=SDPUtil.find_lines(this.media[i],"a=ssrc:");ssrclines.forEach(function(line){idx=line.indexOf(" ");var linessrc=line.substr(0,idx).substr(7);linessrc!=ssrc&&(elem.up(),ssrc=linessrc,elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}));var kv=line.substr(idx+1);elem.c("parameter"),-1==kv.indexOf(":")?elem.attrs({name:kv}):(elem.attrs({name:kv.split(":",2)[0]}),elem.attrs({value:kv.split(":",2)[1]})),elem.up()}),elem.up(),tmp=SDPUtil.parse_ssrc(this.media[i]),tmp.xmlns="http://estos.de/ns/ssrc",tmp.ssrc=ssrc,elem.c("ssrc",tmp).up()}if(SDPUtil.find_line(this.media[i],"a=rtcp-mux")&&elem.c("rtcp-mux").up(),this.RtcpFbToJingle(i,elem,"*"),SDPUtil.find_line(this.media[i],"a=extmap:"))for(lines=SDPUtil.find_lines(this.media[i],"a=extmap:"),j=0;j<lines.length;j++){if(tmp=SDPUtil.parse_extmap(lines[j]),elem.c("rtp-hdrext",{xmlns:"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",uri:tmp.uri,id:tmp.value}),tmp.hasOwnProperty("direction"))switch(tmp.direction){case"sendonly":elem.attrs({senders:"responder"});break;case"recvonly":elem.attrs({senders:"initiator"});break;case"sendrecv":elem.attrs({senders:"both"});break;case"inactive":elem.attrs({senders:"none"})}elem.up()}elem.up()}this.TransportToJingle(i,elem),SDPUtil.find_line(this.media[i],"a=sendrecv",this.session)?elem.attrs({senders:"both"}):SDPUtil.find_line(this.media[i],"a=sendonly",this.session)?elem.attrs({senders:"initiator"}):SDPUtil.find_line(this.media[i],"a=recvonly",this.session)?elem.attrs({senders:"responder"}):SDPUtil.find_line(this.media[i],"a=inactive",this.session)&&elem.attrs({senders:"none"}),"0"==mline.port&&elem.attrs({senders:"rejected"}),elem.up()}return elem.up(),elem},SDP.prototype.TransportToJingle=function(mediaindex,elem){var tmp,self=this;elem.c("transport");var fingerprints=SDPUtil.find_lines(this.media[mediaindex],"a=fingerprint:",this.session);if(fingerprints.forEach(function(line){tmp=SDPUtil.parse_fingerprint(line),tmp.xmlns="urn:xmpp:tmp:jingle:apps:dtls:0",elem.c("fingerprint").t(tmp.fingerprint),delete tmp.fingerprint,line=SDPUtil.find_line(self.media[mediaindex],"a=setup:",self.session),line&&(tmp.setup=line.substr(8)),elem.attrs(tmp),elem.up()}),tmp=SDPUtil.iceparams(this.media[mediaindex],this.session),tmp&&(tmp.xmlns="urn:xmpp:jingle:transports:ice-udp:1",elem.attrs(tmp),SDPUtil.find_line(this.media[mediaindex],"a=candidate:",this.session))){var lines=SDPUtil.find_lines(this.media[mediaindex],"a=candidate:",this.session);lines.forEach(function(line){elem.c("candidate",SDPUtil.candidateToJingle(line)).up()})}elem.up()},SDP.prototype.RtcpFbToJingle=function(mediaindex,elem,payloadtype){var lines=SDPUtil.find_lines(this.media[mediaindex],"a=rtcp-fb:"+payloadtype);lines.forEach(function(line){var tmp=SDPUtil.parse_rtcpfb(line);"trr-int"==tmp.type?(elem.c("rtcp-fb-trr-int",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",value:tmp.params[0]}),elem.up()):(elem.c("rtcp-fb",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",type:tmp.type}),tmp.params.length>0&&elem.attrs({subtype:tmp.params[0]}),elem.up())})},SDP.prototype.RtcpFbFromJingle=function(elem,payloadtype){var media="",tmp=elem.find('>rtcp-fb-trr-int[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]');return tmp.length&&(media+="a=rtcp-fb:* trr-int ",media+=tmp.attr("value")?tmp.attr("value"):"0",media+="\r\n"),tmp=elem.find('>rtcp-fb[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]'),tmp.each(function(){media+="a=rtcp-fb:"+payloadtype+" "+$(this).attr("type"),$(this).attr("subtype")&&(media+=" "+$(this).attr("subtype")),media+="\r\n"}),media},SDP.prototype.fromJingle=function(jingle){var self=this;if(this.raw="v=0\r\no=- 1923518516 2 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\n",$(jingle).find('>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]').length)$(jingle).find('>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]').each(function(idx,group){var contents=$(group).find(">content").map(function(idx,content){return content.getAttribute("name")}).get();contents.length>0&&(self.raw+="a=group:"+(group.getAttribute("semantics")||group.getAttribute("type"))+" "+contents.join(" ")+"\r\n")});else if($(jingle).find('>group[xmlns="urn:ietf:rfc:5888"]').length)$(jingle).find('>group[xmlns="urn:ietf:rfc:5888"]').each(function(idx,group){var contents=$(group).find(">content").map(function(idx,content){return content.getAttribute("name")}).get();null!==group.getAttribute("type")&&contents.length>0&&(self.raw+="a=group:"+group.getAttribute("type")+" "+contents.join(" ")+"\r\n")});else{var bundle=$(jingle).find(">content").filter(function(idx,content){return $(content).find(">bundle").length>0}).map(function(idx,content){return content.getAttribute("name")}).get();bundle.length&&(this.raw+="a=group:BUNDLE "+bundle.join(" ")+"\r\n")}this.session=this.raw,jingle.find(">content").each(function(){var m=self.jingle2media($(this));self.media.push(m)}),this.raw=this.session+this.media.join("")},SDP.prototype.jingle2media=function(content){var tmp,media="",desc=content.find("description"),ssrc=desc.attr("ssrc"),self=this;switch(tmp={media:desc.attr("media")},tmp.port="1","rejected"==content.attr("senders")&&(tmp.port="0"),content.find(">transport>fingerprint").length||desc.find("encryption").length?tmp.proto="RTP/SAVPF":tmp.proto="RTP/AVPF",tmp.fmt=desc.find("payload-type").map(function(){return this.getAttribute("id")}).get(),media+=SDPUtil.build_mline(tmp)+"\r\n",media+="c=IN IP4 0.0.0.0\r\n",media+="a=rtcp:1 IN IP4 0.0.0.0\r\n",tmp=content.find('>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]'),tmp.length&&(tmp.attr("ufrag")&&(media+=SDPUtil.build_iceufrag(tmp.attr("ufrag"))+"\r\n"),tmp.attr("pwd")&&(media+=SDPUtil.build_icepwd(tmp.attr("pwd"))+"\r\n"),tmp.find(">fingerprint").each(function(){media+="a=fingerprint:"+this.getAttribute("hash"),media+=" "+$(this).text(),media+="\r\n",this.getAttribute("setup")&&(media+="a=setup:"+this.getAttribute("setup")+"\r\n")})),content.attr("senders")){case"initiator":media+="a=sendonly\r\n";break;case"responder":media+="a=recvonly\r\n";break;case"none":media+="a=inactive\r\n";break;case"both":media+="a=sendrecv\r\n"}return media+="a=mid:"+content.attr("name")+"\r\n",desc.find("rtcp-mux").length&&(media+="a=rtcp-mux\r\n"),desc.find("encryption").length&&desc.find("encryption>crypto").each(function(){media+="a=crypto:"+this.getAttribute("tag"),media+=" "+this.getAttribute("crypto-suite"),media+=" "+this.getAttribute("key-params"),this.getAttribute("session-params")&&(media+=" "+this.getAttribute("session-params")),media+="\r\n"}),desc.find("payload-type").each(function(){media+=SDPUtil.build_rtpmap(this)+"\r\n",$(this).find(">parameter").length&&(media+="a=fmtp:"+this.getAttribute("id")+" ",media+=$(this).find("parameter").map(function(){return(this.getAttribute("name")?this.getAttribute("name")+"=":"")+this.getAttribute("value")}).get().join(";"),media+="\r\n"),media+=self.RtcpFbFromJingle($(this),this.getAttribute("id"))}),media+=self.RtcpFbFromJingle(desc,"*"),tmp=desc.find('>rtp-hdrext[xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"]'),tmp.each(function(){media+="a=extmap:"+this.getAttribute("id")+" "+this.getAttribute("uri")+"\r\n"}),content.find('>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]>candidate').each(function(){media+=SDPUtil.candidateFromJingle(this)}),tmp=content.find('description>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]'),tmp.each(function(){var ssrc=this.getAttribute("ssrc");$(this).find(">parameter").each(function(){media+="a=ssrc:"+ssrc+" "+this.getAttribute("name"),this.getAttribute("value")&&this.getAttribute("value").length&&(media+=":"+this.getAttribute("value")),media+="\r\n"})}),0===tmp.length&&(tmp=content.find('description>ssrc[xmlns="http://estos.de/ns/ssrc"]'),tmp.length&&(media+="a=ssrc:"+ssrc+" cname:"+tmp.attr("cname")+"\r\n",media+="a=ssrc:"+ssrc+" msid:"+tmp.attr("msid")+"\r\n",media+="a=ssrc:"+ssrc+" mslabel:"+tmp.attr("mslabel")+"\r\n",media+="a=ssrc:"+ssrc+" label:"+tmp.attr("label")+"\r\n")),media},SDPUtil={iceparams:function(mediadesc,sessiondesc){var data=null;return SDPUtil.find_line(mediadesc,"a=ice-ufrag:",sessiondesc)&&SDPUtil.find_line(mediadesc,"a=ice-pwd:",sessiondesc)&&(data={ufrag:SDPUtil.parse_iceufrag(SDPUtil.find_line(mediadesc,"a=ice-ufrag:",sessiondesc)),pwd:SDPUtil.parse_icepwd(SDPUtil.find_line(mediadesc,"a=ice-pwd:",sessiondesc))}),data},parse_iceufrag:function(line){return line.substring(12)},build_iceufrag:function(frag){return"a=ice-ufrag:"+frag},parse_icepwd:function(line){return line.substring(10)},build_icepwd:function(pwd){return"a=ice-pwd:"+pwd},parse_mid:function(line){return line.substring(6)},parse_mline:function(line){var parts=line.substring(2).split(" "),data={};return data.media=parts.shift(),data.port=parts.shift(),data.proto=parts.shift(),""===parts[parts.length-1]&&parts.pop(),data.fmt=parts,data},build_mline:function(mline){return"m="+mline.media+" "+mline.port+" "+mline.proto+" "+mline.fmt.join(" ")},parse_rtpmap:function(line){var parts=line.substring(9).split(" "),data={};return data.id=parts.shift(),parts=parts[0].split("/"),data.name=parts.shift(),data.clockrate=parts.shift(),data.channels=parts.length?parts.shift():"1",data},build_rtpmap:function(el){var line="a=rtpmap:"+el.getAttribute("id")+" "+el.getAttribute("name")+"/"+el.getAttribute("clockrate");return el.getAttribute("channels")&&"1"!=el.getAttribute("channels")&&(line+="/"+el.getAttribute("channels")),line},parse_crypto:function(line){var parts=line.substring(9).split(" "),data={};return data.tag=parts.shift(),data["crypto-suite"]=parts.shift(),data["key-params"]=parts.shift(),parts.length&&(data["session-params"]=parts.join(" ")),data},parse_fingerprint:function(line){var parts=line.substring(14).split(" "),data={};return data.hash=parts.shift(),data.fingerprint=parts.shift(),data},parse_fmtp:function(line){var i,key,value,parts=line.split(" "),data=[];for(parts.shift(),parts=parts.join(" ").split(";"),i=0;i<parts.length;i++){for(key=parts[i].split("=")[0];key.length&&" "==key[0];)key=key.substring(1);value=parts[i].split("=")[1],key&&value?data.push({name:key,value:value}):key&&data.push({name:"",value:key})}return data},parse_icecandidate:function(line){var candidate={},elems=line.split(" ");candidate.foundation=elems[0].substring(12),candidate.component=elems[1],candidate.protocol=elems[2].toLowerCase(),candidate.priority=elems[3],candidate.ip=elems[4],candidate.port=elems[5],candidate.type=elems[7],candidate.generation=0;for(var i=8;i<elems.length;i+=2)switch(elems[i]){case"raddr":candidate["rel-addr"]=elems[i+1];break;case"rport":candidate["rel-port"]=elems[i+1];break;case"generation":candidate.generation=elems[i+1];break;case"tcptype":candidate.tcptype=elems[i+1];break;default:console.log('parse_icecandidate not translating "'+elems[i]+'" = "'+elems[i+1]+'"')}return candidate.network="1",candidate.id=Math.random().toString(36).substr(2,10),candidate},build_icecandidate:function(cand){var line=["a=candidate:"+cand.foundation,cand.component,cand.protocol,cand.priority,cand.ip,cand.port,"typ",cand.type].join(" ");switch(line+=" ",cand.type){case"srflx":case"prflx":case"relay":cand.hasOwnAttribute("rel-addr")&&cand.hasOwnAttribute("rel-port")&&(line+="raddr",line+=" ",line+=cand["rel-addr"],line+=" ",line+="rport",line+=" ",line+=cand["rel-port"],line+=" ")}return cand.hasOwnAttribute("tcptype")&&(line+="tcptype",line+=" ",line+=cand.tcptype,line+=" "),line+="generation",line+=" ",line+=cand.hasOwnAttribute("generation")?cand.generation:"0"},parse_ssrc:function(desc){for(var lines=desc.split("\r\n"),data={},i=0;i<lines.length;i++)if("a=ssrc:"==lines[i].substring(0,7)){var idx=lines[i].indexOf(" ");data[lines[i].substr(idx+1).split(":",2)[0]]=lines[i].substr(idx+1).split(":",2)[1]}return data},parse_rtcpfb:function(line){var parts=line.substr(10).split(" "),data={};return data.pt=parts.shift(),data.type=parts.shift(),data.params=parts,data},parse_extmap:function(line){var parts=line.substr(9).split(" "),data={};return data.value=parts.shift(),-1!=data.value.indexOf("/")?(data.direction=data.value.substr(data.value.indexOf("/")+1),data.value=data.value.substr(0,data.value.indexOf("/"))):data.direction="both",data.uri=parts.shift(),data.params=parts,data},find_line:function(haystack,needle,sessionpart){for(var lines=haystack.split("\r\n"),i=0;i<lines.length;i++)if(lines[i].substring(0,needle.length)==needle)return lines[i];if(!sessionpart)return!1;lines=sessionpart.split("\r\n");for(var j=0;j<lines.length;j++)if(lines[j].substring(0,needle.length)==needle)return lines[j];return!1},find_lines:function(haystack,needle,sessionpart){for(var lines=haystack.split("\r\n"),needles=[],i=0;i<lines.length;i++)lines[i].substring(0,needle.length)==needle&&needles.push(lines[i]);if(needles.length||!sessionpart)return needles;lines=sessionpart.split("\r\n");for(var j=0;j<lines.length;j++)lines[j].substring(0,needle.length)==needle&&needles.push(lines[j]);return needles},candidateToJingle:function(line){if(0===line.indexOf("candidate:"))line="a="+line;else if("a=candidate:"!=line.substring(0,12))return console.log("parseCandidate called with a line that is not a candidate line"),console.log(line),null;"\r\n"==line.substring(line.length-2)&&(line=line.substring(0,line.length-2));var i,candidate={},elems=line.split(" ");if("typ"!=elems[6])return console.log("did not find typ in the right place"),console.log(line),null;for(candidate.foundation=elems[0].substring(12),candidate.component=elems[1],candidate.protocol=elems[2].toLowerCase(),candidate.priority=elems[3],candidate.ip=elems[4],candidate.port=elems[5],candidate.type=elems[7],candidate.generation="0",i=8;i<elems.length;i+=2)switch(elems[i]){case"raddr":candidate["rel-addr"]=elems[i+1];break;case"rport":candidate["rel-port"]=elems[i+1];break;case"generation":candidate.generation=elems[i+1];break;case"tcptype":candidate.tcptype=elems[i+1];break;default:console.log('not translating "'+elems[i]+'" = "'+elems[i+1]+'"')}return candidate.network="1",candidate.id=Math.random().toString(36).substr(2,10),candidate},candidateFromJingle:function(cand){var line="a=candidate:";switch(line+=cand.getAttribute("foundation"),line+=" ",line+=cand.getAttribute("component"),line+=" ",line+=cand.getAttribute("protocol"),line+=" ",line+=cand.getAttribute("priority"),line+=" ",line+=cand.getAttribute("ip"),line+=" ",line+=cand.getAttribute("port"),line+=" ",line+="typ",line+=" "+cand.getAttribute("type"),line+=" ",cand.getAttribute("type")){case"srflx":case"prflx":case"relay":cand.getAttribute("rel-addr")&&cand.getAttribute("rel-port")&&(line+="raddr",line+=" ",line+=cand.getAttribute("rel-addr"),line+=" ",line+="rport",line+=" ",line+=cand.getAttribute("rel-port"),line+=" ")}return line+="generation",line+=" ",line+=cand.getAttribute("generation")||"0",line+"\r\n"}}}(jQuery);var setupRTC,getUserMediaWithConstraints,TraceablePeerConnection;!function($){TraceablePeerConnection=function(ice_config,constraints){var self=this,RTCPeerconnection=navigator.mozGetUserMedia?mozRTCPeerConnection:webkitRTCPeerConnection;this.peerconnection=new RTCPeerconnection(ice_config,constraints),this.updateLog=[],this.stats={},this.statsinterval=null,this.maxstats=300,this.trace=function(what,info){self.updateLog.push({time:new Date,type:what,value:info||""})},this.onicecandidate=null,this.peerconnection.onicecandidate=function(event){self.trace("onicecandidate",JSON.stringify(event.candidate,null," ")),null!==self.onicecandidate&&self.onicecandidate(event)},this.onaddstream=null,this.peerconnection.onaddstream=function(event){self.trace("onaddstream",event.stream.id),null!==self.onaddstream&&self.onaddstream(event)},this.onremovestream=null,this.peerconnection.onremovestream=function(event){self.trace("onremovestream",event.stream.id),null!==self.onremovestream&&self.onremovestream(event)},this.onsignalingstatechange=null,this.peerconnection.onsignalingstatechange=function(event){self.trace("onsignalingstatechange",self.signalingState),null!==self.onsignalingstatechange&&self.onsignalingstatechange(event)},this.oniceconnectionstatechange=null,this.peerconnection.oniceconnectionstatechange=function(event){self.trace("oniceconnectionstatechange",self.iceConnectionState),null!==self.oniceconnectionstatechange&&self.oniceconnectionstatechange(event)},this.onnegotiationneeded=null,this.peerconnection.onnegotiationneeded=function(event){self.trace("onnegotiationneeded"),null!==self.onnegotiationneeded&&self.onnegotiationneeded(event)},self.ondatachannel=null,this.peerconnection.ondatachannel=function(event){self.trace("ondatachannel",event),null!==self.ondatachannel&&self.ondatachannel(event)},navigator.mozGetUserMedia||(this.statsinterval=window.setInterval(function(){self.peerconnection.getStats(function(stats){for(var results=stats.result(),i=0;i<results.length;++i){var now=new Date;results[i].names().forEach(function(name){var id=results[i].id+"-"+name;self.stats[id]||(self.stats[id]={startTime:now,endTime:now,values:[],times:[]}),self.stats[id].values.push(results[i].stat(name)),self.stats[id].times.push(now.getTime()),self.stats[id].values.length>self.maxstats&&(self.stats[id].values.shift(),self.stats[id].times.shift()),self.stats[id].endTime=now})}})},1e3))},dumpSDP=function(description){return"type: "+description.type+"\r\n"+description.sdp},void 0!==TraceablePeerConnection.prototype.__defineGetter__&&(TraceablePeerConnection.prototype.__defineGetter__("signalingState",function(){return this.peerconnection.signalingState}),TraceablePeerConnection.prototype.__defineGetter__("iceConnectionState",function(){return this.peerconnection.iceConnectionState}),TraceablePeerConnection.prototype.__defineGetter__("localDescription",function(){return this.peerconnection.localDescription}),TraceablePeerConnection.prototype.__defineGetter__("remoteDescription",function(){return this.peerconnection.remoteDescription})),TraceablePeerConnection.prototype.addStream=function(stream){this.trace("addStream",stream.id),this.peerconnection.addStream(stream)},TraceablePeerConnection.prototype.removeStream=function(stream){this.trace("removeStream",stream.id),this.peerconnection.removeStream(stream)},TraceablePeerConnection.prototype.createDataChannel=function(label,opts){this.trace("createDataChannel",label,opts),this.peerconnection.createDataChannel(label,opts)},TraceablePeerConnection.prototype.setLocalDescription=function(description,successCallback,failureCallback){var self=this;this.trace("setLocalDescription",dumpSDP(description)),this.peerconnection.setLocalDescription(description,function(){self.trace("setLocalDescriptionOnSuccess"),successCallback()},function(err){self.trace("setLocalDescriptionOnFailure",err),failureCallback(err)})},TraceablePeerConnection.prototype.setRemoteDescription=function(description,successCallback,failureCallback){var self=this;this.trace("setRemoteDescription",dumpSDP(description)),this.peerconnection.setRemoteDescription(description,function(){self.trace("setRemoteDescriptionOnSuccess"),successCallback()},function(err){self.trace("setRemoteDescriptionOnFailure",err),failureCallback(err)})},TraceablePeerConnection.prototype.close=function(){this.trace("stop"),null!==this.statsinterval&&(window.clearInterval(this.statsinterval),this.statsinterval=null),this.peerconnection.close()},TraceablePeerConnection.prototype.createOffer=function(successCallback,failureCallback,constraints){var self=this;this.trace("createOffer",JSON.stringify(constraints,null," ")),this.peerconnection.createOffer(function(offer){self.trace("createOfferOnSuccess",dumpSDP(offer)),successCallback(offer)},function(err){self.trace("createOfferOnFailure",err),failureCallback(err)},constraints)},TraceablePeerConnection.prototype.createAnswer=function(successCallback,failureCallback,constraints){var self=this;this.trace("createAnswer",JSON.stringify(constraints,null," ")),this.peerconnection.createAnswer(function(answer){self.trace("createAnswerOnSuccess",dumpSDP(answer)),successCallback(answer)},function(err){self.trace("createAnswerOnFailure",err),failureCallback(err)},constraints)},TraceablePeerConnection.prototype.addIceCandidate=function(candidate,successCallback,failureCallback){this.trace("addIceCandidate",JSON.stringify(candidate,null," ")),this.peerconnection.addIceCandidate(candidate)},TraceablePeerConnection.prototype.getStats=function(callback,errback){navigator.mozGetUserMedia||this.peerconnection.getStats(callback)},setupRTC=function(){var RTC=null;if(navigator.mozGetUserMedia){console.log("This appears to be Firefox");var version=parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1],10);version>=22&&(RTC={peerconnection:mozRTCPeerConnection,browser:"firefox",getUserMedia:navigator.mozGetUserMedia.bind(navigator),attachMediaStream:function(element,stream){element[0].mozSrcObject=stream,element[0].play()},pc_constraints:{}},MediaStream.prototype.getVideoTracks||(MediaStream.prototype.getVideoTracks=function(){return[]}),MediaStream.prototype.getAudioTracks||(MediaStream.prototype.getAudioTracks=function(){return[]}),RTCSessionDescription=mozRTCSessionDescription,RTCIceCandidate=mozRTCIceCandidate)}else navigator.webkitGetUserMedia&&(console.log("This appears to be Chrome"),RTC={peerconnection:webkitRTCPeerConnection,browser:"chrome",getUserMedia:navigator.webkitGetUserMedia.bind(navigator),attachMediaStream:function(element,stream){element.attr("src",webkitURL.createObjectURL(stream))},pc_constraints:{optional:[{DtlsSrtpKeyAgreement:"true"}]}},-1!=navigator.userAgent.indexOf("Android")&&(RTC.pc_constraints={}),webkitMediaStream.prototype.getVideoTracks||(webkitMediaStream.prototype.getVideoTracks=function(){return this.videoTracks}),webkitMediaStream.prototype.getAudioTracks||(webkitMediaStream.prototype.getAudioTracks=function(){return this.audioTracks}));if(null===RTC)try{console.log("Browser does not appear to be WebRTC-capable")}catch(e){}return RTC},getUserMediaWithConstraints=function(um,resolution,bandwidth,fps){var constraints={audio:!1,video:!1};switch(um.indexOf("video")>=0&&(constraints.video={mandatory:{}}),um.indexOf("audio")>=0&&(constraints.audio={}),um.indexOf("screen")>=0&&(constraints.video={mandatory:{chromeMediaSource:"screen"}}),resolution&&!constraints.video&&(constraints.video={mandatory:{}}),resolution){case"1080":case"fullhd":constraints.video.mandatory.minWidth=1920,constraints.video.mandatory.minHeight=1080,constraints.video.mandatory.minAspectRatio=1.77;break;case"720":case"hd":constraints.video.mandatory.minWidth=1280,constraints.video.mandatory.minHeight=720,constraints.video.mandatory.minAspectRatio=1.77;break;case"360":constraints.video.mandatory.minWidth=640,constraints.video.mandatory.minHeight=360,constraints.video.mandatory.minAspectRatio=1.77;break;case"180":constraints.video.mandatory.minWidth=320,constraints.video.mandatory.minHeight=180,constraints.video.mandatory.minAspectRatio=1.77;break;case"960":constraints.video.mandatory.minWidth=960,constraints.video.mandatory.minHeight=720;break;case"640":case"vga":constraints.video.mandatory.minWidth=640,constraints.video.mandatory.minHeight=480;break;case"320":constraints.video.mandatory.minWidth=320,constraints.video.mandatory.minHeight=240;break;default:-1!=navigator.userAgent.indexOf("Android")&&(constraints.video.mandatory.minWidth=320,constraints.video.mandatory.minHeight=240,constraints.video.mandatory.maxFrameRate=15)}bandwidth&&(constraints.video||(constraints.video={mandatory:{}}),constraints.video.optional=[{bandwidth:bandwidth}]),fps&&(constraints.video||(constraints.video={mandatory:{}}),constraints.video.mandatory.minFrameRate=fps);try{RTC.getUserMedia(constraints,function(stream){console.log("onUserMediaSuccess"),$(document).trigger("mediaready.jingle",[stream])},function(error){console.warn("Failed to get access to local media. Error ",error),$(document).trigger("mediafailure.jingle",[error])})}catch(e){console.error("GUM failed: ",e),$(document).trigger("mediafailure.jingle")}}}(jQuery),function(root,factory){"function"==typeof define&&define.amd?define(factory):"undefined"!=typeof module&&module.exports?module.exports=factory():root.Salsa20=factory()}(this,function(){function Salsa20(key,nonce){this.rounds=20,this.sigmaWords=[1634760805,857760878,2036477234,1797285236],this.keyWords=[],this.nonceWords=[0,0],this.counterWords=[0,0],this.block=[],this.blockUsed=64,this.setKey(key),this.setNonce(nonce)}return Salsa20.prototype.setKey=function(key){for(var i=0,j=0;8>i;i++,j+=4)this.keyWords[i]=255&key[j]|(255&key[j+1])<<8|(255&key[j+2])<<16|(255&key[j+3])<<24;this._reset()},Salsa20.prototype.setNonce=function(nonce){this.nonceWords[0]=255&nonce[0]|(255&nonce[1])<<8|(255&nonce[2])<<16|(255&nonce[3])<<24,this.nonceWords[1]=255&nonce[4]|(255&nonce[5])<<8|(255&nonce[6])<<16|(255&nonce[7])<<24,this._reset()},Salsa20.prototype.getBytes=function(numberOfBytes){for(var out=new Array(numberOfBytes),i=0;numberOfBytes>i;i++)64==this.blockUsed&&(this._generateBlock(),this._incrementCounter(),this.blockUsed=0),out[i]=this.block[this.blockUsed],this.blockUsed++;return out},Salsa20.prototype.getHexString=function(numberOfBytes){for(var hex=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"],out=[],bytes=this.getBytes(numberOfBytes),i=0;i<bytes.length;i++)out.push(hex[bytes[i]>>4&15]),out.push(hex[15&bytes[i]]);return out.join("")},Salsa20.prototype._reset=function(){this.counterWords[0]=0,this.counterWords[1]=0,this.blockUsed=64},Salsa20.prototype._incrementCounter=function(){this.counterWords[0]=this.counterWords[0]+1&4294967295,0==this.counterWords[0]&&(this.counterWords[1]=this.counterWords[1]+1&4294967295)},Salsa20.prototype._generateBlock=function(){for(var u,j0=this.sigmaWords[0],j1=this.keyWords[0],j2=this.keyWords[1],j3=this.keyWords[2],j4=this.keyWords[3],j5=this.sigmaWords[1],j6=this.nonceWords[0],j7=this.nonceWords[1],j8=this.counterWords[0],j9=this.counterWords[1],j10=this.sigmaWords[2],j11=this.keyWords[4],j12=this.keyWords[5],j13=this.keyWords[6],j14=this.keyWords[7],j15=this.sigmaWords[3],x0=j0,x1=j1,x2=j2,x3=j3,x4=j4,x5=j5,x6=j6,x7=j7,x8=j8,x9=j9,x10=j10,x11=j11,x12=j12,x13=j13,x14=j14,x15=j15,i=0;i<this.rounds;i+=2)u=x0+x12,x4^=u<<7|u>>>25,u=x4+x0,x8^=u<<9|u>>>23,u=x8+x4,x12^=u<<13|u>>>19,u=x12+x8,x0^=u<<18|u>>>14,u=x5+x1,x9^=u<<7|u>>>25,u=x9+x5,x13^=u<<9|u>>>23,u=x13+x9,x1^=u<<13|u>>>19,u=x1+x13,x5^=u<<18|u>>>14,u=x10+x6,x14^=u<<7|u>>>25,u=x14+x10,x2^=u<<9|u>>>23,u=x2+x14,x6^=u<<13|u>>>19,u=x6+x2,x10^=u<<18|u>>>14,u=x15+x11,x3^=u<<7|u>>>25,u=x3+x15,x7^=u<<9|u>>>23,u=x7+x3,x11^=u<<13|u>>>19,u=x11+x7,x15^=u<<18|u>>>14,u=x0+x3,x1^=u<<7|u>>>25,u=x1+x0,x2^=u<<9|u>>>23,u=x2+x1,x3^=u<<13|u>>>19,u=x3+x2,x0^=u<<18|u>>>14,u=x5+x4,x6^=u<<7|u>>>25,u=x6+x5,x7^=u<<9|u>>>23,u=x7+x6,x4^=u<<13|u>>>19,u=x4+x7,x5^=u<<18|u>>>14,u=x10+x9,x11^=u<<7|u>>>25,u=x11+x10,x8^=u<<9|u>>>23,u=x8+x11,x9^=u<<13|u>>>19,u=x9+x8,x10^=u<<18|u>>>14,u=x15+x14,x12^=u<<7|u>>>25,u=x12+x15,x13^=u<<9|u>>>23,u=x13+x12,x14^=u<<13|u>>>19,u=x14+x13,x15^=u<<18|u>>>14;x0+=j0,x1+=j1,x2+=j2,x3+=j3,x4+=j4,x5+=j5,x6+=j6,x7+=j7,x8+=j8,x9+=j9,x10+=j10,x11+=j11,x12+=j12,x13+=j13,x14+=j14,x15+=j15,this.block[0]=x0>>>0&255,this.block[1]=x0>>>8&255,
-this.block[2]=x0>>>16&255,this.block[3]=x0>>>24&255,this.block[4]=x1>>>0&255,this.block[5]=x1>>>8&255,this.block[6]=x1>>>16&255,this.block[7]=x1>>>24&255,this.block[8]=x2>>>0&255,this.block[9]=x2>>>8&255,this.block[10]=x2>>>16&255,this.block[11]=x2>>>24&255,this.block[12]=x3>>>0&255,this.block[13]=x3>>>8&255,this.block[14]=x3>>>16&255,this.block[15]=x3>>>24&255,this.block[16]=x4>>>0&255,this.block[17]=x4>>>8&255,this.block[18]=x4>>>16&255,this.block[19]=x4>>>24&255,this.block[20]=x5>>>0&255,this.block[21]=x5>>>8&255,this.block[22]=x5>>>16&255,this.block[23]=x5>>>24&255,this.block[24]=x6>>>0&255,this.block[25]=x6>>>8&255,this.block[26]=x6>>>16&255,this.block[27]=x6>>>24&255,this.block[28]=x7>>>0&255,this.block[29]=x7>>>8&255,this.block[30]=x7>>>16&255,this.block[31]=x7>>>24&255,this.block[32]=x8>>>0&255,this.block[33]=x8>>>8&255,this.block[34]=x8>>>16&255,this.block[35]=x8>>>24&255,this.block[36]=x9>>>0&255,this.block[37]=x9>>>8&255,this.block[38]=x9>>>16&255,this.block[39]=x9>>>24&255,this.block[40]=x10>>>0&255,this.block[41]=x10>>>8&255,this.block[42]=x10>>>16&255,this.block[43]=x10>>>24&255,this.block[44]=x11>>>0&255,this.block[45]=x11>>>8&255,this.block[46]=x11>>>16&255,this.block[47]=x11>>>24&255,this.block[48]=x12>>>0&255,this.block[49]=x12>>>8&255,this.block[50]=x12>>>16&255,this.block[51]=x12>>>24&255,this.block[52]=x13>>>0&255,this.block[53]=x13>>>8&255,this.block[54]=x13>>>16&255,this.block[55]=x13>>>24&255,this.block[56]=x14>>>0&255,this.block[57]=x14>>>8&255,this.block[58]=x14>>>16&255,this.block[59]=x14>>>24&255,this.block[60]=x15>>>0&255,this.block[61]=x15>>>8&255,this.block[62]=x15>>>16&255,this.block[63]=x15>>>24&255},Salsa20}),function(root,factory){"function"==typeof define&&define.amd?define(factory.bind(root,root.crypto||root.msCrypto)):"undefined"!=typeof module&&module.exports?module.exports=factory(require("crypto")):root.BigInt=factory(root.crypto||root.msCrypto)}(this,function(crypto){function findPrimes(n){var i,s,p,ans;for(s=new Array(n),i=0;n>i;i++)s[i]=0;for(s[0]=2,p=0;s[p]<n;){for(i=s[p]*s[p];n>i;i+=s[p])s[i]=1;for(p++,s[p]=s[p-1]+1;s[p]<n&&s[s[p]];s[p]++);}for(ans=new Array(p),i=0;p>i;i++)ans[i]=s[i];return ans}function millerRabin(x,b){var i,j,k,s;if(mr_x1.length!=x.length&&(mr_x1=dup(x),mr_r=dup(x),mr_a=dup(x)),copy_(mr_a,b),copy_(mr_r,x),copy_(mr_x1,x),addInt_(mr_r,-1),addInt_(mr_x1,-1),isZero(mr_r))return 0;for(k=0;0==mr_r[k];k++);for(i=1,j=2;mr_r[k]%j==0;j*=2,i++);if(s=k*bpe+i-1,s&&rightShift_(mr_r,s),powMod_(mr_a,mr_r,x),!equalsInt(mr_a,1)&&!equals(mr_a,mr_x1)){for(j=1;s-1>=j&&!equals(mr_a,mr_x1);){if(squareMod_(mr_a,x),equalsInt(mr_a,1))return 0;j++}if(!equals(mr_a,mr_x1))return 0}return 1}function bitSize(x){var j,z,w;for(j=x.length-1;0==x[j]&&j>0;j--);for(z=0,w=x[j];w;w>>=1,z++);return z+=bpe*j}function expand(x,n){var ans=int2bigInt(0,(x.length>n?x.length:n)*bpe,0);return copy_(ans,x),ans}function mod(x,n){var ans=dup(x);return mod_(ans,n),trim(ans,1)}function mult(x,y){var ans=expand(x,x.length+y.length);return mult_(ans,y),trim(ans,1)}function powMod(x,y,n){var ans=expand(x,n.length);return powMod_(ans,trim(y,2),trim(n,2),0),trim(ans,1)}function sub(x,y){var ans=expand(x,x.length>y.length?x.length+1:y.length+1);return sub_(ans,y),trim(ans,1)}function add(x,y){var ans=expand(x,x.length>y.length?x.length+1:y.length+1);return add_(ans,y),trim(ans,1)}function inverseMod(x,n){var s,ans=expand(x,n.length);return s=inverseMod_(ans,n),s?trim(ans,1):null}function multMod(x,y,n){var ans=expand(x,n.length);return multMod_(ans,y,n),trim(ans,1)}function randBigInt(n,s){var a,b;return a=Math.floor((n-1)/bpe)+2,b=int2bigInt(0,0,a),randBigInt_(b,n,s),b}function randBigInt_(b,n,s){var i,a;for(i=0;i<b.length;i++)b[i]=0;for(a=Math.floor((n-1)/bpe)+1,i=0;a>i;i++)b[i]=randomBitInt(bpe);b[a-1]&=(2<<(n-1)%bpe)-1,1==s&&(b[a-1]|=1<<(n-1)%bpe)}function inverseMod_(x,n){var k=1+2*Math.max(x.length,n.length);if(!(1&x[0]||1&n[0]))return copyInt_(x,0),0;for(eg_u.length!=k&&(eg_u=new Array(k),eg_v=new Array(k),eg_A=new Array(k),eg_B=new Array(k),eg_C=new Array(k),eg_D=new Array(k)),copy_(eg_u,x),copy_(eg_v,n),copyInt_(eg_A,1),copyInt_(eg_B,0),copyInt_(eg_C,0),copyInt_(eg_D,1);;){for(;!(1&eg_u[0]);)halve_(eg_u),1&eg_A[0]||1&eg_B[0]?(add_(eg_A,n),halve_(eg_A),sub_(eg_B,x),halve_(eg_B)):(halve_(eg_A),halve_(eg_B));for(;!(1&eg_v[0]);)halve_(eg_v),1&eg_C[0]||1&eg_D[0]?(add_(eg_C,n),halve_(eg_C),sub_(eg_D,x),halve_(eg_D)):(halve_(eg_C),halve_(eg_D));if(greater(eg_v,eg_u)?(sub_(eg_v,eg_u),sub_(eg_C,eg_A),sub_(eg_D,eg_B)):(sub_(eg_u,eg_v),sub_(eg_A,eg_C),sub_(eg_B,eg_D)),equalsInt(eg_u,0)){for(;negative(eg_C);)add_(eg_C,n);return copy_(x,eg_C),equalsInt(eg_v,1)?1:(copyInt_(x,0),0)}}}function inverseModInt(x,n){for(var a=1,b=0;;){if(1==x)return a;if(0==x)return 0;if(b-=a*Math.floor(n/x),n%=x,1==n)return b;if(0==n)return 0;a-=b*Math.floor(x/n),x%=n}}function negative(x){return x[x.length-1]>>bpe-1&1}function greaterShift(x,y,shift){var i,kx=x.length,ky=y.length,k=ky>kx+shift?kx+shift:ky;for(i=ky-1-shift;kx>i&&i>=0;i++)if(x[i]>0)return 1;for(i=kx-1+shift;ky>i;i++)if(y[i]>0)return 0;for(i=k-1;i>=shift;i--){if(x[i-shift]>y[i])return 1;if(x[i-shift]<y[i])return 0}return 0}function greater(x,y){var i,k=x.length<y.length?x.length:y.length;for(i=x.length;i<y.length;i++)if(y[i])return 0;for(i=y.length;i<x.length;i++)if(x[i])return 1;for(i=k-1;i>=0;i--){if(x[i]>y[i])return 1;if(x[i]<y[i])return 0}return 0}function divide_(x,y,q,r){var kx,ky,i,y1,y2,c,a,b;for(copy_(r,x),ky=y.length;0==y[ky-1];ky--);for(b=y[ky-1],a=0;b;a++)b>>=1;for(a=bpe-a,leftShift_(y,a),leftShift_(r,a),kx=r.length;0==r[kx-1]&&kx>ky;kx--);for(copyInt_(q,0);!greaterShift(y,r,kx-ky);)subShift_(r,y,kx-ky),q[kx-ky]++;for(i=kx-1;i>=ky;i--){for(r[i]==y[ky-1]?q[i-ky]=mask:q[i-ky]=Math.floor((r[i]*radix+r[i-1])/y[ky-1]);y2=(ky>1?y[ky-2]:0)*q[i-ky],c=y2,y2&=mask,c=(c-y2)/radix,y1=c+q[i-ky]*y[ky-1],c=y1,y1&=mask,c=(c-y1)/radix,c==r[i]?y1==r[i-1]?y2>(i>1?r[i-2]:0):y1>r[i-1]:c>r[i];)q[i-ky]--;linCombShift_(r,y,-q[i-ky],i-ky),negative(r)&&(addShift_(r,y,i-ky),q[i-ky]--)}rightShift_(y,a),rightShift_(r,a)}function modInt(x,n){var i,c=0;for(i=x.length-1;i>=0;i--)c=(c*radix+x[i])%n;return c}function int2bigInt(t,bits,minSize){var k,buff;return k=Math.ceil(bits/bpe)+1,k=minSize>k?minSize:k,buff=new Array(k),copyInt_(buff,t),buff}function str2bigInt(s,base,minSize){var d,i,x,y,kk,k=s.length;if(-1==base){for(x=new Array(0);;){for(y=new Array(x.length+1),i=0;i<x.length;i++)y[i+1]=x[i];if(y[0]=parseInt(s,10),x=y,d=s.indexOf(",",0),1>d)break;if(s=s.substring(d+1),0==s.length)break}return x.length<minSize?(y=new Array(minSize),copy_(y,x),y):x}for(var bb=base,p=0,b=1==base?k:0;bb>1;)1&bb&&(p=1),b+=k,bb>>=1;for(b+=p*k,x=int2bigInt(0,b,0),i=0;k>i&&(d=digitsStr.indexOf(s.substring(i,i+1),0),36>=base&&d>=36&&(d-=26),!(d>=base||0>d));i++)multInt_(x,base),addInt_(x,d);for(k=x.length;k>0&&!x[k-1];k--);for(k=minSize>k+1?minSize:k+1,y=new Array(k),kk=k<x.length?k:x.length,i=0;kk>i;i++)y[i]=x[i];for(;k>i;i++)y[i]=0;return y}function equalsInt(x,y){var i;if(x[0]!=y)return 0;for(i=1;i<x.length;i++)if(x[i])return 0;return 1}function equals(x,y){var i,k=x.length<y.length?x.length:y.length;for(i=0;k>i;i++)if(x[i]!=y[i])return 0;if(x.length>y.length){for(;i<x.length;i++)if(x[i])return 0}else for(;i<y.length;i++)if(y[i])return 0;return 1}function isZero(x){var i;for(i=0;i<x.length;i++)if(x[i])return 0;return 1}function bigInt2str(x,base){var i,t,s="";if(s6.length!=x.length?s6=dup(x):copy_(s6,x),-1==base){for(i=x.length-1;i>0;i--)s+=x[i]+",";s+=x[0]}else for(;!isZero(s6);)t=divInt_(s6,base),s=digitsStr.substring(t,t+1)+s;return 0==s.length&&(s="0"),s}function dup(x){var buff;return buff=new Array(x.length),copy_(buff,x),buff}function copy_(x,y){var i,k=x.length<y.length?x.length:y.length;for(i=0;k>i;i++)x[i]=y[i];for(i=k;i<x.length;i++)x[i]=0}function copyInt_(x,n){var i,c;for(c=n,i=0;i<x.length;i++)x[i]=c&mask,c>>=bpe}function addInt_(x,n){var i,k,c,b;for(x[0]+=n,k=x.length,c=0,i=0;k>i;i++)if(c+=x[i],b=0,0>c&&(b=c&mask,b=-((c-b)/radix),c+=b*radix),x[i]=c&mask,c=(c-x[i])/radix-b,!c)return}function rightShift_(x,n){var i,k=Math.floor(n/bpe);if(k){for(i=0;i<x.length-k;i++)x[i]=x[i+k];for(;i<x.length;i++)x[i]=0;n%=bpe}for(i=0;i<x.length-1;i++)x[i]=mask&(x[i+1]<<bpe-n|x[i]>>n);x[i]>>=n}function halve_(x){var i;for(i=0;i<x.length-1;i++)x[i]=mask&(x[i+1]<<bpe-1|x[i]>>1);x[i]=x[i]>>1|x[i]&radix>>1}function leftShift_(x,n){var i,k=Math.floor(n/bpe);if(k){for(i=x.length;i>=k;i--)x[i]=x[i-k];for(;i>=0;i--)x[i]=0;n%=bpe}if(n){for(i=x.length-1;i>0;i--)x[i]=mask&(x[i]<<n|x[i-1]>>bpe-n);x[i]=mask&x[i]<<n}}function multInt_(x,n){var i,k,c,b;if(n)for(k=x.length,c=0,i=0;k>i;i++)c+=x[i]*n,b=0,0>c&&(b=c&mask,b=-((c-b)/radix),c+=b*radix),x[i]=c&mask,c=(c-x[i])/radix-b}function divInt_(x,n){var i,s,r=0;for(i=x.length-1;i>=0;i--)s=r*radix+x[i],x[i]=Math.floor(s/n),r=s%n;return r}function linCombShift_(x,y,b,ys){var i,c,k,kk;for(k=x.length<ys+y.length?x.length:ys+y.length,kk=x.length,c=0,i=ys;k>i;i++)c+=x[i]+b*y[i-ys],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&kk>i;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function addShift_(x,y,ys){var i,c,k,kk;for(k=x.length<ys+y.length?x.length:ys+y.length,kk=x.length,c=0,i=ys;k>i;i++)c+=x[i]+y[i-ys],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&kk>i;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function subShift_(x,y,ys){var i,c,k,kk;for(k=x.length<ys+y.length?x.length:ys+y.length,kk=x.length,c=0,i=ys;k>i;i++)c+=x[i]-y[i-ys],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&kk>i;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function sub_(x,y){var i,c,k;for(k=x.length<y.length?x.length:y.length,c=0,i=0;k>i;i++)c+=x[i]-y[i],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&i<x.length;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function add_(x,y){var i,c,k;for(k=x.length<y.length?x.length:y.length,c=0,i=0;k>i;i++)c+=x[i]+y[i],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&i<x.length;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function mult_(x,y){var i;for(ss.length!=2*x.length&&(ss=new Array(2*x.length)),copyInt_(ss,0),i=0;i<y.length;i++)y[i]&&linCombShift_(ss,x,y[i],i);copy_(x,ss)}function mod_(x,n){s4.length!=x.length?s4=dup(x):copy_(s4,x),s5.length!=x.length&&(s5=dup(x)),divide_(s4,n,s5,x)}function multMod_(x,y,n){var i;for(s0.length!=2*x.length&&(s0=new Array(2*x.length)),copyInt_(s0,0),i=0;i<y.length;i++)y[i]&&linCombShift_(s0,x,y[i],i);mod_(s0,n),copy_(x,s0)}function squareMod_(x,n){var i,j,c,kx,k;for(kx=x.length;kx>0&&!x[kx-1];kx--);for(k=kx>n.length?2*kx:2*n.length,s0.length!=k&&(s0=new Array(k)),copyInt_(s0,0),i=0;kx>i;i++){for(c=s0[2*i]+x[i]*x[i],s0[2*i]=c&mask,c=(c-s0[2*i])/radix,j=i+1;kx>j;j++)c=s0[i+j]+2*x[i]*x[j]+c,s0[i+j]=c&mask,c=(c-s0[i+j])/radix;s0[i+kx]=c}mod_(s0,n),copy_(x,s0)}function trim(x,k){var i,y;for(i=x.length;i>0&&!x[i-1];i--);return y=new Array(i+k),copy_(y,x),y}function powMod_(x,y,n){var k1,k2,kn,np;if(s7.length!=n.length&&(s7=dup(n)),0!=(1&n[0])){for(copyInt_(s7,0),kn=n.length;kn>0&&!n[kn-1];kn--);for(np=radix-inverseModInt(modInt(n,radix),radix),s7[kn]=1,multMod_(x,s7,n),s3.length!=x.length?s3=dup(x):copy_(s3,x),k1=y.length-1;k1>0&!y[k1];k1--);if(0==y[k1])return void copyInt_(x,1);for(k2=1<<bpe-1;k2&&!(y[k1]&k2);k2>>=1);for(;;){if(!(k2>>=1)){if(k1--,0>k1)return void mont_(x,one,n,np);k2=1<<bpe-1}mont_(x,x,n,np),k2&y[k1]&&mont_(x,s3,n,np)}}else for(copy_(s7,x),copyInt_(x,1);!equalsInt(y,0);)1&y[0]&&multMod_(x,s7,n),divInt_(y,2),squareMod_(s7,n)}function mont_(x,y,n,np){var i,j,c,ui,t,t2,ks,kn=n.length,ky=y.length;for(sa.length!=kn&&(sa=new Array(kn)),copyInt_(sa,0);kn>0&&0==n[kn-1];kn--);for(;ky>0&&0==y[ky-1];ky--);for(ks=sa.length-1,i=0;kn>i;i++){for(t=sa[0]+x[i]*y[0],ui=(t&mask)*np&mask,c=t+ui*n[0],c=(c-(c&mask))/radix,t=x[i],j=1;ky-4>j;)c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;for(;ky>j;)c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;for(;kn-4>j;)c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;for(;kn>j;)c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;for(;ks>j;)c+=sa[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;sa[j-1]=c&mask}greater(n,sa)||sub_(sa,n),copy_(x,sa)}function divMod(num,den,n){return multMod(num,inverseMod(den,n),n)}function subMod(one,two,n){return one=mod(one,n),two=mod(two,n),greater(two,one)&&(one=add(one,n)),sub(one,two)}function twoToThe(m){for(var b=Math.floor(m/bpe)+2,t=new Array(b),i=0;b>i;i++)t[i]=0;return t[b-2]=1<<m%bpe,t}function bigInt2bits(bi,pad){pad||(pad=0),bi=dup(bi);for(var ba="";!isZero(bi);)ba=_num2bin[255&bi[0]]+ba,rightShift_(bi,8);for(;ba.length<pad;)ba="\x00"+ba;return ba}function ba2bigInt(data){var mpi=str2bigInt("0",10,data.length);return data.forEach(function(d,i){i&&leftShift_(mpi,8),mpi[0]|=d}),mpi}function getSeed(){return randomBytes(40)}function randomByte(){return randomBytes(1)[0]}function randomBitInt(k){if(k>31)throw new Error("Too many bits.");var i=0,r=0,b=Math.floor(k/8),mask=(1<<k%8)-1;for(mask&&(r=randomByte()&mask);b>i;i++)r=256*r+randomByte();return r}var bpe=26,radix=1<<bpe,mask=radix-1,digitsStr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\'\"+-",one=int2bigInt(1,1,1),t=new Array(0),ss=t,s0=t,s3=t,s4=t,s5=t,s6=t,s7=t,sa=t,mr_x1=t,mr_r=t,mr_a=t,eg_v=t,eg_u=t,eg_A=t,eg_B=t,eg_C=t,eg_D=t,primes=t,_num2bin=function(){for(var i=0,_num2bin={};256>i;++i)_num2bin[i]=String.fromCharCode(i);return _num2bin}(),randomBytes=function(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomBytes)return function(n){try{var buf=crypto.randomBytes(n)}catch(e){throw e}return Array.prototype.slice.call(buf,0)};if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues)return function(n){var buf=new Uint8Array(n);return crypto.getRandomValues(buf),Array.prototype.slice.call(buf,0)};throw new Error("Keys should not be generated without CSPRNG.")}();return{str2bigInt:str2bigInt,bigInt2str:bigInt2str,int2bigInt:int2bigInt,multMod:multMod,powMod:powMod,inverseMod:inverseMod,randBigInt:randBigInt,randBigInt_:randBigInt_,equals:equals,equalsInt:equalsInt,sub:sub,mod:mod,modInt:modInt,mult:mult,divInt_:divInt_,rightShift_:rightShift_,dup:dup,greater:greater,add:add,isZero:isZero,bitSize:bitSize,millerRabin:millerRabin,divide_:divide_,trim:trim,primes:primes,findPrimes:findPrimes,getSeed:getSeed,divMod:divMod,subMod:subMod,twoToThe:twoToThe,bigInt2bits:bigInt2bits,ba2bigInt:ba2bigInt}}),function(root,factory){"function"==typeof define&&define.amd?define(factory):"undefined"!=typeof module&&module.exports?module.exports=factory():root.CryptoJS=factory()}(this,function(){var CryptoJS=CryptoJS||function(Math,undefined){var C={},C_lib=C.lib={},Base=C_lib.Base=function(){function F(){}return{extend:function(overrides){F.prototype=this;var subtype=new F;return overrides&&subtype.mixIn(overrides),subtype.hasOwnProperty("init")||(subtype.init=function(){subtype.$super.init.apply(this,arguments)}),subtype.init.prototype=subtype,subtype.$super=this,subtype},create:function(){var instance=this.extend();return instance.init.apply(instance,arguments),instance},init:function(){},mixIn:function(properties){for(var propertyName in properties)properties.hasOwnProperty(propertyName)&&(this[propertyName]=properties[propertyName]);properties.hasOwnProperty("toString")&&(this.toString=properties.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),WordArray=C_lib.WordArray=Base.extend({init:function(words,sigBytes){words=this.words=words||[],sigBytes!=undefined?this.sigBytes=sigBytes:this.sigBytes=4*words.length},toString:function(encoder){return(encoder||Hex).stringify(this)},concat:function(wordArray){var thisWords=this.words,thatWords=wordArray.words,thisSigBytes=this.sigBytes,thatSigBytes=wordArray.sigBytes;if(this.clamp(),thisSigBytes%4)for(var i=0;thatSigBytes>i;i++){var thatByte=thatWords[i>>>2]>>>24-i%4*8&255;thisWords[thisSigBytes+i>>>2]|=thatByte<<24-(thisSigBytes+i)%4*8}else if(thatWords.length>65535)for(var i=0;thatSigBytes>i;i+=4)thisWords[thisSigBytes+i>>>2]=thatWords[i>>>2];else thisWords.push.apply(thisWords,thatWords);return this.sigBytes+=thatSigBytes,this},clamp:function(){var words=this.words,sigBytes=this.sigBytes;words[sigBytes>>>2]&=4294967295<<32-sigBytes%4*8,words.length=Math.ceil(sigBytes/4)},clone:function(){var clone=Base.clone.call(this);return clone.words=this.words.slice(0),clone},random:function(nBytes){for(var words=[],i=0;nBytes>i;i+=4)words.push(4294967296*Math.random()|0);return new WordArray.init(words,nBytes)}}),C_enc=C.enc={},Hex=C_enc.Hex={stringify:function(wordArray){for(var words=wordArray.words,sigBytes=wordArray.sigBytes,hexChars=[],i=0;sigBytes>i;i++){var bite=words[i>>>2]>>>24-i%4*8&255;hexChars.push((bite>>>4).toString(16)),hexChars.push((15&bite).toString(16))}return hexChars.join("")},parse:function(hexStr){for(var hexStrLength=hexStr.length,words=[],i=0;hexStrLength>i;i+=2)words[i>>>3]|=parseInt(hexStr.substr(i,2),16)<<24-i%8*4;return new WordArray.init(words,hexStrLength/2)}},Latin1=C_enc.Latin1={stringify:function(wordArray){for(var words=wordArray.words,sigBytes=wordArray.sigBytes,latin1Chars=[],i=0;sigBytes>i;i++){var bite=words[i>>>2]>>>24-i%4*8&255;latin1Chars.push(String.fromCharCode(bite))}return latin1Chars.join("")},parse:function(latin1Str){for(var latin1StrLength=latin1Str.length,words=[],i=0;latin1StrLength>i;i++)words[i>>>2]|=(255&latin1Str.charCodeAt(i))<<24-i%4*8;return new WordArray.init(words,latin1StrLength)}},Utf8=C_enc.Utf8={stringify:function(wordArray){try{return decodeURIComponent(escape(Latin1.stringify(wordArray)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(utf8Str){return Latin1.parse(unescape(encodeURIComponent(utf8Str)))}},BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm=Base.extend({reset:function(){this._data=new WordArray.init,this._nDataBytes=0},_append:function(data){"string"==typeof data&&(data=Utf8.parse(data)),this._data.concat(data),this._nDataBytes+=data.sigBytes},_process:function(doFlush){var data=this._data,dataWords=data.words,dataSigBytes=data.sigBytes,blockSize=this.blockSize,blockSizeBytes=4*blockSize,nBlocksReady=dataSigBytes/blockSizeBytes;nBlocksReady=doFlush?Math.ceil(nBlocksReady):Math.max((0|nBlocksReady)-this._minBufferSize,0);var nWordsReady=nBlocksReady*blockSize,nBytesReady=Math.min(4*nWordsReady,dataSigBytes);if(nWordsReady){for(var offset=0;nWordsReady>offset;offset+=blockSize)this._doProcessBlock(dataWords,offset);var processedWords=dataWords.splice(0,nWordsReady);data.sigBytes-=nBytesReady}return new WordArray.init(processedWords,nBytesReady)},clone:function(){var clone=Base.clone.call(this);return clone._data=this._data.clone(),clone},_minBufferSize:0}),C_algo=(C_lib.Hasher=BufferedBlockAlgorithm.extend({cfg:Base.extend(),init:function(cfg){this.cfg=this.cfg.extend(cfg),this.reset()},reset:function(){BufferedBlockAlgorithm.reset.call(this),this._doReset()},update:function(messageUpdate){return this._append(messageUpdate),this._process(),this},finalize:function(messageUpdate){messageUpdate&&this._append(messageUpdate);var hash=this._doFinalize();return hash},blockSize:16,_createHelper:function(hasher){return function(message,cfg){return new hasher.init(cfg).finalize(message)}},_createHmacHelper:function(hasher){return function(message,key){return new C_algo.HMAC.init(hasher,key).finalize(message)}}}),C.algo={});return C}(Math);return function(){{var C=CryptoJS,C_lib=C.lib,WordArray=C_lib.WordArray,C_enc=C.enc;C_enc.Base64={stringify:function(wordArray){var words=wordArray.words,sigBytes=wordArray.sigBytes,map=this._map;wordArray.clamp();for(var base64Chars=[],i=0;sigBytes>i;i+=3)for(var byte1=words[i>>>2]>>>24-i%4*8&255,byte2=words[i+1>>>2]>>>24-(i+1)%4*8&255,byte3=words[i+2>>>2]>>>24-(i+2)%4*8&255,triplet=byte1<<16|byte2<<8|byte3,j=0;4>j&&sigBytes>i+.75*j;j++)base64Chars.push(map.charAt(triplet>>>6*(3-j)&63));var paddingChar=map.charAt(64);if(paddingChar)for(;base64Chars.length%4;)base64Chars.push(paddingChar);return base64Chars.join("")},parse:function(base64Str){var base64StrLength=base64Str.length,map=this._map,paddingChar=map.charAt(64);if(paddingChar){var paddingIndex=base64Str.indexOf(paddingChar);-1!=paddingIndex&&(base64StrLength=paddingIndex)}for(var words=[],nBytes=0,i=0;base64StrLength>i;i++)if(i%4){var bits1=map.indexOf(base64Str.charAt(i-1))<<i%4*2,bits2=map.indexOf(base64Str.charAt(i))>>>6-i%4*2;words[nBytes>>>2]|=(bits1|bits2)<<24-nBytes%4*8,nBytes++}return WordArray.create(words,nBytes)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}}(),CryptoJS.lib.Cipher||function(undefined){var C=CryptoJS,C_lib=C.lib,Base=C_lib.Base,WordArray=C_lib.WordArray,BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm,C_enc=C.enc,Base64=(C_enc.Utf8,C_enc.Base64),C_algo=C.algo,EvpKDF=C_algo.EvpKDF,Cipher=C_lib.Cipher=BufferedBlockAlgorithm.extend({cfg:Base.extend(),createEncryptor:function(key,cfg){return this.create(this._ENC_XFORM_MODE,key,cfg)},createDecryptor:function(key,cfg){return this.create(this._DEC_XFORM_MODE,key,cfg)},init:function(xformMode,key,cfg){this.cfg=this.cfg.extend(cfg),this._xformMode=xformMode,this._key=key,this.reset()},reset:function(){BufferedBlockAlgorithm.reset.call(this),this._doReset()},process:function(dataUpdate){return this._append(dataUpdate),this._process()},finalize:function(dataUpdate){dataUpdate&&this._append(dataUpdate);var finalProcessedData=this._doFinalize();return finalProcessedData},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function selectCipherStrategy(key){return"string"==typeof key?PasswordBasedCipher:SerializableCipher}return function(cipher){return{encrypt:function(message,key,cfg){return selectCipherStrategy(key).encrypt(cipher,message,key,cfg)},decrypt:function(ciphertext,key,cfg){return selectCipherStrategy(key).decrypt(cipher,ciphertext,key,cfg)}}}}()}),C_mode=(C_lib.StreamCipher=Cipher.extend({_doFinalize:function(){var finalProcessedBlocks=this._process(!0);return finalProcessedBlocks},blockSize:1}),C.mode={}),BlockCipherMode=C_lib.BlockCipherMode=Base.extend({createEncryptor:function(cipher,iv){return this.Encryptor.create(cipher,iv)},createDecryptor:function(cipher,iv){return this.Decryptor.create(cipher,iv)},init:function(cipher,iv){this._cipher=cipher,this._iv=iv}}),CBC=C_mode.CBC=function(){function xorBlock(words,offset,blockSize){var iv=this._iv;if(iv){var block=iv;this._iv=undefined}else var block=this._prevBlock;for(var i=0;blockSize>i;i++)words[offset+i]^=block[i]}var CBC=BlockCipherMode.extend();return CBC.Encryptor=CBC.extend({processBlock:function(words,offset){var cipher=this._cipher,blockSize=cipher.blockSize;xorBlock.call(this,words,offset,blockSize),cipher.encryptBlock(words,offset),this._prevBlock=words.slice(offset,offset+blockSize)}}),CBC.Decryptor=CBC.extend({processBlock:function(words,offset){var cipher=this._cipher,blockSize=cipher.blockSize,thisBlock=words.slice(offset,offset+blockSize);cipher.decryptBlock(words,offset),xorBlock.call(this,words,offset,blockSize),this._prevBlock=thisBlock}}),CBC}(),C_pad=C.pad={},Pkcs7=C_pad.Pkcs7={pad:function(data,blockSize){for(var blockSizeBytes=4*blockSize,nPaddingBytes=blockSizeBytes-data.sigBytes%blockSizeBytes,paddingWord=nPaddingBytes<<24|nPaddingBytes<<16|nPaddingBytes<<8|nPaddingBytes,paddingWords=[],i=0;nPaddingBytes>i;i+=4)paddingWords.push(paddingWord);var padding=WordArray.create(paddingWords,nPaddingBytes);data.concat(padding)},unpad:function(data){var nPaddingBytes=255&data.words[data.sigBytes-1>>>2];data.sigBytes-=nPaddingBytes}},CipherParams=(C_lib.BlockCipher=Cipher.extend({cfg:Cipher.cfg.extend({mode:CBC,padding:Pkcs7}),reset:function(){Cipher.reset.call(this);var cfg=this.cfg,iv=cfg.iv,mode=cfg.mode;if(this._xformMode==this._ENC_XFORM_MODE)var modeCreator=mode.createEncryptor;else{var modeCreator=mode.createDecryptor;this._minBufferSize=1}this._mode=modeCreator.call(mode,this,iv&&iv.words)},_doProcessBlock:function(words,offset){this._mode.processBlock(words,offset)},_doFinalize:function(){var padding=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){padding.pad(this._data,this.blockSize);var finalProcessedBlocks=this._process(!0)}else{var finalProcessedBlocks=this._process(!0);padding.unpad(finalProcessedBlocks)}return finalProcessedBlocks},blockSize:4}),C_lib.CipherParams=Base.extend({init:function(cipherParams){this.mixIn(cipherParams)},toString:function(formatter){return(formatter||this.formatter).stringify(this)}})),C_format=C.format={},OpenSSLFormatter=C_format.OpenSSL={stringify:function(cipherParams){var ciphertext=cipherParams.ciphertext,salt=cipherParams.salt;if(salt)var wordArray=WordArray.create([1398893684,1701076831]).concat(salt).concat(ciphertext);else var wordArray=ciphertext;return wordArray.toString(Base64)},parse:function(openSSLStr){var ciphertext=Base64.parse(openSSLStr),ciphertextWords=ciphertext.words;if(1398893684==ciphertextWords[0]&&1701076831==ciphertextWords[1]){var salt=WordArray.create(ciphertextWords.slice(2,4));ciphertextWords.splice(0,4),ciphertext.sigBytes-=16}return CipherParams.create({ciphertext:ciphertext,salt:salt})}},SerializableCipher=C_lib.SerializableCipher=Base.extend({cfg:Base.extend({format:OpenSSLFormatter}),encrypt:function(cipher,message,key,cfg){cfg=this.cfg.extend(cfg);var encryptor=cipher.createEncryptor(key,cfg),ciphertext=encryptor.finalize(message),cipherCfg=encryptor.cfg;return CipherParams.create({ciphertext:ciphertext,key:key,iv:cipherCfg.iv,algorithm:cipher,mode:cipherCfg.mode,padding:cipherCfg.padding,blockSize:cipher.blockSize,formatter:cfg.format})},decrypt:function(cipher,ciphertext,key,cfg){cfg=this.cfg.extend(cfg),ciphertext=this._parse(ciphertext,cfg.format);var plaintext=cipher.createDecryptor(key,cfg).finalize(ciphertext.ciphertext);return plaintext},_parse:function(ciphertext,format){return"string"==typeof ciphertext?format.parse(ciphertext,this):ciphertext}}),C_kdf=C.kdf={},OpenSSLKdf=C_kdf.OpenSSL={execute:function(password,keySize,ivSize,salt){salt||(salt=WordArray.random(8));var key=EvpKDF.create({keySize:keySize+ivSize}).compute(password,salt),iv=WordArray.create(key.words.slice(keySize),4*ivSize);return key.sigBytes=4*keySize,CipherParams.create({key:key,iv:iv,salt:salt})}},PasswordBasedCipher=C_lib.PasswordBasedCipher=SerializableCipher.extend({cfg:SerializableCipher.cfg.extend({kdf:OpenSSLKdf}),encrypt:function(cipher,message,password,cfg){cfg=this.cfg.extend(cfg);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize);cfg.iv=derivedParams.iv;var ciphertext=SerializableCipher.encrypt.call(this,cipher,message,derivedParams.key,cfg);return ciphertext.mixIn(derivedParams),ciphertext},decrypt:function(cipher,ciphertext,password,cfg){cfg=this.cfg.extend(cfg),ciphertext=this._parse(ciphertext,cfg.format);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize,ciphertext.salt);cfg.iv=derivedParams.iv;var plaintext=SerializableCipher.decrypt.call(this,cipher,ciphertext,derivedParams.key,cfg);return plaintext}})}(),function(){var C=CryptoJS,C_lib=C.lib,BlockCipher=C_lib.BlockCipher,C_algo=C.algo,SBOX=[],INV_SBOX=[],SUB_MIX_0=[],SUB_MIX_1=[],SUB_MIX_2=[],SUB_MIX_3=[],INV_SUB_MIX_0=[],INV_SUB_MIX_1=[],INV_SUB_MIX_2=[],INV_SUB_MIX_3=[];!function(){for(var d=[],i=0;256>i;i++)128>i?d[i]=i<<1:d[i]=i<<1^283;for(var x=0,xi=0,i=0;256>i;i++){var sx=xi^xi<<1^xi<<2^xi<<3^xi<<4;sx=sx>>>8^255&sx^99,SBOX[x]=sx,INV_SBOX[sx]=x;var x2=d[x],x4=d[x2],x8=d[x4],t=257*d[sx]^16843008*sx;SUB_MIX_0[x]=t<<24|t>>>8,SUB_MIX_1[x]=t<<16|t>>>16,SUB_MIX_2[x]=t<<8|t>>>24,SUB_MIX_3[x]=t;var t=16843009*x8^65537*x4^257*x2^16843008*x;INV_SUB_MIX_0[sx]=t<<24|t>>>8,INV_SUB_MIX_1[sx]=t<<16|t>>>16,INV_SUB_MIX_2[sx]=t<<8|t>>>24,INV_SUB_MIX_3[sx]=t,x?(x=x2^d[d[d[x8^x2]]],xi^=d[d[xi]]):x=xi=1}}();var RCON=[0,1,2,4,8,16,32,64,128,27,54],AES=C_algo.AES=BlockCipher.extend({_doReset:function(){for(var key=this._key,keyWords=key.words,keySize=key.sigBytes/4,nRounds=this._nRounds=keySize+6,ksRows=4*(nRounds+1),keySchedule=this._keySchedule=[],ksRow=0;ksRows>ksRow;ksRow++)if(keySize>ksRow)keySchedule[ksRow]=keyWords[ksRow];else{var t=keySchedule[ksRow-1];ksRow%keySize?keySize>6&&ksRow%keySize==4&&(t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[255&t]):(t=t<<8|t>>>24,t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[255&t],t^=RCON[ksRow/keySize|0]<<24),keySchedule[ksRow]=keySchedule[ksRow-keySize]^t}for(var invKeySchedule=this._invKeySchedule=[],invKsRow=0;ksRows>invKsRow;invKsRow++){var ksRow=ksRows-invKsRow;if(invKsRow%4)var t=keySchedule[ksRow];else var t=keySchedule[ksRow-4];4>invKsRow||4>=ksRow?invKeySchedule[invKsRow]=t:invKeySchedule[invKsRow]=INV_SUB_MIX_0[SBOX[t>>>24]]^INV_SUB_MIX_1[SBOX[t>>>16&255]]^INV_SUB_MIX_2[SBOX[t>>>8&255]]^INV_SUB_MIX_3[SBOX[255&t]]}},encryptBlock:function(M,offset){this._doCryptBlock(M,offset,this._keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX)},decryptBlock:function(M,offset){var t=M[offset+1];M[offset+1]=M[offset+3],M[offset+3]=t,this._doCryptBlock(M,offset,this._invKeySchedule,INV_SUB_MIX_0,INV_SUB_MIX_1,INV_SUB_MIX_2,INV_SUB_MIX_3,INV_SBOX);var t=M[offset+1];M[offset+1]=M[offset+3],M[offset+3]=t},_doCryptBlock:function(M,offset,keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX){for(var nRounds=this._nRounds,s0=M[offset]^keySchedule[0],s1=M[offset+1]^keySchedule[1],s2=M[offset+2]^keySchedule[2],s3=M[offset+3]^keySchedule[3],ksRow=4,round=1;nRounds>round;round++){var t0=SUB_MIX_0[s0>>>24]^SUB_MIX_1[s1>>>16&255]^SUB_MIX_2[s2>>>8&255]^SUB_MIX_3[255&s3]^keySchedule[ksRow++],t1=SUB_MIX_0[s1>>>24]^SUB_MIX_1[s2>>>16&255]^SUB_MIX_2[s3>>>8&255]^SUB_MIX_3[255&s0]^keySchedule[ksRow++],t2=SUB_MIX_0[s2>>>24]^SUB_MIX_1[s3>>>16&255]^SUB_MIX_2[s0>>>8&255]^SUB_MIX_3[255&s1]^keySchedule[ksRow++],t3=SUB_MIX_0[s3>>>24]^SUB_MIX_1[s0>>>16&255]^SUB_MIX_2[s1>>>8&255]^SUB_MIX_3[255&s2]^keySchedule[ksRow++];s0=t0,s1=t1,s2=t2,s3=t3}var t0=(SBOX[s0>>>24]<<24|SBOX[s1>>>16&255]<<16|SBOX[s2>>>8&255]<<8|SBOX[255&s3])^keySchedule[ksRow++],t1=(SBOX[s1>>>24]<<24|SBOX[s2>>>16&255]<<16|SBOX[s3>>>8&255]<<8|SBOX[255&s0])^keySchedule[ksRow++],t2=(SBOX[s2>>>24]<<24|SBOX[s3>>>16&255]<<16|SBOX[s0>>>8&255]<<8|SBOX[255&s1])^keySchedule[ksRow++],t3=(SBOX[s3>>>24]<<24|SBOX[s0>>>16&255]<<16|SBOX[s1>>>8&255]<<8|SBOX[255&s2])^keySchedule[ksRow++];M[offset]=t0,M[offset+1]=t1,M[offset+2]=t2,M[offset+3]=t3},keySize:8});C.AES=BlockCipher._createHelper(AES)}(),function(){var C=CryptoJS,C_lib=C.lib,WordArray=C_lib.WordArray,Hasher=C_lib.Hasher,C_algo=C.algo,W=[],SHA1=C_algo.SHA1=Hasher.extend({_doReset:function(){this._hash=new WordArray.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(M,offset){for(var H=this._hash.words,a=H[0],b=H[1],c=H[2],d=H[3],e=H[4],i=0;80>i;i++){if(16>i)W[i]=0|M[offset+i];else{var n=W[i-3]^W[i-8]^W[i-14]^W[i-16];W[i]=n<<1|n>>>31}var t=(a<<5|a>>>27)+e+W[i];t+=20>i?(b&c|~b&d)+1518500249:40>i?(b^c^d)+1859775393:60>i?(b&c|b&d|c&d)-1894007588:(b^c^d)-899497514,e=d,d=c,c=b<<30|b>>>2,b=a,a=t}H[0]=H[0]+a|0,H[1]=H[1]+b|0,H[2]=H[2]+c|0,H[3]=H[3]+d|0,H[4]=H[4]+e|0},_doFinalize:function(){var data=this._data,dataWords=data.words,nBitsTotal=8*this._nDataBytes,nBitsLeft=8*data.sigBytes;return dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32,dataWords[(nBitsLeft+64>>>9<<4)+14]=Math.floor(nBitsTotal/4294967296),dataWords[(nBitsLeft+64>>>9<<4)+15]=nBitsTotal,data.sigBytes=4*dataWords.length,this._process(),this._hash},clone:function(){var clone=Hasher.clone.call(this);return clone._hash=this._hash.clone(),clone}});C.SHA1=Hasher._createHelper(SHA1),C.HmacSHA1=Hasher._createHmacHelper(SHA1)}(),function(Math){var C=CryptoJS,C_lib=C.lib,WordArray=C_lib.WordArray,Hasher=C_lib.Hasher,C_algo=C.algo,H=[],K=[];
-
-!function(){function isPrime(n){for(var sqrtN=Math.sqrt(n),factor=2;sqrtN>=factor;factor++)if(!(n%factor))return!1;return!0}function getFractionalBits(n){return 4294967296*(n-(0|n))|0}for(var n=2,nPrime=0;64>nPrime;)isPrime(n)&&(8>nPrime&&(H[nPrime]=getFractionalBits(Math.pow(n,.5))),K[nPrime]=getFractionalBits(Math.pow(n,1/3)),nPrime++),n++}();var W=[],SHA256=C_algo.SHA256=Hasher.extend({_doReset:function(){this._hash=new WordArray.init(H.slice(0))},_doProcessBlock:function(M,offset){for(var H=this._hash.words,a=H[0],b=H[1],c=H[2],d=H[3],e=H[4],f=H[5],g=H[6],h=H[7],i=0;64>i;i++){if(16>i)W[i]=0|M[offset+i];else{var gamma0x=W[i-15],gamma0=(gamma0x<<25|gamma0x>>>7)^(gamma0x<<14|gamma0x>>>18)^gamma0x>>>3,gamma1x=W[i-2],gamma1=(gamma1x<<15|gamma1x>>>17)^(gamma1x<<13|gamma1x>>>19)^gamma1x>>>10;W[i]=gamma0+W[i-7]+gamma1+W[i-16]}var ch=e&f^~e&g,maj=a&b^a&c^b&c,sigma0=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),sigma1=(e<<26|e>>>6)^(e<<21|e>>>11)^(e<<7|e>>>25),t1=h+sigma1+ch+K[i]+W[i],t2=sigma0+maj;h=g,g=f,f=e,e=d+t1|0,d=c,c=b,b=a,a=t1+t2|0}H[0]=H[0]+a|0,H[1]=H[1]+b|0,H[2]=H[2]+c|0,H[3]=H[3]+d|0,H[4]=H[4]+e|0,H[5]=H[5]+f|0,H[6]=H[6]+g|0,H[7]=H[7]+h|0},_doFinalize:function(){var data=this._data,dataWords=data.words,nBitsTotal=8*this._nDataBytes,nBitsLeft=8*data.sigBytes;return dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32,dataWords[(nBitsLeft+64>>>9<<4)+14]=Math.floor(nBitsTotal/4294967296),dataWords[(nBitsLeft+64>>>9<<4)+15]=nBitsTotal,data.sigBytes=4*dataWords.length,this._process(),this._hash},clone:function(){var clone=Hasher.clone.call(this);return clone._hash=this._hash.clone(),clone}});C.SHA256=Hasher._createHelper(SHA256),C.HmacSHA256=Hasher._createHmacHelper(SHA256)}(Math),function(){{var C=CryptoJS,C_lib=C.lib,Base=C_lib.Base,C_enc=C.enc,Utf8=C_enc.Utf8,C_algo=C.algo;C_algo.HMAC=Base.extend({init:function(hasher,key){hasher=this._hasher=new hasher.init,"string"==typeof key&&(key=Utf8.parse(key));var hasherBlockSize=hasher.blockSize,hasherBlockSizeBytes=4*hasherBlockSize;key.sigBytes>hasherBlockSizeBytes&&(key=hasher.finalize(key)),key.clamp();for(var oKey=this._oKey=key.clone(),iKey=this._iKey=key.clone(),oKeyWords=oKey.words,iKeyWords=iKey.words,i=0;hasherBlockSize>i;i++)oKeyWords[i]^=1549556828,iKeyWords[i]^=909522486;oKey.sigBytes=iKey.sigBytes=hasherBlockSizeBytes,this.reset()},reset:function(){var hasher=this._hasher;hasher.reset(),hasher.update(this._iKey)},update:function(messageUpdate){return this._hasher.update(messageUpdate),this},finalize:function(messageUpdate){var hasher=this._hasher,innerHash=hasher.finalize(messageUpdate);hasher.reset();var hmac=hasher.finalize(this._oKey.clone().concat(innerHash));return hmac}})}}(),CryptoJS.pad.NoPadding={pad:function(){},unpad:function(){}},CryptoJS.mode.CTR=function(){var CTR=CryptoJS.lib.BlockCipherMode.extend(),Encryptor=CTR.Encryptor=CTR.extend({processBlock:function(words,offset){var cipher=this._cipher,blockSize=cipher.blockSize,iv=this._iv,counter=this._counter;iv&&(counter=this._counter=iv.slice(0),this._iv=void 0);var keystream=counter.slice(0);cipher.encryptBlock(keystream,0),counter[blockSize-1]=counter[blockSize-1]+1|0;for(var i=0;blockSize>i;i++)words[offset+i]^=keystream[i]}});return CTR.Decryptor=Encryptor,CTR}(),CryptoJS}),/*!
+function($){Strophe.addConnectionPlugin("caps",{HASH:"sha-1",node:"http://strophe.im/strophejs/",_ver:"",_connection:null,_knownCapabilities:JSON.parse(localStorage.getItem("strophe.caps._knownCapabilities"))||{},_jidVerIndex:JSON.parse(localStorage.getItem("strophe.caps._jidVerIndex"))||{},init:function(conn){if(this._connection=conn,Strophe.addNamespace("CAPS","http://jabber.org/protocol/caps"),!this._connection.disco)throw"Caps plugin requires the disco plugin to be installed.";this._connection.disco.addFeature(Strophe.NS.CAPS),this._connection.addHandler(this._delegateCapabilities.bind(this),Strophe.NS.CAPS)},generateCapsAttrs:function(){return{xmlns:Strophe.NS.CAPS,hash:this.HASH,node:this.node,ver:this.generateVer()}},generateVer:function(){if(""!==this._ver)return this._ver;for(var ver="",identities=this._connection.disco._identities.sort(this._sortIdentities),identitiesLen=identities.length,features=this._connection.disco._features.sort(),featuresLen=features.length,i=0;identitiesLen>i;i++){var curIdent=identities[i];ver+=curIdent.category+"/"+curIdent.type+"/"+curIdent.lang+"/"+curIdent.name+"<"}for(var i=0;featuresLen>i;i++)ver+=features[i]+"<";return this._ver=b64_sha1(ver),this._ver},getCapabilitiesByJid:function(jid){return this._jidVerIndex[jid]?this._knownCapabilities[this._jidVerIndex[jid]]:null},hasFeatureByJid:function(jid,feature){if(this._jidVerIndex[jid]&&null!==feature&&"undefined"!=typeof feature){$.isArray(feature)||(feature=$.makeArray(feature));var i;for(i=0;i<feature.length;i++)if(this._knownCapabilities[this._jidVerIndex[jid]].features.indexOf(feature[i])<0)return!1;return!0}return!1},_delegateCapabilities:function(stanza){var from=stanza.getAttribute("from"),c=stanza.querySelector("c"),ver=c.getAttribute("ver"),node=c.getAttribute("node");return this._knownCapabilities[ver]?(this._jidVerIndex[from]=ver,this._jidVerIndex[from]&&!this._jidVerIndex[from]===ver||(this._jidVerIndex[from]=ver),localStorage.setItem("strophe.caps._jidVerIndex",JSON.stringify(this._jidVerIndex)),$(document).trigger("caps.strophe",[from]),!0):this._requestCapabilities(from,node,ver)},_requestCapabilities:function(to,node,ver){if(to!==this._connection.jid){var id=this._connection.disco.info(to,node+"#"+ver);this._connection.addHandler(this._handleDiscoInfoReply.bind(this),Strophe.NS.DISCO_INFO,"iq","result",id,to)}return!0},_handleDiscoInfoReply:function(stanza){var query=stanza.querySelector("query"),from=stanza.getAttribute("from"),node=query.getAttribute("node"),ver=node?node.split("#")[1]:this._jidVerIndex[from];if(this._knownCapabilities[ver])this._jidVerIndex[from]&&!this._jidVerIndex[from]===ver||(this._jidVerIndex[from]=ver);else{var childNodes=query.childNodes,childNodesLen=childNodes.length;this._knownCapabilities[ver]={features:[],identities:[]};for(var i=0;childNodesLen>i;i++){var node=childNodes[i];"feature"==node.nodeName?this._knownCapabilities[ver].features.push(node.getAttribute("var")):"identity"==node.nodeName?this._knownCapabilities[ver].identities.push(this._attributesToJsObject(node.attributes)):("undefined"==typeof this._knownCapabilities[ver][node.nodeName]&&(this._knownCapabilities[ver][node.nodeName]=[]),this._knownCapabilities[ver][node.nodeName].push(this._attributesToJsObject(node.attributes)))}this._jidVerIndex[from]=ver}return localStorage.setItem("strophe.caps._jidVerIndex",JSON.stringify(this._jidVerIndex)),localStorage.setItem("strophe.caps._knownCapabilities",JSON.stringify(this._knownCapabilities)),$(document).trigger("caps.strophe",[from]),!1},_attributesToJsObject:function(attr){var obj={};for(i=0;i<attr.length;i++)obj[attr[i].name]=attr[i].value;return obj},_sortIdentities:function(a,b){return a.category>b.category?1:a.category<b.category?-1:a.type>b.type?1:a.type<b.type?-1:a.lang>b.lang?1:a.lang<b.lang?-1:0}})}(jQuery);/*!
+ * Source: lib/strophe.vcard.js, license: MIT, url: https://github.com/strophe/strophejs-plugins
+ */
+var buildIq;buildIq=function(type,jid,vCardEl){var iq;return iq=$iq(jid?{type:type,to:jid}:{type:type}),iq.c("vCard",{xmlns:Strophe.NS.VCARD}),vCardEl&&iq.cnode(vCardEl),iq},Strophe.addConnectionPlugin("vcard",{_connection:null,init:function(conn){return this._connection=conn,Strophe.addNamespace("VCARD","vcard-temp")},get:function(handler_cb,jid,error_cb){var iq;return iq=buildIq("get",jid),this._connection.sendIQ(iq,handler_cb,error_cb)},set:function(handler_cb,vCardEl,jid){var iq;return iq=buildIq("set",jid,vCardEl),this._connection.sendIQ(iq,handler_cb,error_rb)}}),/*!
+ * Source: lib/strophe.jingle/strophe.jingle.js, license: MIT, url: https://github.com/ESTOS/strophe.jingle
+ */
+function($){Strophe.addConnectionPlugin("jingle",{connection:null,sessions:{},jid2session:{},ice_config:{iceServers:[]},pc_constraints:{},media_constraints:{mandatory:{OfferToReceiveAudio:!0,OfferToReceiveVideo:!0}},localStream:null,init:function(conn){this.connection=conn,this.connection.disco&&(this.connection.disco.addFeature("urn:xmpp:jingle:1"),this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:1"),this.connection.disco.addFeature("urn:xmpp:jingle:transports:ice-udp:1"),this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:audio"),this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:video"),this.connection.disco.addFeature("urn:ietf:rfc:5761")),this.connection.addHandler(this.onJingle.bind(this),"urn:xmpp:jingle:1","iq","set",null,null)},onJingle:function(iq){var sid=$(iq).find("jingle").attr("sid"),action=$(iq).find("jingle").attr("action"),ack=$iq({type:"result",to:iq.getAttribute("from"),id:iq.getAttribute("id")});console.log("on jingle "+action);var sess=this.sessions[sid];if("session-initiate"!=action){if(null===sess)return ack.type="error",ack.c("error",{type:"cancel"}).c("item-not-found",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("unknown-session",{xmlns:"urn:xmpp:jingle:errors:1"}),this.connection.send(ack),!0;if(Strophe.getBareJidFromJid(iq.getAttribute("from"))!=Strophe.getBareJidFromJid(sess.peerjid))return console.warn("jid mismatch for session id",sid,iq.getAttribute("from"),sess.peerjid),ack.type="error",ack.c("error",{type:"cancel"}).c("item-not-found",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("unknown-session",{xmlns:"urn:xmpp:jingle:errors:1"}),this.connection.send(ack),!0}else if(void 0!==sess)return ack.type="error",ack.c("error",{type:"cancel"}).c("service-unavailable",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up(),console.warn("duplicate session id",sid),this.connection.send(ack),!0;switch(this.connection.send(ack),action){case"session-initiate":sess=new JingleSession($(iq).attr("to"),$(iq).find("jingle").attr("sid"),this.connection),this.localStream&&sess.localStreams.push(this.localStream),sess.media_constraints=this.media_constraints,sess.pc_constraints=this.pc_constraints,sess.ice_config=this.ice_config,sess.initiate($(iq).attr("from"),!1),sess.setRemoteDescription($(iq).find(">jingle"),"offer"),$(iq).find('>jingle>muted[xmlns="http://jitsi.org/protocol/meet#startmuted"]').length&&(console.log("got a request to start muted"),sess.startmuted=!0),this.sessions[sess.sid]=sess,this.jid2session[sess.peerjid]=sess,$(document).trigger("callincoming.jingle",[sess.sid]);break;case"session-accept":sess.setRemoteDescription($(iq).find(">jingle"),"answer"),sess.accept(),$(document).trigger("callaccepted.jingle",[sess.sid]);break;case"session-terminate":console.log("terminating..."),sess.terminate(),this.terminate(sess.sid),$(iq).find(">jingle>reason").length?$(document).trigger("callterminated.jingle",[sess.sid,$(iq).find(">jingle>reason>:first")[0].tagName,$(iq).find(">jingle>reason>text").text()]):$(document).trigger("callterminated.jingle",[sess.sid]);break;case"transport-info":sess.addIceCandidate($(iq).find(">jingle>content"));break;case"session-info":var affected;$(iq).find('>jingle>ringing[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length?$(document).trigger("ringing.jingle",[sess.sid]):$(iq).find('>jingle>mute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length?(affected=$(iq).find('>jingle>mute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').attr("name"),$(document).trigger("mute.jingle",[sess.sid,affected])):$(iq).find('>jingle>unmute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length&&(affected=$(iq).find('>jingle>unmute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').attr("name"),$(document).trigger("unmute.jingle",[sess.sid,affected]));break;case"addsource":sess.addSource($(iq).find(">jingle>content"));break;case"removesource":sess.removeSource($(iq).find(">jingle>content"));break;default:console.warn("jingle action not implemented",action)}return!0},initiate:function(peerjid,myjid){var sess=new JingleSession(myjid||this.connection.jid,Math.random().toString(36).substr(2,12),this.connection);return this.localStream&&sess.localStreams.push(this.localStream),sess.media_constraints=this.media_constraints,sess.pc_constraints=this.pc_constraints,sess.ice_config=this.ice_config,sess.initiate(peerjid,!0),this.sessions[sess.sid]=sess,this.jid2session[sess.peerjid]=sess,sess.sendOffer(),sess},terminate:function(sid,reason,text){if(null===sid||void 0===sid)for(sid in this.sessions)"ended"!=this.sessions[sid].state&&(this.sessions[sid].sendTerminate(reason||!this.sessions[sid].active()?"cancel":null,text),this.sessions[sid].terminate()),delete this.jid2session[this.sessions[sid].peerjid],delete this.sessions[sid];else this.sessions.hasOwnProperty(sid)&&("ended"!=this.sessions[sid].state&&(this.sessions[sid].sendTerminate(reason||!this.sessions[sid].active()?"cancel":null,text),this.sessions[sid].terminate()),delete this.jid2session[this.sessions[sid].peerjid],delete this.sessions[sid])},terminateByJid:function(jid){if(this.jid2session.hasOwnProperty(jid)){var sess=this.jid2session[jid];sess&&(sess.terminate(),console.log("peer went away silently",jid),delete this.sessions[sess.sid],delete this.jid2session[jid],$(document).trigger("callterminated.jingle",[sess.sid,"gone"]))}},getStunAndTurnCredentials:function(){var self=this;this.connection.sendIQ($iq({type:"get",to:this.connection.domain}).c("services",{xmlns:"urn:xmpp:extdisco:1"}).c("service",{host:"turn."+this.connection.domain}),function(res){var iceservers=[];$(res).find(">services>service").each(function(idx,el){el=$(el);var dict={};switch(el.attr("type")){case"stun":dict.url="stun:"+el.attr("host"),el.attr("port")&&(dict.url+=":"+el.attr("port")),iceservers.push(dict);break;case"turn":dict.url="turn:",el.attr("username")&&(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)&&parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2],10)<28?dict.url+=el.attr("username")+"@":dict.username=el.attr("username")),dict.url+=el.attr("host"),el.attr("port")&&"3478"!=el.attr("port")&&(dict.url+=":"+el.attr("port")),el.attr("transport")&&"udp"!=el.attr("transport")&&(dict.url+="?transport="+el.attr("transport")),el.attr("password")&&(dict.credential=el.attr("password")),iceservers.push(dict)}}),self.ice_config.iceServers=iceservers},function(err){console.warn("getting turn credentials failed",err),console.warn("is mod_turncredentials or similar installed?")})}})}(jQuery);/*!
+ * Source: lib/strophe.jingle/strophe.jingle.session.js, license: MIT, url: https://github.com/ESTOS/strophe.jingle
+ */
+var JingleSession;!function($){JingleSession=function(me,sid,connection){this.me=me,this.sid=sid,this.connection=connection,this.initiator=null,this.responder=null,this.isInitiator=null,this.peerjid=null,this.state=null,this.peerconnection=null,this.remoteStream=null,this.localSDP=null,this.remoteSDP=null,this.localStreams=[],this.relayedStreams=[],this.remoteStreams=[],this.startTime=null,this.stopTime=null,this.media_constraints=null,this.pc_constraints=null,this.ice_config={},this.drip_container=[],this.usetrickle=!0,this.usepranswer=!1,this.usedrip=!1,this.hadstuncandidate=!1,this.hadturncandidate=!1,this.lasticecandidate=!1,this.statsinterval=null,this.reason=null,this.addssrc=[],this.removessrc=[],this.pendingop=null,this.wait=!0,this.nickname=null,this.startmuted=!1,this.filter_candidates=null},JingleSession.prototype.initiate=function(peerjid,isInitiator){var self=this;if(null!==this.state)return void console.error("attempt to initiate on session "+this.sid+"in state "+this.state);this.isInitiator=isInitiator,this.state="pending",this.initiator=isInitiator?this.me:peerjid,this.responder=isInitiator?peerjid:this.me,this.peerjid=peerjid;try{this.peerconnection=new RTCPeerconnection(this.ice_config,this.pc_constraints)}catch(e){return console.error("Failed to create PeerConnection, exception: ",e.message),void console.error(e)}this.hadstuncandidate=!1,this.hadturncandidate=!1,this.lasticecandidate=!1,this.peerconnection.onicecandidate=function(event){self.sendIceCandidate(event.candidate)},this.peerconnection.onaddstream=function(event){self.remoteStream=event.stream,self.remoteStreams.push(event.stream),$(document).trigger("remotestreamadded.jingle",[event,self.sid])},this.peerconnection.onremovestream=function(event){self.remoteStream=null,$(document).trigger("remotestreamremoved.jingle",[event,self.sid])},this.peerconnection.onsignalingstatechange=function(){!self||!self.peerconnection},this.peerconnection.oniceconnectionstatechange=function(){if(self&&self.peerconnection){switch(self.peerconnection.iceConnectionState){case"connected":this.startTime=new Date;break;case"disconnected":this.stopTime=new Date}$(document).trigger("iceconnectionstatechange.jingle",[self.sid,self])}},this.localStreams.forEach(function(stream){self.peerconnection.addStream(stream)}),this.relayedStreams.forEach(function(stream){self.peerconnection.addStream(stream)})},JingleSession.prototype.accept=function(){var self=this;this.state="active";var pranswer=this.peerconnection.localDescription;if(pranswer&&"pranswer"==pranswer.type){if(console.log("going from pranswer to answer"),this.usetrickle)for(var lines=SDPUtil.find_lines(pranswer.sdp,"a=candidate:"),i=0;i<lines.length;i++)pranswer.sdp=pranswer.sdp.replace(lines[i]+"\r\n","");for(;SDPUtil.find_line(pranswer.sdp,"a=inactive");)pranswer.sdp=pranswer.sdp.replace("a=inactive","a=sendrecv");var prsdp=new SDP(pranswer.sdp),accept=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:this.initiator,responder:this.responder,sid:this.sid});prsdp.toJingle(accept,this.initiator==this.me?"initiator":"responder"),this.connection.sendIQ(accept,function(){var ack={};ack.source="answer",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="answer",$(document).trigger("error.jingle",[self.sid,error])},1e4);for(var sdp=this.peerconnection.localDescription.sdp;SDPUtil.find_line(sdp,"a=inactive");)sdp=sdp.replace("a=inactive","a=sendrecv");this.peerconnection.setLocalDescription(new RTCSessionDescription({type:"answer",sdp:sdp}),function(){$(document).trigger("setLocalDescription.jingle",[self.sid])},function(e){console.error("setLocalDescription failed",e)})}},JingleSession.prototype.terminate=function(reason){this.state="ended",this.reason=reason,this.peerconnection.close(),null!==this.statsinterval&&(window.clearInterval(this.statsinterval),this.statsinterval=null)},JingleSession.prototype.active=function(){return"active"==this.state},JingleSession.prototype.sendIceCandidate=function(candidate){var self=this;if(candidate&&!this.lasticecandidate){var ice=SDPUtil.iceparams(this.localSDP.media[candidate.sdpMLineIndex],this.localSDP.session),jcand=SDPUtil.candidateToJingle(candidate.candidate);if(!ice||!jcand)return void console.error("failed to get ice && jcand");if(ice.xmlns="urn:xmpp:jingle:transports:ice-udp:1","srflx"===jcand.type?this.hadstuncandidate=!0:"relay"===jcand.type&&(this.hadturncandidate=!0),(null===this.filter_candidates||jcand.type===this.filter_candidates)&&this.usetrickle){if(console.log("sendIceCandidate using trickle"),this.usedrip)return 0===this.drip_container.length&&window.setTimeout(function(){console.log("sending drip container"),0!==self.drip_container.length&&(self.sendIceCandidates(self.drip_container),self.drip_container=[])},20),void this.drip_container.push(event.candidate);console.log("sending single candidate"),self.sendIceCandidates([event.candidate])}}else{if(console.log("sendIceCandidate: last candidate..."),!this.usetrickle){console.log("should send full offer now...");var init=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"offer"==this.peerconnection.localDescription.type?"session-initiate":"session-accept",initiator:this.initiator,sid:this.sid});null!=this.nickname&&init.c("nick",{xmlns:"http://jabber.org/protocol/nick"}).t(this.nickname).up(),this.startmuted&&init.c("muted",{xmlns:"http://jitsi.org/protocol/meet#startmuted"}).up(),this.localSDP=new SDP(this.peerconnection.localDescription.sdp),this.localSDP.toJingle(init,this.initiator==this.me?"initiator":"responder"),console.log("try to send ack(offer)..."),this.connection.sendIQ(init,function(){console.log("Sent session initiate (ACK, offer)...");var ack={};ack.source="offer",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){self.state="error",self.peerconnection.close();var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="offer",$(document).trigger("error.jingle",[self.sid,error])},1e4)}this.lasticecandidate=!0,console.log("Have we encountered any srflx candidates? "+this.hadstuncandidate),console.log("Have we encountered any relay candidates? "+this.hadturncandidate),this.hadstuncandidate||this.hadturncandidate||"closed"==this.peerconnection.signalingState||(console.log("no candidates found!"),$(document).trigger("nostuncandidates.jingle",[this.sid]))}},JingleSession.prototype.sendIceCandidates=function(candidates){console.log("sendIceCandidates",candidates);for(var cand=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-info",initiator:this.initiator,sid:this.sid}),mid=0;mid<this.localSDP.media.length;mid++){var cands=candidates.filter(function(el){return el.sdpMLineIndex==mid});if(cands.length>0){var ice=SDPUtil.iceparams(this.localSDP.media[mid],this.localSDP.session);ice.xmlns="urn:xmpp:jingle:transports:ice-udp:1",cand.c("content",{creator:this.initiator==this.me?"initiator":"responder",name:cands[0].sdpMid}).c("transport",ice);for(var i=0;i<cands.length;i++)cand.c("candidate",SDPUtil.candidateToJingle(cands[i].candidate)).up();if(SDPUtil.find_line(this.localSDP.media[mid],"a=fingerprint:",this.localSDP.session)){var tmp=SDPUtil.parse_fingerprint(SDPUtil.find_line(this.localSDP.media[mid],"a=fingerprint:",this.localSDP.session));tmp.required=!0,cand.c("fingerprint").t(tmp.fingerprint),delete tmp.fingerprint,cand.attrs(tmp),cand.up()}cand.up(),cand.up()}}console.log("try to send ack(transportinfo)..."),this.connection.sendIQ(cand,function(){var ack={};ack.source="transportinfo",console.log("Sent session initiate (ACK, transportinfo)..."),$(document).trigger("ack.jingle",[this.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="transportinfo",$(document).trigger("error.jingle",[this.sid,error])},1e4)},JingleSession.prototype.sendOffer=function(){var self=this;this.peerconnection.createOffer(function(sdp){self.createdOffer(sdp)},function(e){console.error("createOffer failed",e)},this.media_constraints)},JingleSession.prototype.createdOffer=function(sdp){var self=this;if(this.localSDP=new SDP(sdp.sdp),this.usetrickle){var init=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-initiate",initiator:this.initiator,sid:this.sid});null!=this.nickname&&init.c("nick",{xmlns:"http://jabber.org/protocol/nick"}).t(this.nickname).up(),this.startmuted&&init.c("muted",{xmlns:"http://jitsi.org/protocol/meet#startmuted"}).up(),this.localSDP.toJingle(init,this.initiator==this.me?"initiator":"responder"),this.connection.sendIQ(init,function(){var ack={};ack.source="offer",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){self.state="error",self.peerconnection.close();var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="offer",$(document).trigger("error.jingle",[self.sid,error])},1e4)}sdp.sdp=this.localSDP.raw,this.peerconnection.setLocalDescription(sdp,function(){$(document).trigger("setLocalDescription.jingle",[self.sid])},function(e){console.error("setLocalDescription failed",e)});for(var cands=SDPUtil.find_lines(this.localSDP.raw,"a=candidate:"),i=0;i<cands.length;i++){var cand=SDPUtil.parse_icecandidate(cands[i]);"srflx"==cand.type?this.hadstuncandidate=!0:"relay"==cand.type&&(this.hadturncandidate=!0)}},JingleSession.prototype.setRemoteDescription=function(elem,desctype){if(this.remoteSDP=new SDP(""),this.remoteSDP.fromJingle(elem),null!==this.peerconnection.remoteDescription&&(console.log("setRemoteDescription when remote description is not null, should be pranswer",this.peerconnection.remoteDescription),"pranswer"==this.peerconnection.remoteDescription.type)){for(var pranswer=new SDP(this.peerconnection.remoteDescription.sdp),i=0;i<pranswer.media.length;i++){SDPUtil.find_line(this.remoteSDP.media[i],"a=ice-ufrag:",this.remoteSDP.session)||(SDPUtil.find_line(pranswer.media[i],"a=ice-ufrag:",pranswer.session)?this.remoteSDP.media[i]+=SDPUtil.find_line(pranswer.media[i],"a=ice-ufrag:",pranswer.session)+"\r\n":console.warn("no ice ufrag?"),SDPUtil.find_line(pranswer.media[i],"a=ice-pwd:",pranswer.session)?this.remoteSDP.media[i]+=SDPUtil.find_line(pranswer.media[i],"a=ice-pwd:",pranswer.session)+"\r\n":console.warn("no ice pwd?"));for(var lines=SDPUtil.find_lines(pranswer.media[i],"a=candidate:"),j=0;j<lines.length;j++)this.remoteSDP.media[i]+=lines[j]+"\r\n"}this.remoteSDP.raw=this.remoteSDP.session+this.remoteSDP.media.join("")}var remotedesc=new RTCSessionDescription({type:desctype,sdp:this.remoteSDP.raw});this.peerconnection.setRemoteDescription(remotedesc,function(){},function(e){console.error("setRemoteDescription error",e)})},JingleSession.prototype.addIceCandidate=function(elem){var self=this;if("closed"!=this.peerconnection.signalingState){if(!this.peerconnection.remoteDescription&&"have-local-offer"==this.peerconnection.signalingState){if(console.log("trickle ice candidate arriving before session accept..."),!this.remoteSDP){for(var cobbled="v=0\r\no=- 1923518516 2 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\n",i=0;i<this.localSDP.media.length;i++)cobbled+=SDPUtil.find_line(this.localSDP.media[i],"m=")+"\r\n",cobbled+=SDPUtil.find_lines(this.localSDP.media[i],"a=rtpmap:").join("\r\n")+"\r\n",SDPUtil.find_line(this.localSDP.media[i],"a=mid:")&&(cobbled+=SDPUtil.find_line(this.localSDP.media[i],"a=mid:")+"\r\n"),cobbled+="a=inactive\r\n";this.remoteSDP=new SDP(cobbled)}elem.each(function(){for(var i=0;i<self.remoteSDP.media.length;i++)if((SDPUtil.find_line(self.remoteSDP.media[i],"a=mid:"+$(this).attr("name"))||0===self.remoteSDP.media[i].indexOf("m="+$(this).attr("name")))&&!SDPUtil.find_line(self.remoteSDP.media[i],"a=ice-ufrag:")){var tmp=$(this).find("transport");self.remoteSDP.media[i]+="a=ice-ufrag:"+tmp.attr("ufrag")+"\r\n",self.remoteSDP.media[i]+="a=ice-pwd:"+tmp.attr("pwd")+"\r\n",tmp=$(this).find("transport>fingerprint"),tmp.length?self.remoteSDP.media[i]+="a=fingerprint:"+tmp.attr("hash")+" "+tmp.text()+"\r\n":(console.log("no dtls fingerprint (webrtc issue #1718?)"),self.remoteSDP.media[i]+="a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:BAADBAADBAADBAADBAADBAADBAADBAADBAADBAAD\r\n");break}}),this.remoteSDP.raw=this.remoteSDP.session+this.remoteSDP.media.join("");var iscomplete=this.remoteSDP.media.filter(function(mediapart){return SDPUtil.find_line(mediapart,"a=ice-ufrag:")}).length==this.remoteSDP.media.length;if(iscomplete){console.log("setting pranswer");try{this.peerconnection.setRemoteDescription(new RTCSessionDescription({type:"pranswer",sdp:this.remoteSDP.raw}),function(){},function(e){console.log("setRemoteDescription pranswer failed",e.toString())})}catch(e){console.error("setting pranswer failed",e)}}}elem.each(function(){var i,idx=-1;for(i=0;i<self.remoteSDP.media.length;i++)if(SDPUtil.find_line(self.remoteSDP.media[i],"a=mid:"+$(this).attr("name"))||0===self.remoteSDP.media[i].indexOf("m="+$(this).attr("name"))){idx=i;break}if(-1==idx)for(i=0;i<self.localSDP.media.length;i++)if(SDPUtil.find_line(self.localSDP.media[i],"a=mid:"+$(this).attr("name"))||0===self.localSDP.media[i].indexOf("m="+$(this).attr("name"))){idx=i;break}var name=$(this).attr("name");$(this).find("transport>candidate").each(function(){var line,candidate;line=SDPUtil.candidateFromJingle(this),candidate=new RTCIceCandidate({sdpMLineIndex:idx,sdpMid:name,candidate:line});try{self.peerconnection.addIceCandidate(candidate)}catch(e){console.error("addIceCandidate failed",e.toString(),line)}})})}},JingleSession.prototype.sendAnswer=function(provisional){var self=this;this.peerconnection.createAnswer(function(sdp){self.createdAnswer(sdp,provisional)},function(e){console.error("createAnswer failed",e)},this.media_constraints)},JingleSession.prototype.createdAnswer=function(sdp,provisional){var self=this;if(this.localSDP=new SDP(sdp.sdp),this.usepranswer=provisional===!0,this.startmuted&&(console.log("we got a request to start muted..."),this.connection.jingle.localStream.getAudioTracks().forEach(function(track){track.enabled=!1}),this.connection.jingle.localStream.getVideoTracks().forEach(function(track){track.enabled=!1}),this.localSDP.media[1]=this.localSDP.media[1].replace("a=sendrecv","a=recvonly"),SDPUtil.find_lines(this.localSDP.media[1],"a=ssrc:").forEach(function(line){self.localSDP.media[1]=self.localSDP.media[1].replace(line+"\r\n","")}),this.localSDP.raw=this.localSDP.session+this.localSDP.media.join("")),this.usetrickle)if(this.usepranswer){sdp.type="pranswer";for(var i=0;i<this.localSDP.media.length;i++)this.localSDP.media[i]=this.localSDP.media[i].replace("a=sendrecv\r\n","a=inactive\r\n");this.localSDP.raw=this.localSDP.session+this.localSDP.media.join("")}else{var accept=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:this.initiator,responder:this.responder,sid:this.sid});this.localSDP.toJingle(accept,this.initiator==this.me?"initiator":"responder"),this.connection.sendIQ(accept,function(){var ack={};ack.source="answer",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="answer",$(document).trigger("error.jingle",[self.sid,error])},1e4)}sdp.sdp=this.localSDP.raw,this.peerconnection.setLocalDescription(sdp,function(){$(document).trigger("setLocalDescription.jingle",[self.sid])},function(e){console.error("setLocalDescription failed",e)});for(var cands=SDPUtil.find_lines(this.localSDP.raw,"a=candidate:"),j=0;j<cands.length;j++){var cand=SDPUtil.parse_icecandidate(cands[j]);"srflx"==cand.type?this.hadstuncandidate=!0:"relay"==cand.type&&(this.hadturncandidate=!0)}},JingleSession.prototype.sendTerminate=function(reason,text){var self=this,term=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-terminate",initiator:this.initiator,sid:this.sid}).c("reason").c(reason||"success");text&&term.up().c("text").t(text),this.connection.sendIQ(term,function(){self.peerconnection.close(),self.peerconnection=null,self.terminate();var ack={};ack.source="terminate",$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};$(document).trigger("ack.jingle",[self.sid,error])},1e4),null!==this.statsinterval&&(window.clearInterval(this.statsinterval),this.statsinterval=null)},JingleSession.prototype.addSource=function(elem){console.log("addssrc",(new Date).getTime()),console.log("ice",this.peerconnection.iceConnectionState);var sdp=new SDP(this.peerconnection.remoteDescription.sdp),self=this;$(elem).each(function(idx,content){var name=$(content).attr("name"),lines="";tmp=$(content).find('>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]'),tmp.each(function(){var ssrc=$(this).attr("ssrc");$(this).find(">parameter").each(function(){lines+="a=ssrc:"+ssrc+" "+$(this).attr("name"),$(this).attr("value")&&$(this).attr("value").length&&(lines+=":"+$(this).attr("value")),lines+="\r\n"})}),sdp.media.forEach(function(media,idx){SDPUtil.find_line(media,"a=mid:"+name)&&(sdp.media[idx]+=lines,self.addssrc[idx]||(self.addssrc[idx]=""),self.addssrc[idx]+=lines)}),sdp.raw=sdp.session+sdp.media.join("")}),this.modifySources()},JingleSession.prototype.removeSource=function(elem){console.log("removessrc",(new Date).getTime()),console.log("ice",this.peerconnection.iceConnectionState);var sdp=new SDP(this.peerconnection.remoteDescription.sdp),self=this;$(elem).each(function(idx,content){var name=$(content).attr("name"),lines="";tmp=$(content).find('>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]'),tmp.each(function(){var ssrc=$(this).attr("ssrc");$(this).find(">parameter").each(function(){lines+="a=ssrc:"+ssrc+" "+$(this).attr("name"),$(this).attr("value")&&$(this).attr("value").length&&(lines+=":"+$(this).attr("value")),lines+="\r\n"})}),sdp.media.forEach(function(media,idx){SDPUtil.find_line(media,"a=mid:"+name)&&(sdp.media[idx]+=lines,self.addssrc[idx]||(self.removessrc[idx]=""),self.removessrc[idx]+=lines)}),sdp.raw=sdp.session+sdp.media.join("")}),this.modifySources()},JingleSession.prototype.modifySources=function(){var self=this;if("closed"!=this.peerconnection.signalingState&&(this.addssrc.length||this.removessrc.length||null!==this.pendingop)){if("stable"!=this.peerconnection.signalingState||"connected"!=this.peerconnection.iceConnectionState)return console.warn("modifySources not yet",this.peerconnection.signalingState,this.peerconnection.iceConnectionState),this.wait=!0,void window.setTimeout(function(){self.modifySources()},250);if(this.wait)return window.setTimeout(function(){self.modifySources()},2500),void(this.wait=!1);var sdp=new SDP(this.peerconnection.remoteDescription.sdp);this.addssrc.forEach(function(lines,idx){sdp.media[idx]+=lines}),this.addssrc=[],this.removessrc.forEach(function(lines,idx){lines=lines.split("\r\n"),lines.pop(),lines.forEach(function(line){sdp.media[idx]=sdp.media[idx].replace(line+"\r\n","")})}),this.removessrc=[],sdp.raw=sdp.session+sdp.media.join(""),this.peerconnection.setRemoteDescription(new RTCSessionDescription({type:"offer",sdp:sdp.raw}),function(){self.peerconnection.createAnswer(function(modifiedAnswer){if(null!==self.pendingop){var sdp=new SDP(modifiedAnswer.sdp);if(sdp.media.length>1){switch(self.pendingop){case"mute":sdp.media[1]=sdp.media[1].replace("a=sendrecv","a=recvonly");break;case"unmute":sdp.media[1]=sdp.media[1].replace("a=recvonly","a=sendrecv")}sdp.raw=sdp.session+sdp.media.join(""),modifiedAnswer.sdp=sdp.raw}self.pendingop=null}self.peerconnection.setLocalDescription(modifiedAnswer,function(){$(document).trigger("setLocalDescription.jingle",[self.sid])},function(){console.log("modified setLocalDescription failed")})},function(){console.log("modified answer failed")})},function(){console.log("modify failed")})}},JingleSession.prototype.hardMuteVideo=function(muted){this.pendingop=muted?"mute":"unmute",this.modifySources(),this.connection.jingle.localStream.getVideoTracks().forEach(function(track){track.enabled=!muted})},JingleSession.prototype.sendMute=function(muted,content){var info=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-info",initiator:this.initiator,sid:this.sid});info.c(muted?"mute":"unmute",{xmlns:"urn:xmpp:jingle:apps:rtp:info:1"}),info.attrs({creator:this.me==this.initiator?"creator":"responder"}),content&&info.attrs({name:content}),this.connection.send(info)},JingleSession.prototype.sendRinging=function(){var info=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-info",initiator:this.initiator,sid:this.sid});info.c("ringing",{xmlns:"urn:xmpp:jingle:apps:rtp:info:1"}),this.connection.send(info)},JingleSession.prototype.getStats=function(interval){var self=this,recv={audio:0,video:0},lost={audio:0,video:0},lastrecv={audio:0,video:0},lastlost={audio:0,video:0},loss={audio:0,video:0},delta={audio:0,video:0};return this.statsinterval=window.setInterval(function(){self&&self.peerconnection&&self.peerconnection.getStats&&self.peerconnection.getStats(function(stats){for(var results=stats.result(),i=0;i<results.length;++i)if("ssrc"==results[i].type){var packetsrecv=results[i].stat("packetsReceived"),packetslost=results[i].stat("packetsLost");packetsrecv&&packetslost&&(packetsrecv=parseInt(packetsrecv,10),packetslost=parseInt(packetslost,10),results[i].stat("googFrameRateReceived")?(lastlost.video=lost.video,lastrecv.video=recv.video,recv.video=packetsrecv,lost.video=packetslost):(lastlost.audio=lost.audio,lastrecv.audio=recv.audio,recv.audio=packetsrecv,lost.audio=packetslost))}delta.audio=recv.audio-lastrecv.audio,delta.video=recv.video-lastrecv.video,loss.audio=delta.audio>0?Math.ceil(100*(lost.audio-lastlost.audio)/delta.audio):0,loss.video=delta.video>0?Math.ceil(100*(lost.video-lastlost.video)/delta.video):0,$(document).trigger("packetloss.jingle",[self.sid,loss])})},interval||3e3),this.statsinterval}}(jQuery);/*!
+ * Source: lib/strophe.jingle/strophe.jingle.sdp.js, license: MIT, url: https://github.com/ESTOS/strophe.jingle
+ */
+var SDP;!function($){SDP=function(sdp){this.media=sdp.split("\r\nm=");for(var i=1;i<this.media.length;i++)this.media[i]="m="+this.media[i],i!=this.media.length-1&&(this.media[i]+="\r\n");this.session=this.media.shift()+"\r\n",this.raw=this.session+this.media.join("")},SDP.prototype.mangle=function(){var i,j,mline,lines,rtpmap,newdesc;for(i=0;i<this.media.length;i++)if(lines=this.media[i].split("\r\n"),lines.pop(),mline=SDPUtil.parse_mline(lines.shift()),"audio"==mline.media){for(newdesc="",mline.fmt.length=0,j=0;j<lines.length;j++)if("a=rtpmap:"==lines[j].substr(0,9)){if(rtpmap=SDPUtil.parse_rtpmap(lines[j]),"CN"==rtpmap.name||"ISAC"==rtpmap.name)continue;mline.fmt.push(rtpmap.id),newdesc+=lines[j]+"\r\n"}else newdesc+=lines[j]+"\r\n";this.media[i]=SDPUtil.build_mline(mline)+"\r\n",this.media[i]+=newdesc}this.raw=this.session+this.media.join("")},SDP.prototype.removeSessionLines=function(prefix){var self=this,lines=SDPUtil.find_lines(this.session,prefix);return lines.forEach(function(line){self.session=self.session.replace(line+"\r\n","")}),this.raw=this.session+this.media.join(""),lines},SDP.prototype.removeMediaLines=function(mediaindex,prefix){var self=this,lines=SDPUtil.find_lines(this.media[mediaindex],prefix);return lines.forEach(function(line){self.media[mediaindex]=self.media[mediaindex].replace(line+"\r\n","")}),this.raw=this.session+this.media.join(""),lines},SDP.prototype.toJingle=function(elem,thecreator){var i,j,k,mline,ssrc,rtpmap,tmp,lines;if(SDPUtil.find_line(this.session,"a=group:"))for(lines=SDPUtil.find_lines(this.session,"a=group:"),i=0;i<lines.length;i++){tmp=lines[i].split(" ");var semantics=tmp.shift().substr(8);for(elem.c("group",{xmlns:"urn:xmpp:jingle:apps:grouping:0",semantics:semantics}),j=0;j<tmp.length;j++)elem.c("content",{name:tmp[j]}).up();elem.up()}var bundle=[];for(SDPUtil.find_line(this.session,"a=group:BUNDLE")&&(bundle=SDPUtil.find_line(this.session,"a=group:BUNDLE ").split(" "),bundle.shift()),i=0;i<this.media.length;i++)if(mline=SDPUtil.parse_mline(this.media[i].split("\r\n")[0]),"audio"==mline.media||"video"==mline.media){if(ssrc=SDPUtil.find_line(this.media[i],"a=ssrc:")?SDPUtil.find_line(this.media[i],"a=ssrc:").substring(7).split(" ")[0]:!1,elem.c("content",{creator:thecreator,name:mline.media}),SDPUtil.find_line(this.media[i],"a=mid:")){var mid=SDPUtil.parse_mid(SDPUtil.find_line(this.media[i],"a=mid:"));elem.attrs({name:mid}),-1!=bundle.indexOf(mid)&&(elem.c("bundle",{xmlns:"http://estos.de/ns/bundle"}).up(),bundle.splice(bundle.indexOf(mid),1))}if(SDPUtil.find_line(this.media[i],"a=rtpmap:").length){for(elem.c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:mline.media}),ssrc&&elem.attrs({ssrc:ssrc}),j=0;j<mline.fmt.length;j++){if(rtpmap=SDPUtil.find_line(this.media[i],"a=rtpmap:"+mline.fmt[j]),elem.c("payload-type",SDPUtil.parse_rtpmap(rtpmap)),SDPUtil.find_line(this.media[i],"a=fmtp:"+mline.fmt[j]))for(tmp=SDPUtil.parse_fmtp(SDPUtil.find_line(this.media[i],"a=fmtp:"+mline.fmt[j])),k=0;k<tmp.length;k++)elem.c("parameter",tmp[k]).up();this.RtcpFbToJingle(i,elem,mline.fmt[j]),elem.up()}if(SDPUtil.find_line(this.media[i],"a=crypto:",this.session)){elem.c("encryption",{required:1});var crypto=SDPUtil.find_lines(this.media[i],"a=crypto:",this.session);crypto.forEach(function(line){elem.c("crypto",SDPUtil.parse_crypto(line)).up()}),elem.up()}if(ssrc){elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});var ssrclines=SDPUtil.find_lines(this.media[i],"a=ssrc:");ssrclines.forEach(function(line){idx=line.indexOf(" ");var linessrc=line.substr(0,idx).substr(7);linessrc!=ssrc&&(elem.up(),ssrc=linessrc,elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"}));var kv=line.substr(idx+1);elem.c("parameter"),-1==kv.indexOf(":")?elem.attrs({name:kv}):(elem.attrs({name:kv.split(":",2)[0]}),elem.attrs({value:kv.split(":",2)[1]})),elem.up()}),elem.up(),tmp=SDPUtil.parse_ssrc(this.media[i]),tmp.xmlns="http://estos.de/ns/ssrc",tmp.ssrc=ssrc,elem.c("ssrc",tmp).up()}if(SDPUtil.find_line(this.media[i],"a=rtcp-mux")&&elem.c("rtcp-mux").up(),this.RtcpFbToJingle(i,elem,"*"),SDPUtil.find_line(this.media[i],"a=extmap:"))for(lines=SDPUtil.find_lines(this.media[i],"a=extmap:"),j=0;j<lines.length;j++){if(tmp=SDPUtil.parse_extmap(lines[j]),elem.c("rtp-hdrext",{xmlns:"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",uri:tmp.uri,id:tmp.value}),tmp.hasOwnProperty("direction"))switch(tmp.direction){case"sendonly":elem.attrs({senders:"responder"});break;case"recvonly":elem.attrs({senders:"initiator"});break;case"sendrecv":elem.attrs({senders:"both"});break;case"inactive":elem.attrs({senders:"none"})}elem.up()}elem.up()}this.TransportToJingle(i,elem),SDPUtil.find_line(this.media[i],"a=sendrecv",this.session)?elem.attrs({senders:"both"}):SDPUtil.find_line(this.media[i],"a=sendonly",this.session)?elem.attrs({senders:"initiator"}):SDPUtil.find_line(this.media[i],"a=recvonly",this.session)?elem.attrs({senders:"responder"}):SDPUtil.find_line(this.media[i],"a=inactive",this.session)&&elem.attrs({senders:"none"}),"0"==mline.port&&elem.attrs({senders:"rejected"}),elem.up()}return elem.up(),elem},SDP.prototype.TransportToJingle=function(mediaindex,elem){var tmp,self=this;elem.c("transport");var fingerprints=SDPUtil.find_lines(this.media[mediaindex],"a=fingerprint:",this.session);if(fingerprints.forEach(function(line){tmp=SDPUtil.parse_fingerprint(line),tmp.xmlns="urn:xmpp:tmp:jingle:apps:dtls:0",elem.c("fingerprint").t(tmp.fingerprint),delete tmp.fingerprint,line=SDPUtil.find_line(self.media[mediaindex],"a=setup:",self.session),line&&(tmp.setup=line.substr(8)),elem.attrs(tmp),elem.up()}),tmp=SDPUtil.iceparams(this.media[mediaindex],this.session),tmp&&(tmp.xmlns="urn:xmpp:jingle:transports:ice-udp:1",elem.attrs(tmp),SDPUtil.find_line(this.media[mediaindex],"a=candidate:",this.session))){var lines=SDPUtil.find_lines(this.media[mediaindex],"a=candidate:",this.session);lines.forEach(function(line){elem.c("candidate",SDPUtil.candidateToJingle(line)).up()})}elem.up()},SDP.prototype.RtcpFbToJingle=function(mediaindex,elem,payloadtype){var lines=SDPUtil.find_lines(this.media[mediaindex],"a=rtcp-fb:"+payloadtype);lines.forEach(function(line){var tmp=SDPUtil.parse_rtcpfb(line);"trr-int"==tmp.type?(elem.c("rtcp-fb-trr-int",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",value:tmp.params[0]}),elem.up()):(elem.c("rtcp-fb",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",type:tmp.type}),tmp.params.length>0&&elem.attrs({subtype:tmp.params[0]}),elem.up())})},SDP.prototype.RtcpFbFromJingle=function(elem,payloadtype){var media="",tmp=elem.find('>rtcp-fb-trr-int[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]');return tmp.length&&(media+="a=rtcp-fb:* trr-int ",media+=tmp.attr("value")?tmp.attr("value"):"0",media+="\r\n"),tmp=elem.find('>rtcp-fb[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]'),tmp.each(function(){media+="a=rtcp-fb:"+payloadtype+" "+$(this).attr("type"),$(this).attr("subtype")&&(media+=" "+$(this).attr("subtype")),media+="\r\n"}),media},SDP.prototype.fromJingle=function(jingle){var self=this;if(this.raw="v=0\r\no=- 1923518516 2 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\n",$(jingle).find('>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]').length)$(jingle).find('>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]').each(function(idx,group){var contents=$(group).find(">content").map(function(idx,content){return content.getAttribute("name")}).get();contents.length>0&&(self.raw+="a=group:"+(group.getAttribute("semantics")||group.getAttribute("type"))+" "+contents.join(" ")+"\r\n")});else if($(jingle).find('>group[xmlns="urn:ietf:rfc:5888"]').length)$(jingle).find('>group[xmlns="urn:ietf:rfc:5888"]').each(function(idx,group){var contents=$(group).find(">content").map(function(idx,content){return content.getAttribute("name")}).get();null!==group.getAttribute("type")&&contents.length>0&&(self.raw+="a=group:"+group.getAttribute("type")+" "+contents.join(" ")+"\r\n")});else{var bundle=$(jingle).find(">content").filter(function(idx,content){return $(content).find(">bundle").length>0}).map(function(idx,content){return content.getAttribute("name")}).get();bundle.length&&(this.raw+="a=group:BUNDLE "+bundle.join(" ")+"\r\n")}this.session=this.raw,jingle.find(">content").each(function(){var m=self.jingle2media($(this));self.media.push(m)}),this.raw=this.session+this.media.join("")},SDP.prototype.jingle2media=function(content){var tmp,media="",desc=content.find("description"),ssrc=desc.attr("ssrc"),self=this;switch(tmp={media:desc.attr("media")},tmp.port="1","rejected"==content.attr("senders")&&(tmp.port="0"),tmp.proto=content.find(">transport>fingerprint").length||desc.find("encryption").length?"RTP/SAVPF":"RTP/AVPF",tmp.fmt=desc.find("payload-type").map(function(){return this.getAttribute("id")}).get(),media+=SDPUtil.build_mline(tmp)+"\r\n",media+="c=IN IP4 0.0.0.0\r\n",media+="a=rtcp:1 IN IP4 0.0.0.0\r\n",tmp=content.find('>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]'),tmp.length&&(tmp.attr("ufrag")&&(media+=SDPUtil.build_iceufrag(tmp.attr("ufrag"))+"\r\n"),tmp.attr("pwd")&&(media+=SDPUtil.build_icepwd(tmp.attr("pwd"))+"\r\n"),tmp.find(">fingerprint").each(function(){media+="a=fingerprint:"+this.getAttribute("hash"),media+=" "+$(this).text(),media+="\r\n",this.getAttribute("setup")&&(media+="a=setup:"+this.getAttribute("setup")+"\r\n")})),content.attr("senders")){case"initiator":media+="a=sendonly\r\n";break;case"responder":media+="a=recvonly\r\n";break;case"none":media+="a=inactive\r\n";break;case"both":media+="a=sendrecv\r\n"}return media+="a=mid:"+content.attr("name")+"\r\n",desc.find("rtcp-mux").length&&(media+="a=rtcp-mux\r\n"),desc.find("encryption").length&&desc.find("encryption>crypto").each(function(){media+="a=crypto:"+this.getAttribute("tag"),media+=" "+this.getAttribute("crypto-suite"),media+=" "+this.getAttribute("key-params"),this.getAttribute("session-params")&&(media+=" "+this.getAttribute("session-params")),media+="\r\n"}),desc.find("payload-type").each(function(){media+=SDPUtil.build_rtpmap(this)+"\r\n",$(this).find(">parameter").length&&(media+="a=fmtp:"+this.getAttribute("id")+" ",media+=$(this).find("parameter").map(function(){return(this.getAttribute("name")?this.getAttribute("name")+"=":"")+this.getAttribute("value")}).get().join(";"),media+="\r\n"),media+=self.RtcpFbFromJingle($(this),this.getAttribute("id"))}),media+=self.RtcpFbFromJingle(desc,"*"),tmp=desc.find('>rtp-hdrext[xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"]'),tmp.each(function(){media+="a=extmap:"+this.getAttribute("id")+" "+this.getAttribute("uri")+"\r\n"}),content.find('>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]>candidate').each(function(){media+=SDPUtil.candidateFromJingle(this)}),tmp=content.find('description>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]'),tmp.each(function(){var ssrc=this.getAttribute("ssrc");$(this).find(">parameter").each(function(){media+="a=ssrc:"+ssrc+" "+this.getAttribute("name"),this.getAttribute("value")&&this.getAttribute("value").length&&(media+=":"+this.getAttribute("value")),media+="\r\n"})}),0===tmp.length&&(tmp=content.find('description>ssrc[xmlns="http://estos.de/ns/ssrc"]'),tmp.length&&(media+="a=ssrc:"+ssrc+" cname:"+tmp.attr("cname")+"\r\n",media+="a=ssrc:"+ssrc+" msid:"+tmp.attr("msid")+"\r\n",media+="a=ssrc:"+ssrc+" mslabel:"+tmp.attr("mslabel")+"\r\n",media+="a=ssrc:"+ssrc+" label:"+tmp.attr("label")+"\r\n")),media},SDPUtil={iceparams:function(mediadesc,sessiondesc){var data=null;return SDPUtil.find_line(mediadesc,"a=ice-ufrag:",sessiondesc)&&SDPUtil.find_line(mediadesc,"a=ice-pwd:",sessiondesc)&&(data={ufrag:SDPUtil.parse_iceufrag(SDPUtil.find_line(mediadesc,"a=ice-ufrag:",sessiondesc)),pwd:SDPUtil.parse_icepwd(SDPUtil.find_line(mediadesc,"a=ice-pwd:",sessiondesc))}),data},parse_iceufrag:function(line){return line.substring(12)},build_iceufrag:function(frag){return"a=ice-ufrag:"+frag},parse_icepwd:function(line){return line.substring(10)},build_icepwd:function(pwd){return"a=ice-pwd:"+pwd},parse_mid:function(line){return line.substring(6)},parse_mline:function(line){var parts=line.substring(2).split(" "),data={};return data.media=parts.shift(),data.port=parts.shift(),data.proto=parts.shift(),""===parts[parts.length-1]&&parts.pop(),data.fmt=parts,data},build_mline:function(mline){return"m="+mline.media+" "+mline.port+" "+mline.proto+" "+mline.fmt.join(" ")},parse_rtpmap:function(line){var parts=line.substring(9).split(" "),data={};return data.id=parts.shift(),parts=parts[0].split("/"),data.name=parts.shift(),data.clockrate=parts.shift(),data.channels=parts.length?parts.shift():"1",data},build_rtpmap:function(el){var line="a=rtpmap:"+el.getAttribute("id")+" "+el.getAttribute("name")+"/"+el.getAttribute("clockrate");return el.getAttribute("channels")&&"1"!=el.getAttribute("channels")&&(line+="/"+el.getAttribute("channels")),line},parse_crypto:function(line){var parts=line.substring(9).split(" "),data={};return data.tag=parts.shift(),data["crypto-suite"]=parts.shift(),data["key-params"]=parts.shift(),parts.length&&(data["session-params"]=parts.join(" ")),data},parse_fingerprint:function(line){var parts=line.substring(14).split(" "),data={};return data.hash=parts.shift(),data.fingerprint=parts.shift(),data},parse_fmtp:function(line){var i,key,value,parts=line.split(" "),data=[];for(parts.shift(),parts=parts.join(" ").split(";"),i=0;i<parts.length;i++){for(key=parts[i].split("=")[0];key.length&&" "==key[0];)key=key.substring(1);value=parts[i].split("=")[1],key&&value?data.push({name:key,value:value}):key&&data.push({name:"",value:key})}return data},parse_icecandidate:function(line){var candidate={},elems=line.split(" ");candidate.foundation=elems[0].substring(12),candidate.component=elems[1],candidate.protocol=elems[2].toLowerCase(),candidate.priority=elems[3],candidate.ip=elems[4],candidate.port=elems[5],candidate.type=elems[7],candidate.generation=0;for(var i=8;i<elems.length;i+=2)switch(elems[i]){case"raddr":candidate["rel-addr"]=elems[i+1];break;case"rport":candidate["rel-port"]=elems[i+1];break;case"generation":candidate.generation=elems[i+1];break;case"tcptype":candidate.tcptype=elems[i+1];break;default:console.log('parse_icecandidate not translating "'+elems[i]+'" = "'+elems[i+1]+'"')}return candidate.network="1",candidate.id=Math.random().toString(36).substr(2,10),candidate},build_icecandidate:function(cand){var line=["a=candidate:"+cand.foundation,cand.component,cand.protocol,cand.priority,cand.ip,cand.port,"typ",cand.type].join(" ");switch(line+=" ",cand.type){case"srflx":case"prflx":case"relay":cand.hasOwnAttribute("rel-addr")&&cand.hasOwnAttribute("rel-port")&&(line+="raddr",line+=" ",line+=cand["rel-addr"],line+=" ",line+="rport",line+=" ",line+=cand["rel-port"],line+=" ")}return cand.hasOwnAttribute("tcptype")&&(line+="tcptype",line+=" ",line+=cand.tcptype,line+=" "),line+="generation",line+=" ",line+=cand.hasOwnAttribute("generation")?cand.generation:"0"},parse_ssrc:function(desc){for(var lines=desc.split("\r\n"),data={},i=0;i<lines.length;i++)if("a=ssrc:"==lines[i].substring(0,7)){var idx=lines[i].indexOf(" ");data[lines[i].substr(idx+1).split(":",2)[0]]=lines[i].substr(idx+1).split(":",2)[1]}return data},parse_rtcpfb:function(line){var parts=line.substr(10).split(" "),data={};return data.pt=parts.shift(),data.type=parts.shift(),data.params=parts,data},parse_extmap:function(line){var parts=line.substr(9).split(" "),data={};return data.value=parts.shift(),-1!=data.value.indexOf("/")?(data.direction=data.value.substr(data.value.indexOf("/")+1),data.value=data.value.substr(0,data.value.indexOf("/"))):data.direction="both",data.uri=parts.shift(),data.params=parts,data},find_line:function(haystack,needle,sessionpart){for(var lines=haystack.split("\r\n"),i=0;i<lines.length;i++)if(lines[i].substring(0,needle.length)==needle)return lines[i];if(!sessionpart)return!1;lines=sessionpart.split("\r\n");for(var j=0;j<lines.length;j++)if(lines[j].substring(0,needle.length)==needle)return lines[j];return!1},find_lines:function(haystack,needle,sessionpart){for(var lines=haystack.split("\r\n"),needles=[],i=0;i<lines.length;i++)lines[i].substring(0,needle.length)==needle&&needles.push(lines[i]);if(needles.length||!sessionpart)return needles;lines=sessionpart.split("\r\n");for(var j=0;j<lines.length;j++)lines[j].substring(0,needle.length)==needle&&needles.push(lines[j]);return needles},candidateToJingle:function(line){if(0===line.indexOf("candidate:"))line="a="+line;else if("a=candidate:"!=line.substring(0,12))return console.log("parseCandidate called with a line that is not a candidate line"),console.log(line),null;"\r\n"==line.substring(line.length-2)&&(line=line.substring(0,line.length-2));var i,candidate={},elems=line.split(" ");if("typ"!=elems[6])return console.log("did not find typ in the right place"),console.log(line),null;for(candidate.foundation=elems[0].substring(12),candidate.component=elems[1],candidate.protocol=elems[2].toLowerCase(),candidate.priority=elems[3],candidate.ip=elems[4],candidate.port=elems[5],candidate.type=elems[7],candidate.generation="0",i=8;i<elems.length;i+=2)switch(elems[i]){case"raddr":candidate["rel-addr"]=elems[i+1];break;case"rport":candidate["rel-port"]=elems[i+1];break;case"generation":candidate.generation=elems[i+1];break;case"tcptype":candidate.tcptype=elems[i+1];break;default:console.log('not translating "'+elems[i]+'" = "'+elems[i+1]+'"')}return candidate.network="1",candidate.id=Math.random().toString(36).substr(2,10),candidate},candidateFromJingle:function(cand){var line="a=candidate:";switch(line+=cand.getAttribute("foundation"),line+=" ",line+=cand.getAttribute("component"),line+=" ",line+=cand.getAttribute("protocol"),line+=" ",line+=cand.getAttribute("priority"),line+=" ",line+=cand.getAttribute("ip"),line+=" ",line+=cand.getAttribute("port"),line+=" ",line+="typ",line+=" "+cand.getAttribute("type"),line+=" ",cand.getAttribute("type")){case"srflx":case"prflx":case"relay":cand.getAttribute("rel-addr")&&cand.getAttribute("rel-port")&&(line+="raddr",line+=" ",line+=cand.getAttribute("rel-addr"),line+=" ",line+="rport",line+=" ",line+=cand.getAttribute("rel-port"),line+=" ")}return line+="generation",line+=" ",line+=cand.getAttribute("generation")||"0",line+"\r\n"}}}(jQuery);/*!
+ * Source: lib/strophe.jingle/strophe.jingle.adapter.js, license: MIT, url: https://github.com/ESTOS/strophe.jingle
+ */
+var setupRTC,getUserMediaWithConstraints,TraceablePeerConnection;!function($){TraceablePeerConnection=function(ice_config,constraints){var self=this,RTCPeerconnection=navigator.mozGetUserMedia?mozRTCPeerConnection:webkitRTCPeerConnection;this.peerconnection=new RTCPeerconnection(ice_config,constraints),this.updateLog=[],this.stats={},this.statsinterval=null,this.maxstats=300,this.trace=function(what,info){self.updateLog.push({time:new Date,type:what,value:info||""})},this.onicecandidate=null,this.peerconnection.onicecandidate=function(event){self.trace("onicecandidate",JSON.stringify(event.candidate,null," ")),null!==self.onicecandidate&&self.onicecandidate(event)},this.onaddstream=null,this.peerconnection.onaddstream=function(event){self.trace("onaddstream",event.stream.id),null!==self.onaddstream&&self.onaddstream(event)},this.onremovestream=null,this.peerconnection.onremovestream=function(event){self.trace("onremovestream",event.stream.id),null!==self.onremovestream&&self.onremovestream(event)},this.onsignalingstatechange=null,this.peerconnection.onsignalingstatechange=function(event){self.trace("onsignalingstatechange",self.signalingState),null!==self.onsignalingstatechange&&self.onsignalingstatechange(event)},this.oniceconnectionstatechange=null,this.peerconnection.oniceconnectionstatechange=function(event){self.trace("oniceconnectionstatechange",self.iceConnectionState),null!==self.oniceconnectionstatechange&&self.oniceconnectionstatechange(event)},this.onnegotiationneeded=null,this.peerconnection.onnegotiationneeded=function(event){self.trace("onnegotiationneeded"),null!==self.onnegotiationneeded&&self.onnegotiationneeded(event)},self.ondatachannel=null,this.peerconnection.ondatachannel=function(event){self.trace("ondatachannel",event),null!==self.ondatachannel&&self.ondatachannel(event)},navigator.mozGetUserMedia||(this.statsinterval=window.setInterval(function(){self.peerconnection.getStats(function(stats){for(var results=stats.result(),i=0;i<results.length;++i){var now=new Date;results[i].names().forEach(function(name){var id=results[i].id+"-"+name;self.stats[id]||(self.stats[id]={startTime:now,endTime:now,values:[],times:[]}),self.stats[id].values.push(results[i].stat(name)),self.stats[id].times.push(now.getTime()),self.stats[id].values.length>self.maxstats&&(self.stats[id].values.shift(),self.stats[id].times.shift()),self.stats[id].endTime=now})}})},1e3))},dumpSDP=function(description){return"type: "+description.type+"\r\n"+description.sdp},void 0!==TraceablePeerConnection.prototype.__defineGetter__&&(TraceablePeerConnection.prototype.__defineGetter__("signalingState",function(){return this.peerconnection.signalingState}),TraceablePeerConnection.prototype.__defineGetter__("iceConnectionState",function(){return this.peerconnection.iceConnectionState}),TraceablePeerConnection.prototype.__defineGetter__("localDescription",function(){return this.peerconnection.localDescription}),TraceablePeerConnection.prototype.__defineGetter__("remoteDescription",function(){return this.peerconnection.remoteDescription})),TraceablePeerConnection.prototype.addStream=function(stream){this.trace("addStream",stream.id),this.peerconnection.addStream(stream)},TraceablePeerConnection.prototype.removeStream=function(stream){this.trace("removeStream",stream.id),this.peerconnection.removeStream(stream)},TraceablePeerConnection.prototype.createDataChannel=function(label,opts){this.trace("createDataChannel",label,opts),this.peerconnection.createDataChannel(label,opts)},TraceablePeerConnection.prototype.setLocalDescription=function(description,successCallback,failureCallback){var self=this;this.trace("setLocalDescription",dumpSDP(description)),this.peerconnection.setLocalDescription(description,function(){self.trace("setLocalDescriptionOnSuccess"),successCallback()},function(err){self.trace("setLocalDescriptionOnFailure",err),failureCallback(err)})},TraceablePeerConnection.prototype.setRemoteDescription=function(description,successCallback,failureCallback){var self=this;this.trace("setRemoteDescription",dumpSDP(description)),this.peerconnection.setRemoteDescription(description,function(){self.trace("setRemoteDescriptionOnSuccess"),successCallback()},function(err){self.trace("setRemoteDescriptionOnFailure",err),failureCallback(err)})},TraceablePeerConnection.prototype.close=function(){this.trace("stop"),null!==this.statsinterval&&(window.clearInterval(this.statsinterval),this.statsinterval=null),this.peerconnection.close()},TraceablePeerConnection.prototype.createOffer=function(successCallback,failureCallback,constraints){var self=this;this.trace("createOffer",JSON.stringify(constraints,null," ")),this.peerconnection.createOffer(function(offer){self.trace("createOfferOnSuccess",dumpSDP(offer)),successCallback(offer)},function(err){self.trace("createOfferOnFailure",err),failureCallback(err)},constraints)},TraceablePeerConnection.prototype.createAnswer=function(successCallback,failureCallback,constraints){var self=this;this.trace("createAnswer",JSON.stringify(constraints,null," ")),this.peerconnection.createAnswer(function(answer){self.trace("createAnswerOnSuccess",dumpSDP(answer)),successCallback(answer)},function(err){self.trace("createAnswerOnFailure",err),failureCallback(err)},constraints)},TraceablePeerConnection.prototype.addIceCandidate=function(candidate){this.trace("addIceCandidate",JSON.stringify(candidate,null," ")),this.peerconnection.addIceCandidate(candidate)},TraceablePeerConnection.prototype.getStats=function(callback){navigator.mozGetUserMedia||this.peerconnection.getStats(callback)},setupRTC=function(){var RTC=null;if(navigator.mozGetUserMedia){console.log("This appears to be Firefox");var version=parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1],10);version>=22&&(RTC={peerconnection:mozRTCPeerConnection,browser:"firefox",getUserMedia:navigator.mozGetUserMedia.bind(navigator),attachMediaStream:function(element,stream){element[0].mozSrcObject=stream,element[0].play()},pc_constraints:{}},MediaStream.prototype.getVideoTracks||(MediaStream.prototype.getVideoTracks=function(){return[]}),MediaStream.prototype.getAudioTracks||(MediaStream.prototype.getAudioTracks=function(){return[]}),RTCSessionDescription=mozRTCSessionDescription,RTCIceCandidate=mozRTCIceCandidate)}else navigator.webkitGetUserMedia&&(console.log("This appears to be Chrome"),RTC={peerconnection:webkitRTCPeerConnection,browser:"chrome",getUserMedia:navigator.webkitGetUserMedia.bind(navigator),attachMediaStream:function(element,stream){element.attr("src",webkitURL.createObjectURL(stream))},pc_constraints:{optional:[{DtlsSrtpKeyAgreement:"true"}]}},-1!=navigator.userAgent.indexOf("Android")&&(RTC.pc_constraints={}),webkitMediaStream.prototype.getVideoTracks||(webkitMediaStream.prototype.getVideoTracks=function(){return this.videoTracks}),webkitMediaStream.prototype.getAudioTracks||(webkitMediaStream.prototype.getAudioTracks=function(){return this.audioTracks}));if(null===RTC)try{console.log("Browser does not appear to be WebRTC-capable")}catch(e){}return RTC},getUserMediaWithConstraints=function(um,resolution,bandwidth,fps){var constraints={audio:!1,video:!1};switch(um.indexOf("video")>=0&&(constraints.video={mandatory:{}}),um.indexOf("audio")>=0&&(constraints.audio={}),um.indexOf("screen")>=0&&(constraints.video={mandatory:{chromeMediaSource:"screen"}}),resolution&&!constraints.video&&(constraints.video={mandatory:{}}),resolution){case"1080":case"fullhd":constraints.video.mandatory.minWidth=1920,constraints.video.mandatory.minHeight=1080,constraints.video.mandatory.minAspectRatio=1.77;break;case"720":case"hd":constraints.video.mandatory.minWidth=1280,constraints.video.mandatory.minHeight=720,constraints.video.mandatory.minAspectRatio=1.77;break;case"360":constraints.video.mandatory.minWidth=640,constraints.video.mandatory.minHeight=360,constraints.video.mandatory.minAspectRatio=1.77;break;case"180":constraints.video.mandatory.minWidth=320,constraints.video.mandatory.minHeight=180,constraints.video.mandatory.minAspectRatio=1.77;break;case"960":constraints.video.mandatory.minWidth=960,constraints.video.mandatory.minHeight=720;break;case"640":case"vga":constraints.video.mandatory.minWidth=640,constraints.video.mandatory.minHeight=480;break;case"320":constraints.video.mandatory.minWidth=320,constraints.video.mandatory.minHeight=240;break;default:-1!=navigator.userAgent.indexOf("Android")&&(constraints.video.mandatory.minWidth=320,constraints.video.mandatory.minHeight=240,constraints.video.mandatory.maxFrameRate=15)}bandwidth&&(constraints.video||(constraints.video={mandatory:{}}),constraints.video.optional=[{bandwidth:bandwidth}]),fps&&(constraints.video||(constraints.video={mandatory:{}}),constraints.video.mandatory.minFrameRate=fps);try{RTC.getUserMedia(constraints,function(stream){console.log("onUserMediaSuccess"),$(document).trigger("mediaready.jingle",[stream])},function(error){console.warn("Failed to get access to local media. Error ",error),$(document).trigger("mediafailure.jingle",[error])})}catch(e){console.error("GUM failed: ",e),$(document).trigger("mediafailure.jingle")}}}(jQuery),function(root,factory){"function"==typeof define&&define.amd?define(factory):"undefined"!=typeof module&&module.exports?module.exports=factory():root.Salsa20=factory()}(this,function(){function Salsa20(key,nonce){this.rounds=20,this.sigmaWords=[1634760805,857760878,2036477234,1797285236],this.keyWords=[],this.nonceWords=[0,0],this.counterWords=[0,0],this.block=[],this.blockUsed=64,this.setKey(key),this.setNonce(nonce)}return Salsa20.prototype.setKey=function(key){for(var i=0,j=0;8>i;i++,j+=4)this.keyWords[i]=255&key[j]|(255&key[j+1])<<8|(255&key[j+2])<<16|(255&key[j+3])<<24;this._reset()},Salsa20.prototype.setNonce=function(nonce){this.nonceWords[0]=255&nonce[0]|(255&nonce[1])<<8|(255&nonce[2])<<16|(255&nonce[3])<<24,this.nonceWords[1]=255&nonce[4]|(255&nonce[5])<<8|(255&nonce[6])<<16|(255&nonce[7])<<24,this._reset()},Salsa20.prototype.getBytes=function(numberOfBytes){for(var out=new Array(numberOfBytes),i=0;numberOfBytes>i;i++)64==this.blockUsed&&(this._generateBlock(),this._incrementCounter(),this.blockUsed=0),out[i]=this.block[this.blockUsed],this.blockUsed++;return out},Salsa20.prototype.getHexString=function(numberOfBytes){for(var hex=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"],out=[],bytes=this.getBytes(numberOfBytes),i=0;i<bytes.length;i++)out.push(hex[bytes[i]>>4&15]),out.push(hex[15&bytes[i]]);return out.join("")},Salsa20.prototype._reset=function(){this.counterWords[0]=0,this.counterWords[1]=0,this.blockUsed=64},Salsa20.prototype._incrementCounter=function(){this.counterWords[0]=this.counterWords[0]+1&4294967295,0==this.counterWords[0]&&(this.counterWords[1]=this.counterWords[1]+1&4294967295)},Salsa20.prototype._generateBlock=function(){for(var u,j0=this.sigmaWords[0],j1=this.keyWords[0],j2=this.keyWords[1],j3=this.keyWords[2],j4=this.keyWords[3],j5=this.sigmaWords[1],j6=this.nonceWords[0],j7=this.nonceWords[1],j8=this.counterWords[0],j9=this.counterWords[1],j10=this.sigmaWords[2],j11=this.keyWords[4],j12=this.keyWords[5],j13=this.keyWords[6],j14=this.keyWords[7],j15=this.sigmaWords[3],x0=j0,x1=j1,x2=j2,x3=j3,x4=j4,x5=j5,x6=j6,x7=j7,x8=j8,x9=j9,x10=j10,x11=j11,x12=j12,x13=j13,x14=j14,x15=j15,i=0;i<this.rounds;i+=2)u=x0+x12,x4^=u<<7|u>>>25,u=x4+x0,x8^=u<<9|u>>>23,u=x8+x4,x12^=u<<13|u>>>19,u=x12+x8,x0^=u<<18|u>>>14,u=x5+x1,x9^=u<<7|u>>>25,u=x9+x5,x13^=u<<9|u>>>23,u=x13+x9,x1^=u<<13|u>>>19,u=x1+x13,x5^=u<<18|u>>>14,u=x10+x6,x14^=u<<7|u>>>25,u=x14+x10,x2^=u<<9|u>>>23,u=x2+x14,x6^=u<<13|u>>>19,u=x6+x2,x10^=u<<18|u>>>14,u=x15+x11,x3^=u<<7|u>>>25,u=x3+x15,x7^=u<<9|u>>>23,u=x7+x3,x11^=u<<13|u>>>19,u=x11+x7,x15^=u<<18|u>>>14,u=x0+x3,x1^=u<<7|u>>>25,u=x1+x0,x2^=u<<9|u>>>23,u=x2+x1,x3^=u<<13|u>>>19,u=x3+x2,x0^=u<<18|u>>>14,u=x5+x4,x6^=u<<7|u>>>25,u=x6+x5,x7^=u<<9|u>>>23,u=x7+x6,x4^=u<<13|u>>>19,u=x4+x7,x5^=u<<18|u>>>14,u=x10+x9,x11^=u<<7|u>>>25,u=x11+x10,x8^=u<<9|u>>>23,u=x8+x11,x9^=u<<13|u>>>19,u=x9+x8,x10^=u<<18|u>>>14,u=x15+x14,x12^=u<<7|u>>>25,u=x12+x15,x13^=u<<9|u>>>23,u=x13+x12,x14^=u<<13|u>>>19,u=x14+x13,x15^=u<<18|u>>>14;x0+=j0,x1+=j1,x2+=j2,x3+=j3,x4+=j4,x5+=j5,x6+=j6,x7+=j7,x8+=j8,x9+=j9,x10+=j10,x11+=j11,x12+=j12,x13+=j13,x14+=j14,x15+=j15,this.block[0]=x0>>>0&255,this.block[1]=x0>>>8&255,this.block[2]=x0>>>16&255,this.block[3]=x0>>>24&255,this.block[4]=x1>>>0&255,this.block[5]=x1>>>8&255,this.block[6]=x1>>>16&255,this.block[7]=x1>>>24&255,this.block[8]=x2>>>0&255,this.block[9]=x2>>>8&255,this.block[10]=x2>>>16&255,this.block[11]=x2>>>24&255,this.block[12]=x3>>>0&255,this.block[13]=x3>>>8&255,this.block[14]=x3>>>16&255,this.block[15]=x3>>>24&255,this.block[16]=x4>>>0&255,this.block[17]=x4>>>8&255,this.block[18]=x4>>>16&255,this.block[19]=x4>>>24&255,this.block[20]=x5>>>0&255,this.block[21]=x5>>>8&255,this.block[22]=x5>>>16&255,this.block[23]=x5>>>24&255,this.block[24]=x6>>>0&255,this.block[25]=x6>>>8&255,this.block[26]=x6>>>16&255,this.block[27]=x6>>>24&255,this.block[28]=x7>>>0&255,this.block[29]=x7>>>8&255,this.block[30]=x7>>>16&255,this.block[31]=x7>>>24&255,this.block[32]=x8>>>0&255,this.block[33]=x8>>>8&255,this.block[34]=x8>>>16&255,this.block[35]=x8>>>24&255,this.block[36]=x9>>>0&255,this.block[37]=x9>>>8&255,this.block[38]=x9>>>16&255,this.block[39]=x9>>>24&255,this.block[40]=x10>>>0&255,this.block[41]=x10>>>8&255,this.block[42]=x10>>>16&255,this.block[43]=x10>>>24&255,this.block[44]=x11>>>0&255,this.block[45]=x11>>>8&255,this.block[46]=x11>>>16&255,this.block[47]=x11>>>24&255,this.block[48]=x12>>>0&255,this.block[49]=x12>>>8&255,this.block[50]=x12>>>16&255,this.block[51]=x12>>>24&255,this.block[52]=x13>>>0&255,this.block[53]=x13>>>8&255,this.block[54]=x13>>>16&255,this.block[55]=x13>>>24&255,this.block[56]=x14>>>0&255,this.block[57]=x14>>>8&255,this.block[58]=x14>>>16&255,this.block[59]=x14>>>24&255,this.block[60]=x15>>>0&255,this.block[61]=x15>>>8&255,this.block[62]=x15>>>16&255,this.block[63]=x15>>>24&255},Salsa20}),function(root,factory){"function"==typeof define&&define.amd?define(factory.bind(root,root.crypto||root.msCrypto)):"undefined"!=typeof module&&module.exports?module.exports=factory(require("crypto")):root.BigInt=factory(root.crypto||root.msCrypto)}(this,function(crypto){function findPrimes(n){var i,s,p,ans;for(s=new Array(n),i=0;n>i;i++)s[i]=0;for(s[0]=2,p=0;s[p]<n;){for(i=s[p]*s[p];n>i;i+=s[p])s[i]=1;for(p++,s[p]=s[p-1]+1;s[p]<n&&s[s[p]];s[p]++);}for(ans=new Array(p),i=0;p>i;i++)ans[i]=s[i];return ans}function millerRabin(x,b){var i,j,k,s;if(mr_x1.length!=x.length&&(mr_x1=dup(x),mr_r=dup(x),mr_a=dup(x)),copy_(mr_a,b),copy_(mr_r,x),copy_(mr_x1,x),addInt_(mr_r,-1),addInt_(mr_x1,-1),isZero(mr_r))return 0;for(k=0;0==mr_r[k];k++);for(i=1,j=2;mr_r[k]%j==0;j*=2,i++);if(s=k*bpe+i-1,s&&rightShift_(mr_r,s),powMod_(mr_a,mr_r,x),!equalsInt(mr_a,1)&&!equals(mr_a,mr_x1)){for(j=1;s-1>=j&&!equals(mr_a,mr_x1);){if(squareMod_(mr_a,x),equalsInt(mr_a,1))return 0;j++}if(!equals(mr_a,mr_x1))return 0}return 1}function bitSize(x){var j,z,w;for(j=x.length-1;0==x[j]&&j>0;j--);for(z=0,w=x[j];w;w>>=1,z++);return z+=bpe*j}function expand(x,n){var ans=int2bigInt(0,(x.length>n?x.length:n)*bpe,0);return copy_(ans,x),ans}function mod(x,n){var ans=dup(x);return mod_(ans,n),trim(ans,1)}function mult(x,y){var ans=expand(x,x.length+y.length);return mult_(ans,y),trim(ans,1)}function powMod(x,y,n){var ans=expand(x,n.length);return powMod_(ans,trim(y,2),trim(n,2),0),trim(ans,1)}function sub(x,y){var ans=expand(x,x.length>y.length?x.length+1:y.length+1);return sub_(ans,y),trim(ans,1)}function add(x,y){var ans=expand(x,x.length>y.length?x.length+1:y.length+1);return add_(ans,y),trim(ans,1)}function inverseMod(x,n){var s,ans=expand(x,n.length);return s=inverseMod_(ans,n),s?trim(ans,1):null}function multMod(x,y,n){var ans=expand(x,n.length);return multMod_(ans,y,n),trim(ans,1)}function randBigInt(n,s){var a,b;return a=Math.floor((n-1)/bpe)+2,b=int2bigInt(0,0,a),randBigInt_(b,n,s),b}function randBigInt_(b,n,s){var i,a;for(i=0;i<b.length;i++)b[i]=0;for(a=Math.floor((n-1)/bpe)+1,i=0;a>i;i++)b[i]=randomBitInt(bpe);b[a-1]&=(2<<(n-1)%bpe)-1,1==s&&(b[a-1]|=1<<(n-1)%bpe)}function inverseMod_(x,n){var k=1+2*Math.max(x.length,n.length);if(!(1&x[0]||1&n[0]))return copyInt_(x,0),0;for(eg_u.length!=k&&(eg_u=new Array(k),eg_v=new Array(k),eg_A=new Array(k),eg_B=new Array(k),eg_C=new Array(k),eg_D=new Array(k)),copy_(eg_u,x),copy_(eg_v,n),copyInt_(eg_A,1),copyInt_(eg_B,0),copyInt_(eg_C,0),copyInt_(eg_D,1);;){for(;!(1&eg_u[0]);)halve_(eg_u),1&eg_A[0]||1&eg_B[0]?(add_(eg_A,n),halve_(eg_A),sub_(eg_B,x),halve_(eg_B)):(halve_(eg_A),halve_(eg_B));for(;!(1&eg_v[0]);)halve_(eg_v),1&eg_C[0]||1&eg_D[0]?(add_(eg_C,n),halve_(eg_C),sub_(eg_D,x),halve_(eg_D)):(halve_(eg_C),halve_(eg_D));if(greater(eg_v,eg_u)?(sub_(eg_v,eg_u),sub_(eg_C,eg_A),sub_(eg_D,eg_B)):(sub_(eg_u,eg_v),sub_(eg_A,eg_C),sub_(eg_B,eg_D)),equalsInt(eg_u,0)){for(;negative(eg_C);)add_(eg_C,n);return copy_(x,eg_C),equalsInt(eg_v,1)?1:(copyInt_(x,0),0)}}}function inverseModInt(x,n){for(var a=1,b=0;;){if(1==x)return a;if(0==x)return 0;if(b-=a*Math.floor(n/x),n%=x,1==n)return b;if(0==n)return 0;a-=b*Math.floor(x/n),x%=n}}function negative(x){return x[x.length-1]>>bpe-1&1}function greaterShift(x,y,shift){var i,kx=x.length,ky=y.length,k=ky>kx+shift?kx+shift:ky;for(i=ky-1-shift;kx>i&&i>=0;i++)if(x[i]>0)return 1;for(i=kx-1+shift;ky>i;i++)if(y[i]>0)return 0;for(i=k-1;i>=shift;i--){if(x[i-shift]>y[i])return 1;if(x[i-shift]<y[i])return 0}return 0}function greater(x,y){var i,k=x.length<y.length?x.length:y.length;for(i=x.length;i<y.length;i++)if(y[i])return 0;for(i=y.length;i<x.length;i++)if(x[i])return 1;for(i=k-1;i>=0;i--){if(x[i]>y[i])return 1;if(x[i]<y[i])return 0}return 0}function divide_(x,y,q,r){var kx,ky,i,y1,y2,c,a,b;for(copy_(r,x),ky=y.length;0==y[ky-1];ky--);for(b=y[ky-1],a=0;b;a++)b>>=1;for(a=bpe-a,leftShift_(y,a),leftShift_(r,a),kx=r.length;0==r[kx-1]&&kx>ky;kx--);for(copyInt_(q,0);!greaterShift(y,r,kx-ky);)subShift_(r,y,kx-ky),q[kx-ky]++;for(i=kx-1;i>=ky;i--){for(q[i-ky]=r[i]==y[ky-1]?mask:Math.floor((r[i]*radix+r[i-1])/y[ky-1]);y2=(ky>1?y[ky-2]:0)*q[i-ky],c=y2,y2&=mask,c=(c-y2)/radix,y1=c+q[i-ky]*y[ky-1],c=y1,y1&=mask,c=(c-y1)/radix,c==r[i]?y1==r[i-1]?y2>(i>1?r[i-2]:0):y1>r[i-1]:c>r[i];)q[i-ky]--;linCombShift_(r,y,-q[i-ky],i-ky),negative(r)&&(addShift_(r,y,i-ky),q[i-ky]--)}rightShift_(y,a),rightShift_(r,a)}function modInt(x,n){var i,c=0;for(i=x.length-1;i>=0;i--)c=(c*radix+x[i])%n;return c}function int2bigInt(t,bits,minSize){var k,buff;return k=Math.ceil(bits/bpe)+1,k=minSize>k?minSize:k,buff=new Array(k),copyInt_(buff,t),buff}function str2bigInt(s,base,minSize){var d,i,x,y,kk,k=s.length;if(-1==base){for(x=new Array(0);;){for(y=new Array(x.length+1),i=0;i<x.length;i++)y[i+1]=x[i];if(y[0]=parseInt(s,10),x=y,d=s.indexOf(",",0),1>d)break;if(s=s.substring(d+1),0==s.length)break}return x.length<minSize?(y=new Array(minSize),copy_(y,x),y):x}for(var bb=base,p=0,b=1==base?k:0;bb>1;)1&bb&&(p=1),b+=k,bb>>=1;for(b+=p*k,x=int2bigInt(0,b,0),i=0;k>i&&(d=digitsStr.indexOf(s.substring(i,i+1),0),36>=base&&d>=36&&(d-=26),!(d>=base||0>d));i++)multInt_(x,base),addInt_(x,d);for(k=x.length;k>0&&!x[k-1];k--);for(k=minSize>k+1?minSize:k+1,y=new Array(k),kk=k<x.length?k:x.length,i=0;kk>i;i++)y[i]=x[i];for(;k>i;i++)y[i]=0;return y}function equalsInt(x,y){var i;if(x[0]!=y)return 0;for(i=1;i<x.length;i++)if(x[i])return 0;return 1}function equals(x,y){var i,k=x.length<y.length?x.length:y.length;for(i=0;k>i;i++)if(x[i]!=y[i])return 0;if(x.length>y.length){for(;i<x.length;i++)if(x[i])return 0}else for(;i<y.length;i++)if(y[i])return 0;return 1}function isZero(x){var i;for(i=0;i<x.length;i++)if(x[i])return 0;return 1}function bigInt2str(x,base){var i,t,s="";if(s6.length!=x.length?s6=dup(x):copy_(s6,x),-1==base){for(i=x.length-1;i>0;i--)s+=x[i]+",";s+=x[0]}else for(;!isZero(s6);)t=divInt_(s6,base),s=digitsStr.substring(t,t+1)+s;return 0==s.length&&(s="0"),s}function dup(x){var buff;return buff=new Array(x.length),copy_(buff,x),buff}function copy_(x,y){var i,k=x.length<y.length?x.length:y.length;for(i=0;k>i;i++)x[i]=y[i];for(i=k;i<x.length;i++)x[i]=0}function copyInt_(x,n){var i,c;for(c=n,i=0;i<x.length;i++)x[i]=c&mask,c>>=bpe}function addInt_(x,n){var i,k,c,b;for(x[0]+=n,k=x.length,c=0,i=0;k>i;i++)if(c+=x[i],b=0,0>c&&(b=c&mask,b=-((c-b)/radix),c+=b*radix),x[i]=c&mask,c=(c-x[i])/radix-b,!c)return}function rightShift_(x,n){var i,k=Math.floor(n/bpe);if(k){for(i=0;i<x.length-k;i++)x[i]=x[i+k];for(;i<x.length;i++)x[i]=0;n%=bpe}for(i=0;i<x.length-1;i++)x[i]=mask&(x[i+1]<<bpe-n|x[i]>>n);x[i]>>=n}function halve_(x){var i;for(i=0;i<x.length-1;i++)x[i]=mask&(x[i+1]<<bpe-1|x[i]>>1);x[i]=x[i]>>1|x[i]&radix>>1}function leftShift_(x,n){var i,k=Math.floor(n/bpe);if(k){for(i=x.length;i>=k;i--)x[i]=x[i-k];for(;i>=0;i--)x[i]=0;n%=bpe}if(n){for(i=x.length-1;i>0;i--)x[i]=mask&(x[i]<<n|x[i-1]>>bpe-n);x[i]=mask&x[i]<<n}}function multInt_(x,n){var i,k,c,b;if(n)for(k=x.length,c=0,i=0;k>i;i++)c+=x[i]*n,b=0,0>c&&(b=c&mask,b=-((c-b)/radix),c+=b*radix),x[i]=c&mask,c=(c-x[i])/radix-b}function divInt_(x,n){var i,s,r=0;for(i=x.length-1;i>=0;i--)s=r*radix+x[i],x[i]=Math.floor(s/n),r=s%n;return r}function linCombShift_(x,y,b,ys){var i,c,k,kk;for(k=x.length<ys+y.length?x.length:ys+y.length,kk=x.length,c=0,i=ys;k>i;i++)c+=x[i]+b*y[i-ys],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&kk>i;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function addShift_(x,y,ys){var i,c,k,kk;for(k=x.length<ys+y.length?x.length:ys+y.length,kk=x.length,c=0,i=ys;k>i;i++)c+=x[i]+y[i-ys],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&kk>i;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function subShift_(x,y,ys){var i,c,k,kk;for(k=x.length<ys+y.length?x.length:ys+y.length,kk=x.length,c=0,i=ys;k>i;i++)c+=x[i]-y[i-ys],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&kk>i;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function sub_(x,y){var i,c,k;for(k=x.length<y.length?x.length:y.length,c=0,i=0;k>i;i++)c+=x[i]-y[i],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&i<x.length;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function add_(x,y){var i,c,k;for(k=x.length<y.length?x.length:y.length,c=0,i=0;k>i;i++)c+=x[i]+y[i],x[i]=c&mask,c=(c-x[i])/radix;for(i=k;c&&i<x.length;i++)c+=x[i],x[i]=c&mask,c=(c-x[i])/radix}function mult_(x,y){var i;for(ss.length!=2*x.length&&(ss=new Array(2*x.length)),copyInt_(ss,0),i=0;i<y.length;i++)y[i]&&linCombShift_(ss,x,y[i],i);copy_(x,ss)}function mod_(x,n){s4.length!=x.length?s4=dup(x):copy_(s4,x),s5.length!=x.length&&(s5=dup(x)),divide_(s4,n,s5,x)}function multMod_(x,y,n){var i;for(s0.length!=2*x.length&&(s0=new Array(2*x.length)),copyInt_(s0,0),i=0;i<y.length;i++)y[i]&&linCombShift_(s0,x,y[i],i);mod_(s0,n),copy_(x,s0)}function squareMod_(x,n){var i,j,c,kx,k;for(kx=x.length;kx>0&&!x[kx-1];kx--);for(k=kx>n.length?2*kx:2*n.length,s0.length!=k&&(s0=new Array(k)),copyInt_(s0,0),i=0;kx>i;i++){for(c=s0[2*i]+x[i]*x[i],s0[2*i]=c&mask,c=(c-s0[2*i])/radix,j=i+1;kx>j;j++)c=s0[i+j]+2*x[i]*x[j]+c,s0[i+j]=c&mask,c=(c-s0[i+j])/radix;s0[i+kx]=c}mod_(s0,n),copy_(x,s0)}function trim(x,k){var i,y;for(i=x.length;i>0&&!x[i-1];i--);return y=new Array(i+k),copy_(y,x),y}function powMod_(x,y,n){var k1,k2,kn,np;if(s7.length!=n.length&&(s7=dup(n)),0!=(1&n[0])){for(copyInt_(s7,0),kn=n.length;kn>0&&!n[kn-1];kn--);for(np=radix-inverseModInt(modInt(n,radix),radix),s7[kn]=1,multMod_(x,s7,n),s3.length!=x.length?s3=dup(x):copy_(s3,x),k1=y.length-1;k1>0&!y[k1];k1--);if(0==y[k1])return void copyInt_(x,1);for(k2=1<<bpe-1;k2&&!(y[k1]&k2);k2>>=1);for(;;){if(!(k2>>=1)){if(k1--,0>k1)return void mont_(x,one,n,np);k2=1<<bpe-1}mont_(x,x,n,np),k2&y[k1]&&mont_(x,s3,n,np)}}else for(copy_(s7,x),copyInt_(x,1);!equalsInt(y,0);)1&y[0]&&multMod_(x,s7,n),divInt_(y,2),squareMod_(s7,n)}function mont_(x,y,n,np){var i,j,c,ui,t,t2,ks,kn=n.length,ky=y.length;for(sa.length!=kn&&(sa=new Array(kn)),copyInt_(sa,0);kn>0&&0==n[kn-1];kn--);for(;ky>0&&0==y[ky-1];ky--);for(ks=sa.length-1,i=0;kn>i;i++){for(t=sa[0]+x[i]*y[0],ui=(t&mask)*np&mask,c=t+ui*n[0],c=(c-(c&mask))/radix,t=x[i],j=1;ky-4>j;)c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;for(;ky>j;)c+=sa[j]+ui*n[j]+t*y[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;for(;kn-4>j;)c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++,c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;for(;kn>j;)c+=sa[j]+ui*n[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;for(;ks>j;)c+=sa[j],t2=sa[j-1]=c&mask,c=(c-t2)/radix,j++;sa[j-1]=c&mask}greater(n,sa)||sub_(sa,n),copy_(x,sa)}function divMod(num,den,n){return multMod(num,inverseMod(den,n),n)}function subMod(one,two,n){return one=mod(one,n),two=mod(two,n),greater(two,one)&&(one=add(one,n)),sub(one,two)}function twoToThe(m){for(var b=Math.floor(m/bpe)+2,t=new Array(b),i=0;b>i;i++)t[i]=0;return t[b-2]=1<<m%bpe,t}function bigInt2bits(bi,pad){pad||(pad=0),bi=dup(bi);for(var ba="";!isZero(bi);)ba=_num2bin[255&bi[0]]+ba,rightShift_(bi,8);for(;ba.length<pad;)ba="\x00"+ba;return ba}function ba2bigInt(data){var mpi=str2bigInt("0",10,data.length);return data.forEach(function(d,i){i&&leftShift_(mpi,8),mpi[0]|=d}),mpi}function getSeed(){return randomBytes(40)}function randomByte(){return randomBytes(1)[0]}function randomBitInt(k){if(k>31)throw new Error("Too many bits.");var i=0,r=0,b=Math.floor(k/8),mask=(1<<k%8)-1;for(mask&&(r=randomByte()&mask);b>i;i++)r=256*r+randomByte();return r}var bpe=26,radix=1<<bpe,mask=radix-1,digitsStr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\'\"+-",one=int2bigInt(1,1,1),t=new Array(0),ss=t,s0=t,s3=t,s4=t,s5=t,s6=t,s7=t,sa=t,mr_x1=t,mr_r=t,mr_a=t,eg_v=t,eg_u=t,eg_A=t,eg_B=t,eg_C=t,eg_D=t,primes=t,_num2bin=function(){for(var i=0,_num2bin={};256>i;++i)_num2bin[i]=String.fromCharCode(i);return _num2bin}(),randomBytes=function(){if("undefined"!=typeof crypto&&"function"==typeof crypto.randomBytes)return function(n){try{var buf=crypto.randomBytes(n)}catch(e){throw e}return Array.prototype.slice.call(buf,0)};if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues)return function(n){var buf=new Uint8Array(n);return crypto.getRandomValues(buf),Array.prototype.slice.call(buf,0)};throw new Error("Keys should not be generated without CSPRNG.")}();return{str2bigInt:str2bigInt,bigInt2str:bigInt2str,int2bigInt:int2bigInt,multMod:multMod,powMod:powMod,inverseMod:inverseMod,randBigInt:randBigInt,randBigInt_:randBigInt_,equals:equals,equalsInt:equalsInt,sub:sub,mod:mod,modInt:modInt,mult:mult,divInt_:divInt_,rightShift_:rightShift_,dup:dup,greater:greater,add:add,isZero:isZero,bitSize:bitSize,millerRabin:millerRabin,divide_:divide_,trim:trim,primes:primes,findPrimes:findPrimes,getSeed:getSeed,divMod:divMod,subMod:subMod,twoToThe:twoToThe,bigInt2bits:bigInt2bits,ba2bigInt:ba2bigInt}}),function(root,factory){"function"==typeof define&&define.amd?define(factory):"undefined"!=typeof module&&module.exports?module.exports=factory():root.CryptoJS=factory()}(this,function(){var CryptoJS=CryptoJS||function(Math,undefined){var C={},C_lib=C.lib={},Base=C_lib.Base=function(){function F(){}return{extend:function(overrides){F.prototype=this;var subtype=new F;return overrides&&subtype.mixIn(overrides),subtype.hasOwnProperty("init")||(subtype.init=function(){subtype.$super.init.apply(this,arguments)}),subtype.init.prototype=subtype,subtype.$super=this,subtype},create:function(){var instance=this.extend();return instance.init.apply(instance,arguments),instance},init:function(){},mixIn:function(properties){for(var propertyName in properties)properties.hasOwnProperty(propertyName)&&(this[propertyName]=properties[propertyName]);properties.hasOwnProperty("toString")&&(this.toString=properties.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),WordArray=C_lib.WordArray=Base.extend({init:function(words,sigBytes){words=this.words=words||[],this.sigBytes=sigBytes!=undefined?sigBytes:4*words.length},toString:function(encoder){return(encoder||Hex).stringify(this)},concat:function(wordArray){var thisWords=this.words,thatWords=wordArray.words,thisSigBytes=this.sigBytes,thatSigBytes=wordArray.sigBytes;if(this.clamp(),thisSigBytes%4)for(var i=0;thatSigBytes>i;i++){var thatByte=thatWords[i>>>2]>>>24-i%4*8&255;thisWords[thisSigBytes+i>>>2]|=thatByte<<24-(thisSigBytes+i)%4*8}else if(thatWords.length>65535)for(var i=0;thatSigBytes>i;i+=4)thisWords[thisSigBytes+i>>>2]=thatWords[i>>>2];else thisWords.push.apply(thisWords,thatWords);return this.sigBytes+=thatSigBytes,this},clamp:function(){var words=this.words,sigBytes=this.sigBytes;words[sigBytes>>>2]&=4294967295<<32-sigBytes%4*8,words.length=Math.ceil(sigBytes/4)},clone:function(){var clone=Base.clone.call(this);return clone.words=this.words.slice(0),clone},random:function(nBytes){for(var words=[],i=0;nBytes>i;i+=4)words.push(4294967296*Math.random()|0);return new WordArray.init(words,nBytes)}}),C_enc=C.enc={},Hex=C_enc.Hex={stringify:function(wordArray){for(var words=wordArray.words,sigBytes=wordArray.sigBytes,hexChars=[],i=0;sigBytes>i;i++){var bite=words[i>>>2]>>>24-i%4*8&255;hexChars.push((bite>>>4).toString(16)),hexChars.push((15&bite).toString(16))}return hexChars.join("")},parse:function(hexStr){for(var hexStrLength=hexStr.length,words=[],i=0;hexStrLength>i;i+=2)words[i>>>3]|=parseInt(hexStr.substr(i,2),16)<<24-i%8*4;return new WordArray.init(words,hexStrLength/2)}},Latin1=C_enc.Latin1={stringify:function(wordArray){for(var words=wordArray.words,sigBytes=wordArray.sigBytes,latin1Chars=[],i=0;sigBytes>i;i++){var bite=words[i>>>2]>>>24-i%4*8&255;latin1Chars.push(String.fromCharCode(bite))}return latin1Chars.join("")},parse:function(latin1Str){for(var latin1StrLength=latin1Str.length,words=[],i=0;latin1StrLength>i;i++)words[i>>>2]|=(255&latin1Str.charCodeAt(i))<<24-i%4*8;return new WordArray.init(words,latin1StrLength)}},Utf8=C_enc.Utf8={stringify:function(wordArray){try{return decodeURIComponent(escape(Latin1.stringify(wordArray)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(utf8Str){return Latin1.parse(unescape(encodeURIComponent(utf8Str)))}},BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm=Base.extend({reset:function(){this._data=new WordArray.init,this._nDataBytes=0},_append:function(data){"string"==typeof data&&(data=Utf8.parse(data)),this._data.concat(data),this._nDataBytes+=data.sigBytes},_process:function(doFlush){var data=this._data,dataWords=data.words,dataSigBytes=data.sigBytes,blockSize=this.blockSize,blockSizeBytes=4*blockSize,nBlocksReady=dataSigBytes/blockSizeBytes;nBlocksReady=doFlush?Math.ceil(nBlocksReady):Math.max((0|nBlocksReady)-this._minBufferSize,0);var nWordsReady=nBlocksReady*blockSize,nBytesReady=Math.min(4*nWordsReady,dataSigBytes);if(nWordsReady){for(var offset=0;nWordsReady>offset;offset+=blockSize)this._doProcessBlock(dataWords,offset);var processedWords=dataWords.splice(0,nWordsReady);data.sigBytes-=nBytesReady}return new WordArray.init(processedWords,nBytesReady)},clone:function(){var clone=Base.clone.call(this);return clone._data=this._data.clone(),clone},_minBufferSize:0}),C_algo=(C_lib.Hasher=BufferedBlockAlgorithm.extend({cfg:Base.extend(),init:function(cfg){this.cfg=this.cfg.extend(cfg),this.reset()},reset:function(){BufferedBlockAlgorithm.reset.call(this),this._doReset()},update:function(messageUpdate){return this._append(messageUpdate),this._process(),this},finalize:function(messageUpdate){messageUpdate&&this._append(messageUpdate);var hash=this._doFinalize();return hash},blockSize:16,_createHelper:function(hasher){return function(message,cfg){return new hasher.init(cfg).finalize(message)}},_createHmacHelper:function(hasher){return function(message,key){return new C_algo.HMAC.init(hasher,key).finalize(message)}}}),C.algo={});
+return C}(Math);return function(){{var C=CryptoJS,C_lib=C.lib,WordArray=C_lib.WordArray,C_enc=C.enc;C_enc.Base64={stringify:function(wordArray){var words=wordArray.words,sigBytes=wordArray.sigBytes,map=this._map;wordArray.clamp();for(var base64Chars=[],i=0;sigBytes>i;i+=3)for(var byte1=words[i>>>2]>>>24-i%4*8&255,byte2=words[i+1>>>2]>>>24-(i+1)%4*8&255,byte3=words[i+2>>>2]>>>24-(i+2)%4*8&255,triplet=byte1<<16|byte2<<8|byte3,j=0;4>j&&sigBytes>i+.75*j;j++)base64Chars.push(map.charAt(triplet>>>6*(3-j)&63));var paddingChar=map.charAt(64);if(paddingChar)for(;base64Chars.length%4;)base64Chars.push(paddingChar);return base64Chars.join("")},parse:function(base64Str){var base64StrLength=base64Str.length,map=this._map,paddingChar=map.charAt(64);if(paddingChar){var paddingIndex=base64Str.indexOf(paddingChar);-1!=paddingIndex&&(base64StrLength=paddingIndex)}for(var words=[],nBytes=0,i=0;base64StrLength>i;i++)if(i%4){var bits1=map.indexOf(base64Str.charAt(i-1))<<i%4*2,bits2=map.indexOf(base64Str.charAt(i))>>>6-i%4*2;words[nBytes>>>2]|=(bits1|bits2)<<24-nBytes%4*8,nBytes++}return WordArray.create(words,nBytes)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}}(),CryptoJS.lib.Cipher||function(undefined){var C=CryptoJS,C_lib=C.lib,Base=C_lib.Base,WordArray=C_lib.WordArray,BufferedBlockAlgorithm=C_lib.BufferedBlockAlgorithm,C_enc=C.enc,Base64=(C_enc.Utf8,C_enc.Base64),C_algo=C.algo,EvpKDF=C_algo.EvpKDF,Cipher=C_lib.Cipher=BufferedBlockAlgorithm.extend({cfg:Base.extend(),createEncryptor:function(key,cfg){return this.create(this._ENC_XFORM_MODE,key,cfg)},createDecryptor:function(key,cfg){return this.create(this._DEC_XFORM_MODE,key,cfg)},init:function(xformMode,key,cfg){this.cfg=this.cfg.extend(cfg),this._xformMode=xformMode,this._key=key,this.reset()},reset:function(){BufferedBlockAlgorithm.reset.call(this),this._doReset()},process:function(dataUpdate){return this._append(dataUpdate),this._process()},finalize:function(dataUpdate){dataUpdate&&this._append(dataUpdate);var finalProcessedData=this._doFinalize();return finalProcessedData},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function selectCipherStrategy(key){return"string"==typeof key?PasswordBasedCipher:SerializableCipher}return function(cipher){return{encrypt:function(message,key,cfg){return selectCipherStrategy(key).encrypt(cipher,message,key,cfg)},decrypt:function(ciphertext,key,cfg){return selectCipherStrategy(key).decrypt(cipher,ciphertext,key,cfg)}}}}()}),C_mode=(C_lib.StreamCipher=Cipher.extend({_doFinalize:function(){var finalProcessedBlocks=this._process(!0);return finalProcessedBlocks},blockSize:1}),C.mode={}),BlockCipherMode=C_lib.BlockCipherMode=Base.extend({createEncryptor:function(cipher,iv){return this.Encryptor.create(cipher,iv)},createDecryptor:function(cipher,iv){return this.Decryptor.create(cipher,iv)},init:function(cipher,iv){this._cipher=cipher,this._iv=iv}}),CBC=C_mode.CBC=function(){function xorBlock(words,offset,blockSize){var iv=this._iv;if(iv){var block=iv;this._iv=undefined}else var block=this._prevBlock;for(var i=0;blockSize>i;i++)words[offset+i]^=block[i]}var CBC=BlockCipherMode.extend();return CBC.Encryptor=CBC.extend({processBlock:function(words,offset){var cipher=this._cipher,blockSize=cipher.blockSize;xorBlock.call(this,words,offset,blockSize),cipher.encryptBlock(words,offset),this._prevBlock=words.slice(offset,offset+blockSize)}}),CBC.Decryptor=CBC.extend({processBlock:function(words,offset){var cipher=this._cipher,blockSize=cipher.blockSize,thisBlock=words.slice(offset,offset+blockSize);cipher.decryptBlock(words,offset),xorBlock.call(this,words,offset,blockSize),this._prevBlock=thisBlock}}),CBC}(),C_pad=C.pad={},Pkcs7=C_pad.Pkcs7={pad:function(data,blockSize){for(var blockSizeBytes=4*blockSize,nPaddingBytes=blockSizeBytes-data.sigBytes%blockSizeBytes,paddingWord=nPaddingBytes<<24|nPaddingBytes<<16|nPaddingBytes<<8|nPaddingBytes,paddingWords=[],i=0;nPaddingBytes>i;i+=4)paddingWords.push(paddingWord);var padding=WordArray.create(paddingWords,nPaddingBytes);data.concat(padding)},unpad:function(data){var nPaddingBytes=255&data.words[data.sigBytes-1>>>2];data.sigBytes-=nPaddingBytes}},CipherParams=(C_lib.BlockCipher=Cipher.extend({cfg:Cipher.cfg.extend({mode:CBC,padding:Pkcs7}),reset:function(){Cipher.reset.call(this);var cfg=this.cfg,iv=cfg.iv,mode=cfg.mode;if(this._xformMode==this._ENC_XFORM_MODE)var modeCreator=mode.createEncryptor;else{var modeCreator=mode.createDecryptor;this._minBufferSize=1}this._mode=modeCreator.call(mode,this,iv&&iv.words)},_doProcessBlock:function(words,offset){this._mode.processBlock(words,offset)},_doFinalize:function(){var padding=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){padding.pad(this._data,this.blockSize);var finalProcessedBlocks=this._process(!0)}else{var finalProcessedBlocks=this._process(!0);padding.unpad(finalProcessedBlocks)}return finalProcessedBlocks},blockSize:4}),C_lib.CipherParams=Base.extend({init:function(cipherParams){this.mixIn(cipherParams)},toString:function(formatter){return(formatter||this.formatter).stringify(this)}})),C_format=C.format={},OpenSSLFormatter=C_format.OpenSSL={stringify:function(cipherParams){var ciphertext=cipherParams.ciphertext,salt=cipherParams.salt;if(salt)var wordArray=WordArray.create([1398893684,1701076831]).concat(salt).concat(ciphertext);else var wordArray=ciphertext;return wordArray.toString(Base64)},parse:function(openSSLStr){var ciphertext=Base64.parse(openSSLStr),ciphertextWords=ciphertext.words;if(1398893684==ciphertextWords[0]&&1701076831==ciphertextWords[1]){var salt=WordArray.create(ciphertextWords.slice(2,4));ciphertextWords.splice(0,4),ciphertext.sigBytes-=16}return CipherParams.create({ciphertext:ciphertext,salt:salt})}},SerializableCipher=C_lib.SerializableCipher=Base.extend({cfg:Base.extend({format:OpenSSLFormatter}),encrypt:function(cipher,message,key,cfg){cfg=this.cfg.extend(cfg);var encryptor=cipher.createEncryptor(key,cfg),ciphertext=encryptor.finalize(message),cipherCfg=encryptor.cfg;return CipherParams.create({ciphertext:ciphertext,key:key,iv:cipherCfg.iv,algorithm:cipher,mode:cipherCfg.mode,padding:cipherCfg.padding,blockSize:cipher.blockSize,formatter:cfg.format})},decrypt:function(cipher,ciphertext,key,cfg){cfg=this.cfg.extend(cfg),ciphertext=this._parse(ciphertext,cfg.format);var plaintext=cipher.createDecryptor(key,cfg).finalize(ciphertext.ciphertext);return plaintext},_parse:function(ciphertext,format){return"string"==typeof ciphertext?format.parse(ciphertext,this):ciphertext}}),C_kdf=C.kdf={},OpenSSLKdf=C_kdf.OpenSSL={execute:function(password,keySize,ivSize,salt){salt||(salt=WordArray.random(8));var key=EvpKDF.create({keySize:keySize+ivSize}).compute(password,salt),iv=WordArray.create(key.words.slice(keySize),4*ivSize);return key.sigBytes=4*keySize,CipherParams.create({key:key,iv:iv,salt:salt})}},PasswordBasedCipher=C_lib.PasswordBasedCipher=SerializableCipher.extend({cfg:SerializableCipher.cfg.extend({kdf:OpenSSLKdf}),encrypt:function(cipher,message,password,cfg){cfg=this.cfg.extend(cfg);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize);cfg.iv=derivedParams.iv;var ciphertext=SerializableCipher.encrypt.call(this,cipher,message,derivedParams.key,cfg);return ciphertext.mixIn(derivedParams),ciphertext},decrypt:function(cipher,ciphertext,password,cfg){cfg=this.cfg.extend(cfg),ciphertext=this._parse(ciphertext,cfg.format);var derivedParams=cfg.kdf.execute(password,cipher.keySize,cipher.ivSize,ciphertext.salt);cfg.iv=derivedParams.iv;var plaintext=SerializableCipher.decrypt.call(this,cipher,ciphertext,derivedParams.key,cfg);return plaintext}})}(),function(){var C=CryptoJS,C_lib=C.lib,BlockCipher=C_lib.BlockCipher,C_algo=C.algo,SBOX=[],INV_SBOX=[],SUB_MIX_0=[],SUB_MIX_1=[],SUB_MIX_2=[],SUB_MIX_3=[],INV_SUB_MIX_0=[],INV_SUB_MIX_1=[],INV_SUB_MIX_2=[],INV_SUB_MIX_3=[];!function(){for(var d=[],i=0;256>i;i++)d[i]=128>i?i<<1:i<<1^283;for(var x=0,xi=0,i=0;256>i;i++){var sx=xi^xi<<1^xi<<2^xi<<3^xi<<4;sx=sx>>>8^255&sx^99,SBOX[x]=sx,INV_SBOX[sx]=x;var x2=d[x],x4=d[x2],x8=d[x4],t=257*d[sx]^16843008*sx;SUB_MIX_0[x]=t<<24|t>>>8,SUB_MIX_1[x]=t<<16|t>>>16,SUB_MIX_2[x]=t<<8|t>>>24,SUB_MIX_3[x]=t;var t=16843009*x8^65537*x4^257*x2^16843008*x;INV_SUB_MIX_0[sx]=t<<24|t>>>8,INV_SUB_MIX_1[sx]=t<<16|t>>>16,INV_SUB_MIX_2[sx]=t<<8|t>>>24,INV_SUB_MIX_3[sx]=t,x?(x=x2^d[d[d[x8^x2]]],xi^=d[d[xi]]):x=xi=1}}();var RCON=[0,1,2,4,8,16,32,64,128,27,54],AES=C_algo.AES=BlockCipher.extend({_doReset:function(){for(var key=this._key,keyWords=key.words,keySize=key.sigBytes/4,nRounds=this._nRounds=keySize+6,ksRows=4*(nRounds+1),keySchedule=this._keySchedule=[],ksRow=0;ksRows>ksRow;ksRow++)if(keySize>ksRow)keySchedule[ksRow]=keyWords[ksRow];else{var t=keySchedule[ksRow-1];ksRow%keySize?keySize>6&&ksRow%keySize==4&&(t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[255&t]):(t=t<<8|t>>>24,t=SBOX[t>>>24]<<24|SBOX[t>>>16&255]<<16|SBOX[t>>>8&255]<<8|SBOX[255&t],t^=RCON[ksRow/keySize|0]<<24),keySchedule[ksRow]=keySchedule[ksRow-keySize]^t}for(var invKeySchedule=this._invKeySchedule=[],invKsRow=0;ksRows>invKsRow;invKsRow++){var ksRow=ksRows-invKsRow;if(invKsRow%4)var t=keySchedule[ksRow];else var t=keySchedule[ksRow-4];invKeySchedule[invKsRow]=4>invKsRow||4>=ksRow?t:INV_SUB_MIX_0[SBOX[t>>>24]]^INV_SUB_MIX_1[SBOX[t>>>16&255]]^INV_SUB_MIX_2[SBOX[t>>>8&255]]^INV_SUB_MIX_3[SBOX[255&t]]}},encryptBlock:function(M,offset){this._doCryptBlock(M,offset,this._keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX)},decryptBlock:function(M,offset){var t=M[offset+1];M[offset+1]=M[offset+3],M[offset+3]=t,this._doCryptBlock(M,offset,this._invKeySchedule,INV_SUB_MIX_0,INV_SUB_MIX_1,INV_SUB_MIX_2,INV_SUB_MIX_3,INV_SBOX);var t=M[offset+1];M[offset+1]=M[offset+3],M[offset+3]=t},_doCryptBlock:function(M,offset,keySchedule,SUB_MIX_0,SUB_MIX_1,SUB_MIX_2,SUB_MIX_3,SBOX){for(var nRounds=this._nRounds,s0=M[offset]^keySchedule[0],s1=M[offset+1]^keySchedule[1],s2=M[offset+2]^keySchedule[2],s3=M[offset+3]^keySchedule[3],ksRow=4,round=1;nRounds>round;round++){var t0=SUB_MIX_0[s0>>>24]^SUB_MIX_1[s1>>>16&255]^SUB_MIX_2[s2>>>8&255]^SUB_MIX_3[255&s3]^keySchedule[ksRow++],t1=SUB_MIX_0[s1>>>24]^SUB_MIX_1[s2>>>16&255]^SUB_MIX_2[s3>>>8&255]^SUB_MIX_3[255&s0]^keySchedule[ksRow++],t2=SUB_MIX_0[s2>>>24]^SUB_MIX_1[s3>>>16&255]^SUB_MIX_2[s0>>>8&255]^SUB_MIX_3[255&s1]^keySchedule[ksRow++],t3=SUB_MIX_0[s3>>>24]^SUB_MIX_1[s0>>>16&255]^SUB_MIX_2[s1>>>8&255]^SUB_MIX_3[255&s2]^keySchedule[ksRow++];s0=t0,s1=t1,s2=t2,s3=t3}var t0=(SBOX[s0>>>24]<<24|SBOX[s1>>>16&255]<<16|SBOX[s2>>>8&255]<<8|SBOX[255&s3])^keySchedule[ksRow++],t1=(SBOX[s1>>>24]<<24|SBOX[s2>>>16&255]<<16|SBOX[s3>>>8&255]<<8|SBOX[255&s0])^keySchedule[ksRow++],t2=(SBOX[s2>>>24]<<24|SBOX[s3>>>16&255]<<16|SBOX[s0>>>8&255]<<8|SBOX[255&s1])^keySchedule[ksRow++],t3=(SBOX[s3>>>24]<<24|SBOX[s0>>>16&255]<<16|SBOX[s1>>>8&255]<<8|SBOX[255&s2])^keySchedule[ksRow++];M[offset]=t0,M[offset+1]=t1,M[offset+2]=t2,M[offset+3]=t3},keySize:8});C.AES=BlockCipher._createHelper(AES)}(),function(){var C=CryptoJS,C_lib=C.lib,WordArray=C_lib.WordArray,Hasher=C_lib.Hasher,C_algo=C.algo,W=[],SHA1=C_algo.SHA1=Hasher.extend({_doReset:function(){this._hash=new WordArray.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(M,offset){for(var H=this._hash.words,a=H[0],b=H[1],c=H[2],d=H[3],e=H[4],i=0;80>i;i++){if(16>i)W[i]=0|M[offset+i];else{var n=W[i-3]^W[i-8]^W[i-14]^W[i-16];W[i]=n<<1|n>>>31}var t=(a<<5|a>>>27)+e+W[i];t+=20>i?(b&c|~b&d)+1518500249:40>i?(b^c^d)+1859775393:60>i?(b&c|b&d|c&d)-1894007588:(b^c^d)-899497514,e=d,d=c,c=b<<30|b>>>2,b=a,a=t}H[0]=H[0]+a|0,H[1]=H[1]+b|0,H[2]=H[2]+c|0,H[3]=H[3]+d|0,H[4]=H[4]+e|0},_doFinalize:function(){var data=this._data,dataWords=data.words,nBitsTotal=8*this._nDataBytes,nBitsLeft=8*data.sigBytes;return dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32,dataWords[(nBitsLeft+64>>>9<<4)+14]=Math.floor(nBitsTotal/4294967296),dataWords[(nBitsLeft+64>>>9<<4)+15]=nBitsTotal,data.sigBytes=4*dataWords.length,this._process(),this._hash},clone:function(){var clone=Hasher.clone.call(this);return clone._hash=this._hash.clone(),clone}});C.SHA1=Hasher._createHelper(SHA1),C.HmacSHA1=Hasher._createHmacHelper(SHA1)}(),function(Math){var C=CryptoJS,C_lib=C.lib,WordArray=C_lib.WordArray,Hasher=C_lib.Hasher,C_algo=C.algo,H=[],K=[];!function(){function isPrime(n){for(var sqrtN=Math.sqrt(n),factor=2;sqrtN>=factor;factor++)if(!(n%factor))return!1;return!0}function getFractionalBits(n){return 4294967296*(n-(0|n))|0}for(var n=2,nPrime=0;64>nPrime;)isPrime(n)&&(8>nPrime&&(H[nPrime]=getFractionalBits(Math.pow(n,.5))),K[nPrime]=getFractionalBits(Math.pow(n,1/3)),nPrime++),n++}();var W=[],SHA256=C_algo.SHA256=Hasher.extend({_doReset:function(){this._hash=new WordArray.init(H.slice(0))},_doProcessBlock:function(M,offset){for(var H=this._hash.words,a=H[0],b=H[1],c=H[2],d=H[3],e=H[4],f=H[5],g=H[6],h=H[7],i=0;64>i;i++){if(16>i)W[i]=0|M[offset+i];else{var gamma0x=W[i-15],gamma0=(gamma0x<<25|gamma0x>>>7)^(gamma0x<<14|gamma0x>>>18)^gamma0x>>>3,gamma1x=W[i-2],gamma1=(gamma1x<<15|gamma1x>>>17)^(gamma1x<<13|gamma1x>>>19)^gamma1x>>>10;W[i]=gamma0+W[i-7]+gamma1+W[i-16]}var ch=e&f^~e&g,maj=a&b^a&c^b&c,sigma0=(a<<30|a>>>2)^(a<<19|a>>>13)^(a<<10|a>>>22),sigma1=(e<<26|e>>>6)^(e<<21|e>>>11)^(e<<7|e>>>25),t1=h+sigma1+ch+K[i]+W[i],t2=sigma0+maj;h=g,g=f,f=e,e=d+t1|0,d=c,c=b,b=a,a=t1+t2|0}H[0]=H[0]+a|0,H[1]=H[1]+b|0,H[2]=H[2]+c|0,H[3]=H[3]+d|0,H[4]=H[4]+e|0,H[5]=H[5]+f|0,H[6]=H[6]+g|0,H[7]=H[7]+h|0},_doFinalize:function(){var data=this._data,dataWords=data.words,nBitsTotal=8*this._nDataBytes,nBitsLeft=8*data.sigBytes;return dataWords[nBitsLeft>>>5]|=128<<24-nBitsLeft%32,dataWords[(nBitsLeft+64>>>9<<4)+14]=Math.floor(nBitsTotal/4294967296),dataWords[(nBitsLeft+64>>>9<<4)+15]=nBitsTotal,data.sigBytes=4*dataWords.length,this._process(),this._hash},clone:function(){var clone=Hasher.clone.call(this);return clone._hash=this._hash.clone(),clone}});C.SHA256=Hasher._createHelper(SHA256),C.HmacSHA256=Hasher._createHmacHelper(SHA256)}(Math),function(){{var C=CryptoJS,C_lib=C.lib,Base=C_lib.Base,C_enc=C.enc,Utf8=C_enc.Utf8,C_algo=C.algo;C_algo.HMAC=Base.extend({init:function(hasher,key){hasher=this._hasher=new hasher.init,"string"==typeof key&&(key=Utf8.parse(key));var hasherBlockSize=hasher.blockSize,hasherBlockSizeBytes=4*hasherBlockSize;key.sigBytes>hasherBlockSizeBytes&&(key=hasher.finalize(key)),key.clamp();for(var oKey=this._oKey=key.clone(),iKey=this._iKey=key.clone(),oKeyWords=oKey.words,iKeyWords=iKey.words,i=0;hasherBlockSize>i;i++)oKeyWords[i]^=1549556828,iKeyWords[i]^=909522486;oKey.sigBytes=iKey.sigBytes=hasherBlockSizeBytes,this.reset()},reset:function(){var hasher=this._hasher;hasher.reset(),hasher.update(this._iKey)},update:function(messageUpdate){return this._hasher.update(messageUpdate),this},finalize:function(messageUpdate){var hasher=this._hasher,innerHash=hasher.finalize(messageUpdate);hasher.reset();var hmac=hasher.finalize(this._oKey.clone().concat(innerHash));return hmac}})}}(),CryptoJS.pad.NoPadding={pad:function(){},unpad:function(){}},CryptoJS.mode.CTR=function(){var CTR=CryptoJS.lib.BlockCipherMode.extend(),Encryptor=CTR.Encryptor=CTR.extend({processBlock:function(words,offset){var cipher=this._cipher,blockSize=cipher.blockSize,iv=this._iv,counter=this._counter;iv&&(counter=this._counter=iv.slice(0),this._iv=void 0);var keystream=counter.slice(0);cipher.encryptBlock(keystream,0),counter[blockSize-1]=counter[blockSize-1]+1|0;for(var i=0;blockSize>i;i++)words[offset+i]^=keystream[i]}});return CTR.Decryptor=Encryptor,CTR}(),CryptoJS}),/*!
+ * Source: lib/otr/build/dep/eventemitter.js, license: MIT, url: http://git.io/ee
+ */
+/*!
* EventEmitter v4.2.3 - git.io/ee
* Oliver Caldwell
* MIT license
* @preserve
*/
-function(){"use strict";function EventEmitter(){}function indexOfListener(listeners,listener){for(var i=listeners.length;i--;)if(listeners[i].listener===listener)return i;return-1}function alias(name){return function(){return this[name].apply(this,arguments)}}var proto=EventEmitter.prototype;proto.getListeners=function(evt){var response,key,events=this._getEvents();if("object"==typeof evt){response={};for(key in events)events.hasOwnProperty(key)&&evt.test(key)&&(response[key]=events[key])}else response=events[evt]||(events[evt]=[]);return response},proto.flattenListeners=function(listeners){var i,flatListeners=[];for(i=0;i<listeners.length;i+=1)flatListeners.push(listeners[i].listener);return flatListeners},proto.getListenersAsObject=function(evt){var response,listeners=this.getListeners(evt);return listeners instanceof Array&&(response={},response[evt]=listeners),response||listeners},proto.addListener=function(evt,listener){var key,listeners=this.getListenersAsObject(evt),listenerIsWrapped="object"==typeof listener;for(key in listeners)listeners.hasOwnProperty(key)&&-1===indexOfListener(listeners[key],listener)&&listeners[key].push(listenerIsWrapped?listener:{listener:listener,once:!1});return this},proto.on=alias("addListener"),proto.addOnceListener=function(evt,listener){return this.addListener(evt,{listener:listener,once:!0})},proto.once=alias("addOnceListener"),proto.defineEvent=function(evt){return this.getListeners(evt),this},proto.defineEvents=function(evts){for(var i=0;i<evts.length;i+=1)this.defineEvent(evts[i]);return this},proto.removeListener=function(evt,listener){var index,key,listeners=this.getListenersAsObject(evt);for(key in listeners)listeners.hasOwnProperty(key)&&(index=indexOfListener(listeners[key],listener),-1!==index&&listeners[key].splice(index,1));return this},proto.off=alias("removeListener"),proto.addListeners=function(evt,listeners){return this.manipulateListeners(!1,evt,listeners)},proto.removeListeners=function(evt,listeners){return this.manipulateListeners(!0,evt,listeners)},proto.manipulateListeners=function(remove,evt,listeners){var i,value,single=remove?this.removeListener:this.addListener,multiple=remove?this.removeListeners:this.addListeners;if("object"!=typeof evt||evt instanceof RegExp)for(i=listeners.length;i--;)single.call(this,evt,listeners[i]);else for(i in evt)evt.hasOwnProperty(i)&&(value=evt[i])&&("function"==typeof value?single.call(this,i,value):multiple.call(this,i,value));return this},proto.removeEvent=function(evt){var key,type=typeof evt,events=this._getEvents();if("string"===type)delete events[evt];else if("object"===type)for(key in events)events.hasOwnProperty(key)&&evt.test(key)&&delete events[key];else delete this._events;return this},proto.emitEvent=function(evt,args){var listener,i,key,response,listeners=this.getListenersAsObject(evt);for(key in listeners)if(listeners.hasOwnProperty(key))for(i=listeners[key].length;i--;)listener=listeners[key][i],listener.once===!0&&this.removeListener(evt,listener.listener),response=listener.listener.apply(this,args||[]),response===this._getOnceReturnValue()&&this.removeListener(evt,listener.listener);return this},proto.trigger=alias("emitEvent"),proto.emit=function(evt){var args=Array.prototype.slice.call(arguments,1);return this.emitEvent(evt,args)},proto.setOnceReturnValue=function(value){return this._onceReturnValue=value,this},proto._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},proto._getEvents=function(){return this._events||(this._events={})},"function"==typeof define&&define.amd?define(function(){return EventEmitter}):"object"==typeof module&&module.exports?module.exports=EventEmitter:this.EventEmitter=EventEmitter}.call(this),function(root,factory){"function"==typeof define&&define.amd?define(["bigint","crypto","eventemitter"],function(BigInt,CryptoJS,EventEmitter){var root={BigInt:BigInt,CryptoJS:CryptoJS,EventEmitter:EventEmitter,OTR:{},DSA:{}};return factory.call(root)}):(root.OTR={},root.DSA={},factory.call(root))}(this,function(){return function(){"use strict";var root=this,CONST={N:"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF",G:"2",MSGSTATE_PLAINTEXT:0,MSGSTATE_ENCRYPTED:1,MSGSTATE_FINISHED:2,AUTHSTATE_NONE:0,AUTHSTATE_AWAITING_DHKEY:1,AUTHSTATE_AWAITING_REVEALSIG:2,AUTHSTATE_AWAITING_SIG:3,WHITESPACE_TAG:" ",WHITESPACE_TAG_V2:" ",WHITESPACE_TAG_V3:" ",OTR_TAG:"?OTR",OTR_VERSION_1:"\x00",OTR_VERSION_2:"\x00",OTR_VERSION_3:"\x00",SMPSTATE_EXPECT0:0,SMPSTATE_EXPECT1:1,SMPSTATE_EXPECT2:2,SMPSTATE_EXPECT3:3,SMPSTATE_EXPECT4:4,STATUS_SEND_QUERY:0,STATUS_AKE_INIT:1,STATUS_AKE_SUCCESS:2,STATUS_END_OTR:3};"undefined"!=typeof module&&module.exports?module.exports=CONST:root.OTR.CONST=CONST}.call(this),function(){"use strict";function intCompare(x,y){var z=~(x^y);return z&=z>>16,z&=z>>8,z&=z>>4,z&=z>>2,z&=z>>1,1&z}var CryptoJS,BigInt,root=this,HLP={};"undefined"!=typeof module&&module.exports?(module.exports=HLP={},CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js")):(root.OTR&&(root.OTR.HLP=HLP),root.DSA&&(root.DSA.HLP=HLP),CryptoJS=root.CryptoJS,BigInt=root.BigInt);var DTS={BYTE:1,SHORT:2,INT:4,CTR:8,MAC:20,SIG:40},WRAPPER_BEGIN="?OTR",WRAPPER_END=".",TWO=BigInt.str2bigInt("2",10);HLP.debug=function(msg){this.debug&&"function"!=typeof this.debug&&"undefined"!=typeof console&&console.log(msg)},HLP.extend=function(child,parent){function Ctor(){this.constructor=child}for(var key in parent)Object.hasOwnProperty.call(parent,key)&&(child[key]=parent[key]);Ctor.prototype=parent.prototype,child.prototype=new Ctor,child.__super__=parent.prototype},HLP.compare=function(str1,str2){if(str1.length!==str2.length)return!1;for(var i=0,result=0;i<str1.length;i++)result|=str1[i].charCodeAt(0)^str2[i].charCodeAt(0);return intCompare(result,0)},HLP.randomExponent=function(){return BigInt.randBigInt(1536)},HLP.smpHash=function(version,fmpi,smpi){var sha256=CryptoJS.algo.SHA256.create();sha256.update(CryptoJS.enc.Latin1.parse(HLP.packBytes(version,DTS.BYTE))),sha256.update(CryptoJS.enc.Latin1.parse(HLP.packMPI(fmpi))),smpi&&sha256.update(CryptoJS.enc.Latin1.parse(HLP.packMPI(smpi)));var hash=sha256.finalize();return HLP.bits2bigInt(hash.toString(CryptoJS.enc.Latin1))},HLP.makeMac=function(aesctr,m){var pass=CryptoJS.enc.Latin1.parse(m),mac=CryptoJS.HmacSHA256(CryptoJS.enc.Latin1.parse(aesctr),pass);return HLP.mask(mac.toString(CryptoJS.enc.Latin1),0,160)},HLP.make1Mac=function(aesctr,m){var pass=CryptoJS.enc.Latin1.parse(m),mac=CryptoJS.HmacSHA1(CryptoJS.enc.Latin1.parse(aesctr),pass);return mac.toString(CryptoJS.enc.Latin1)},HLP.encryptAes=function(msg,c,iv){var opts={mode:CryptoJS.mode.CTR,iv:CryptoJS.enc.Latin1.parse(iv),padding:CryptoJS.pad.NoPadding},aesctr=CryptoJS.AES.encrypt(msg,CryptoJS.enc.Latin1.parse(c),opts),aesctr_decoded=CryptoJS.enc.Base64.parse(aesctr.toString());return CryptoJS.enc.Latin1.stringify(aesctr_decoded)},HLP.decryptAes=function(msg,c,iv){msg=CryptoJS.enc.Latin1.parse(msg);var opts={mode:CryptoJS.mode.CTR,iv:CryptoJS.enc.Latin1.parse(iv),padding:CryptoJS.pad.NoPadding};return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(msg),CryptoJS.enc.Latin1.parse(c),opts)},HLP.multPowMod=function(a,b,c,d,e){return BigInt.multMod(BigInt.powMod(a,b,e),BigInt.powMod(c,d,e),e)},HLP.ZKP=function(v,c,d,e){return BigInt.equals(c,HLP.smpHash(v,d,e))},HLP.GTOE=function(a,b){return BigInt.equals(a,b)||BigInt.greater(a,b)},HLP.between=function(x,a,b){return BigInt.greater(x,a)&&BigInt.greater(b,x)},HLP.checkGroup=function(g,N_MINUS_2){return HLP.GTOE(g,TWO)&&HLP.GTOE(N_MINUS_2,g)},HLP.h1=function(b,secbytes){var sha1=CryptoJS.algo.SHA1.create();return sha1.update(CryptoJS.enc.Latin1.parse(b)),sha1.update(CryptoJS.enc.Latin1.parse(secbytes)),sha1.finalize().toString(CryptoJS.enc.Latin1)},HLP.h2=function(b,secbytes){var sha256=CryptoJS.algo.SHA256.create();return sha256.update(CryptoJS.enc.Latin1.parse(b)),sha256.update(CryptoJS.enc.Latin1.parse(secbytes)),sha256.finalize().toString(CryptoJS.enc.Latin1)},HLP.mask=function(bytes,start,n){return bytes.substr(start/8,n/8)};var _toString=String.fromCharCode;HLP.packBytes=function(val,bytes){val=val.toString(16);for(var nex,res="";bytes>0;bytes--)nex=val.length?val.substr(-2,2):"0",val=val.substr(0,val.length-2),res=_toString(parseInt(nex,16))+res;return res},HLP.packINT=function(d){return HLP.packBytes(d,DTS.INT)},HLP.packCtr=function(d){return HLP.padCtr(HLP.packBytes(d,DTS.CTR))},HLP.padCtr=function(ctr){return ctr+"\x00\x00\x00\x00\x00\x00\x00\x00"},HLP.unpackCtr=function(d){return d=HLP.toByteArray(d.substring(0,8)),HLP.unpack(d)},HLP.unpack=function(arr){for(var val=0,i=0,len=arr.length;len>i;i++)val=256*val+arr[i];return val},HLP.packData=function(d){return HLP.packINT(d.length)+d},HLP.bits2bigInt=function(bits){return bits=HLP.toByteArray(bits),BigInt.ba2bigInt(bits)},HLP.packMPI=function(mpi){return HLP.packData(BigInt.bigInt2bits(BigInt.trim(mpi,0)))},HLP.packSHORT=function(short){return HLP.packBytes(short,DTS.SHORT)},HLP.unpackSHORT=function(short){return short=HLP.toByteArray(short),HLP.unpack(short)},HLP.packTLV=function(type,value){return HLP.packSHORT(type)+HLP.packSHORT(value.length)+value},HLP.readLen=function(msg){return msg=HLP.toByteArray(msg.substring(0,4)),HLP.unpack(msg)},HLP.readData=function(data){var n=HLP.unpack(data.splice(0,4));return[n,data]},HLP.readMPI=function(data){return data=HLP.toByteArray(data),data=HLP.readData(data),BigInt.ba2bigInt(data[1])},HLP.packMPIs=function(arr){return arr.reduce(function(prv,cur){return prv+HLP.packMPI(cur)},"")},HLP.unpackMPIs=function(num,mpis){for(var i=0,arr=[];num>i;i++)arr.push("MPI");return HLP.splitype(arr,mpis).map(function(m){return HLP.readMPI(m)})},HLP.wrapMsg=function(msg,fs,v3,our_it,their_it){msg=CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1.parse(msg)),msg=WRAPPER_BEGIN+":"+msg+WRAPPER_END;var its;if(v3&&(its="|",its+=HLP.readLen(our_it).toString(16),its+="|",its+=HLP.readLen(their_it).toString(16)),!fs)return[null,msg];var n=Math.ceil(msg.length/fs);if(n>65535)return["Too many fragments"];if(1==n)return[null,msg];var k,bi,ei,frag,mf,mfs=[];for(k=1;n>=k;k++)bi=(k-1)*fs,ei=k*fs,frag=msg.slice(bi,ei),mf=WRAPPER_BEGIN,v3&&(mf+=its),mf+=","+k+",",mf+=n+",",mf+=frag+",",mfs.push(mf);return[null,mfs]},HLP.splitype=function splitype(arr,msg){var data=[];return arr.forEach(function(a){var str;switch(a){case"PUBKEY":str=splitype(["SHORT","MPI","MPI","MPI","MPI"],msg).join("");break;case"DATA":case"MPI":str=msg.substring(0,HLP.readLen(msg)+4);break;default:str=msg.substring(0,DTS[a])}data.push(str),msg=msg.substring(str.length)}),data};var _bin2num=function(){for(var i=0,_bin2num={};256>i;++i)_bin2num[String.fromCharCode(i)]=i;for(i=128;256>i;++i)_bin2num[String.fromCharCode(63232+i)]=i;return _bin2num}();HLP.toByteArray=function(data){for(var rv=[],ary=data.split(""),i=-1,iz=ary.length,remain=iz%8;remain--;)++i,rv[i]=_bin2num[ary[i]];for(remain=iz>>3;remain--;)rv.push(_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]]);return rv}}.call(this),function(){"use strict";function timer(){var start=(new Date).getTime();return function(s){if(DEBUG&&"undefined"!=typeof console){var t=(new Date).getTime();console.log(s+": "+(t-start)),start=t}}}function makeRandom(min,max){var c=BigInt.randBigInt(BigInt.bitSize(max));return HLP.between(c,min,max)?c:makeRandom(min,max)}function isProbPrime(k,n){var i,B=3e4,l=BigInt.bitSize(k),primes=BigInt.primes;for(0===primes.length&&(primes=BigInt.findPrimes(B)),rpprb.length!=k.length&&(rpprb=BigInt.dup(k)),i=0;i<primes.length&&primes[i]<=B;i++)if(0===BigInt.modInt(k,primes[i])&&!BigInt.equalsInt(k,primes[i]))return 0;for(i=0;n>i;i++){for(BigInt.randBigInt_(rpprb,l,0);!BigInt.greater(k,rpprb);)BigInt.randBigInt_(rpprb,l,0);if(!BigInt.millerRabin(k,rpprb))return 0}return 1}function generatePrimes(bit_length){for(var q,p,rem,counter,t=timer(),repeat=bit_lengths[bit_length].repeat,N=bit_lengths[bit_length].N,LM1=BigInt.twoToThe(bit_length-1),bl4=4*bit_length,brk=!1;;)if(q=BigInt.randBigInt(N,1),q[0]|=1,isProbPrime(q,repeat)){for(t("q"),counter=0;bl4>counter;counter++)if(p=BigInt.randBigInt(bit_length,1),p[0]|=1,rem=BigInt.mod(p,q),rem=BigInt.sub(rem,ONE),p=BigInt.sub(p,rem),!BigInt.greater(LM1,p)&&isProbPrime(p,repeat)){t("p"),primes[bit_length]={p:p,q:q},brk=!0;break}if(brk)break}for(var g,h=BigInt.dup(TWO),pm1=BigInt.sub(p,ONE),e=BigInt.multMod(pm1,BigInt.inverseMod(q,p),p);;){g=BigInt.powMod(h,e,p);{if(!BigInt.equals(g,ONE))return primes[bit_length].g=g,void t("g");h=BigInt.add(h,ONE)}}throw new Error("Unreachable!")}function DSA(obj,opts){if(!(this instanceof DSA))return new DSA(obj,opts);if(opts=opts||{},obj){var self=this;return["p","q","g","y","x"].forEach(function(prop){self[prop]=obj[prop]}),void(this.type=obj.type||KEY_TYPE)}var bit_length=parseInt(opts.bit_length?opts.bit_length:1024,10);if(!bit_lengths[bit_length])throw new Error("Unsupported bit length.");primes[bit_length]||generatePrimes(bit_length),this.p=primes[bit_length].p,this.q=primes[bit_length].q,this.g=primes[bit_length].g,this.type=KEY_TYPE,this.x=makeRandom(ZERO,this.q),this.y=BigInt.powMod(this.g,this.x,this.p),opts.nocache&&(primes[bit_length]=null)}function tokenizeStr(str){var start,end;if(start=str.indexOf("("),end=str.lastIndexOf(")"),0>start||0>end)throw new Error("Malformed S-Expression");str=str.substring(start+1,end);var splt=str.search(/\s/),obj={type:str.substring(0,splt),val:[]};if(str=str.substring(splt+1,end),start=str.indexOf("("),0>start)obj.val.push(str);else for(var i,len,ss,es;start>-1;){for(i=start+1,len=str.length,ss=1,es=0;len>i&&ss>es;i++)"("===str[i]&&ss++,")"===str[i]&&es++;obj.val.push(tokenizeStr(str.substring(start,++i))),str=str.substring(++i),start=str.indexOf("(")}return obj}function parseLibotr(obj){if(!obj.type)throw new Error("Parse error.");var o,val;return"privkeys"===obj.type?(o=[],obj.val.forEach(function(i){o.push(parseLibotr(i))}),o):(o={},obj.val.forEach(function(i){val=i.val[0],"string"==typeof val?0===val.indexOf("#")&&(val=val.substring(1,val.lastIndexOf("#")),val=BigInt.str2bigInt(val,16)):val=parseLibotr(i),o[i.type]=val}),o)}var CryptoJS,BigInt,Worker,WWPath,HLP,root=this;"undefined"!=typeof module&&module.exports?(module.exports=DSA,CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js"),WWPath=require("path").join(__dirname,"/dsa-webworker.js"),HLP=require("./helpers.js")):(Object.keys(root.DSA).forEach(function(k){DSA[k]=root.DSA[k]}),root.DSA=DSA,CryptoJS=root.CryptoJS,BigInt=root.BigInt,Worker=root.Worker,WWPath="dsa-webworker.js",HLP=DSA.HLP);var ZERO=BigInt.str2bigInt("0",10),ONE=BigInt.str2bigInt("1",10),TWO=BigInt.str2bigInt("2",10),KEY_TYPE="\x00\x00",DEBUG=!1,rpprb=[],bit_lengths={1024:{N:160,repeat:40},2048:{N:224,repeat:56}},primes={};DSA.prototype={constructor:DSA,packPublic:function(){var str=this.type;return str+=HLP.packMPI(this.p),str+=HLP.packMPI(this.q),str+=HLP.packMPI(this.g),str+=HLP.packMPI(this.y)},packPrivate:function(){var str=this.packPublic()+HLP.packMPI(this.x);return str=CryptoJS.enc.Latin1.parse(str),str.toString(CryptoJS.enc.Base64)},generateNonce:function(m){var priv=BigInt.bigInt2bits(BigInt.trim(this.x,0)),rand=BigInt.bigInt2bits(BigInt.randBigInt(256)),sha256=CryptoJS.algo.SHA256.create();sha256.update(CryptoJS.enc.Latin1.parse(priv)),sha256.update(m),sha256.update(CryptoJS.enc.Latin1.parse(rand));var hash=sha256.finalize();return hash=HLP.bits2bigInt(hash.toString(CryptoJS.enc.Latin1)),BigInt.rightShift_(hash,256-BigInt.bitSize(this.q)),HLP.between(hash,ZERO,this.q)?hash:this.generateNonce(m)},sign:function(m){m=CryptoJS.enc.Latin1.parse(m);for(var k,b=BigInt.str2bigInt(m.toString(CryptoJS.enc.Hex),16),r=ZERO,s=ZERO;BigInt.isZero(s)||BigInt.isZero(r);)k=this.generateNonce(m),r=BigInt.mod(BigInt.powMod(this.g,k,this.p),this.q),BigInt.isZero(r)||(s=BigInt.inverseMod(k,this.q),s=BigInt.mult(s,BigInt.add(b,BigInt.mult(this.x,r))),s=BigInt.mod(s,this.q));return[r,s]},fingerprint:function(){var pk=this.packPublic();return this.type===KEY_TYPE&&(pk=pk.substring(2)),pk=CryptoJS.enc.Latin1.parse(pk),CryptoJS.SHA1(pk).toString(CryptoJS.enc.Hex)}},DSA.parsePublic=function(str,priv){var fields=["SHORT","MPI","MPI","MPI","MPI"];priv&&fields.push("MPI"),str=HLP.splitype(fields,str);var obj={type:str[0],p:HLP.readMPI(str[1]),q:HLP.readMPI(str[2]),g:HLP.readMPI(str[3]),y:HLP.readMPI(str[4])};return priv&&(obj.x=HLP.readMPI(str[5])),new DSA(obj)},DSA.parsePrivate=function(str,libotr){return libotr?parseLibotr(tokenizeStr(str))[0]["private-key"].dsa:(str=CryptoJS.enc.Base64.parse(str),str=str.toString(CryptoJS.enc.Latin1),DSA.parsePublic(str,!0))},DSA.verify=function(key,m,r,s){if(!HLP.between(r,ZERO,key.q)||!HLP.between(s,ZERO,key.q))return!1;var hm=CryptoJS.enc.Latin1.parse(m);hm=BigInt.str2bigInt(hm.toString(CryptoJS.enc.Hex),16);var w=BigInt.inverseMod(s,key.q),u1=BigInt.multMod(hm,w,key.q),u2=BigInt.multMod(r,w,key.q);u1=BigInt.powMod(key.g,u1,key.p),u2=BigInt.powMod(key.y,u2,key.p);var v=BigInt.mod(BigInt.multMod(u1,u2,key.p),key.q);return BigInt.equals(v,r)},DSA.createInWebWorker=function(options,cb){var opts={path:WWPath,seed:BigInt.getSeed};options&&"object"==typeof options&&Object.keys(options).forEach(function(k){opts[k]=options[k]}),"undefined"!=typeof module&&module.exports&&(Worker=require("webworker-threads").Worker);var worker=new Worker(opts.path);worker.onmessage=function(e){var data=e.data;switch(data.type){case"debug":if(!DEBUG||"undefined"==typeof console)return;console.log(data.val);break;case"data":worker.terminate(),cb(DSA.parsePrivate(data.val));break;default:throw new Error("Unrecognized type.")}},worker.postMessage({seed:opts.seed(),imports:opts.imports,debug:DEBUG})}}.call(this),function(){"use strict";var CryptoJS,CONST,HLP,root=this,Parse={};"undefined"!=typeof module&&module.exports?(module.exports=Parse,CryptoJS=require("../vendor/crypto.js"),CONST=require("./const.js"),HLP=require("./helpers.js")):(root.OTR.Parse=Parse,CryptoJS=root.CryptoJS,CONST=root.OTR.CONST,HLP=root.OTR.HLP);var tags={};tags[CONST.WHITESPACE_TAG_V2]=CONST.OTR_VERSION_2,tags[CONST.WHITESPACE_TAG_V3]=CONST.OTR_VERSION_3,Parse.parseMsg=function(otr,msg){var ver=[],start=msg.indexOf(CONST.OTR_TAG);if(!~start){if(this.initFragment(otr),ind=msg.indexOf(CONST.WHITESPACE_TAG),~ind){msg=msg.split(""),msg.splice(ind,16);for(var tag,len=msg.length;len>ind;)tag=msg.slice(ind,ind+8).join(""),Object.hasOwnProperty.call(tags,tag)?(msg.splice(ind,8),ver.push(tags[tag])):ind+=8;msg=msg.join("")}return{msg:msg,ver:ver}}var ind=start+CONST.OTR_TAG.length,com=msg[ind];if(","===com||"|"===com)return this.msgFragment(otr,msg.substring(ind+1),"|"===com);if(this.initFragment(otr),~["?","v"].indexOf(com)){"?"===msg[ind]&&(ver.push(CONST.OTR_VERSION_1),ind+=1);var vers={2:CONST.OTR_VERSION_2,3:CONST.OTR_VERSION_3},qs=msg.substring(ind+1),qi=qs.indexOf("?");return qi>=1&&(qs=qs.substring(0,qi).split(""),"v"===msg[ind]&&qs.forEach(function(q){Object.hasOwnProperty.call(vers,q)&&ver.push(vers[q])})),{cls:"query",ver:ver}}if(":"===com){ind+=1;var info=msg.substring(ind,ind+4);if(info.length<4)return{msg:msg};info=CryptoJS.enc.Base64.parse(info).toString(CryptoJS.enc.Latin1);var version=info.substring(0,2),type=info.substring(2);if(!otr["ALLOW_V"+HLP.unpackSHORT(version)])return{msg:msg};ind+=4;var end=msg.substring(ind).indexOf(".");if(!~end)return{msg:msg};msg=CryptoJS.enc.Base64.parse(msg.substring(ind,ind+end)),msg=CryptoJS.enc.Latin1.stringify(msg);var instance_tags;version===CONST.OTR_VERSION_3&&(instance_tags=msg.substring(0,8),msg=msg.substring(8));var cls;return~["","\n","",""].indexOf(type)?cls="ake":""===type&&(cls="data"),{version:version,type:type,msg:msg,cls:cls,instance_tags:instance_tags}}return" Error:"===msg.substring(ind,ind+7)?(otr.ERROR_START_AKE&&otr.sendQueryMsg(),{msg:msg.substring(ind+7),cls:"error"}):{msg:msg}},Parse.initFragment=function(otr){otr.fragment={s:"",j:0,k:0}},Parse.msgFragment=function(otr,msg,v3){if(msg=msg.split(","),v3){var its=msg.shift().split("|"),their_it=HLP.packINT(parseInt(its[0],16)),our_it=HLP.packINT(parseInt(its[1],16));if(otr.checkInstanceTags(their_it+our_it))return}if(!(msg.length<4||isNaN(parseInt(msg[0],10))||isNaN(parseInt(msg[1],10)))){var k=parseInt(msg[0],10),n=parseInt(msg[1],10);return msg=msg[2],k>n||0===n||0===k?void this.initFragment(otr):(1===k?(this.initFragment(otr),otr.fragment={k:1,n:n,s:msg}):n===otr.fragment.n&&k===otr.fragment.k+1?(otr.fragment.s+=msg,otr.fragment.k+=1):this.initFragment(otr),n===k?(msg=otr.fragment.s,this.initFragment(otr),this.parseMsg(otr,msg)):void 0)}}}.call(this),function(){"use strict";function hMac(gx,gy,pk,kid,m){var pass=CryptoJS.enc.Latin1.parse(m),hmac=CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256,pass);return hmac.update(CryptoJS.enc.Latin1.parse(HLP.packMPI(gx))),hmac.update(CryptoJS.enc.Latin1.parse(HLP.packMPI(gy))),hmac.update(CryptoJS.enc.Latin1.parse(pk)),hmac.update(CryptoJS.enc.Latin1.parse(kid)),hmac.finalize().toString(CryptoJS.enc.Latin1)}function AKE(otr){if(!(this instanceof AKE))return new AKE(otr);this.otr=otr,this.our_dh=otr.our_old_dh,this.our_keyid=otr.our_keyid-1,this.their_y=null,this.their_keyid=null,this.their_priv_pk=null,this.ssid=null,this.transmittedRS=!1,this.r=null;var self=this;["sendMsg"].forEach(function(meth){self[meth]=self[meth].bind(self)})}var CryptoJS,BigInt,CONST,HLP,DSA,root=this;"undefined"!=typeof module&&module.exports?(module.exports=AKE,CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js"),CONST=require("./const.js"),HLP=require("./helpers.js"),DSA=require("./dsa.js")):(root.OTR.AKE=AKE,CryptoJS=root.CryptoJS,BigInt=root.BigInt,CONST=root.OTR.CONST,HLP=root.OTR.HLP,DSA=root.DSA);var N=BigInt.str2bigInt(CONST.N,16),N_MINUS_2=BigInt.sub(N,BigInt.str2bigInt("2",10));AKE.prototype={constructor:AKE,createKeys:function(g){var s=BigInt.powMod(g,this.our_dh.privateKey,N),secbytes=HLP.packMPI(s);this.ssid=HLP.mask(HLP.h2("\x00",secbytes),0,64);var tmp=HLP.h2("",secbytes);this.c=HLP.mask(tmp,0,128),this.c_prime=HLP.mask(tmp,128,128),this.m1=HLP.h2("",secbytes),this.m2=HLP.h2("",secbytes),this.m1_prime=HLP.h2("",secbytes),this.m2_prime=HLP.h2("",secbytes)},verifySignMac:function(mac,aesctr,m2,c,their_y,our_dh_pk,m1,ctr){var vmac=HLP.makeMac(aesctr,m2);if(!HLP.compare(mac,vmac))return["MACs do not match."];var x=HLP.decryptAes(aesctr.substring(4),c,ctr);x=HLP.splitype(["PUBKEY","INT","SIG"],x.toString(CryptoJS.enc.Latin1));var m=hMac(their_y,our_dh_pk,x[0],x[1],m1),pub=DSA.parsePublic(x[0]),r=HLP.bits2bigInt(x[2].substring(0,20)),s=HLP.bits2bigInt(x[2].substring(20));return DSA.verify(pub,m,r,s)?[null,HLP.readLen(x[1]),pub]:["Cannot verify signature of m."]},makeM:function(their_y,m1,c,m2){var pk=this.otr.priv.packPublic(),kid=HLP.packINT(this.our_keyid),m=hMac(this.our_dh.publicKey,their_y,pk,kid,m1);m=this.otr.priv.sign(m);var msg=pk+kid;msg+=BigInt.bigInt2bits(m[0],20),msg+=BigInt.bigInt2bits(m[1],20),msg=CryptoJS.enc.Latin1.parse(msg);var aesctr=HLP.packData(HLP.encryptAes(msg,c,HLP.packCtr(0))),mac=HLP.makeMac(aesctr,m2);return aesctr+mac},akeSuccess:function(version){return HLP.debug.call(this.otr,"success"),BigInt.equals(this.their_y,this.our_dh.publicKey)?this.otr.error("equal keys - we have a problem."):(this.otr.our_old_dh=this.our_dh,this.otr.their_priv_pk=this.their_priv_pk,this.their_keyid===this.otr.their_keyid&&BigInt.equals(this.their_y,this.otr.their_y)||this.their_keyid===this.otr.their_keyid-1&&BigInt.equals(this.their_y,this.otr.their_old_y)||(this.otr.their_y=this.their_y,this.otr.their_old_y=null,this.otr.their_keyid=this.their_keyid,this.otr.sessKeys[0]=[new this.otr.DHSession(this.otr.our_dh,this.otr.their_y),null],this.otr.sessKeys[1]=[new this.otr.DHSession(this.otr.our_old_dh,this.otr.their_y),null]),this.otr.ssid=this.ssid,this.otr.transmittedRS=this.transmittedRS,this.otr_version=version,this.otr.authstate=CONST.AUTHSTATE_NONE,this.otr.msgstate=CONST.MSGSTATE_ENCRYPTED,this.r=null,this.myhashed=null,this.dhcommit=null,this.encrypted=null,this.hashed=null,this.otr.trigger("status",[CONST.STATUS_AKE_SUCCESS]),void this.otr.sendStored())},handleAKE:function(msg){var send,vsm,type,version=msg.version;switch(msg.type){case"":if(HLP.debug.call(this.otr,"d-h key message"),msg=HLP.splitype(["DATA","DATA"],msg.msg),this.otr.authstate===CONST.AUTHSTATE_AWAITING_DHKEY){var ourHash=HLP.readMPI(this.myhashed),theirHash=HLP.readMPI(msg[1]);if(BigInt.greater(ourHash,theirHash)){type="",send=this.dhcommit;break}this.our_dh=this.otr.dh(),this.otr.authstate=CONST.AUTHSTATE_NONE,this.r=null,this.myhashed=null}else this.otr.authstate===CONST.AUTHSTATE_AWAITING_SIG&&(this.our_dh=this.otr.dh());this.otr.authstate=CONST.AUTHSTATE_AWAITING_REVEALSIG,this.encrypted=msg[0].substring(4),this.hashed=msg[1].substring(4),type="\n",send=HLP.packMPI(this.our_dh.publicKey);break;case"\n":if(HLP.debug.call(this.otr,"reveal signature message"),msg=HLP.splitype(["MPI"],msg.msg),this.otr.authstate!==CONST.AUTHSTATE_AWAITING_DHKEY){if(this.otr.authstate!==CONST.AUTHSTATE_AWAITING_SIG)return;if(!BigInt.equals(this.their_y,HLP.readMPI(msg[0])))return}if(this.otr.authstate=CONST.AUTHSTATE_AWAITING_SIG,this.their_y=HLP.readMPI(msg[0]),!HLP.checkGroup(this.their_y,N_MINUS_2))return this.otr.error("Illegal g^y.");this.createKeys(this.their_y),type="",send=HLP.packMPI(this.r),send+=this.makeM(this.their_y,this.m1,this.c,this.m2),this.m1=null,this.m2=null,this.c=null;break;case"":if(HLP.debug.call(this.otr,"signature message"),this.otr.authstate!==CONST.AUTHSTATE_AWAITING_REVEALSIG)return;msg=HLP.splitype(["DATA","DATA","MAC"],msg.msg),this.r=HLP.readMPI(msg[0]);var key=CryptoJS.enc.Hex.parse(BigInt.bigInt2str(this.r,16));key=CryptoJS.enc.Latin1.stringify(key);var gxmpi=HLP.decryptAes(this.encrypted,key,HLP.packCtr(0));gxmpi=gxmpi.toString(CryptoJS.enc.Latin1),this.their_y=HLP.readMPI(gxmpi);var hash=CryptoJS.SHA256(CryptoJS.enc.Latin1.parse(gxmpi));return HLP.compare(this.hashed,hash.toString(CryptoJS.enc.Latin1))?HLP.checkGroup(this.their_y,N_MINUS_2)?(this.createKeys(this.their_y),vsm=this.verifySignMac(msg[2],msg[1],this.m2,this.c,this.their_y,this.our_dh.publicKey,this.m1,HLP.packCtr(0)),vsm[0]?this.otr.error(vsm[0]):(this.their_keyid=vsm[1],this.their_priv_pk=vsm[2],send=this.makeM(this.their_y,this.m1_prime,this.c_prime,this.m2_prime),this.m1=null,this.m2=null,this.m1_prime=null,this.m2_prime=null,this.c=null,this.c_prime=null,this.sendMsg(version,"",send),void this.akeSuccess(version))):this.otr.error("Illegal g^x."):this.otr.error("Hashed g^x does not match.");case"":if(HLP.debug.call(this.otr,"data message"),this.otr.authstate!==CONST.AUTHSTATE_AWAITING_SIG)return;return msg=HLP.splitype(["DATA","MAC"],msg.msg),vsm=this.verifySignMac(msg[1],msg[0],this.m2_prime,this.c_prime,this.their_y,this.our_dh.publicKey,this.m1_prime,HLP.packCtr(0)),vsm[0]?this.otr.error(vsm[0]):(this.their_keyid=vsm[1],this.their_priv_pk=vsm[2],this.m1_prime=null,this.m2_prime=null,this.c_prime=null,this.transmittedRS=!0,void this.akeSuccess(version));default:return}this.sendMsg(version,type,send)},sendMsg:function(version,type,msg){var send=version+type,v3=version===CONST.OTR_VERSION_3;return v3&&(HLP.debug.call(this.otr,"instance tags"),send+=this.otr.our_instance_tag,send+=this.otr.their_instance_tag),send+=msg,send=HLP.wrapMsg(send,this.otr.fragment_size,v3,this.otr.our_instance_tag,this.otr.their_instance_tag),send[0]?this.otr.error(send[0]):void this.otr.io(send[1])},initiateAKE:function(version){HLP.debug.call(this.otr,"d-h commit message"),this.otr.trigger("status",[CONST.STATUS_AKE_INIT]),this.otr.authstate=CONST.AUTHSTATE_AWAITING_DHKEY;var gxmpi=HLP.packMPI(this.our_dh.publicKey);gxmpi=CryptoJS.enc.Latin1.parse(gxmpi),this.r=BigInt.randBigInt(128);var key=CryptoJS.enc.Hex.parse(BigInt.bigInt2str(this.r,16));key=CryptoJS.enc.Latin1.stringify(key),this.myhashed=CryptoJS.SHA256(gxmpi),this.myhashed=HLP.packData(this.myhashed.toString(CryptoJS.enc.Latin1)),this.dhcommit=HLP.packData(HLP.encryptAes(gxmpi,key,HLP.packCtr(0))),this.dhcommit+=this.myhashed,this.sendMsg(version,"",this.dhcommit)}}}.call(this),function(){"use strict";function SM(reqs){return this instanceof SM?(this.version=1,this.our_fp=reqs.our_fp,this.their_fp=reqs.their_fp,this.ssid=reqs.ssid,this.debug=!!reqs.debug,void this.init()):new SM(reqs)}var CryptoJS,BigInt,EventEmitter,CONST,HLP,root=this;"undefined"!=typeof module&&module.exports?(module.exports=SM,CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js"),EventEmitter=require("../vendor/eventemitter.js"),CONST=require("./const.js"),HLP=require("./helpers.js")):(root.OTR.SM=SM,CryptoJS=root.CryptoJS,BigInt=root.BigInt,EventEmitter=root.EventEmitter,CONST=root.OTR.CONST,HLP=root.OTR.HLP);var G=BigInt.str2bigInt(CONST.G,10),N=BigInt.str2bigInt(CONST.N,16),N_MINUS_2=BigInt.sub(N,BigInt.str2bigInt("2",10)),Q=BigInt.sub(N,BigInt.str2bigInt("1",10));BigInt.divInt_(Q,2),HLP.extend(SM,EventEmitter),SM.prototype.init=function(){this.smpstate=CONST.SMPSTATE_EXPECT1,this.secret=null},SM.prototype.makeSecret=function(our,secret){var sha256=CryptoJS.algo.SHA256.create();sha256.update(CryptoJS.enc.Latin1.parse(HLP.packBytes(this.version,1))),sha256.update(CryptoJS.enc.Hex.parse(our?this.our_fp:this.their_fp)),sha256.update(CryptoJS.enc.Hex.parse(our?this.their_fp:this.our_fp)),sha256.update(CryptoJS.enc.Latin1.parse(this.ssid)),sha256.update(CryptoJS.enc.Latin1.parse(secret));var hash=sha256.finalize();this.secret=HLP.bits2bigInt(hash.toString(CryptoJS.enc.Latin1))},SM.prototype.makeG2s=function(){this.a2=HLP.randomExponent(),this.a3=HLP.randomExponent(),this.g2a=BigInt.powMod(G,this.a2,N),this.g3a=BigInt.powMod(G,this.a3,N),HLP.checkGroup(this.g2a,N_MINUS_2)&&HLP.checkGroup(this.g3a,N_MINUS_2)||this.makeG2s()},SM.prototype.computeGs=function(g2a,g3a){this.g2=BigInt.powMod(g2a,this.a2,N),this.g3=BigInt.powMod(g3a,this.a3,N)},SM.prototype.computePQ=function(r){this.p=BigInt.powMod(this.g3,r,N),this.q=HLP.multPowMod(G,r,this.g2,this.secret,N)},SM.prototype.computeR=function(){this.r=BigInt.powMod(this.QoQ,this.a3,N)},SM.prototype.computeRab=function(r){return BigInt.powMod(r,this.a3,N)},SM.prototype.computeC=function(v,r){return HLP.smpHash(v,BigInt.powMod(G,r,N))},SM.prototype.computeD=function(r,a,c){return BigInt.subMod(r,BigInt.multMod(a,c,Q),Q)},SM.prototype.handleSM=function(msg){var send,r2,r3,r7,t1,t2,t3,t4,rab,tmp2,cR,d7,ms,trust,expectStates={2:CONST.SMPSTATE_EXPECT1,3:CONST.SMPSTATE_EXPECT2,4:CONST.SMPSTATE_EXPECT3,5:CONST.SMPSTATE_EXPECT4,7:CONST.SMPSTATE_EXPECT1};if(6===msg.type)return this.init(),void this.trigger("abort");if(this.smpstate!==expectStates[msg.type])return this.abort();switch(this.smpstate){case CONST.SMPSTATE_EXPECT1:HLP.debug.call(this,"smp tlv 2");var ind,question;return 7===msg.type&&(ind=msg.msg.indexOf("\x00"),question=msg.msg.substring(0,ind),msg.msg=msg.msg.substring(ind+1)),ms=HLP.readLen(msg.msg.substr(0,4)),6!==ms?this.abort():(msg=HLP.unpackMPIs(6,msg.msg.substring(4)),HLP.checkGroup(msg[0],N_MINUS_2)&&HLP.checkGroup(msg[3],N_MINUS_2)&&HLP.ZKP(1,msg[1],HLP.multPowMod(G,msg[2],msg[0],msg[1],N))&&HLP.ZKP(2,msg[4],HLP.multPowMod(G,msg[5],msg[3],msg[4],N))?(this.g3ao=msg[3],this.makeG2s(),r2=HLP.randomExponent(),r3=HLP.randomExponent(),this.c2=this.computeC(3,r2),this.c3=this.computeC(4,r3),this.d2=this.computeD(r2,this.a2,this.c2),this.d3=this.computeD(r3,this.a3,this.c3),this.computeGs(msg[0],msg[3]),this.smpstate=CONST.SMPSTATE_EXPECT0,question&&(question=CryptoJS.enc.Latin1.parse(question).toString(CryptoJS.enc.Utf8)),
-void this.trigger("question",[question])):this.abort());case CONST.SMPSTATE_EXPECT2:if(HLP.debug.call(this,"smp tlv 3"),ms=HLP.readLen(msg.msg.substr(0,4)),11!==ms)return this.abort();if(msg=HLP.unpackMPIs(11,msg.msg.substring(4)),!(HLP.checkGroup(msg[0],N_MINUS_2)&&HLP.checkGroup(msg[3],N_MINUS_2)&&HLP.checkGroup(msg[6],N_MINUS_2)&&HLP.checkGroup(msg[7],N_MINUS_2)))return this.abort();if(!HLP.ZKP(3,msg[1],HLP.multPowMod(G,msg[2],msg[0],msg[1],N)))return this.abort();if(!HLP.ZKP(4,msg[4],HLP.multPowMod(G,msg[5],msg[3],msg[4],N)))return this.abort();if(this.g3ao=msg[3],this.computeGs(msg[0],msg[3]),t1=HLP.multPowMod(this.g3,msg[9],msg[6],msg[8],N),t2=HLP.multPowMod(G,msg[9],this.g2,msg[10],N),t2=BigInt.multMod(t2,BigInt.powMod(msg[7],msg[8],N),N),!HLP.ZKP(5,msg[8],t1,t2))return this.abort();var r4=HLP.randomExponent();this.computePQ(r4);var r5=HLP.randomExponent(),r6=HLP.randomExponent(),tmp=HLP.multPowMod(G,r5,this.g2,r6,N),cP=HLP.smpHash(6,BigInt.powMod(this.g3,r5,N),tmp),d5=this.computeD(r5,r4,cP),d6=this.computeD(r6,this.secret,cP);this.QoQ=BigInt.divMod(this.q,msg[7],N),this.PoP=BigInt.divMod(this.p,msg[6],N),this.computeR(),r7=HLP.randomExponent(),tmp2=BigInt.powMod(this.QoQ,r7,N),cR=HLP.smpHash(7,BigInt.powMod(G,r7,N),tmp2),d7=this.computeD(r7,this.a3,cR),this.smpstate=CONST.SMPSTATE_EXPECT4,send=HLP.packINT(8)+HLP.packMPIs([this.p,this.q,cP,d5,d6,this.r,cR,d7]),send=HLP.packTLV(4,send);break;case CONST.SMPSTATE_EXPECT3:if(HLP.debug.call(this,"smp tlv 4"),ms=HLP.readLen(msg.msg.substr(0,4)),8!==ms)return this.abort();if(msg=HLP.unpackMPIs(8,msg.msg.substring(4)),!HLP.checkGroup(msg[0],N_MINUS_2)||!HLP.checkGroup(msg[1],N_MINUS_2)||!HLP.checkGroup(msg[5],N_MINUS_2))return this.abort();if(t1=HLP.multPowMod(this.g3,msg[3],msg[0],msg[2],N),t2=HLP.multPowMod(G,msg[3],this.g2,msg[4],N),t2=BigInt.multMod(t2,BigInt.powMod(msg[1],msg[2],N),N),!HLP.ZKP(6,msg[2],t1,t2))return this.abort();if(t3=HLP.multPowMod(G,msg[7],this.g3ao,msg[6],N),this.QoQ=BigInt.divMod(msg[1],this.q,N),t4=HLP.multPowMod(this.QoQ,msg[7],msg[5],msg[6],N),!HLP.ZKP(7,msg[6],t3,t4))return this.abort();this.computeR(),r7=HLP.randomExponent(),tmp2=BigInt.powMod(this.QoQ,r7,N),cR=HLP.smpHash(8,BigInt.powMod(G,r7,N),tmp2),d7=this.computeD(r7,this.a3,cR),send=HLP.packINT(3)+HLP.packMPIs([this.r,cR,d7]),send=HLP.packTLV(5,send),rab=this.computeRab(msg[5]),trust=!!BigInt.equals(rab,BigInt.divMod(msg[0],this.p,N)),this.trigger("trust",[trust,"answered"]),this.init();break;case CONST.SMPSTATE_EXPECT4:return HLP.debug.call(this,"smp tlv 5"),ms=HLP.readLen(msg.msg.substr(0,4)),3!==ms?this.abort():(msg=HLP.unpackMPIs(3,msg.msg.substring(4)),HLP.checkGroup(msg[0],N_MINUS_2)?(t3=HLP.multPowMod(G,msg[2],this.g3ao,msg[1],N),t4=HLP.multPowMod(this.QoQ,msg[2],msg[0],msg[1],N),HLP.ZKP(8,msg[1],t3,t4)?(rab=this.computeRab(msg[0]),trust=!!BigInt.equals(rab,this.PoP),this.trigger("trust",[trust,"asked"]),void this.init()):this.abort()):this.abort())}this.sendMsg(send)},SM.prototype.sendMsg=function(send){this.trigger("send",[this.ssid,"\x00"+send])},SM.prototype.rcvSecret=function(secret,question){HLP.debug.call(this,"receive secret");var fn,our=!1;this.smpstate===CONST.SMPSTATE_EXPECT0?fn=this.answer:(fn=this.initiate,our=!0),this.makeSecret(our,secret),fn.call(this,question)},SM.prototype.answer=function(){HLP.debug.call(this,"smp answer");var r4=HLP.randomExponent();this.computePQ(r4);var r5=HLP.randomExponent(),r6=HLP.randomExponent(),tmp=HLP.multPowMod(G,r5,this.g2,r6,N),cP=HLP.smpHash(5,BigInt.powMod(this.g3,r5,N),tmp),d5=this.computeD(r5,r4,cP),d6=this.computeD(r6,this.secret,cP);this.smpstate=CONST.SMPSTATE_EXPECT3;var send=HLP.packINT(11)+HLP.packMPIs([this.g2a,this.c2,this.d2,this.g3a,this.c3,this.d3,this.p,this.q,cP,d5,d6]);this.sendMsg(HLP.packTLV(3,send))},SM.prototype.initiate=function(question){HLP.debug.call(this,"smp initiate"),this.smpstate!==CONST.SMPSTATE_EXPECT1&&this.abort(),this.makeG2s();var r2=HLP.randomExponent(),r3=HLP.randomExponent();this.c2=this.computeC(1,r2),this.c3=this.computeC(2,r3),this.d2=this.computeD(r2,this.a2,this.c2),this.d3=this.computeD(r3,this.a3,this.c3),this.smpstate=CONST.SMPSTATE_EXPECT2;var send="",type=2;question&&(send+=question,send+="\x00",type=7),send+=HLP.packINT(6)+HLP.packMPIs([this.g2a,this.c2,this.d2,this.g3a,this.c3,this.d3]),this.sendMsg(HLP.packTLV(type,send))},SM.prototype.abort=function(){this.init(),this.sendMsg(HLP.packTLV(6,"")),this.trigger("abort")}}.call(this),function(){"use strict";function OTRCB(cb){this.cb=cb}function OTR(options){if(!(this instanceof OTR))return new OTR(options);if(options=options||{},options.priv&&!(options.priv instanceof DSA))throw new Error("Requires long-lived DSA key.");if(this.priv=options.priv?options.priv:new DSA,this.fragment_size=options.fragment_size||0,this.fragment_size<0)throw new Error("Fragment size must be a positive integer.");if(this.send_interval=options.send_interval||0,this.send_interval<0)throw new Error("Send interval must be a positive integer.");this.outgoing=[],this.our_instance_tag=options.instance_tag||OTR.makeInstanceTag(),this.debug=!!options.debug,this.smw=options.smw,this.init();var self=this;["sendMsg","receiveMsg"].forEach(function(meth){self[meth]=self[meth].bind(self)}),EventEmitter.call(this)}var CryptoJS,BigInt,EventEmitter,Worker,SMWPath,CONST,HLP,Parse,AKE,SM,DSA,root=this;"undefined"!=typeof module&&module.exports?(module.exports=OTR,CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js"),EventEmitter=require("../vendor/eventemitter.js"),SMWPath=require("path").join(__dirname,"/sm-webworker.js"),CONST=require("./const.js"),HLP=require("./helpers.js"),Parse=require("./parse.js"),AKE=require("./ake.js"),SM=require("./sm.js"),DSA=require("./dsa.js"),OTR.CONST=CONST):(Object.keys(root.OTR).forEach(function(k){OTR[k]=root.OTR[k]}),root.OTR=OTR,CryptoJS=root.CryptoJS,BigInt=root.BigInt,EventEmitter=root.EventEmitter,Worker=root.Worker,SMWPath="sm-webworker.js",CONST=OTR.CONST,HLP=OTR.HLP,Parse=OTR.Parse,AKE=OTR.AKE,SM=OTR.SM,DSA=root.DSA);var G=BigInt.str2bigInt(CONST.G,10),N=BigInt.str2bigInt(CONST.N,16),MAX_INT=Math.pow(2,53)-1,MAX_UINT=Math.pow(2,31)-1;HLP.extend(OTR,EventEmitter),OTR.prototype.init=function(){this.msgstate=CONST.MSGSTATE_PLAINTEXT,this.authstate=CONST.AUTHSTATE_NONE,this.ALLOW_V2=!0,this.ALLOW_V3=!0,this.REQUIRE_ENCRYPTION=!1,this.SEND_WHITESPACE_TAG=!1,this.WHITESPACE_START_AKE=!1,this.ERROR_START_AKE=!1,Parse.initFragment(this),this.their_y=null,this.their_old_y=null,this.their_keyid=0,this.their_priv_pk=null,this.their_instance_tag="\x00\x00\x00\x00",this.our_dh=this.dh(),this.our_old_dh=this.dh(),this.our_keyid=2,this.sessKeys=[new Array(2),new Array(2)],this.storedMgs=[],this.oldMacKeys=[],this.sm=null,this._akeInit(),this.receivedPlaintext=!1},OTR.prototype._akeInit=function(){this.ake=new AKE(this),this.transmittedRS=!1,this.ssid=null},OTR.prototype._SMW=function(otr,reqs){this.otr=otr;var opts={path:SMWPath,seed:BigInt.getSeed};"object"==typeof otr.smw&&Object.keys(otr.smw).forEach(function(k){opts[k]=otr.smw[k]}),"undefined"!=typeof module&&module.exports&&(Worker=require("webworker-threads").Worker),this.worker=new Worker(opts.path);var self=this;this.worker.onmessage=function(e){var d=e.data;d&&self.trigger(d.method,d.args)},this.worker.postMessage({type:"seed",seed:opts.seed(),imports:opts.imports}),this.worker.postMessage({type:"init",reqs:reqs})},HLP.extend(OTR.prototype._SMW,EventEmitter),["handleSM","rcvSecret","abort"].forEach(function(m){OTR.prototype._SMW.prototype[m]=function(){this.worker.postMessage({type:"method",method:m,args:Array.prototype.slice.call(arguments,0)})}}),OTR.prototype._smInit=function(){var reqs={ssid:this.ssid,our_fp:this.priv.fingerprint(),their_fp:this.their_priv_pk.fingerprint(),debug:this.debug};this.smw?(this.sm&&this.sm.worker.terminate(),this.sm=new this._SMW(this,reqs)):this.sm=new SM(reqs);var self=this;["trust","abort","question"].forEach(function(e){self.sm.on(e,function(){self.trigger("smp",[e].concat(Array.prototype.slice.call(arguments)))})}),this.sm.on("send",function(ssid,send){self.ssid===ssid&&(send=self.prepareMsg(send),self.io(send))})},OTR.prototype.io=function(msg,meta){msg=[].concat(msg).map(function(m){return{msg:m,meta:meta}}),this.outgoing=this.outgoing.concat(msg);var self=this;!function send(first){if(!first){if(!self.outgoing.length)return;var elem=self.outgoing.shift(),cb=null;elem.meta instanceof OTRCB&&(cb=elem.meta.cb,elem.meta=null),self.trigger("io",[elem.msg,elem.meta]),cb&&cb()}setTimeout(send,first?0:self.send_interval)}(!0)},OTR.prototype.dh=function(){var keys={privateKey:BigInt.randBigInt(320)};return keys.publicKey=BigInt.powMod(G,keys.privateKey,N),keys},OTR.prototype.DHSession=function DHSession(our_dh,their_y){if(!(this instanceof DHSession))return new DHSession(our_dh,their_y);var s=BigInt.powMod(their_y,our_dh.privateKey,N),secbytes=HLP.packMPI(s);this.id=HLP.mask(HLP.h2("\x00",secbytes),0,64);var sq=BigInt.greater(our_dh.publicKey,their_y),sendbyte=sq?"":"",rcvbyte=sq?"":"";this.sendenc=HLP.mask(HLP.h1(sendbyte,secbytes),0,128),this.sendmac=CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(this.sendenc)),this.sendmac=this.sendmac.toString(CryptoJS.enc.Latin1),this.rcvenc=HLP.mask(HLP.h1(rcvbyte,secbytes),0,128),this.rcvmac=CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(this.rcvenc)),this.rcvmac=this.rcvmac.toString(CryptoJS.enc.Latin1),this.rcvmacused=!1,this.extra_symkey=HLP.h2("ÿ",secbytes),this.send_counter=0,this.rcv_counter=0},OTR.prototype.rotateOurKeys=function(){var self=this;this.sessKeys[1].forEach(function(sk){sk&&sk.rcvmacused&&self.oldMacKeys.push(sk.rcvmac)}),this.our_old_dh=this.our_dh,this.our_dh=this.dh(),this.our_keyid+=1,this.sessKeys[1][0]=this.sessKeys[0][0],this.sessKeys[1][1]=this.sessKeys[0][1],this.sessKeys[0]=[this.their_y?new this.DHSession(this.our_dh,this.their_y):null,this.their_old_y?new this.DHSession(this.our_dh,this.their_old_y):null]},OTR.prototype.rotateTheirKeys=function(their_y){this.their_keyid+=1;var self=this;this.sessKeys.forEach(function(sk){sk[1]&&sk[1].rcvmacused&&self.oldMacKeys.push(sk[1].rcvmac)}),this.their_old_y=this.their_y,this.sessKeys[0][1]=this.sessKeys[0][0],this.sessKeys[1][1]=this.sessKeys[1][0],this.their_y=their_y,this.sessKeys[0][0]=new this.DHSession(this.our_dh,this.their_y),this.sessKeys[1][0]=new this.DHSession(this.our_old_dh,this.their_y)},OTR.prototype.prepareMsg=function(msg,esk){if(this.msgstate!==CONST.MSGSTATE_ENCRYPTED||0===this.their_keyid)return this.notify("Not ready to encrypt.");var sessKeys=this.sessKeys[1][0];if(sessKeys.send_counter>=MAX_INT)return this.notify("Should have rekeyed by now.");sessKeys.send_counter+=1;var ctr=HLP.packCtr(sessKeys.send_counter),send=this.ake.otr_version+"",v3=this.ake.otr_version===CONST.OTR_VERSION_3;if(v3&&(send+=this.our_instance_tag,send+=this.their_instance_tag),send+="\x00",send+=HLP.packINT(this.our_keyid-1),send+=HLP.packINT(this.their_keyid),send+=HLP.packMPI(this.our_dh.publicKey),send+=ctr.substring(0,8),Math.ceil(msg.length/8)>=MAX_UINT)return this.notify("Message is too long.");var aes=HLP.encryptAes(CryptoJS.enc.Latin1.parse(msg),sessKeys.sendenc,ctr);return send+=HLP.packData(aes),send+=HLP.make1Mac(send,sessKeys.sendmac),send+=HLP.packData(this.oldMacKeys.splice(0).join("")),send=HLP.wrapMsg(send,this.fragment_size,v3,this.our_instance_tag,this.their_instance_tag),send[0]?this.notify(send[0]):(esk&&this.trigger("file",["send",sessKeys.extra_symkey,esk]),send[1])},OTR.prototype.handleDataMsg=function(msg){var vt=msg.version+msg.type;this.ake.otr_version===CONST.OTR_VERSION_3&&(vt+=msg.instance_tags);var types=["BYTE","INT","INT","MPI","CTR","DATA","MAC","DATA"];msg=HLP.splitype(types,msg.msg);var ign=""===msg[0];if(this.msgstate!==CONST.MSGSTATE_ENCRYPTED||8!==msg.length)return void(ign||this.error("Received an unreadable encrypted message."));var our_keyid=this.our_keyid-HLP.readLen(msg[2]),their_keyid=this.their_keyid-HLP.readLen(msg[1]);if(0>our_keyid||our_keyid>1)return void(ign||this.error("Not of our latest keys."));if(0>their_keyid||their_keyid>1)return void(ign||this.error("Not of your latest keys."));var their_y=their_keyid?this.their_old_y:this.their_y;if(1===their_keyid&&!their_y)return void(ign||this.error("Do not have that key."));var sessKeys=this.sessKeys[our_keyid][their_keyid],ctr=HLP.unpackCtr(msg[4]);if(ctr<=sessKeys.rcv_counter)return void(ign||this.error("Counter in message is not larger."));sessKeys.rcv_counter=ctr,vt+=msg.slice(0,6).join("");var vmac=HLP.make1Mac(vt,sessKeys.rcvmac);if(!HLP.compare(msg[6],vmac))return void(ign||this.error("MACs do not match."));sessKeys.rcvmacused=!0;var out=HLP.decryptAes(msg[5].substring(4),sessKeys.rcvenc,HLP.padCtr(msg[4]));out=out.toString(CryptoJS.enc.Latin1),our_keyid||this.rotateOurKeys(),their_keyid||this.rotateTheirKeys(HLP.readMPI(msg[3]));var ind=out.indexOf("\x00");return~ind&&(this.handleTLVs(out.substring(ind+1),sessKeys),out=out.substring(0,ind)),out=CryptoJS.enc.Latin1.parse(out),out.toString(CryptoJS.enc.Utf8)},OTR.prototype.handleTLVs=function(tlvs,sessKeys){for(var type,len,msg;tlvs.length&&(type=HLP.unpackSHORT(tlvs.substr(0,2)),len=HLP.unpackSHORT(tlvs.substr(2,2)),msg=tlvs.substr(4,len),!(msg.length<len));){switch(type){case 1:this.msgstate=CONST.MSGSTATE_FINISHED,this.trigger("status",[CONST.STATUS_END_OTR]);break;case 2:case 3:case 4:case 5:case 6:case 7:if(this.msgstate!==CONST.MSGSTATE_ENCRYPTED)return void(this.sm&&this.sm.abort());this.sm||this._smInit(),this.sm.handleSM({msg:msg,type:type});break;case 8:msg=msg.substring(4),msg=CryptoJS.enc.Latin1.parse(msg),msg=msg.toString(CryptoJS.enc.Utf8),this.trigger("file",["receive",sessKeys.extra_symkey,msg])}tlvs=tlvs.substring(4+len)}},OTR.prototype.smpSecret=function(secret,question){return this.msgstate!==CONST.MSGSTATE_ENCRYPTED?this.notify("Must be encrypted for SMP."):"string"!=typeof secret||secret.length<1?this.notify("Secret is required."):(this.sm||this._smInit(),secret=CryptoJS.enc.Utf8.parse(secret).toString(CryptoJS.enc.Latin1),question&&(question=CryptoJS.enc.Utf8.parse(question).toString(CryptoJS.enc.Latin1)),void this.sm.rcvSecret(secret,question))},OTR.prototype.sendQueryMsg=function(){var versions={},msg=CONST.OTR_TAG;this.ALLOW_V2&&(versions[2]=!0),this.ALLOW_V3&&(versions[3]=!0);var vs=Object.keys(versions);vs.length&&(msg+="v",vs.forEach(function(v){"1"!==v&&(msg+=v)}),msg+="?"),this.io(msg),this.trigger("status",[CONST.STATUS_SEND_QUERY])},OTR.prototype.sendMsg=function(msg,meta){switch((this.REQUIRE_ENCRYPTION||this.msgstate!==CONST.MSGSTATE_PLAINTEXT)&&(msg=CryptoJS.enc.Utf8.parse(msg),msg=msg.toString(CryptoJS.enc.Latin1)),this.msgstate){case CONST.MSGSTATE_PLAINTEXT:if(this.REQUIRE_ENCRYPTION)return this.storedMgs.push({msg:msg,meta:meta}),void this.sendQueryMsg();this.SEND_WHITESPACE_TAG&&!this.receivedPlaintext&&(msg+=CONST.WHITESPACE_TAG,this.ALLOW_V3&&(msg+=CONST.WHITESPACE_TAG_V3),this.ALLOW_V2&&(msg+=CONST.WHITESPACE_TAG_V2));break;case CONST.MSGSTATE_FINISHED:return this.storedMgs.push({msg:msg,meta:meta}),void this.notify("Message cannot be sent at this time.","warn");case CONST.MSGSTATE_ENCRYPTED:msg=this.prepareMsg(msg);break;default:throw new Error("Unknown message state.")}msg&&this.io(msg,meta)},OTR.prototype.receiveMsg=function(msg,meta){if(msg=Parse.parseMsg(this,msg)){switch(msg.cls){case"error":return void this.notify(msg.msg);case"ake":return msg.version===CONST.OTR_VERSION_3&&this.checkInstanceTags(msg.instance_tags)?void this.notify("Received a message intended for a different session.","warn"):void this.ake.handleAKE(msg);case"data":if(msg.version===CONST.OTR_VERSION_3&&this.checkInstanceTags(msg.instance_tags))return void this.notify("Received a message intended for a different session.","warn");msg.msg=this.handleDataMsg(msg),msg.encrypted=!0;break;case"query":this.msgstate===CONST.MSGSTATE_ENCRYPTED&&this._akeInit(),this.doAKE(msg);break;default:(this.REQUIRE_ENCRYPTION||this.msgstate!==CONST.MSGSTATE_PLAINTEXT)&&this.notify("Received an unencrypted message.","warn"),this.receivedPlaintext=!0,this.WHITESPACE_START_AKE&&msg.ver.length>0&&this.doAKE(msg)}msg.msg&&this.trigger("ui",[msg.msg,!!msg.encrypted,meta])}},OTR.prototype.checkInstanceTags=function(it){var their_it=HLP.readLen(it.substr(0,4)),our_it=HLP.readLen(it.substr(4,4));if(our_it&&our_it!==HLP.readLen(this.our_instance_tag))return!0;if(HLP.readLen(this.their_instance_tag)){if(HLP.readLen(this.their_instance_tag)!==their_it)return!0}else{if(100>their_it)return!0;this.their_instance_tag=HLP.packINT(their_it)}},OTR.prototype.doAKE=function(msg){this.ALLOW_V3&&~msg.ver.indexOf(CONST.OTR_VERSION_3)?this.ake.initiateAKE(CONST.OTR_VERSION_3):this.ALLOW_V2&&~msg.ver.indexOf(CONST.OTR_VERSION_2)?this.ake.initiateAKE(CONST.OTR_VERSION_2):this.notify("OTR conversation requested, but no compatible protocol version found.","warn")},OTR.prototype.error=function(err){this.debug||(err="An OTR error has occurred."),this.io("?OTR Error:"+err),this.notify(err)},OTR.prototype.notify=function(err,severity){this.trigger("error",[err,severity||"error"])},OTR.prototype.sendStored=function(){var self=this;this.storedMgs.splice(0).forEach(function(elem){var msg=self.prepareMsg(elem.msg);self.io(msg,elem.meta)})},OTR.prototype.sendFile=function(filename){if(this.msgstate!==CONST.MSGSTATE_ENCRYPTED)return this.notify("Not ready to encrypt.");if(this.ake.otr_version!==CONST.OTR_VERSION_3)return this.notify("Protocol v3 required.");if(!filename)return this.notify("Please specify a filename.");var l1name=CryptoJS.enc.Utf8.parse(filename);if(l1name=l1name.toString(CryptoJS.enc.Latin1),l1name.length>=65532)return this.notify("Filename is too long.");var msg="\x00";msg+="\x00\b",msg+=HLP.packSHORT(4+l1name.length),msg+="\x00\x00\x00",msg+=l1name,msg=this.prepareMsg(msg,filename),this.io(msg)},OTR.prototype.endOtr=function(cb){this.msgstate===CONST.MSGSTATE_ENCRYPTED&&("function"==typeof cb&&(cb=new OTRCB(cb)),this.sendMsg("\x00\x00\x00\x00",cb),this.sm&&(this.smw&&this.sm.worker.terminate(),this.sm=null)),this.msgstate=CONST.MSGSTATE_PLAINTEXT,this.receivedPlaintext=!1,this.trigger("status",[CONST.STATUS_END_OTR])},OTR.makeInstanceTag=function(){var num=BigInt.randBigInt(32);return BigInt.greater(BigInt.str2bigInt("100",16),num)?OTR.makeInstanceTag():HLP.packINT(parseInt(BigInt.bigInt2str(num,10),10))}}.call(this),{OTR:this.OTR,DSA:this.DSA}}),!function(){function a(a,b){if(!b||"function"==typeof b)return a;for(var c in b)a[c]=b[c];return a}function b(a,c){for(var d in c)d in a?b(a[d],c[d]):a[d]=c[d];return a}function c(a,b,c){var d,e=0,f=a.length,g=void 0===f||"[object Array]"!==Object.prototype.toString.apply(a)||"function"==typeof a;if(c)if(g){for(d in a)if(b.apply(a[d],c)===!1)break}else for(;f>e&&b.apply(a[e++],c)!==!1;);else if(g){for(d in a)if(b.call(a[d],d,a[d])===!1)break}else for(;f>e&&b.call(a[e],e,a[e++])!==!1;);return a}function d(a){return"string"==typeof a?a.replace(/[&<>"'\/]/g,function(a){return Q[a]}):a}function e(a){var b=function(a){if(window.XMLHttpRequest)return a(null,new XMLHttpRequest);if(window.ActiveXObject)try{return a(null,new ActiveXObject("Msxml2.XMLHTTP"))}catch(b){return a(null,new ActiveXObject("Microsoft.XMLHTTP"))}return a(new Error)},c=function(a){if("string"==typeof a)return a;var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")},d=function(a){a=a.replace(/\r\n/g,"\n");for(var b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);128>d?b+=String.fromCharCode(d):d>127&&2048>d?(b+=String.fromCharCode(192|d>>6),b+=String.fromCharCode(128|63&d)):(b+=String.fromCharCode(224|d>>12),b+=String.fromCharCode(128|63&d>>6),b+=String.fromCharCode(128|63&d))}return b},e=function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";a=d(a);var c,e,f,g,h,i,j,k="",l=0;do c=a.charCodeAt(l++),e=a.charCodeAt(l++),f=a.charCodeAt(l++),g=c>>2,h=(3&c)<<4|e>>4,i=(15&e)<<2|f>>6,j=63&f,isNaN(e)?i=j=64:isNaN(f)&&(j=64),k+=b.charAt(g)+b.charAt(h)+b.charAt(i)+b.charAt(j),c=e=f="",g=h=i=j="";while(l<a.length);return k},f=function(){for(var a=arguments[0],b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}return a},g=function(a,d,e,h){"function"==typeof e&&(h=e,e={}),e.cache=e.cache||!1,e.data=e.data||{},e.headers=e.headers||{},e.jsonp=e.jsonp||!1,e.async=void 0===e.async?!0:e.async;var i,j=f({accept:"*/*","content-type":"application/x-www-form-urlencoded;charset=UTF-8"},g.headers,e.headers);if(i="application/json"===j["content-type"]?JSON.stringify(e.data):c(e.data),"GET"===a){var k=[];if(i&&(k.push(i),i=null),e.cache||k.push("_="+(new Date).getTime()),e.jsonp&&(k.push("callback="+e.jsonp),k.push("jsonp="+e.jsonp)),k=k.join("&"),k.length>1&&(d+=d.indexOf("?")>-1?"&"+k:"?"+k),e.jsonp){var l=document.getElementsByTagName("head")[0],m=document.createElement("script");return m.type="text/javascript",m.src=d,void l.appendChild(m)}}b(function(b,c){if(b)return h(b);c.open(a,d,e.async);for(var f in j)j.hasOwnProperty(f)&&c.setRequestHeader(f,j[f]);c.onreadystatechange=function(){if(4===c.readyState){var a=c.responseText||"";if(!h)return;h(c.status,{text:function(){return a},json:function(){try{return JSON.parse(a)}catch(b){return T.error("Can not parse JSON. URL: "+d),{}}}})}},c.send(i)})},h={authBasic:function(a,b){g.headers.Authorization="Basic "+e(a+":"+b)},connect:function(a,b,c){return g("CONNECT",a,b,c)},del:function(a,b,c){return g("DELETE",a,b,c)},get:function(a,b,c){return g("GET",a,b,c)},head:function(a,b,c){return g("HEAD",a,b,c)},headers:function(a){g.headers=a||{}},isAllowed:function(a,b,c){this.options(a,function(a,d){c(-1!==d.text().indexOf(b))})},options:function(a,b,c){return g("OPTIONS",a,b,c)},patch:function(a,b,c){return g("PATCH",a,b,c)},post:function(a,b,c){return g("POST",a,b,c)},put:function(a,b,c){return g("PUT",a,b,c)},trace:function(a,b,c){return g("TRACE",a,b,c)}},i=a.type?a.type.toLowerCase():"get";h[i](a.url,a,function(b,c){200===b||0===b&&c.text()?a.success(c.json(),b,null):a.error(c.text(),b,null)})}function f(a,b){"function"==typeof a&&(b=a,a={}),a=a||{},T.extend(P,a),delete P.fixLng,P.functions&&(delete P.functions,T.extend(T,a.functions)),"string"==typeof P.ns&&(P.ns={namespaces:[P.ns],defaultNs:P.ns}),"string"==typeof P.fallbackNS&&(P.fallbackNS=[P.fallbackNS]),("string"==typeof P.fallbackLng||"boolean"==typeof P.fallbackLng)&&(P.fallbackLng=[P.fallbackLng]),P.interpolationPrefixEscaped=T.regexEscape(P.interpolationPrefix),P.interpolationSuffixEscaped=T.regexEscape(P.interpolationSuffix),P.lng||(P.lng=T.detectLanguage()),L=T.toLanguages(P.lng),F=L[0],T.log("currentLng set to: "+F),P.useCookie&&T.cookie.read(P.cookieName)!==F&&T.cookie.create(P.cookieName,F,P.cookieExpirationTime,P.cookieDomain),P.detectLngFromLocalStorage&&"undefined"!=typeof document&&window.localStorage&&T.localStorage.setItem("i18next_lng",F);var c=z;a.fixLng&&(c=function(a,b){return b=b||{},b.lng=b.lng||c.lng,z(a,b)},c.lng=F),W.setCurrentLng(F),H&&P.setJqueryExt&&s();var d;if(H&&H.Deferred&&(d=H.Deferred()),!P.resStore){var e=T.toLanguages(P.lng);"string"==typeof P.preload&&(P.preload=[P.preload]);for(var f=0,g=P.preload.length;g>f;f++)for(var h=T.toLanguages(P.preload[f]),i=0,j=h.length;j>i;i++)e.indexOf(h[i])<0&&e.push(h[i]);return I.sync.load(e,P,function(a,e){J=e,M=!0,b&&b(c),d&&d.resolve(c)}),d?d.promise():void 0}return J=P.resStore,M=!0,b&&b(c),d&&d.resolve(c),d?d.promise():void 0}function g(a,b){"string"==typeof a&&(a=[a]);for(var c=0,d=a.length;d>c;c++)P.preload.indexOf(a[c])<0&&P.preload.push(a[c]);return f(b)}function h(a,b,c,d){"string"!=typeof b?(c=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b),J[a]=J[a]||{},J[a][b]=J[a][b]||{},d?T.deepExtend(J[a][b],c):T.extend(J[a][b],c)}function i(a,b){"string"!=typeof b&&(b=P.ns.defaultNs),J[a]=J[a]||{};var c=J[a][b]||{},d=!1;for(var e in c)c.hasOwnProperty(e)&&(d=!0);return d}function j(a,b){"string"!=typeof b&&(b=P.ns.defaultNs),J[a]=J[a]||{},J[a][b]={}}function k(a,b,c,d){"string"!=typeof b?(resource=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b),J[a]=J[a]||{},J[a][b]=J[a][b]||{};for(var e=c.split(P.keyseparator),f=0,g=J[a][b];e[f];)f==e.length-1?g[e[f]]=d:(null==g[e[f]]&&(g[e[f]]={}),g=g[e[f]]),f++}function l(a,b,c){"string"!=typeof b?(resource=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b);for(var d in c)"string"==typeof c[d]&&k(a,b,d,c[d])}function m(a){P.ns.defaultNs=a}function n(a,b){o([a],b)}function o(a,b){var c={dynamicLoad:P.dynamicLoad,resGetPath:P.resGetPath,getAsync:P.getAsync,customLoad:P.customLoad,ns:{namespaces:a,defaultNs:""}},d=T.toLanguages(P.lng);"string"==typeof P.preload&&(P.preload=[P.preload]);for(var e=0,f=P.preload.length;f>e;e++)for(var g=T.toLanguages(P.preload[e]),h=0,i=g.length;i>h;h++)d.indexOf(g[h])<0&&d.push(g[h]);for(var j=[],k=0,l=d.length;l>k;k++){var m=!1,n=J[d[k]];if(n)for(var o=0,p=a.length;p>o;o++)n[a[o]]||(m=!0);else m=!0;m&&j.push(d[k])}j.length?I.sync._fetch(j,c,function(c,d){var e=a.length*j.length;T.each(a,function(a,c){P.ns.namespaces.indexOf(c)<0&&P.ns.namespaces.push(c),T.each(j,function(a,f){J[f]=J[f]||{},J[f][c]=d[f][c],e--,0===e&&b&&(P.useLocalStorage&&I.sync._storeLocal(J),b())})})}):b&&b()}function p(a,b,c){return"function"==typeof b?(c=b,b={}):b||(b={}),b.lng=a,f(b,c)}function q(){return F}function r(a){J={},p(F,a)}function s(){function a(a,b,c){if(0!==b.length){var d="text";if(0===b.indexOf("[")){var e=b.split("]");b=e[1],d=e[0].substr(1,e[0].length-1)}b.indexOf(";")===b.length-1&&(b=b.substr(0,b.length-2));var f;if("html"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.html(H.t(b,f));else if("text"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.text()},c):c,a.text(H.t(b,f));else if("prepend"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.prepend(H.t(b,f));else if("append"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.append(H.t(b,f));else if(0===d.indexOf("data-")){var g=d.substr("data-".length);f=P.defaultValueFromContent?H.extend({defaultValue:a.data(g)},c):c;var h=H.t(b,f);a.data(g,h),a.attr(d,h)}else f=P.defaultValueFromContent?H.extend({defaultValue:a.attr(d)},c):c,a.attr(d,H.t(b,f))}}function b(b,c){var d=b.attr(P.selectorAttr);if(d||"undefined"==typeof d||d===!1||(d=b.text()||b.val()),d){var e=b,f=b.data("i18n-target");if(f&&(e=b.find(f)||b),c||P.useDataAttrOptions!==!0||(c=b.data("i18n-options")),c=c||{},d.indexOf(";")>=0){var g=d.split(";");H.each(g,function(b,d){""!==d&&a(e,d,c)})}else a(e,d,c);P.useDataAttrOptions===!0&&b.data("i18n-options",c)}}H.t=H.t||z,H.fn.i18n=function(a){return this.each(function(){b(H(this),a);var c=H(this).find("["+P.selectorAttr+"]");c.each(function(){b(H(this),a)})})}}function t(a,b,c,d){if(!a)return a;if(d=d||b,a.indexOf(d.interpolationPrefix||P.interpolationPrefix)<0)return a;var e=d.interpolationPrefix?T.regexEscape(d.interpolationPrefix):P.interpolationPrefixEscaped,f=d.interpolationSuffix?T.regexEscape(d.interpolationSuffix):P.interpolationSuffixEscaped,g="HTML"+f,h=b.replace&&"object"==typeof b.replace?b.replace:b;return T.each(h,function(b,h){var i=c?c+P.keyseparator+b:b;"object"==typeof h&&null!==h?a=t(a,h,i,d):d.escapeInterpolation||P.escapeInterpolation?(a=a.replace(new RegExp([e,i,g].join(""),"g"),T.regexReplacementEscape(h)),a=a.replace(new RegExp([e,i,f].join(""),"g"),T.regexReplacementEscape(T.escape(h)))):a=a.replace(new RegExp([e,i,f].join(""),"g"),T.regexReplacementEscape(h))}),a}function u(a,b){var c=",",d="{",e="}",f=T.extend({},b);for(delete f.postProcess;-1!=a.indexOf(P.reusePrefix)&&(K++,!(K>P.maxRecursion));){var g=a.lastIndexOf(P.reusePrefix),h=a.indexOf(P.reuseSuffix,g)+P.reuseSuffix.length,i=a.substring(g,h),j=i.replace(P.reusePrefix,"").replace(P.reuseSuffix,"");if(g>=h)return T.error("there is an missing closing in following translation value",a),"";if(-1!=j.indexOf(c)){var k=j.indexOf(c);if(-1!=j.indexOf(d,k)&&-1!=j.indexOf(e,k)){var l=j.indexOf(d,k),m=j.indexOf(e,l)+e.length;try{f=T.extend(f,JSON.parse(j.substring(l,m))),j=j.substring(0,k)}catch(n){}}}var o=C(j,f);a=a.replace(i,T.regexReplacementEscape(o))}return a}function v(a){return a.context&&("string"==typeof a.context||"number"==typeof a.context)}function w(a){return void 0!==a.count&&"string"!=typeof a.count}function x(a){return void 0!==a.indefinite_article&&"string"!=typeof a.indefinite_article&&a.indefinite_article}function y(a,b){b=b||{};var c=A(a,b),d=D(a,b);return void 0!==d||d===c}function z(a,b){return b=b||{},M?(K=0,C.apply(null,arguments)):(T.log("i18next not finished initialization. you might have called t function before loading resources finished."),b.defaultValue||"")}function A(a,b){return void 0!==b.defaultValue?b.defaultValue:a}function B(){for(var a=[],b=1;b<arguments.length;b++)a.push(arguments[b]);return{postProcess:"sprintf",sprintf:a}}function C(a,b){if(b&&"object"!=typeof b?"sprintf"===P.shortcutFunction?b=B.apply(null,arguments):"defaultValue"===P.shortcutFunction&&(b={defaultValue:b}):b=b||{},"object"==typeof P.defaultVariables&&(b=T.extend({},P.defaultVariables,b)),void 0===a||null===a||""===a)return"";"string"==typeof a&&(a=[a]);var c=a[0];if(a.length>1)for(var d=0;d<a.length&&(c=a[d],!y(c,b));d++);var e,f=A(c,b),g=D(c,b),h=b.lng?T.toLanguages(b.lng,b.fallbackLng):L,i=b.ns||P.ns.defaultNs;c.indexOf(P.nsseparator)>-1&&(e=c.split(P.nsseparator),i=e[0],c=e[1]),void 0===g&&P.sendMissing&&"function"==typeof P.missingKeyHandler&&(b.lng?P.missingKeyHandler(h[0],i,c,f,h):P.missingKeyHandler(P.lng,i,c,f,h));var j=b.postProcess||P.postProcess;void 0!==g&&j&&X[j]&&(g=X[j](g,c,b));var k=f;if(f.indexOf(P.nsseparator)>-1&&(e=f.split(P.nsseparator),k=e[1]),k===c&&P.parseMissingKey&&(f=P.parseMissingKey(f)),void 0===g&&(f=t(f,b),f=u(f,b),j&&X[j])){var l=A(c,b);g=X[j](l,c,b)}return void 0!==g?g:f}function D(a,b){b=b||{};var c,d,e=A(a,b),f=L;if(!J)return e;if("cimode"===f[0].toLowerCase())return e;if(b.lngs&&(f=b.lngs),b.lng&&(f=T.toLanguages(b.lng,b.fallbackLng),!J[f[0]])){var g=P.getAsync;P.getAsync=!1,I.sync.load(f,P,function(a,b){T.extend(J,b),P.getAsync=g})}var h=b.ns||P.ns.defaultNs;if(a.indexOf(P.nsseparator)>-1){var i=a.split(P.nsseparator);h=i[0],a=i[1]}if(v(b)){c=T.extend({},b),delete c.context,c.defaultValue=P.contextNotFound;var j=h+P.nsseparator+a+"_"+b.context;if(d=z(j,c),d!=P.contextNotFound)return t(d,{context:b.context})}if(w(b,f[0])){c=T.extend({lngs:[f[0]]},b),delete c.count,delete c.lng,c.defaultValue=P.pluralNotFound;var k;if(W.needsPlural(f[0],b.count)){k=h+P.nsseparator+a+P.pluralSuffix;var l=W.get(f[0],b.count);l>=0?k=k+"_"+l:1===l&&(k=h+P.nsseparator+a)}else k=h+P.nsseparator+a;if(d=z(k,c),d!=P.pluralNotFound)return t(d,{count:b.count,interpolationPrefix:b.interpolationPrefix,interpolationSuffix:b.interpolationSuffix});if(!(f.length>1))return d;var m=f.slice();if(m.shift(),b=T.extend(b,{lngs:m}),delete b.lng,d=z(h+P.nsseparator+a,b),d!=P.pluralNotFound)return d}if(x(b)){var n=T.extend({},b);delete n.indefinite_article,n.defaultValue=P.indefiniteNotFound;var o=h+P.nsseparator+a+(b.count&&!w(b,f[0])||!b.count?P.indefiniteSuffix:"");if(d=z(o,n),d!=P.indefiniteNotFound)return d}for(var p,q=a.split(P.keyseparator),r=0,s=f.length;s>r&&void 0===p;r++){for(var y=f[r],B=0,E=J[y]&&J[y][h];q[B];)E=E&&E[q[B]],B++;if(void 0!==E){var F=Object.prototype.toString.apply(E);if("string"==typeof E)E=t(E,b),E=u(E,b);else if("[object Array]"!==F||P.returnObjectTrees||b.returnObjectTrees){if(null===E&&P.fallbackOnNull===!0)E=void 0;else if(null!==E)if(P.returnObjectTrees||b.returnObjectTrees){if("[object Number]"!==F&&"[object Function]"!==F&&"[object RegExp]"!==F){var G="[object Array]"===F?[]:{};T.each(E,function(c){G[c]=C(h+P.nsseparator+a+P.keyseparator+c,b)}),E=G}}else P.objectTreeKeyHandler&&"function"==typeof P.objectTreeKeyHandler?E=P.objectTreeKeyHandler(a,E,y,h,b):(E="key '"+h+":"+a+" ("+y+")' returned an object instead of string.",
-T.log(E))}else E=E.join("\n"),E=t(E,b),E=u(E,b);"string"==typeof E&&""===E.trim()&&P.fallbackOnEmpty===!0&&(E=void 0),p=E}}if(void 0===p&&!b.isFallbackLookup&&(P.fallbackToDefaultNS===!0||P.fallbackNS&&P.fallbackNS.length>0)){if(b.isFallbackLookup=!0,P.fallbackNS.length){for(var H=0,K=P.fallbackNS.length;K>H;H++)if(p=D(P.fallbackNS[H]+P.nsseparator+a,b),p||""===p&&P.fallbackOnEmpty===!1){var M=p.indexOf(P.nsseparator)>-1?p.split(P.nsseparator)[1]:p,N=e.indexOf(P.nsseparator)>-1?e.split(P.nsseparator)[1]:e;if(M!==N)break}}else p=D(a,b);b.isFallbackLookup=!1}return p}function E(){var a,b=P.lngWhitelist||[],c=[];if("undefined"!=typeof window&&!function(){for(var a=window.location.search.substring(1),b=a.split("&"),d=0;d<b.length;d++){var e=b[d].indexOf("=");if(e>0){var f=b[d].substring(0,e);f==P.detectLngQS&&c.push(b[d].substring(e+1))}}}(),P.useCookie&&"undefined"!=typeof document){var d=T.cookie.read(P.cookieName);d&&c.push(d)}if(P.detectLngFromLocalStorage&&"undefined"!=typeof window&&window.localStorage&&c.push(window.localStorage.getItem("i18next_lng")),"undefined"!=typeof navigator){if(navigator.languages)for(var e=0;e<navigator.languages.length;e++)c.push(navigator.languages[e]);navigator.userLanguage&&c.push(navigator.userLanguage),navigator.language&&c.push(navigator.language)}return function(){for(var d=0;d<c.length;d++){var e=c[d];if(e.indexOf("-")>-1){var f=e.split("-");e=P.lowerCaseLng?f[0].toLowerCase()+"-"+f[1].toLowerCase():f[0].toLowerCase()+"-"+f[1].toUpperCase()}if(0===b.length||b.indexOf(e)>-1){a=e;break}}}(),a||(a=P.fallbackLng[0]),a}Array.prototype.indexOf||(Array.prototype.indexOf=function(a){"use strict";if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>0&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&1/0!=d&&d!=-1/0&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){"use strict";if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=c;arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d))));for(var e=d>=0?Math.min(d,c-1):c-Math.abs(d);e>=0;e--)if(e in b&&b[e]===a)return e;return-1}),"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});var F,G=this,H=G.jQuery||G.Zepto,I={},J={},K=0,L=[],M=!1,N={};if("undefined"!=typeof module&&module.exports){if(!H)try{H=require("jquery")}catch(O){}H&&(H.i18n=H.i18n||I),module.exports=I}else H&&(H.i18n=H.i18n||I),G.i18n=G.i18n||I;N={load:function(a,b,c){b.useLocalStorage?N._loadLocal(a,b,function(d,e){for(var f=[],g=0,h=a.length;h>g;g++)e[a[g]]||f.push(a[g]);f.length>0?N._fetch(f,b,function(a,b){T.extend(e,b),N._storeLocal(b),c(null,e)}):c(null,e)}):N._fetch(a,b,function(a,b){c(null,b)})},_loadLocal:function(a,b,c){var d={},e=(new Date).getTime();if(window.localStorage){var f=a.length;T.each(a,function(a,g){var h=window.localStorage.getItem("res_"+g);h&&(h=JSON.parse(h),h.i18nStamp&&h.i18nStamp+b.localStorageExpirationTime>e&&(d[g]=h)),f--,0===f&&c(null,d)})}},_storeLocal:function(a){if(window.localStorage)for(var b in a)a[b].i18nStamp=(new Date).getTime(),T.localStorage.setItem("res_"+b,JSON.stringify(a[b]))},_fetch:function(a,b,c){var d=b.ns,e={};if(b.dynamicLoad){var f=function(a,b){c(null,b)};if("function"==typeof b.customLoad)b.customLoad(a,d.namespaces,b,f);else{var g=t(b.resGetPath,{lng:a.join("+"),ns:d.namespaces.join("+")});T.ajax({url:g,success:function(a){T.log("loaded: "+g),f(null,a)},error:function(a,b,c){T.log("failed loading: "+g),f("failed loading resource.json error: "+c)},dataType:"json",async:b.getAsync})}}else{var h,i=d.namespaces.length*a.length;T.each(d.namespaces,function(d,f){T.each(a,function(a,d){var g=function(a,b){a&&(h=h||[],h.push(a)),e[d]=e[d]||{},e[d][f]=b,i--,0===i&&c(h,e)};"function"==typeof b.customLoad?b.customLoad(d,f,b,g):N._fetchOne(d,f,b,g)})})}},_fetchOne:function(a,b,c,d){var e=t(c.resGetPath,{lng:a,ns:b});T.ajax({url:e,success:function(a){T.log("loaded: "+e),d(null,a)},error:function(a,b,c){if(b&&200==b||a&&a.status&&200==a.status)T.error("There is a typo in: "+e);else if(b&&404==b||a&&a.status&&404==a.status)T.log("Does not exist: "+e);else{var f=b?b:a&&a.status?a.status:null;T.log(f+" when loading "+e)}d(c,{})},dataType:"json",async:c.getAsync})},postMissing:function(a,b,c,d,e){var f={};f[c]=d;var g=[];if("fallback"===P.sendMissingTo&&P.fallbackLng[0]!==!1)for(var h=0;h<P.fallbackLng.length;h++)g.push({lng:P.fallbackLng[h],url:t(P.resPostPath,{lng:P.fallbackLng[h],ns:b})});else if("current"===P.sendMissingTo||"fallback"===P.sendMissingTo&&P.fallbackLng[0]===!1)g.push({lng:a,url:t(P.resPostPath,{lng:a,ns:b})});else if("all"===P.sendMissingTo)for(var h=0,i=e.length;i>h;h++)g.push({lng:e[h],url:t(P.resPostPath,{lng:e[h],ns:b})});for(var j=0,k=g.length;k>j;j++){var l=g[j];T.ajax({url:l.url,type:P.sendType,data:f,success:function(){T.log("posted missing key '"+c+"' to: "+l.url);for(var a=c.split("."),e=0,f=J[l.lng][b];a[e];)f=f[a[e]]=e===a.length-1?d:f[a[e]]||{},e++},error:function(){T.log("failed posting missing key '"+c+"' to: "+l.url)},dataType:"json",async:P.postAsync})}},reload:r};var P={lng:void 0,load:"all",preload:[],lowerCaseLng:!1,returnObjectTrees:!1,fallbackLng:["dev"],fallbackNS:[],detectLngQS:"setLng",detectLngFromLocalStorage:!1,ns:"translation",fallbackOnNull:!0,fallbackOnEmpty:!1,fallbackToDefaultNS:!1,nsseparator:":",keyseparator:".",selectorAttr:"data-i18n",debug:!1,resGetPath:"locales/__lng__/__ns__.json",resPostPath:"locales/add/__lng__/__ns__",getAsync:!0,postAsync:!0,resStore:void 0,useLocalStorage:!1,localStorageExpirationTime:6048e5,dynamicLoad:!1,sendMissing:!1,sendMissingTo:"fallback",sendType:"POST",interpolationPrefix:"__",interpolationSuffix:"__",defaultVariables:!1,reusePrefix:"$t(",reuseSuffix:")",pluralSuffix:"_plural",pluralNotFound:["plural_not_found",Math.random()].join(""),contextNotFound:["context_not_found",Math.random()].join(""),escapeInterpolation:!1,indefiniteSuffix:"_indefinite",indefiniteNotFound:["indefinite_not_found",Math.random()].join(""),setJqueryExt:!0,defaultValueFromContent:!0,useDataAttrOptions:!1,cookieExpirationTime:void 0,useCookie:!0,cookieName:"i18next",cookieDomain:void 0,objectTreeKeyHandler:void 0,postProcess:void 0,parseMissingKey:void 0,missingKeyHandler:N.postMissing,shortcutFunction:"sprintf"},Q={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},R={create:function(a,b,c,d){var e;if(c){var f=new Date;f.setTime(f.getTime()+6e4*c),e="; expires="+f.toGMTString()}else e="";d=d?"domain="+d+";":"",document.cookie=a+"="+b+e+";"+d+"path=/"},read:function(a){for(var b=a+"=",c=document.cookie.split(";"),d=0;d<c.length;d++){for(var e=c[d];" "==e.charAt(0);)e=e.substring(1,e.length);if(0===e.indexOf(b))return e.substring(b.length,e.length)}return null},remove:function(a){this.create(a,"",-1)}},S={create:function(){},read:function(){return null},remove:function(){}},T={extend:H?H.extend:a,deepExtend:b,each:H?H.each:c,ajax:H?H.ajax:"undefined"!=typeof document?e:function(){},cookie:"undefined"!=typeof document?R:S,detectLanguage:E,escape:d,log:function(a){P.debug&&"undefined"!=typeof console&&console.log(a)},error:function(a){"undefined"!=typeof console&&console.error(a)},getCountyIndexOfLng:function(a){var b=0;return("nb-NO"===a||"nn-NO"===a||"nb-no"===a||"nn-no"===a)&&(b=1),b},toLanguages:function(a){function b(a){var b=a;if("string"==typeof a&&a.indexOf("-")>-1){var c=a.split("-");b=P.lowerCaseLng?c[0].toLowerCase()+"-"+c[1].toLowerCase():c[0].toLowerCase()+"-"+c[1].toUpperCase()}else b=P.lowerCaseLng?a.toLowerCase():a;return b}var c=this.log,d=[],e=P.lngWhitelist||!1,f=function(a){!e||e.indexOf(a)>-1?d.push(a):c("rejecting non-whitelisted language: "+a)};if("string"==typeof a&&a.indexOf("-")>-1){var g=a.split("-");"unspecific"!==P.load&&f(b(a)),"current"!==P.load&&f(b(g[this.getCountyIndexOfLng(a)]))}else f(b(a));for(var h=0;h<P.fallbackLng.length;h++)-1===d.indexOf(P.fallbackLng[h])&&P.fallbackLng[h]&&d.push(b(P.fallbackLng[h]));return d},regexEscape:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},regexReplacementEscape:function(a){return"string"==typeof a?a.replace(/\$/g,"$$$$"):a},localStorage:{setItem:function(a,b){if(window.localStorage)try{window.localStorage.setItem(a,b)}catch(c){T.log('failed to set value for key "'+a+'" to localStorage.')}}}};T.applyReplacement=t;var U=[["ach","Acholi",[1,2],1],["af","Afrikaans",[1,2],2],["ak","Akan",[1,2],1],["am","Amharic",[1,2],1],["an","Aragonese",[1,2],2],["ar","Arabic",[0,1,2,3,11,100],5],["arn","Mapudungun",[1,2],1],["ast","Asturian",[1,2],2],["ay","Aymará",[1],3],["az","Azerbaijani",[1,2],2],["be","Belarusian",[1,2,5],4],["bg","Bulgarian",[1,2],2],["bn","Bengali",[1,2],2],["bo","Tibetan",[1],3],["br","Breton",[1,2],1],["bs","Bosnian",[1,2,5],4],["ca","Catalan",[1,2],2],["cgg","Chiga",[1],3],["cs","Czech",[1,2,5],6],["csb","Kashubian",[1,2,5],7],["cy","Welsh",[1,2,3,8],8],["da","Danish",[1,2],2],["de","German",[1,2],2],["dev","Development Fallback",[1,2],2],["dz","Dzongkha",[1],3],["el","Greek",[1,2],2],["en","English",[1,2],2],["eo","Esperanto",[1,2],2],["es","Spanish",[1,2],2],["es_ar","Argentinean Spanish",[1,2],2],["et","Estonian",[1,2],2],["eu","Basque",[1,2],2],["fa","Persian",[1],3],["fi","Finnish",[1,2],2],["fil","Filipino",[1,2],1],["fo","Faroese",[1,2],2],["fr","French",[1,2],9],["fur","Friulian",[1,2],2],["fy","Frisian",[1,2],2],["ga","Irish",[1,2,3,7,11],10],["gd","Scottish Gaelic",[1,2,3,20],11],["gl","Galician",[1,2],2],["gu","Gujarati",[1,2],2],["gun","Gun",[1,2],1],["ha","Hausa",[1,2],2],["he","Hebrew",[1,2],2],["hi","Hindi",[1,2],2],["hr","Croatian",[1,2,5],4],["hu","Hungarian",[1,2],2],["hy","Armenian",[1,2],2],["ia","Interlingua",[1,2],2],["id","Indonesian",[1],3],["is","Icelandic",[1,2],12],["it","Italian",[1,2],2],["ja","Japanese",[1],3],["jbo","Lojban",[1],3],["jv","Javanese",[0,1],13],["ka","Georgian",[1],3],["kk","Kazakh",[1],3],["km","Khmer",[1],3],["kn","Kannada",[1,2],2],["ko","Korean",[1],3],["ku","Kurdish",[1,2],2],["kw","Cornish",[1,2,3,4],14],["ky","Kyrgyz",[1],3],["lb","Letzeburgesch",[1,2],2],["ln","Lingala",[1,2],1],["lo","Lao",[1],3],["lt","Lithuanian",[1,2,10],15],["lv","Latvian",[1,2,0],16],["mai","Maithili",[1,2],2],["mfe","Mauritian Creole",[1,2],1],["mg","Malagasy",[1,2],1],["mi","Maori",[1,2],1],["mk","Macedonian",[1,2],17],["ml","Malayalam",[1,2],2],["mn","Mongolian",[1,2],2],["mnk","Mandinka",[0,1,2],18],["mr","Marathi",[1,2],2],["ms","Malay",[1],3],["mt","Maltese",[1,2,11,20],19],["nah","Nahuatl",[1,2],2],["nap","Neapolitan",[1,2],2],["nb","Norwegian Bokmal",[1,2],2],["ne","Nepali",[1,2],2],["nl","Dutch",[1,2],2],["nn","Norwegian Nynorsk",[1,2],2],["no","Norwegian",[1,2],2],["nso","Northern Sotho",[1,2],2],["oc","Occitan",[1,2],1],["or","Oriya",[2,1],2],["pa","Punjabi",[1,2],2],["pap","Papiamento",[1,2],2],["pl","Polish",[1,2,5],7],["pms","Piemontese",[1,2],2],["ps","Pashto",[1,2],2],["pt","Portuguese",[1,2],2],["pt_br","Brazilian Portuguese",[1,2],2],["rm","Romansh",[1,2],2],["ro","Romanian",[1,2,20],20],["ru","Russian",[1,2,5],4],["sah","Yakut",[1],3],["sco","Scots",[1,2],2],["se","Northern Sami",[1,2],2],["si","Sinhala",[1,2],2],["sk","Slovak",[1,2,5],6],["sl","Slovenian",[5,1,2,3],21],["so","Somali",[1,2],2],["son","Songhay",[1,2],2],["sq","Albanian",[1,2],2],["sr","Serbian",[1,2,5],4],["su","Sundanese",[1],3],["sv","Swedish",[1,2],2],["sw","Swahili",[1,2],2],["ta","Tamil",[1,2],2],["te","Telugu",[1,2],2],["tg","Tajik",[1,2],1],["th","Thai",[1],3],["ti","Tigrinya",[1,2],1],["tk","Turkmen",[1,2],2],["tr","Turkish",[1,2],1],["tt","Tatar",[1],3],["ug","Uyghur",[1],3],["uk","Ukrainian",[1,2,5],4],["ur","Urdu",[1,2],2],["uz","Uzbek",[1,2],1],["vi","Vietnamese",[1],3],["wa","Walloon",[1,2],1],["wo","Wolof",[1],3],["yo","Yoruba",[1,2],2],["zh","Chinese",[1],3]],V={1:function(a){return Number(a>1)},2:function(a){return Number(1!=a)},3:function(){return 0},4:function(a){return Number(1==a%10&&11!=a%100?0:a%10>=2&&4>=a%10&&(10>a%100||a%100>=20)?1:2)},5:function(a){return Number(0===a?0:1==a?1:2==a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5)},6:function(a){return Number(1==a?0:a>=2&&4>=a?1:2)},7:function(a){return Number(1==a?0:a%10>=2&&4>=a%10&&(10>a%100||a%100>=20)?1:2)},8:function(a){return Number(1==a?0:2==a?1:8!=a&&11!=a?2:3)},9:function(a){return Number(a>=2)},10:function(a){return Number(1==a?0:2==a?1:7>a?2:11>a?3:4)},11:function(a){return Number(1==a||11==a?0:2==a||12==a?1:a>2&&20>a?2:3)},12:function(a){return Number(1!=a%10||11==a%100)},13:function(a){return Number(0!==a)},14:function(a){return Number(1==a?0:2==a?1:3==a?2:3)},15:function(a){return Number(1==a%10&&11!=a%100?0:a%10>=2&&(10>a%100||a%100>=20)?1:2)},16:function(a){return Number(1==a%10&&11!=a%100?0:0!==a?1:2)},17:function(a){return Number(1==a||1==a%10?0:1)},18:function(a){return Number(1==a?1:2)},19:function(a){return Number(1==a?0:0===a||a%100>1&&11>a%100?1:a%100>10&&20>a%100?2:3)},20:function(a){return Number(1==a?0:0===a||a%100>0&&20>a%100?1:2)},21:function(a){return Number(1==a%100?1:2==a%100?2:3==a%100||4==a%100?3:0)}},W={rules:function(){var a,b={};for(a=U.length;a--;)b[U[a][0]]={name:U[a][1],numbers:U[a][2],plurals:V[U[a][3]]};return b}(),addRule:function(a,b){W.rules[a]=b},setCurrentLng:function(a){if(!W.currentRule||W.currentRule.lng!==a){var b=a.split("-");W.currentRule={lng:a,rule:W.rules[b[0]]}}},needsPlural:function(a,b){var c,d=a.split("-");return c=W.currentRule&&W.currentRule.lng===a?W.currentRule.rule:W.rules[d[T.getCountyIndexOfLng(a)]],c&&c.numbers.length<=1?!1:1!==this.get(a,b)},get:function(a,b){function c(b,c){var d;if(d=W.currentRule&&W.currentRule.lng===a?W.currentRule.rule:W.rules[b]){var e;e=d.plurals(d.noAbs?c:Math.abs(c));var f=d.numbers[e];return 2===d.numbers.length&&1===d.numbers[0]&&(2===f?f=-1:1===f&&(f=1)),f}return 1===c?"1":"-1"}var d=a.split("-");return c(d[T.getCountyIndexOfLng(a)],b)}},X={},Y=function(a,b){X[a]=b},Z=function(){function a(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function b(a,b){for(var c=[];b>0;c[--b]=a);return c.join("")}var c=function(){return c.cache.hasOwnProperty(arguments[0])||(c.cache[arguments[0]]=c.parse(arguments[0])),c.format.call(null,c.cache[arguments[0]],arguments)};return c.format=function(c,d){var e,f,g,h,i,j,k,l=1,m=c.length,n="",o=[];for(f=0;m>f;f++)if(n=a(c[f]),"string"===n)o.push(c[f]);else if("array"===n){if(h=c[f],h[2])for(e=d[l],g=0;g<h[2].length;g++){if(!e.hasOwnProperty(h[2][g]))throw Z('[sprintf] property "%s" does not exist',h[2][g]);e=e[h[2][g]]}else e=h[1]?d[h[1]]:d[l++];if(/[^s]/.test(h[8])&&"number"!=a(e))throw Z("[sprintf] expecting number but found %s",a(e));switch(h[8]){case"b":e=e.toString(2);break;case"c":e=String.fromCharCode(e);break;case"d":e=parseInt(e,10);break;case"e":e=h[7]?e.toExponential(h[7]):e.toExponential();break;case"f":e=h[7]?parseFloat(e).toFixed(h[7]):parseFloat(e);break;case"o":e=e.toString(8);break;case"s":e=(e=String(e))&&h[7]?e.substring(0,h[7]):e;break;case"u":e=Math.abs(e);break;case"x":e=e.toString(16);break;case"X":e=e.toString(16).toUpperCase()}e=/[def]/.test(h[8])&&h[3]&&e>=0?"+"+e:e,j=h[4]?"0"==h[4]?"0":h[4].charAt(1):" ",k=h[6]-String(e).length,i=h[6]?b(j,k):"",o.push(h[5]?e+i:i+e)}return o.join("")},c.cache={},c.parse=function(a){for(var b=a,c=[],d=[],e=0;b;){if(null!==(c=/^[^\x25]+/.exec(b)))d.push(c[0]);else if(null!==(c=/^\x25{2}/.exec(b)))d.push("%");else{if(null===(c=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b)))throw"[sprintf] huh?";if(c[2]){e|=1;var f=[],g=c[2],h=[];if(null===(h=/^([a-z_][a-z_\d]*)/i.exec(g)))throw"[sprintf] huh?";for(f.push(h[1]);""!==(g=g.substring(h[0].length));)if(null!==(h=/^\.([a-z_][a-z_\d]*)/i.exec(g)))f.push(h[1]);else{if(null===(h=/^\[(\d+)\]/.exec(g)))throw"[sprintf] huh?";f.push(h[1])}c[2]=f}else e|=2;if(3===e)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";d.push(c)}b=b.substring(c[0].length)}return d},c}(),$=function(a,b){return b.unshift(a),Z.apply(null,b)};Y("sprintf",function(a,b,c){return c.sprintf?"[object Array]"===Object.prototype.toString.apply(c.sprintf)?$(a,c.sprintf):"object"==typeof c.sprintf?Z(a,c.sprintf):a:a}),I.init=f,I.setLng=p,I.preload=g,I.addResourceBundle=h,I.hasResourceBundle=i,I.addResource=k,I.addResources=l,I.removeResourceBundle=j,I.loadNamespace=n,I.loadNamespaces=o,I.setDefaultNamespace=m,I.t=z,I.translate=z,I.exists=y,I.detectLanguage=T.detectLanguage,I.pluralExtensions=W,I.sync=N,I.functions=T,I.lng=q,I.addPostProcessor=Y,I.options=P}();var I18next={de:{translation:{Logging_in:"Login läuft…",your_connection_is_unencrypted:"Deine Verbindung ist Unverschlüsselt.",your_connection_is_encrypted:"Deine Verbindung ist verschlüsselt.",your_buddy_closed_the_private_connection:"Dein Kontakt hat die private Verbindung getrennt.",start_private:"Privat starten",close_private:"Privat abbrechen",your_buddy_is_verificated:"Dein Kontakt ist verifiziert.",you_have_only_a_subscription_in_one_way:"Der Kontaktstatus ist einseitig.",authentication_query_sent:"Authentifizierungsanfrage gesendet.",your_message_wasnt_send_please_end_your_private_conversation:"Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.",unencrypted_message_received:"Unverschlüsselte Nachricht erhalten.",your_message_wasnt_send_because_you_have_no_valid_subscription:"Deine Nachricht wurde nicht gesandt, da der Kontaktstatus einseitig ist.",not_available:"Nicht verfügbar.",no_connection:"Keine Verbindung.",relogin:"Neu anmelden.",trying_to_start_private_conversation:"Versuche private Konversation zu starten.",Verified:"Verifiziert",Unverified:"Unverifiziert",private_conversation_started:"Private Konversation gestartet.",private_conversation_aborted:"Private Konversation abgebrochen.",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Dein Kontakt hat die private Konversation beendet. Das solltest du auch tun!",conversation_is_now_verified:"Konversation ist jetzt verifiziert",authentication_failed:"Authentifizierung fehlgeschlagen.",your_buddy_is_attempting_to_determine_:"Dein Kontakt versucht herauszufinden ob er wirklich mit dir redet.",to_authenticate_to_your_buddy:"Um dich gegenüber deinem Kontakt zu verifizieren ",enter_the_answer_and_click_answer:"gib die Antwort ein und klick auf Antworten.",enter_the_secret:"gib das Geheimnis ein.",Creating_your_private_key_:"Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.",Authenticating_a_buddy_helps_:"Einen Kontakt zu authentifizieren hilft sicher zustellen, dass die Person mit der du sprichst auch die ist die sie sagt.",How_do_you_want_to_authenticate_your_buddy:"Wie willst du {{bid_name}} (<b>{{bid_jid}}</b>) authentifizieren?",Select_method:"Wähle...",Manual:"Manual",Question:"Frage",Secret:"Geheimnis",To_verify_the_fingerprint_:"Um den Fingerprint zu verifizieren kontaktiere dein Kontakt über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.",Your_fingerprint:"Dein Fingerprint",Buddy_fingerprint:"Sein/Ihr Fingerprint",Close:"Schließen",Compared:"Verglichen",To_authenticate_using_a_question_:"Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Kontakt die Antwort weiß.",Ask:"Frage",To_authenticate_pick_a_secret_:"Um deinen Kontakt zu authentifizieren, wähle ein Geheimnis welches nur deinem Kontakt und dir bekannt ist.",Compare:"Vergleiche",Fingerprints:"Fingerprints",Authentication:"Authentifizierung",Message:"Nachricht",Add_buddy:"Kontakt hinzufügen",rename_buddy:"Kontakt umbenennen",delete_buddy:"Kontakt löschen",Login:"Anmeldung",Username:"Benutzername",Password:"Passwort",Cancel:"Abbrechen",Connect:"Verbinden",Type_in_the_full_username_:"Gib bitte den vollen Benutzernamen und optional ein Alias an.",Alias:"Alias",Add:"Hinzufügen",Subscription_request:"Kontaktanfrage",You_have_a_request_from:"Du hast eine Anfrage von",Deny:"Ablehnen",Approve:"Bestätigen",Remove_buddy:"Kontakt entfernen",You_are_about_to_remove_:"Du bist gerade dabei {{bid_name}} (<b>{{bid_jid}}</b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.",Continue_without_chat:"Weiter ohne Chat",Please_wait:"Bitte warten",Login_failed:"Chat-Anmeldung fehlgeschlagen",Sorry_we_cant_authentikate_:"Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?",Retry:"Zurück",clear_history:"Lösche Verlauf",New_message_from:"Neue Nachricht von",Should_we_notify_you_:"Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?",Please_accept_:'Bitte klick auf den "Zulassen" Button oben.',Hide_offline:"Offline ausblenden",Show_offline:"Offline einblenden",About:"Über",dnd:"Beschäftigt",Mute:"Ton aus",Unmute:"Ton an",Subscription:"Bezug",both:"beidseitig",Status:"Status",online:"online",chat:"chat",away:"abwesend",xa:"länger abwesend",offline:"offline",none:"keine",Unknown_instance_tag:"Unbekannter instance tag.",Not_one_of_our_latest_keys:"Nicht einer unserer letzten Schlüssel.",Received_an_unreadable_encrypted_message:"Eine unlesbare verschlüsselte Nachricht erhalten.",Online:"Online",Chatty:"Gesprächig",Away:"Abwesend",Extended_away:"Länger abwesend",Offline:"Offline",Friendship_request:"Kontaktanfrage",Confirm:"Bestätigen",Dismiss:"Ablehnen",Remove:"Löschen",Online_help:"Online Hilfe",FN:"Name",N:" ",FAMILY:"Familienname",GIVEN:"Vorname",NICKNAME:"Spitzname",URL:"URL",ADR:"Adresse",STREET:"Straße",EXTADD:"Zusätzliche Adresse",LOCALITY:"Ortschaft",REGION:"Region",PCODE:"Postleitzahl",CTRY:"Land",TEL:"Telefon",NUMBER:"Nummer",EMAIL:"E-Mail",USERID:" ",ORG:"Organisation",ORGNAME:"Name",ORGUNIT:"Abteilung",TITLE:"Titel",ROLE:"Rolle",BDAY:"Geburtstag",DESC:"Beschreibung",PHOTO:" ",send_message:"Sende Nachricht",get_info:"Benutzerinformationen",Settings:"Einstellungen",Priority:"Priorität",Save:"Speichern",User_settings:"Benutzereinstellungen",A_fingerprint_:"Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.",Your_roster_is_empty_add_a:"Deine Kontaktliste ist leer, füge einen neuen Kontakt ",new_buddy:"hinzu",is:"ist",Login_options:"Anmeldeoptionen",BOSH_url:"BOSH url",Domain:"Domain",Resource:"Ressource",On_login:"Beim Anmelden",Received_an_unencrypted_message:"Unverschlüsselte Nachricht empfangen",Sorry_your_buddy_doesnt_provide_any_information:"Dein Kontakt stellt leider keine Informationen bereit.",Info_about:"Info über",Authentication_aborted:"Authentifizierung abgebrochen.",Authentication_request_received:"Authentifizierunganfrage empfangen.",Do_you_want_to_display_them:"Möchtest du sie sehen?",Log_in_without_chat:"Anmelden ohne Chat",has_come_online:"ist online gekommen",Unknown_sender:"Unbekannter Sender",You_received_a_message_from_an_unknown_sender:"Du hast eine Nachricht von einem unbekannten Sender erhalten",Please_allow_access_to_microphone_and_camera:'Bitte klick auf den "Zulassen" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.',Incoming_call:"Eingehender Anruf",from:"von",Do_you_want_to_accept_the_call_from:"Möchtest Du den Anruf annehmen von",Reject:"Ablehnen",Accept:"Annehmen",hang_up:"Auflegen",snapshot:"Schnappschuss",mute_my_audio:"Mein Ton aus",pause_my_video:"Mein Video pausieren",fullscreen:"Vollbild",Info:"Info",Local_IP:"Lokale IP",Remote_IP:"Remote IP",Local_Fingerprint:"Lokaler Fingerprint",Remote_Fingerprint:"Remote Fingerprint",Video_call_not_possible:"Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.",Start_video_call:"Starte Videoanruf"}},el:{translation:{Logging_in:null,your_connection_is_unencrypted:null,your_connection_is_encrypted:null,your_buddy_closed_the_private_connection:null,start_private:null,close_private:null,your_buddy_is_verificated:null,you_have_only_a_subscription_in_one_way:null,authentication_query_sent:null,your_message_wasnt_send_please_end_your_private_conversation:null,unencrypted_message_received:null,your_message_wasnt_send_because_you_have_no_valid_subscription:null,not_available:null,no_connection:null,relogin:null,trying_to_start_private_conversation:null,Verified:null,Unverified:null,private_conversation_started:null,private_conversation_aborted:null,your_buddy_closed_the_private_conversation_you_should_do_the_same:null,conversation_is_now_verified:null,authentication_failed:null,your_buddy_is_attempting_to_determine_:null,to_authenticate_to_your_buddy:null,enter_the_answer_and_click_answer:null,enter_the_secret:null,Creating_your_private_key_:null,Authenticating_a_buddy_helps_:null,How_do_you_want_to_authenticate_your_buddy:null,Select_method:null,Manual:null,Question:null,Secret:null,To_verify_the_fingerprint_:null,Your_fingerprint:null,Buddy_fingerprint:null,Close:null,Compared:null,To_authenticate_using_a_question_:null,Ask:null,To_authenticate_pick_a_secret_:null,Compare:null,Fingerprints:null,Authentication:null,Message:null,Add_buddy:null,rename_buddy:null,delete_buddy:null,Login:null,Username:null,Password:null,Cancel:null,Connect:null,Type_in_the_full_username_:null,Alias:null,Add:null,Subscription_request:null,You_have_a_request_from:null,Deny:null,Approve:null,Remove_buddy:null,You_are_about_to_remove_:null,Continue_without_chat:null,Please_wait:null,Login_failed:null,Sorry_we_cant_authentikate_:null,Retry:null,clear_history:null,New_message_from:null,Should_we_notify_you_:null,Please_accept_:null,Hide_offline:null,Show_offline:null,About:null,dnd:null,Mute:null,Unmute:null,Subscription:null,both:null,Status:null,online:null,chat:null,away:null,xa:null,offline:null,none:null,Unknown_instance_tag:null,Not_one_of_our_latest_keys:null,Received_an_unreadable_encrypted_message:null,Online:null,Chatty:null,Away:null,Extended_away:null,Offline:null,Friendship_request:null,Confirm:null,Dismiss:null,Remove:null,Online_help:null,FN:null,N:null,FAMILY:null,GIVEN:null,NICKNAME:null,URL:null,ADR:null,STREET:null,EXTADD:null,LOCALITY:null,REGION:null,PCODE:null,CTRY:null,TEL:null,NUMBER:null,EMAIL:null,USERID:null,ORG:null,ORGNAME:null,ORGUNIT:null,TITLE:null,ROLE:null,BDAY:null,DESC:null,PHOTO:null,send_message:null,get_info:null,Settings:null,Priority:null,Save:null,User_settings:null,A_fingerprint_:null,Your_roster_is_empty_add_a:null,new_buddy:null,is:null,Login_options:null,BOSH_url:null,Domain:null,Resource:null,On_login:null,Received_an_unencrypted_message:null,Sorry_your_buddy_doesnt_provide_any_information:null,Info_about:null,Authentication_aborted:null,Authentication_request_received:null,Do_you_want_to_display_them:null,Log_in_without_chat:null,has_come_online:null,Unknown_sender:null,You_received_a_message_from_an_unknown_sender:null,Please_allow_access_to_microphone_and_camera:null,Incoming_call:null,from:null,Do_you_want_to_accept_the_call_from:null,Reject:null,Accept:null,hang_up:null,snapshot:null,mute_my_audio:null,pause_my_video:null,fullscreen:null,Info:null,Local_IP:null,Remote_IP:null,Local_Fingerprint:null,Remote_Fingerprint:null,Video_call_not_possible:null,Start_video_call:null}},en:{translation:{Logging_in:"Logging in…",your_connection_is_unencrypted:"Your connection is unencrypted.",your_connection_is_encrypted:"Your connection is encrypted.",your_buddy_closed_the_private_connection:"Your buddy closed the private connection.",start_private:"Start private",close_private:"Close private",your_buddy_is_verificated:"Your buddy is verified.",you_have_only_a_subscription_in_one_way:"You only have a one-way subscription.",authentication_query_sent:"Authentication query sent.",your_message_wasnt_send_please_end_your_private_conversation:"Your message was not sent. Please end your private conversation.",unencrypted_message_received:"Unencrypted message received",your_message_wasnt_send_because_you_have_no_valid_subscription:"Your message was not sent because you have no valid subscription.",not_available:"Not available",no_connection:"No connection!",relogin:"relogin",trying_to_start_private_conversation:"Trying to start private conversation!",Verified:"Verified",Unverified:"Unverified",private_conversation_started:"Private conversation started.",private_conversation_aborted:"Private conversation aborted!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Your buddy closed the private conversation! You should do the same.",conversation_is_now_verified:"Conversation is now verified.",authentication_failed:"Authentication failed.",your_buddy_is_attempting_to_determine_:"You buddy is attempting to determine if he or she is really talking to you.",to_authenticate_to_your_buddy:"To authenticate to your buddy, ",enter_the_answer_and_click_answer:"enter the answer and click Answer.",enter_the_secret:"enter the secret.",Creating_your_private_key_:"Creating your private key; this may take a while.",Authenticating_a_buddy_helps_:"Authenticating a buddy helps ensure that the person you are talking to is really the one he or she claims to be.",How_do_you_want_to_authenticate_your_buddy:"How do you want to authenticate {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Select method...",Manual:"Manual",Question:"Question",Secret:"Secret",To_verify_the_fingerprint_:"To verify the fingerprint, contact your buddy via some other trustworthy channel, such as the telephone.",Your_fingerprint:"Your fingerprint",Buddy_fingerprint:"Buddy fingerprint",Close:"Close",Compared:"Compared",To_authenticate_using_a_question_:"To authenticate using a question, pick a question whose answer is known only you and your buddy.",Ask:"Ask",To_authenticate_pick_a_secret_:"To authenticate, pick a secret known only to you and your buddy.",Compare:"Compare",Fingerprints:"Fingerprints",Authentication:"Authentication",Message:"Message",Add_buddy:"Add buddy",rename_buddy:"rename buddy",delete_buddy:"delete buddy",Login:"Login",Username:"Username",Password:"Password",Cancel:"Cancel",Connect:"Connect",Type_in_the_full_username_:"Type in the full username and an optional alias.",Alias:"Alias",Add:"Add",Subscription_request:"Subscription request",You_have_a_request_from:"You have a request from",Deny:"Deny",Approve:"Approve",Remove_buddy:"Remove buddy",You_are_about_to_remove_:"You are about to remove {{bid_name}} (<b>{{bid_jid}}</b>) from your buddy list. All related chats will be closed.",Continue_without_chat:"Continue without chat",Please_wait:"Please wait",Login_failed:"Chat login failed",Sorry_we_cant_authentikate_:"Authentication failed with the chat server. Maybe the password is wrong?",Retry:"Back",clear_history:"Clear history",New_message_from:"New message from",Should_we_notify_you_:"Should we notify you about new messages in the future?",Please_accept_:'Please click the "Allow" button at the top.',Hide_offline:"Hide offline contacts",Show_offline:"Show offline contacts",About:"About",dnd:"Do Not Disturb",Mute:"Mute",Unmute:"Unmute",Subscription:"Subscription",both:"both",Status:"Status",online:"online",chat:"chat",away:"away",xa:"extended away",offline:"offline",none:"none",Unknown_instance_tag:"Unknown instance tag.",Not_one_of_our_latest_keys:"Not one of our latest keys.",Received_an_unreadable_encrypted_message:"Received an unreadable encrypted message.",Online:"Online",Chatty:"Chatty",Away:"Away",Extended_away:"Extended away",Offline:"Offline",Friendship_request:"Friendship request",Confirm:"Confirm",Dismiss:"Dismiss",Remove:"Remove",Online_help:"Online help",FN:"Full name",N:" ",FAMILY:"Family name",GIVEN:"Given name",NICKNAME:"Nickname",URL:"URL",ADR:"Address",STREET:"Street Address",EXTADD:"Extended Address",LOCALITY:"Locality",REGION:"Region",PCODE:"Postal Code",CTRY:"Country",TEL:"Telephone",NUMBER:"Number",EMAIL:"Email",USERID:" ",ORG:"Organization",ORGNAME:"Name",ORGUNIT:"Unit",TITLE:"Job title",ROLE:"Role",BDAY:"Birthday",DESC:"Description",PHOTO:" ",send_message:"Send message",
-get_info:"Show information",Settings:"Settings",Priority:"Priority",Save:"Save",User_settings:"User settings",A_fingerprint_:"A fingerprint is used to make sure that the person you are talking to is who he or she is saying.",Your_roster_is_empty_add_a:"Your roster is empty, add a ",new_buddy:"new buddy",is:"is",Login_options:"Login options",BOSH_url:"BOSH URL",Domain:"Domain",Resource:"Resource",On_login:"On login",Received_an_unencrypted_message:"Received an unencrypted message",Sorry_your_buddy_doesnt_provide_any_information:"Sorry, your buddy does not provide any information.",Info_about:"Info about",Authentication_aborted:"Authentication aborted.",Authentication_request_received:"Authentication request received.",Do_you_want_to_display_them:"Do you want to display them?",Log_in_without_chat:"Log in without chat",has_come_online:"has come online",Unknown_sender:"Unknown sender",You_received_a_message_from_an_unknown_sender:"You received a message from an unknown sender",Please_allow_access_to_microphone_and_camera:'Please click the "Allow" button at the top, to allow access to microphone and camera.',Incoming_call:"Incoming call",from:"from",Do_you_want_to_accept_the_call_from:"Do you want to accept the call from",Reject:"Reject",Accept:"Accept",hang_up:"hang up",snapshot:"snapshot",mute_my_audio:"mute my audio",pause_my_video:"pause my video",fullscreen:"fullscreen",Info:"Info",Local_IP:"Local IP",Remote_IP:"Remote IP",Local_Fingerprint:"Local fingerprint",Remote_Fingerprint:"Remote fingerprint",Video_call_not_possible:"Video call not possible. Your buddy does not support video calls.",Start_video_call:"Start video call",Join_chat:"Join chat",Join:"Join",Room:"Room",Nickname:"Nickname",left_the_building:"__nickname__ left the building",entered_the_room:"__nickname__ entered the room",is_now_known_as:"__oldNickname__ is now known as __newNickname__",This_room_is:"This room is",muc_hidden:{keyword:"hidden",description:"can not be found through search"},muc_membersonly:{keyword:"members-only",description:"you need to be on the member list"},muc_moderated:{keyword:"moderated",description:'only persons with "voice" are allowed to send messages'},muc_nonanonymous:{keyword:"non-anonymous",description:"your jabber id is exposed to all other occupants"},muc_open:{keyword:"open",description:"everyone is allowed to join"},muc_passwordprotected:{keyword:"password-protected",description:"you need to provide the correct password"},muc_persistent:{keyword:"persistent",description:"will not be destroyed if the last occupant left"},muc_public:{keyword:"public",description:"can be found through search"},muc_semianonymous:{keyword:"semi-anonymous",description:"your jabber id is only exposed to room admins"},muc_temporary:{keyword:"temporary",description:"will be destroyed if the last occupant left"},muc_unmoderated:{keyword:"unmoderated",description:"everyone is allowed to send messages"},muc_unsecured:{keyword:"unsecured",description:"you need no password to enter"},Continue:"Continue",Server:"Server",Rooms_are_loaded:"Rooms are loaded",Could_load_only:"Could load only __count__ rooms for autocomplete",muc_explanation:"Please enter room name and optional a nickname and password to join a chat",You_already_joined_this_room:"You already joined this room",This_room_will_be_closed:"This room will be closed",Room_not_found_:"A new room will be created",Loading_room_information:"Loading room information",Destroy:"Destroy",Leave:"Leave",changed_subject_to:'__nickname__ changed the room subject to "__subject__"',muc_removed_kicked:"You have been kicked from the room",muc_removed_info_kicked:"__nickname__ has been kicked from the room",muc_removed_banned:"You have been banned from the room",muc_removed_info_banned:"__nickname__ has been banned from the room",muc_removed_affiliation:"You have been removed from the room, because of an affiliation change",muc_removed_info_affiliation:"__nickname__ has been removed from the room, because of an affiliation change",muc_removed_membersonly:"You have been removed from the room, because the room has been changed to members-only and you are no member",muc_removed_info_membersonly:"__nickname__ has been removed from the room, because the room has been changed to members-only and you are no member",muc_removed_shutdown:"You have been removed from the room, because the MUC service is being shut down",Reason:"Reason",message_not_send:"Your message was not send because of an error","message_not_send_item-not-found":"Your message was not send because this room does not exist",message_not_send_forbidden:"Your message was not send because you have no voice in this room","message_not_send_not-acceptable":"Your message was not send because you are no occupant of this room",This_room_has_been_closed:"This room has been closed",Room_logging_is_enabled:"Room logging is enabled",A_password_is_required:"A password is required",You_are_not_on_the_member_list:"You are not on the member list",You_are_banned_from_this_room:"You are banned from this room",Your_desired_nickname_:"Your desired nickname is already in use. Please choose another",The_maximum_number_:"The maximum number of user is reached in this room",This_room_is_locked_:"This room is locked",You_are_not_allowed_to_create_:"You are not allowed to create a room"}},es:{translation:{Logging_in:"Por favor, espere...",your_connection_is_unencrypted:"Su conexión no está cifrada.",your_connection_is_encrypted:"Su conexión está cifrada.",your_buddy_closed_the_private_connection:"Su amigo ha cerrado la conexión privada.",start_private:"Iniciar privado",close_private:"Cerrar privado",your_buddy_is_verificated:"Tu amigo está verificado.",you_have_only_a_subscription_in_one_way:"Sólo tienes una suscripción de un modo.",authentication_query_sent:"Consulta de verificación enviada.",your_message_wasnt_send_please_end_your_private_conversation:"Su mensaje no fue enviado. Por favor, termine su conversación privada.",unencrypted_message_received:"Mensaje no cifrado recibido:",your_message_wasnt_send_because_you_have_no_valid_subscription:"Su mensaje no se ha enviado, porque usted no tiene suscripción válida.",not_available:"No disponible",no_connection:"Sin conexión!",relogin:"iniciar sesión nuevamente",trying_to_start_private_conversation:"Intentando iniciar una conversación privada!",Verified:"Verificado",Unverified:"No verificado",private_conversation_started:"se inició una conversación privada.",private_conversation_aborted:"Conversación privada abortada!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Su amigo cerró la conversación privada! Usted debería hacer lo mismo.",conversation_is_now_verified:"La conversación es ahora verificada.",authentication_failed:"Fallo la verificación.",your_buddy_is_attempting_to_determine_:"Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.",to_authenticate_to_your_buddy:"Para autenticar a su amigo, ",enter_the_answer_and_click_answer:"introduce la respuesta y haga clic en Contestar.",enter_the_secret:"especifique el secreto.",Creating_your_private_key_:"Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.",Authenticating_a_buddy_helps_:"Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.",How_do_you_want_to_authenticate_your_buddy:"¿Cómo desea autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Escoja un método...",Manual:"Manual",Question:"Pregunta",Secret:"Secreto",To_verify_the_fingerprint_:"Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.",Your_fingerprint:"Tu firma digital",Buddy_fingerprint:"firma digital de tu amigo",Close:"Cerrar",Compared:"Comparado",To_authenticate_using_a_question_:"Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.",Ask:"Preguntar",To_authenticate_pick_a_secret_:"Para autenticar, elija un secreto conocido sólo por usted y su amigo.",Compare:"Comparar",Fingerprints:"Firmas digitales",Authentication:"Autenticación",Message:"Mensaje",Add_buddy:"Añadir amigo",rename_buddy:"renombrar amigo",delete_buddy:"eliminar amigo",Login:"Iniciar Sesión",Username:"Usuario",Password:"Contraseña",Cancel:"Cancelar",Connect:"Conectar",Type_in_the_full_username_:"Escriba el usuario completo y un alias opcional.",Alias:"Alias",Add:"Añadir",Subscription_request:"Solicitud de suscripción",You_have_a_request_from:"Tienes una petición de",Deny:"Rechazar",Approve:"Aprobar",Remove_buddy:"Eliminar amigo",You_are_about_to_remove_:"Vas a eliminar a {{bid_name}} (<b>{{bid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.",Continue_without_chat:"Continuar",Please_wait:"Espere por favor",Login_failed:"Fallo el inicio de sesión",Sorry_we_cant_authentikate_:"Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?",Retry:"Reintentar",clear_history:"Borrar el historial",New_message_from:"Nuevo mensaje de",Should_we_notify_you_:"¿Debemos notificarle sobre nuevos mensajes en el futuro?",Please_accept_:'Por favor, haga clic en el botón "Permitir" en la parte superior.',Hide_offline:"Ocultar contactos desconectados",Show_offline:"Mostrar contactos desconectados",About:"Acerca de",dnd:"No Molestar",Mute:"Desactivar sonido",Unmute:"Activar sonido",Subscription:"Suscripción",both:"ambos",Status:"Estado",online:"en línea",chat:"chat",away:"ausente",xa:"mas ausente",offline:"desconectado",none:"nadie",Unknown_instance_tag:"Etiqueta de instancia desconocida.",Not_one_of_our_latest_keys:"No de nuestra ultima tecla.",Received_an_unreadable_encrypted_message:"Se recibió un mensaje cifrado ilegible.",Online:"En linea",Chatty:"Hablador",Away:"Ausente",Extended_away:"Mas ausente",Offline:"Desconectado",Friendship_request:"Solicitud de amistad",Confirm:"Confirmar",Dismiss:"Rechazar",Remove:"Eliminar",Online_help:"Ayuda en línea",FN:"Nombre completo ",N:" ",FAMILY:"Apellido",GIVEN:"Nombre",NICKNAME:"Apodar",URL:"URL",ADR:"Dirección",STREET:"Calle",EXTADD:"Extendido dirección",LOCALITY:"Población",REGION:"Región",PCODE:"Código postal",CTRY:"País",TEL:"Teléfono",NUMBER:"Número",EMAIL:"Emilio",USERID:" ",ORG:"Organización",ORGNAME:"Nombre",ORGUNIT:"Departamento",TITLE:"Título",ROLE:"Rol",BDAY:"Cumpleaños",DESC:"Descripción",PHOTO:" ",send_message:"mandar un texto",get_info:"obtener información",Settings:"Ajustes",Priority:"Prioridad",Save:"Guardar",User_settings:"Configuración de usuario",A_fingerprint_:"La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser",Your_roster_is_empty_add_a:"Tu lista de amigos esta vacia",new_buddy:"Nuevo amigo",is:"es",Login_options:"Opciones de login",BOSH_url:"BOSH url",Domain:"Dominio",Resource:"Recurso",On_login:"Iniciar sesión",Received_an_unencrypted_message:"Recibe un mensaje no cifrado",Sorry_your_buddy_doesnt_provide_any_information:"Lo sentimos, su amigo no provee ninguna información.",Info_about:"Info acerca de",Authentication_aborted:"Autenticación abortada",Authentication_request_received:"Pedido de autenticación recibido.",Do_you_want_to_display_them:"¿Quiere mostrarlos?",Log_in_without_chat:"Ingresar sin chat",has_come_online:"se ha conectado",Unknown_sender:"Remitente desconocido",You_received_a_message_from_an_unknown_sender:"Ha recibido un mensaje de un remitente desconocido",Please_allow_access_to_microphone_and_camera:"Por favor, permitir el acceso al micrófono y la cámara.",Incoming_call:"Llamada entrante",from:"de",Do_you_want_to_accept_the_call_from:"Desea aceptar la llamada de",Reject:"Rechazar",Accept:"Aceptar",hang_up:"colgar",snapshot:"instantánea",mute_my_audio:"silenciar mi audio",pause_my_video:"pausar mi vídeo",fullscreen:"pantalla completa",Info:"Info",Local_IP:"IP local",Remote_IP:"IP remota",Local_Fingerprint:"Firma digital local",Remote_Fingerprint:"Firma digital remota",Video_call_not_possible:"Llamada de vídeo no es posible",Start_video_call:"Iniciar llamada de vídeo"}},fr:{translation:{Logging_in:"Connexion...",your_connection_is_unencrypted:"Connexion non chiffrée.",your_connection_is_encrypted:"Connexion chiffrée.",your_buddy_closed_the_private_connection:"Votre ami a fermé la connexion privée.",start_private:"Démarrer une conversation privé",close_private:"Clôturer une conversation privée",your_buddy_is_verificated:"Votre ami est vérifié.",you_have_only_a_subscription_in_one_way:"Vous ne pouvez souscrire qu'une fois.",authentication_query_sent:"Requête d’authentification envoyée.",your_message_wasnt_send_please_end_your_private_conversation:"Votre message n'a pas été envoyé. Veuillez terminer votre conversation privée.",unencrypted_message_received:"Message non chiffré reçu",your_message_wasnt_send_because_you_have_no_valid_subscription:"Votre message n'a pas été envoyé car votre abonnement n'est pas valide.",not_available:"Pas disponible",no_connection:"Pas de connexion !",relogin:"Re-connexion",trying_to_start_private_conversation:"Essai de démarrage d'une conversation privée !",Verified:"Vérifié",Unverified:"Non vérifié",private_conversation_started:"Conversation privé démarrée.",private_conversation_aborted:"Conversation privée interrompue !",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Votre ami a fermé la conversation privée ! Vous devriez faire de même.",conversation_is_now_verified:"La conversation est maintenant vérifiée.",authentication_failed:"L'authentification a échoué.",your_buddy_is_attempting_to_determine_:"Votre ami tente de déterminer si il ou elle parle vraiment à vous.",to_authenticate_to_your_buddy:"Vous authentifier à votre ami, ",enter_the_answer_and_click_answer:"Saisissez une réponse et cliquer sur Répondre.",enter_the_secret:"Entrez le mot secret",Creating_your_private_key_:"Création de votre clé privée; cela peut prendre un moment.",Authenticating_a_buddy_helps_:"L'authentification d'un ami permet de s'assurer que la personne à qui vous parlez est vraiment celui qu'il ou elle prétend être.",How_do_you_want_to_authenticate_your_buddy:"Comment voulez-vous vous authentifier {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Sélection de la méthode...",Manual:"Manuel",Question:"Question",Secret:"Sécurité",To_verify_the_fingerprint_:"Pour vérifier l'empreinte, contactez votre ami via un autre canal digne de confiance, tel que le téléphone.",Your_fingerprint:"Votre empreinte",Buddy_fingerprint:"Empreinte de l'ami",Close:"Fermer",Compared:"Comparé",To_authenticate_using_a_question_:"Pour s'authentifier à l'aide d'une question, choisissez une question dont la réponse n'est connue que vous et de votre ami.",Ask:"Demander",To_authenticate_pick_a_secret_:"Pour vous authentifier, choisissez un secret connu seulement de vous et de votre ami.",Compare:"Comparer",Fingerprints:"Empreintes",Authentication:"Authentification",Message:"Message",Add_buddy:"Ajouter comme ami",rename_buddy:"Renommer l'ami",delete_buddy:"Supprimer l'ami",Login:"Connexion",Username:"Nom d'utilisateur",Password:"Mot de passe",Cancel:"Annuler",Connect:"Connecter",Type_in_the_full_username_:"Tapez un nom d'utilisateur complet et un alias(optionnel).",Alias:"Alias",Add:"Ajouter",Subscription_request:"Demande d'abonnement",You_have_a_request_from:"Vous avez une requête de ",Deny:"Refuser",Approve:"Approuver",Remove_buddy:"Supprimer l'ami",You_are_about_to_remove_:"Vous allez retirer {{bid_name}} (<b>{{bid_jid}}</b>) de votre liste d'amis. Toutes les fenêtres de chat en lien avec celui-ci seront fermées.",Continue_without_chat:"Continuer sans tchat",Please_wait:"Merci de patienter",Login_failed:"Authentification échouée",Sorry_we_cant_authentikate_:"La connexion avec le serveur de tchat a échoué. Vérifiez le mot de passe.",Retry:"Retour",clear_history:"Effacer l’historique",New_message_from:"Nouveau message de",Should_we_notify_you_:"Dans le futur, devrons-nous vous notifier les nouveaux messages ?",Please_accept_:'Merci de cliquer sur le bouton "autoriser" en haut de page',Hide_offline:"Masquer les contacts non connectés",Show_offline:"Afficher les contacts non connectés",About:"À propos",dnd:"Ne pas déranger",Mute:"Muet",Unmute:"Son actif",Subscription:"Abonnement",both:"Les deux",Status:"Status",online:"En ligne",chat:"tchat",away:"Absent",xa:"Options étendues",offline:"Hors ligne",none:"Aucun",Unknown_instance_tag:"Tag inconnu",Not_one_of_our_latest_keys:"Ce n'est pas l'une des dernières touches",Received_an_unreadable_encrypted_message:"Message chiffré non lisible",Online:"En ligne",Chatty:"tchatty",Away:"Absent",Extended_away:"Options étendues",Offline:"Hors ligne",Friendship_request:"Demande d'amitié",Confirm:"Valider",Dismiss:"Rejeter",Remove:"Supprimer",Online_help:"Aide en ligne",FN:"Nom",N:" N ",FAMILY:"Nom de famille",GIVEN:"prénom",NICKNAME:"Surnom",URL:"URL",ADR:"Adresse",STREET:"Rue",EXTADD:"Adresse (suite)",LOCALITY:"Localité",REGION:"Région",PCODE:"Code Postal",CTRY:"Pays",TEL:"Téléphone",NUMBER:"Numéro",EMAIL:"Courriel",USERID:" USERID ",ORG:"Organisation",ORGNAME:"Nom",ORGUNIT:"Unité",TITLE:"Qualité:",ROLE:"Rôle",BDAY:"Date de naissance",DESC:"Description",PHOTO:"Photo",send_message:"Envoyer le message",get_info:"Montrer les informations",Settings:"Réglages",Priority:"Priorité",Save:"Enregistrer",User_settings:"Paramètres utilisateur",A_fingerprint_:"Une empreinte est utilisée pour s'assurer de l'identité de la personne à qui vous parlez",Your_roster_is_empty_add_a:"Votre liste est vide, ajouter ",new_buddy:"Nouvel ami",is:"est",Login_options:"Options d'identification",BOSH_url:"URL BOSH",Domain:"Domaine",Resource:"Ressource",On_login:"Après authentification",Received_an_unencrypted_message:"Reçu un message non chiffré",Sorry_your_buddy_doesnt_provide_any_information:"Désolé, votre ami n'a pas fourni d'informations",Info_about:"A propos de",Authentication_aborted:"Authentification interrompue.",Authentication_request_received:"Requête d'authentification reçue.",Do_you_want_to_display_them:"Voulez-vous les afficher ?",Log_in_without_chat:"S'identifier sans tchat",has_come_online:"vient d'arriver",Unknown_sender:"Expéditeur inconnu",You_received_a_message_from_an_unknown_sender:"Vous avez reçu un message d'un expéditeur inconnu",Please_allow_access_to_microphone_and_camera:'Veuillez cliquez sur le bouton "Autoriser" en haut, pour permettre l\'accès au micro et à la caméra.',Incoming_call:"Appel entrant",from:"de",Do_you_want_to_accept_the_call_from:"Voulez-vous accepter l'appel de",Reject:"Rejeté",Accept:"Accepté",hang_up:"Décrochez",snapshot:"Capture d’écran",mute_my_audio:"Couper l'audio",pause_my_video:"Mettre ma vidéo en pause",fullscreen:"Plein écran",Info:"Info",Local_IP:"IP locale",Remote_IP:"IP distante",Local_Fingerprint:"Empreinte locale",Remote_Fingerprint:"Empreinte distante",Video_call_not_possible:"L'appel vidéo n'est possible. Votre ami ne supporte pas les appels vidéo.",Start_video_call:"Démarrer l'appel vidéo"}},it:{translation:{Logging_in:"login…",your_connection_is_unencrypted:"La sua connessione è non cifrata.",your_connection_is_encrypted:"La sua connessione è cifrata.",your_buddy_closed_the_private_connection:"La sua connessione privata è stato chiuso dal suo compagno.",start_private:"Inizia privata",close_private:"Chiude privata",your_buddy_is_verificated:"Il tuo compagno è stato verificato",you_have_only_a_subscription_in_one_way:"Hai solo una one-way inscrizione.",authentication_query_sent:"Domanda d'autenticità inviata.",your_message_wasnt_send_please_end_your_private_conversation:"Il tuo messaggio non è stato inviato. Si prega di finire la sua conversazione privata.",unencrypted_message_received:"Messaggio non cifrato ricevuto",your_message_wasnt_send_because_you_have_no_valid_subscription:"Il tuo messaggio non è stato inviato perché non hai una sottoscrizione valida.",not_available:"non disponibile",no_connection:"nessun collegamento!",relogin:"nuovo login",trying_to_start_private_conversation:"Cercando di avviare una conversazione privata!",Verified:"verificato",Unverified:"non verificato",private_conversation_started:"Conversazione privata iniziato.",private_conversation_aborted:"Conversazione privata abortito!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Il tuo compagno ha chiuso la conversazione privata! Si dovrebbe fare lo stesso.",conversation_is_now_verified:"Conversazione è ora verificato.",authentication_failed:"autenticazione fallita.",your_buddy_is_attempting_to_determine_:"Il tuo compagno sta cercando di determinare se lui o lei sta davvero parlando con te.",to_authenticate_to_your_buddy:"Per autenticare a il tuo compagno. ",enter_the_answer_and_click_answer:"inserisci la risposta e fare click su risposta.",enter_the_secret:"inserire il segreto.",Creating_your_private_key_:"Creare la propria chiave privata; questo potrebbe richiedere un po'.",Authenticating_a_buddy_helps_:"Autenticazione un compagno aiuta a garantire che la persona si sta parlando è davvero quello che lui o lei sostiene di essere.",How_do_you_want_to_authenticate_your_buddy:"Come si desidera autenticare {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Seleziona metodo ..",Manual:"manuale",Question:"domanda",Secret:"segreto",To_verify_the_fingerprint_:"Per verificare l'impronta digitale, contattare il proprio compagno attraverso qualche altro canale affidabile, come il telefono.",Your_fingerprint:"il tuo impronta digitale",Buddy_fingerprint:"impronta digitale da compagno",Close:"chiude",Compared:"comparato",To_authenticate_using_a_question_:"Per autenticare tramite una questione, scegli una questione la cui risposta è nota solo voi e il tuo compagno",Ask:"chiedi",To_authenticate_pick_a_secret_:"Per autenticare, scegli un segreto noto solo a te e il tuo compagno.",Compare:"Comparare",Fingerprints:"Impronta digitale",Authentication:"Autenticazione",Message:"Messagio",Add_buddy:"Aggiungi un compagno",rename_buddy:"rinomina compagno",delete_buddy:"elimina compagno",Login:"Login",Username:"Identificazione dell'utente",Password:"Password",Cancel:"Cancella",Connect:"Collega",Type_in_the_full_username_:"Digita l'identificazione utente completo e un alias opzionale.",Alias:"Alias",Add:"Aggiungi",Subscription_request:"Rrichiesta di sottoscrizione",You_have_a_request_from:"Hai una richiesta da",Deny:"Refiuta",Approve:"Approva",Remove_buddy:"Rimuova il compagno",You_are_about_to_remove_:"Stai rimovendo {{bid_name}} (<b>{{bid_jid}}</b>) del suo lista di compagni. Tutte le chat appartenente saranno chiuse.",Continue_without_chat:"Continua senza chat",Please_wait:"Si prega d'attendere",Login_failed:"Chat login è fallito",Sorry_we_cant_authentikate_:"Autenticazione non riuscita con il server di chat. Forse la password è sbagliata?",Retry:"Indietro",clear_history:"Cancella la cronologia",New_message_from:"Nuovo messaggio da",Should_we_notify_you_:"Vuoi ricevere una notifica di nuovi messaggi in futuro?",Please_accept_:'Si prega di fare clic sul bottone "Autorizzazione" sopra.',Hide_offline:"Nascondere i contatti non in linea",Show_offline:"Mostra i contatti non in linea",About:"Informazione legale",dnd:"Non disturbare",Mute:"Muto attivo",Unmute:"Muto inattivo",Subscription:"Sottoscrizione",both:"etrambi",Status:"Status",online:"In linea",chat:"chat",away:"via",xa:"via estensivo",offline:"non in linea",none:"nessuno",Unknown_instance_tag:"Instance tag sconosciuta.",Not_one_of_our_latest_keys:"Non è una delle nostre ultime chiavi.",Received_an_unreadable_encrypted_message:"Ricevuto un messaggio crittografato illeggibile.",Online:"In linea",Chatty:"Chiacchierino",Away:"Via",Extended_away:"Via estensivo",Offline:"Non in linea",Friendship_request:"Amicizia richiesto",Confirm:"Conferma",Dismiss:"Rifiuta",Remove:"Rimuovi",Online_help:"Guida in linea",FN:"Nome e cognome",N:null,FAMILY:"Cognome",GIVEN:"Nome",NICKNAME:"Soprannome",URL:"URL",ADR:"Indirizzo",STREET:"Via",EXTADD:"Esteso Indirizzo",LOCALITY:"Località",REGION:"Regione",PCODE:"Codice Postale",CTRY:"Paese",TEL:"Telefono",NUMBER:"Numero",EMAIL:"E-mail",USERID:null,ORG:"Organizzazione",ORGNAME:"Nome",ORGUNIT:"Unità",TITLE:"Titolo di lavoro",ROLE:"Funzione",BDAY:"Compleanno",DESC:"Descrizione",PHOTO:null,send_message:"Messagio inviato",get_info:"Mostra informazioni",Settings:"Impostazione",Priority:"Priorità",Save:"Salva",User_settings:"Impostazione dell'utente",A_fingerprint_:"Una impronta digitale è usato per assicurarsi che la persona con cui stai parlando è lui o lei che sta dicendo.",Your_roster_is_empty_add_a:"Il suo elenco è vuoto, aggiungi un ",new_buddy:"compagno nuovo",is:"è",Login_options:"Opzioni di login",BOSH_url:"BOSH URL",Domain:"Domain",Resource:"Risorsa",On_login:"Login on",Received_an_unencrypted_message:"Ricevuto un messaggio non crittografato",Sorry_your_buddy_doesnt_provide_any_information:"Spiace, il tuo compagno non fornisce alcuna informazione.",Info_about:"Informazioni",Authentication_aborted:"Autenticazione interrotta",Authentication_request_received:"Richiesta di autenticazione ricevuto.",Do_you_want_to_display_them:"Vuoi che venga visualizzato?",Log_in_without_chat:"Log in senza chat",has_come_online:"È venuto in linea",Unknown_sender:"Mittente sconosciuto",You_received_a_message_from_an_unknown_sender:"Hai ricevuto un messaggio da un mittente sconosciuto",Please_allow_access_to_microphone_and_camera:'Si prega di fare clic sul bottone "Autorizzazione" sopra per autorizzazione del l\'accesso al microfono e fotocamera.',Incoming_call:"Chiamata in arrivo",from:"di",Do_you_want_to_accept_the_call_from:"Vuoi accettare la chiamata di",Reject:"Rifiuta",Accept:"Accetta",hang_up:"Riattacca",snapshot:"istantanea",mute_my_audio:"disattiva il mio audio",pause_my_video:"pausa il mio audio",fullscreen:"schermo intero",Info:"Informazione",Local_IP:"IP locale",Remote_IP:"IP remoto",Local_Fingerprint:"Impronta digitale locale",Remote_Fingerprint:"Impronta digitale remoto",Video_call_not_possible:"Videochiamata non è possibile. Il tuo compagno non può effettuare videochiamate.",Start_video_call:"Inizia videochiamata"}},nds:{translation:{Logging_in:null,your_connection_is_unencrypted:null,your_connection_is_encrypted:null,your_buddy_closed_the_private_connection:null,start_private:null,close_private:null,your_buddy_is_verificated:null,you_have_only_a_subscription_in_one_way:null,authentication_query_sent:null,your_message_wasnt_send_please_end_your_private_conversation:null,unencrypted_message_received:null,your_message_wasnt_send_because_you_have_no_valid_subscription:null,not_available:null,no_connection:null,relogin:null,trying_to_start_private_conversation:null,Verified:null,Unverified:null,private_conversation_started:null,private_conversation_aborted:null,your_buddy_closed_the_private_conversation_you_should_do_the_same:null,conversation_is_now_verified:null,authentication_failed:null,your_buddy_is_attempting_to_determine_:null,to_authenticate_to_your_buddy:null,enter_the_answer_and_click_answer:null,enter_the_secret:null,Creating_your_private_key_:null,Authenticating_a_buddy_helps_:null,How_do_you_want_to_authenticate_your_buddy:null,Select_method:null,Manual:null,Question:null,Secret:null,To_verify_the_fingerprint_:null,Your_fingerprint:null,Buddy_fingerprint:null,Close:null,Compared:null,To_authenticate_using_a_question_:null,Ask:null,To_authenticate_pick_a_secret_:null,Compare:null,Fingerprints:null,Authentication:null,Message:null,Add_buddy:null,rename_buddy:null,delete_buddy:null,Login:null,Username:null,Password:null,Cancel:null,Connect:null,Type_in_the_full_username_:null,Alias:null,Add:null,Subscription_request:null,You_have_a_request_from:null,Deny:null,Approve:null,Remove_buddy:null,You_are_about_to_remove_:null,Continue_without_chat:null,Please_wait:null,Login_failed:null,Sorry_we_cant_authentikate_:null,Retry:null,clear_history:null,New_message_from:null,Should_we_notify_you_:null,Please_accept_:null,Hide_offline:null,Show_offline:null,About:null,dnd:null,Mute:null,Unmute:null,Subscription:null,both:null,Status:null,online:null,chat:null,away:null,xa:null,offline:null,none:null,Unknown_instance_tag:null,Not_one_of_our_latest_keys:null,Received_an_unreadable_encrypted_message:null,Online:null,Chatty:null,Away:null,Extended_away:null,Offline:null,Friendship_request:null,Confirm:null,Dismiss:null,Remove:null,Online_help:null,FN:null,N:null,FAMILY:null,GIVEN:null,NICKNAME:null,URL:null,ADR:null,STREET:null,EXTADD:null,LOCALITY:null,REGION:null,PCODE:null,CTRY:null,TEL:null,NUMBER:null,EMAIL:null,USERID:null,ORG:null,ORGNAME:null,ORGUNIT:null,TITLE:null,ROLE:null,BDAY:null,DESC:null,PHOTO:null,send_message:null,get_info:null,Settings:null,Priority:null,Save:null,User_settings:null,A_fingerprint_:null,Your_roster_is_empty_add_a:null,new_buddy:null,is:null,Login_options:null,BOSH_url:null,Domain:null,Resource:null,On_login:null,Received_an_unencrypted_message:null,Sorry_your_buddy_doesnt_provide_any_information:null,Info_about:null,Authentication_aborted:null,Authentication_request_received:null,Do_you_want_to_display_them:null,Log_in_without_chat:null,has_come_online:null,Unknown_sender:null,You_received_a_message_from_an_unknown_sender:null,Please_allow_access_to_microphone_and_camera:null,Incoming_call:null,from:null,Do_you_want_to_accept_the_call_from:null,Reject:null,Accept:null,hang_up:null,snapshot:null,mute_my_audio:null,pause_my_video:null,fullscreen:null,Info:null,Local_IP:null,Remote_IP:null,Local_Fingerprint:null,Remote_Fingerprint:null,Video_call_not_possible:null,Start_video_call:null}},pl:{translation:{Logging_in:"Logowanie...",your_connection_is_unencrypted:"Twoje połączenie nie jest szyfrowane.",your_connection_is_encrypted:"Twoje połączenie jest szyfrowane.",your_buddy_closed_the_private_connection:"Twój rozmówca zamknął połączenie.",start_private:"Rozpocznij rozmowę.",close_private:"Zakończ rozmowę.",your_buddy_is_verificated:"Twój rozmówca został zweryfikowany.",you_have_only_a_subscription_in_one_way:"Masz jednostronną subskrypcję.",authentication_query_sent:"Wysłano proźbę o autentykację.",your_message_wasnt_send_please_end_your_private_conversation:"Twoja wiadomość nie została wysłana. Proszę, zamknij rozmowę.",unencrypted_message_received:"Zwrotna niezaszyfrowana wiadomość.",your_message_wasnt_send_because_you_have_no_valid_subscription:"Wiadomość nie została wysłana ponieważ nie posiadasz subskrybcji u rozmówcy.",not_available:"Niedostępny.",no_connection:"Brak połączenia!",relogin:"Połącz ponownie",trying_to_start_private_conversation:"Rozpocznij rozmowę!",Verified:"Zweryfikowano",Unverified:"Niezweryfikowano",private_conversation_started:"Rozmowa prywatna rozpoczęta.",private_conversation_aborted:"Anulowano rozmowę!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Rozmówca przerwał połączenie!",conversation_is_now_verified:"Zweryfikowano połączenie.",authentication_failed:"Weryfikacja się nie powiodła.",your_buddy_is_attempting_to_determine_:"Twój rozmówca próbuje się z Tobą połączyć.",to_authenticate_to_your_buddy:"Autoryzacja z rozmówcą, ",enter_the_answer_and_click_answer:"napisz odpowiedź.",enter_the_secret:"wpisz hasło.",Creating_your_private_key_:"Tworzenie klucza prywatnego; może to chwilę potrwać",Authenticating_a_buddy_helps_:"Autoryzacja pomoże w ustaleniu faktycznej tożsamości rozmówcy ;).",How_do_you_want_to_authenticate_your_buddy:"Jakiej autoryzacji chcesz użyć {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Wybierz sposób...",Manual:"Ręcznie",Question:"Pytanie",Secret:"Hasło",To_verify_the_fingerprint_:"Aby zweryfikować kod najpierw skontaktuj się z rozmówcą np. za pomocą telefonu.",Your_fingerprint:"Twój kod:",Buddy_fingerprint:"Kod rozmówcy",Close:"Zamknij",Compared:"Porównano",To_authenticate_using_a_question_:"Aby autoryzować za pomocą pytania, wybierz pytanie na które tylko Twój rozmówca zna odpowiedź.",Ask:"Zadaj pytanie",To_authenticate_pick_a_secret_:"Aby autoryzować za pomocą hasła, wybierz hasło na które zna tylko Twój rozmówca.",
-Compare:"Dopasuj",Fingerprints:"Kody autoryzacyjne",Authentication:"Autoryzacja",Message:"Wiadomość",Add_buddy:"Dodaj kontakt",rename_buddy:"Zmień nazwę",delete_buddy:"Usuń kontakt",Login:"Login",Username:"Nazwa Użytkownika",Password:"Hasło",Cancel:"Anuluj",Connect:"Połączenie",Type_in_the_full_username_:"Wpisz pełną nazwę użytkownika (np. <B>imię.nazwisko@zajezdnia.local</B>) oraz jego nazwę wyświetlaną (Alias).",Alias:"Alias",Add:"Dodaj",Subscription_request:"Potwierdzenie subskrypcji",You_have_a_request_from:"Masz potwierdzenie od",Deny:"Odmów",Approve:"Zatwierdź",Remove_buddy:"Usuń rozmówcę",You_are_about_to_remove_:"Twój rozmówca {{bid_name}} (<b>{{bid_jid}}</b>) usunął Cię ze swojej listy kontaktów.",Continue_without_chat:"Kontynuuj bez komunikatora",Please_wait:"Proszę czekać",Login_failed:"Błędne logowanie",Sorry_we_cant_authentikate_:"Błędna autoryzacja z serwerem. Może hasło jest nieprawidłowe?",Retry:"Powrót",clear_history:"Wyczyść historię",New_message_from:"Nowa wiadomość od",Should_we_notify_you_:"Czy chcesz otrzymywać powiadomienia o nowych wiadomościach w przyszłości?",Please_accept_:'Kliknij "Zezwól" na górze.',Hide_offline:"Schowaj niedostępne kontakty",Show_offline:"Pokaż niedostępne kontakty",About:"Info",dnd:"Nie przeszkadzać",Mute:"Wycisz",Unmute:"Włącz dźwięk",Subscription:"Subskrybcja",both:"obustronna",Status:"Status",online:"Dostępny",chat:"czat",away:"z dala od kompa",xa:"hen hen...",offline:"niedostępny",none:"brak",Unknown_instance_tag:"Nieznany przypadek.",Not_one_of_our_latest_keys:"Not one of our latest keys.",Received_an_unreadable_encrypted_message:"Received an unreadable encrypted message.",Online:"Połączony",Chatty:"Pogawędzimy?",Away:"Daleko",Extended_away:"Hen Hen...",Offline:"Niedostępny",Friendship_request:"Zapytanie od znajomego?",Confirm:"Potwierdzenie",Dismiss:"Odwołaj",Remove:"Usuń",Online_help:"Pomoc Online",FN:"Pełna nazwa",N:" ",FAMILY:"Nazwisko",GIVEN:"Imię",NICKNAME:"Pseudonim",URL:"Strona WWW",ADR:"Adres",STREET:"Ulica",EXTADD:"Extended Address",LOCALITY:"Lokalizacja",REGION:"Region",PCODE:"Kod pocztowy",CTRY:"Kraj",TEL:"Telefon",NUMBER:"Numer",EMAIL:"Email",USERID:" ",ORG:"Organizacja",ORGNAME:"Nazwa",ORGUNIT:"Jednostka",TITLE:"Stanowisko",ROLE:"Rola",BDAY:"Data urodzin",DESC:"Opis",PHOTO:" ",send_message:"Wyślij wiadomość",get_info:"Pokaż informację",Settings:"Ustawienia",Priority:"Priorytet",Save:"Zapisz",User_settings:"Ustawienia Użytkownika",A_fingerprint_:"Kod służy do autoryzacji Twojego rozmówcy aby potwierdzić jego tożsamość.",Your_roster_is_empty_add_a:"Twoja lista jest pusta, dodaj kontakty ",new_buddy:"Nowy kontakt",is:"jest",Login_options:"opcje logowania",BOSH_url:"Adres BOSH",Domain:"Domena",Resource:"Źródło",On_login:"Na login",Received_an_unencrypted_message:"Zatwierdzono nieszyfrowaną wiadomość.",Sorry_your_buddy_doesnt_provide_any_information:"Twój rozmówca nie posiada żadnych informacji.",Info_about:"Informacja o...",Authentication_aborted:"Autoryzacja anulowana.",Authentication_request_received:"Prośba o autoryzację została przyjęta.",Do_you_want_to_display_them:"Chcesz to wyświetlić?",Log_in_without_chat:"Zaloguj bez komunikatora",has_come_online:"jest teraz dostępny",Unknown_sender:"Nieznany nadawca",You_received_a_message_from_an_unknown_sender:"Masz wiadomość od nieznanego nadawcy.",Please_allow_access_to_microphone_and_camera:'Kliknij "Potwierdź" na górze, aby móc korzystać z mikrofonu oraz kamery.',Incoming_call:"Przychodzące połączenie",from:"z",Do_you_want_to_accept_the_call_from:"Akceptujesz połączenie od",Reject:"Odrzuć",Accept:"Zaakceptuj",hang_up:"odbierz",snapshot:"zrób zdjęcie",mute_my_audio:"wycisz dźwięk",pause_my_video:"zatrzymaj moje wideo",fullscreen:"Pełny ekran",Info:"Informacja",Local_IP:"Adres IP",Remote_IP:"Zdalny adres IP",Local_Fingerprint:"Kod lokalny",Remote_Fingerprint:"Zdalny kod",Video_call_not_possible:"Rozmowa wideo jest niemożliwa. Twój rozmówca nie ma możliwości prowadzenia takich rozmów.",Start_video_call:"Rozpocznij rozmowę wideo"}},"pt-BR":{translation:{Logging_in:"Entrando...",your_connection_is_unencrypted:"Sua conexão não é encriptada",your_connection_is_encrypted:"Sua conexão é encriptada",your_buddy_closed_the_private_connection:"Seu contato fechou a conexão privada",start_private:"Iniciar conversa privada",close_private:"Fechar conversa privada",your_buddy_is_verificated:"Seu contato está verificado",you_have_only_a_subscription_in_one_way:"Você só tem a inscrição one-way",authentication_query_sent:"Pergunta de autenticação enviada",your_message_wasnt_send_please_end_your_private_conversation:"Sua mensagem não foi enviada. Por favor finalize sua conversa privada",unencrypted_message_received:"Mensagem não encriptada recebida",your_message_wasnt_send_because_you_have_no_valid_subscription:"Sua mensagem não foi enviada porque sua inscrição não é válida",not_available:"Indisponível",no_connection:"Sem conexão!",relogin:"reentrar",trying_to_start_private_conversation:"Tentando iniciar conversa privada",Verified:"Verificado",Unverified:"Não verificado",private_conversation_started:"Conversa privada iniciada.",private_conversation_aborted:"Conversa privada abortada!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Seu contato encerrou a conversa privada! Você deveria fazer o mesmo.",conversation_is_now_verified:"Conversa verificada.",authentication_failed:"Autenticação falhou.",your_buddy_is_attempting_to_determine_:"Seu contato está tentando determinar se ele realmente está falando contigo.",to_authenticate_to_your_buddy:"Para autenticar seu contato, ",enter_the_answer_and_click_answer:"entre com a resposta e clique em Responder.",enter_the_secret:"escreva a senha.",Creating_your_private_key_:"Criando sua chave privada: isso pode demorar um pouco.",Authenticating_a_buddy_helps_:"Autenticar seu contato ajuda a garantir que a pessoa com a qual você está falando é realmente a pessoa que ela alega ser.",How_do_you_want_to_authenticate_your_buddy:"Como você gostaria de se autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Selecione o método...",Manual:"Manual",Question:"Pergunta",Secret:"Senha",To_verify_the_fingerprint_:"Para verificar o fingerprint, entre em contato com seu contato usando outro meio, de preferência seguro, como o telefone.",Your_fingerprint:"Seu fingerprint",Buddy_fingerprint:"Fingerprint do contato",Close:"Fechar",Compared:"Comparado",To_authenticate_using_a_question_:"Para autenticar seu contato faça uma pergunta, mas escolha que só ele saiba a resposta.",Ask:"Pergunta",To_authenticate_pick_a_secret_:"Para autenticar, escolha um segredo que somente você e seu contato saibam.",Compare:"Compare",Fingerprints:"Fingerprints",Authentication:"Autenticação",Message:"Mensagem",Add_buddy:"Adicionar contato",rename_buddy:"renomear contato",delete_buddy:"remover contato",Login:"Entrar",Username:"Usuário",Password:"Senha",Cancel:"Cancelar",Connect:"Conectar",Type_in_the_full_username_:"Digite seu nome completo e um apelido opcional.",Alias:"Apelido",Add:"Adicionar",Subscription_request:"Pedido de inscrição",You_have_a_request_from:"Você tem um pedido de",Deny:"Negar",Approve:"Aprovar",Remove_buddy:"Remover contato",You_are_about_to_remove_:"Você está prestes a remover {{bid_name}} (<b>{{bid_jid}}</b>) de sua lista de contatos. Todas as conversas serão fechadas.",Continue_without_chat:"Continue sem converar",Please_wait:"Por favor aguarde",Login_failed:"Autenticação da conversa falhou",Sorry_we_cant_authentikate_:"A autenticação com o servidor falhou. Talvez seja a senha errada?",Retry:"Voltar",clear_history:"Limpar histórico",New_message_from:"Nova mensagem de",Should_we_notify_you_:"Devemos continuar notificando sobre novas mensagens no futuro?",Please_accept_:'Por favor clique no botão "Permitir" na parte superior.',Hide_offline:"Esconder contatos desconectados",Show_offline:"Mostrar contatos desconectados",About:"Sobre",dnd:"Não perturbe",Mute:"Mudo",Unmute:"Ligar",Subscription:"Inscrição",both:"ambos",Status:"Status",online:"online",chat:"conversa",away:"ausente",xa:"ausente por mais tempo",offline:"desativado",none:"nenhum",Unknown_instance_tag:"Marcação desconhecida da instância",Not_one_of_our_latest_keys:"Nenhuma de nossas ultimas chaves.",Received_an_unreadable_encrypted_message:"Mensagem encriptada ilegível foi recebida.",Online:"Online",Chatty:"Tagarela",Away:"Ausente",Extended_away:"Ausente por mais tempo",Offline:"Desativado",Friendship_request:"Pedido de amizade",Confirm:"Confirmar",Dismiss:"Ignorar",Remove:"Remover",Online_help:"Ajuda online",FN:"Nome completo",N:" ",FAMILY:"Sobrenome",GIVEN:"Nome",NICKNAME:"Apelido",URL:"URL",ADR:"Endereço",STREET:"Rua, Av, etc",EXTADD:"Complemento",LOCALITY:"Localidade",REGION:"Região",PCODE:"CEP",CTRY:"País",TEL:"Telefone",NUMBER:"Número",EMAIL:"Email",USERID:" ",ORG:"Empresa",ORGNAME:"Nome",ORGUNIT:"Unidade",TITLE:"Cargo",ROLE:"Rol",BDAY:"Data de nascimento",DESC:"Descrição",PHOTO:" ",send_message:"Enviar mensagem",get_info:"Exibir informações",Settings:"Configurações",Priority:"Prioridade",Save:"Salvar",User_settings:"Configurações do usuário",A_fingerprint_:"O fingerprint é usado para certificar que a pessoa com a qual se está falando é que ela diz ser.",Your_roster_is_empty_add_a:"Sua lista está vazia, adicione um ",new_buddy:"novo contato",is:"é",Login_options:"Opções de login",BOSH_url:"BOSH URL",Domain:"Domínio",Resource:"Recurso",On_login:"Ao autenticar",Received_an_unencrypted_message:"Mensagem não encriptada recebida",Sorry_your_buddy_doesnt_provide_any_information:"Desculpe, seu contato não forneceu nenhuma informação",Info_about:"Informações sobre",Authentication_aborted:"Autenticação encerrada.",Authentication_request_received:"Pedido de autenticação recebido",Do_you_want_to_display_them:"Você quer mostrá-los?",Log_in_without_chat:"Entrar sem conversar",has_come_online:"ficou online",Unknown_sender:"Emissor desconhecido",You_received_a_message_from_an_unknown_sender:"Você recebeu uma mensagem de um emissor desconhecido",Please_allow_access_to_microphone_and_camera:'Por favor clique no botão "Permitir" no topo, para conceder acesso ao seu microfone e câmera.',Incoming_call:"Recebendo chamada",from:"de",Do_you_want_to_accept_the_call_from:"Você aceita a chamada de",Reject:"Negar",Accept:"Aceitar",hang_up:"desligar",snapshot:"registrar imagem",mute_my_audio:"mudo",pause_my_video:"pausar vídeo",fullscreen:"tela cheia",Info:"Informações",Local_IP:"IP local",Remote_IP:"IP remoto",Local_Fingerprint:"Fingerprint local",Remote_Fingerprint:"Fingerprint remoto",Video_call_not_possible:"Chamada de vídeo impossível. Seu contato não suporta chamadas desse tipo.",Start_video_call:"Iniciar chamada de vídeo"}},ro:{translation:{Logging_in:null,your_connection_is_unencrypted:null,your_connection_is_encrypted:null,your_buddy_closed_the_private_connection:null,start_private:null,close_private:null,your_buddy_is_verificated:null,you_have_only_a_subscription_in_one_way:null,authentication_query_sent:null,your_message_wasnt_send_please_end_your_private_conversation:null,unencrypted_message_received:null,your_message_wasnt_send_because_you_have_no_valid_subscription:null,not_available:null,no_connection:null,relogin:null,trying_to_start_private_conversation:null,Verified:null,Unverified:null,private_conversation_started:null,private_conversation_aborted:null,your_buddy_closed_the_private_conversation_you_should_do_the_same:null,conversation_is_now_verified:null,authentication_failed:null,your_buddy_is_attempting_to_determine_:null,to_authenticate_to_your_buddy:null,enter_the_answer_and_click_answer:null,enter_the_secret:null,Creating_your_private_key_:null,Authenticating_a_buddy_helps_:null,How_do_you_want_to_authenticate_your_buddy:null,Select_method:null,Manual:null,Question:null,Secret:null,To_verify_the_fingerprint_:null,Your_fingerprint:null,Buddy_fingerprint:null,Close:null,Compared:null,To_authenticate_using_a_question_:null,Ask:null,To_authenticate_pick_a_secret_:null,Compare:null,Fingerprints:null,Authentication:null,Message:null,Add_buddy:null,rename_buddy:null,delete_buddy:null,Login:null,Username:null,Password:null,Cancel:null,Connect:null,Type_in_the_full_username_:null,Alias:null,Add:null,Subscription_request:null,You_have_a_request_from:null,Deny:null,Approve:null,Remove_buddy:null,You_are_about_to_remove_:null,Continue_without_chat:null,Please_wait:null,Login_failed:null,Sorry_we_cant_authentikate_:null,Retry:null,clear_history:null,New_message_from:null,Should_we_notify_you_:null,Please_accept_:null,Hide_offline:null,Show_offline:null,About:null,dnd:null,Mute:null,Unmute:null,Subscription:null,both:null,Status:null,online:null,chat:null,away:null,xa:null,offline:null,none:null,Unknown_instance_tag:null,Not_one_of_our_latest_keys:null,Received_an_unreadable_encrypted_message:null,Online:null,Chatty:null,Away:null,Extended_away:null,Offline:null,Friendship_request:null,Confirm:null,Dismiss:null,Remove:null,Online_help:null,FN:null,N:null,FAMILY:null,GIVEN:null,NICKNAME:null,URL:null,ADR:null,STREET:null,EXTADD:null,LOCALITY:null,REGION:null,PCODE:null,CTRY:null,TEL:null,NUMBER:null,EMAIL:null,USERID:null,ORG:null,ORGNAME:null,ORGUNIT:null,TITLE:null,ROLE:null,BDAY:null,DESC:null,PHOTO:null,send_message:null,get_info:null,Settings:null,Priority:null,Save:null,User_settings:null,A_fingerprint_:null,Your_roster_is_empty_add_a:null,new_buddy:null,is:null,Login_options:null,BOSH_url:null,Domain:null,Resource:null,On_login:null,Received_an_unencrypted_message:null,Sorry_your_buddy_doesnt_provide_any_information:null,Info_about:null,Authentication_aborted:null,Authentication_request_received:null,Do_you_want_to_display_them:null,Log_in_without_chat:null,has_come_online:null,Unknown_sender:null,You_received_a_message_from_an_unknown_sender:null,Please_allow_access_to_microphone_and_camera:null,Incoming_call:null,from:null,Do_you_want_to_accept_the_call_from:null,Reject:null,Accept:null,hang_up:null,snapshot:null,mute_my_audio:null,pause_my_video:null,fullscreen:null,Info:null,Local_IP:null,Remote_IP:null,Local_Fingerprint:null,Remote_Fingerprint:null,Video_call_not_possible:null,Start_video_call:null}}};
+function(){"use strict";function EventEmitter(){}function indexOfListener(listeners,listener){for(var i=listeners.length;i--;)if(listeners[i].listener===listener)return i;return-1}function alias(name){return function(){return this[name].apply(this,arguments)}}var proto=EventEmitter.prototype;proto.getListeners=function(evt){var response,key,events=this._getEvents();if("object"==typeof evt){response={};for(key in events)events.hasOwnProperty(key)&&evt.test(key)&&(response[key]=events[key])}else response=events[evt]||(events[evt]=[]);return response},proto.flattenListeners=function(listeners){var i,flatListeners=[];for(i=0;i<listeners.length;i+=1)flatListeners.push(listeners[i].listener);return flatListeners},proto.getListenersAsObject=function(evt){var response,listeners=this.getListeners(evt);return listeners instanceof Array&&(response={},response[evt]=listeners),response||listeners},proto.addListener=function(evt,listener){var key,listeners=this.getListenersAsObject(evt),listenerIsWrapped="object"==typeof listener;for(key in listeners)listeners.hasOwnProperty(key)&&-1===indexOfListener(listeners[key],listener)&&listeners[key].push(listenerIsWrapped?listener:{listener:listener,once:!1});return this},proto.on=alias("addListener"),proto.addOnceListener=function(evt,listener){return this.addListener(evt,{listener:listener,once:!0})},proto.once=alias("addOnceListener"),proto.defineEvent=function(evt){return this.getListeners(evt),this},proto.defineEvents=function(evts){for(var i=0;i<evts.length;i+=1)this.defineEvent(evts[i]);return this},proto.removeListener=function(evt,listener){var index,key,listeners=this.getListenersAsObject(evt);for(key in listeners)listeners.hasOwnProperty(key)&&(index=indexOfListener(listeners[key],listener),-1!==index&&listeners[key].splice(index,1));return this},proto.off=alias("removeListener"),proto.addListeners=function(evt,listeners){return this.manipulateListeners(!1,evt,listeners)},proto.removeListeners=function(evt,listeners){return this.manipulateListeners(!0,evt,listeners)},proto.manipulateListeners=function(remove,evt,listeners){var i,value,single=remove?this.removeListener:this.addListener,multiple=remove?this.removeListeners:this.addListeners;if("object"!=typeof evt||evt instanceof RegExp)for(i=listeners.length;i--;)single.call(this,evt,listeners[i]);else for(i in evt)evt.hasOwnProperty(i)&&(value=evt[i])&&("function"==typeof value?single.call(this,i,value):multiple.call(this,i,value));return this},proto.removeEvent=function(evt){var key,type=typeof evt,events=this._getEvents();if("string"===type)delete events[evt];else if("object"===type)for(key in events)events.hasOwnProperty(key)&&evt.test(key)&&delete events[key];else delete this._events;return this},proto.emitEvent=function(evt,args){var listener,i,key,response,listeners=this.getListenersAsObject(evt);for(key in listeners)if(listeners.hasOwnProperty(key))for(i=listeners[key].length;i--;)listener=listeners[key][i],listener.once===!0&&this.removeListener(evt,listener.listener),response=listener.listener.apply(this,args||[]),response===this._getOnceReturnValue()&&this.removeListener(evt,listener.listener);return this},proto.trigger=alias("emitEvent"),proto.emit=function(evt){var args=Array.prototype.slice.call(arguments,1);return this.emitEvent(evt,args)},proto.setOnceReturnValue=function(value){return this._onceReturnValue=value,this},proto._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},proto._getEvents=function(){return this._events||(this._events={})},"function"==typeof define&&define.amd?define(function(){return EventEmitter}):"object"==typeof module&&module.exports?module.exports=EventEmitter:this.EventEmitter=EventEmitter}.call(this),function(root,factory){"function"==typeof define&&define.amd?define(["bigint","crypto","eventemitter"],function(BigInt,CryptoJS,EventEmitter){var root={BigInt:BigInt,CryptoJS:CryptoJS,EventEmitter:EventEmitter,OTR:{},DSA:{}};return factory.call(root)}):(root.OTR={},root.DSA={},factory.call(root))}(this,function(){return function(){"use strict";var root=this,CONST={N:"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF",G:"2",MSGSTATE_PLAINTEXT:0,MSGSTATE_ENCRYPTED:1,MSGSTATE_FINISHED:2,AUTHSTATE_NONE:0,AUTHSTATE_AWAITING_DHKEY:1,AUTHSTATE_AWAITING_REVEALSIG:2,AUTHSTATE_AWAITING_SIG:3,WHITESPACE_TAG:" ",WHITESPACE_TAG_V2:" ",WHITESPACE_TAG_V3:" ",OTR_TAG:"?OTR",OTR_VERSION_1:"\x00",OTR_VERSION_2:"\x00",OTR_VERSION_3:"\x00",SMPSTATE_EXPECT0:0,SMPSTATE_EXPECT1:1,SMPSTATE_EXPECT2:2,SMPSTATE_EXPECT3:3,SMPSTATE_EXPECT4:4,STATUS_SEND_QUERY:0,STATUS_AKE_INIT:1,STATUS_AKE_SUCCESS:2,STATUS_END_OTR:3};"undefined"!=typeof module&&module.exports?module.exports=CONST:root.OTR.CONST=CONST}.call(this),function(){"use strict";function intCompare(x,y){var z=~(x^y);return z&=z>>16,z&=z>>8,z&=z>>4,z&=z>>2,z&=z>>1,1&z}var CryptoJS,BigInt,root=this,HLP={};"undefined"!=typeof module&&module.exports?(module.exports=HLP={},CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js")):(root.OTR&&(root.OTR.HLP=HLP),root.DSA&&(root.DSA.HLP=HLP),CryptoJS=root.CryptoJS,BigInt=root.BigInt);var DTS={BYTE:1,SHORT:2,INT:4,CTR:8,MAC:20,SIG:40},WRAPPER_BEGIN="?OTR",WRAPPER_END=".",TWO=BigInt.str2bigInt("2",10);HLP.debug=function(msg){this.debug&&"function"!=typeof this.debug&&"undefined"!=typeof console&&console.log(msg)},HLP.extend=function(child,parent){function Ctor(){this.constructor=child}for(var key in parent)Object.hasOwnProperty.call(parent,key)&&(child[key]=parent[key]);Ctor.prototype=parent.prototype,child.prototype=new Ctor,child.__super__=parent.prototype},HLP.compare=function(str1,str2){if(str1.length!==str2.length)return!1;for(var i=0,result=0;i<str1.length;i++)result|=str1[i].charCodeAt(0)^str2[i].charCodeAt(0);return intCompare(result,0)},HLP.randomExponent=function(){return BigInt.randBigInt(1536)},HLP.smpHash=function(version,fmpi,smpi){var sha256=CryptoJS.algo.SHA256.create();sha256.update(CryptoJS.enc.Latin1.parse(HLP.packBytes(version,DTS.BYTE))),sha256.update(CryptoJS.enc.Latin1.parse(HLP.packMPI(fmpi))),smpi&&sha256.update(CryptoJS.enc.Latin1.parse(HLP.packMPI(smpi)));var hash=sha256.finalize();return HLP.bits2bigInt(hash.toString(CryptoJS.enc.Latin1))},HLP.makeMac=function(aesctr,m){var pass=CryptoJS.enc.Latin1.parse(m),mac=CryptoJS.HmacSHA256(CryptoJS.enc.Latin1.parse(aesctr),pass);return HLP.mask(mac.toString(CryptoJS.enc.Latin1),0,160)},HLP.make1Mac=function(aesctr,m){var pass=CryptoJS.enc.Latin1.parse(m),mac=CryptoJS.HmacSHA1(CryptoJS.enc.Latin1.parse(aesctr),pass);return mac.toString(CryptoJS.enc.Latin1)},HLP.encryptAes=function(msg,c,iv){var opts={mode:CryptoJS.mode.CTR,iv:CryptoJS.enc.Latin1.parse(iv),padding:CryptoJS.pad.NoPadding},aesctr=CryptoJS.AES.encrypt(msg,CryptoJS.enc.Latin1.parse(c),opts),aesctr_decoded=CryptoJS.enc.Base64.parse(aesctr.toString());return CryptoJS.enc.Latin1.stringify(aesctr_decoded)},HLP.decryptAes=function(msg,c,iv){msg=CryptoJS.enc.Latin1.parse(msg);var opts={mode:CryptoJS.mode.CTR,iv:CryptoJS.enc.Latin1.parse(iv),padding:CryptoJS.pad.NoPadding};return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(msg),CryptoJS.enc.Latin1.parse(c),opts)},HLP.multPowMod=function(a,b,c,d,e){return BigInt.multMod(BigInt.powMod(a,b,e),BigInt.powMod(c,d,e),e)},HLP.ZKP=function(v,c,d,e){return BigInt.equals(c,HLP.smpHash(v,d,e))},HLP.GTOE=function(a,b){return BigInt.equals(a,b)||BigInt.greater(a,b)},HLP.between=function(x,a,b){return BigInt.greater(x,a)&&BigInt.greater(b,x)},HLP.checkGroup=function(g,N_MINUS_2){return HLP.GTOE(g,TWO)&&HLP.GTOE(N_MINUS_2,g)},HLP.h1=function(b,secbytes){var sha1=CryptoJS.algo.SHA1.create();return sha1.update(CryptoJS.enc.Latin1.parse(b)),sha1.update(CryptoJS.enc.Latin1.parse(secbytes)),sha1.finalize().toString(CryptoJS.enc.Latin1)},HLP.h2=function(b,secbytes){var sha256=CryptoJS.algo.SHA256.create();return sha256.update(CryptoJS.enc.Latin1.parse(b)),sha256.update(CryptoJS.enc.Latin1.parse(secbytes)),sha256.finalize().toString(CryptoJS.enc.Latin1)},HLP.mask=function(bytes,start,n){return bytes.substr(start/8,n/8)};var _toString=String.fromCharCode;HLP.packBytes=function(val,bytes){val=val.toString(16);for(var nex,res="";bytes>0;bytes--)nex=val.length?val.substr(-2,2):"0",val=val.substr(0,val.length-2),res=_toString(parseInt(nex,16))+res;return res},HLP.packINT=function(d){return HLP.packBytes(d,DTS.INT)},HLP.packCtr=function(d){return HLP.padCtr(HLP.packBytes(d,DTS.CTR))},HLP.padCtr=function(ctr){return ctr+"\x00\x00\x00\x00\x00\x00\x00\x00"},HLP.unpackCtr=function(d){return d=HLP.toByteArray(d.substring(0,8)),HLP.unpack(d)},HLP.unpack=function(arr){for(var val=0,i=0,len=arr.length;len>i;i++)val=256*val+arr[i];return val},HLP.packData=function(d){return HLP.packINT(d.length)+d},HLP.bits2bigInt=function(bits){return bits=HLP.toByteArray(bits),BigInt.ba2bigInt(bits)},HLP.packMPI=function(mpi){return HLP.packData(BigInt.bigInt2bits(BigInt.trim(mpi,0)))},HLP.packSHORT=function(short){return HLP.packBytes(short,DTS.SHORT)},HLP.unpackSHORT=function(short){return short=HLP.toByteArray(short),HLP.unpack(short)},HLP.packTLV=function(type,value){return HLP.packSHORT(type)+HLP.packSHORT(value.length)+value},HLP.readLen=function(msg){return msg=HLP.toByteArray(msg.substring(0,4)),HLP.unpack(msg)},HLP.readData=function(data){var n=HLP.unpack(data.splice(0,4));return[n,data]},HLP.readMPI=function(data){return data=HLP.toByteArray(data),data=HLP.readData(data),BigInt.ba2bigInt(data[1])},HLP.packMPIs=function(arr){return arr.reduce(function(prv,cur){return prv+HLP.packMPI(cur)},"")},HLP.unpackMPIs=function(num,mpis){for(var i=0,arr=[];num>i;i++)arr.push("MPI");return HLP.splitype(arr,mpis).map(function(m){return HLP.readMPI(m)})},HLP.wrapMsg=function(msg,fs,v3,our_it,their_it){msg=CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1.parse(msg)),msg=WRAPPER_BEGIN+":"+msg+WRAPPER_END;var its;if(v3&&(its="|",its+=HLP.readLen(our_it).toString(16),its+="|",its+=HLP.readLen(their_it).toString(16)),!fs)return[null,msg];var n=Math.ceil(msg.length/fs);if(n>65535)return["Too many fragments"];if(1==n)return[null,msg];var k,bi,ei,frag,mf,mfs=[];for(k=1;n>=k;k++)bi=(k-1)*fs,ei=k*fs,frag=msg.slice(bi,ei),mf=WRAPPER_BEGIN,v3&&(mf+=its),mf+=","+k+",",mf+=n+",",mf+=frag+",",mfs.push(mf);return[null,mfs]},HLP.splitype=function splitype(arr,msg){var data=[];return arr.forEach(function(a){var str;switch(a){case"PUBKEY":str=splitype(["SHORT","MPI","MPI","MPI","MPI"],msg).join("");break;case"DATA":case"MPI":str=msg.substring(0,HLP.readLen(msg)+4);break;default:str=msg.substring(0,DTS[a])}data.push(str),msg=msg.substring(str.length)}),data};var _bin2num=function(){for(var i=0,_bin2num={};256>i;++i)_bin2num[String.fromCharCode(i)]=i;for(i=128;256>i;++i)_bin2num[String.fromCharCode(63232+i)]=i;return _bin2num}();HLP.toByteArray=function(data){for(var rv=[],ary=data.split(""),i=-1,iz=ary.length,remain=iz%8;remain--;)++i,rv[i]=_bin2num[ary[i]];for(remain=iz>>3;remain--;)rv.push(_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]],_bin2num[ary[++i]]);return rv}}.call(this),function(){"use strict";function timer(){var start=(new Date).getTime();return function(s){if(DEBUG&&"undefined"!=typeof console){var t=(new Date).getTime();console.log(s+": "+(t-start)),start=t}}}function makeRandom(min,max){var c=BigInt.randBigInt(BigInt.bitSize(max));return HLP.between(c,min,max)?c:makeRandom(min,max)}function isProbPrime(k,n){var i,B=3e4,l=BigInt.bitSize(k),primes=BigInt.primes;for(0===primes.length&&(primes=BigInt.findPrimes(B)),rpprb.length!=k.length&&(rpprb=BigInt.dup(k)),i=0;i<primes.length&&primes[i]<=B;i++)if(0===BigInt.modInt(k,primes[i])&&!BigInt.equalsInt(k,primes[i]))return 0;for(i=0;n>i;i++){for(BigInt.randBigInt_(rpprb,l,0);!BigInt.greater(k,rpprb);)BigInt.randBigInt_(rpprb,l,0);if(!BigInt.millerRabin(k,rpprb))return 0}return 1}function generatePrimes(bit_length){for(var q,p,rem,counter,t=timer(),repeat=bit_lengths[bit_length].repeat,N=bit_lengths[bit_length].N,LM1=BigInt.twoToThe(bit_length-1),bl4=4*bit_length,brk=!1;;)if(q=BigInt.randBigInt(N,1),q[0]|=1,isProbPrime(q,repeat)){for(t("q"),counter=0;bl4>counter;counter++)if(p=BigInt.randBigInt(bit_length,1),p[0]|=1,rem=BigInt.mod(p,q),rem=BigInt.sub(rem,ONE),p=BigInt.sub(p,rem),!BigInt.greater(LM1,p)&&isProbPrime(p,repeat)){t("p"),primes[bit_length]={p:p,q:q},brk=!0;break}if(brk)break}for(var g,h=BigInt.dup(TWO),pm1=BigInt.sub(p,ONE),e=BigInt.multMod(pm1,BigInt.inverseMod(q,p),p);;){g=BigInt.powMod(h,e,p);{if(!BigInt.equals(g,ONE))return primes[bit_length].g=g,void t("g");h=BigInt.add(h,ONE)}}throw new Error("Unreachable!")}function DSA(obj,opts){if(!(this instanceof DSA))return new DSA(obj,opts);if(opts=opts||{},obj){var self=this;return["p","q","g","y","x"].forEach(function(prop){self[prop]=obj[prop]}),void(this.type=obj.type||KEY_TYPE)}var bit_length=parseInt(opts.bit_length?opts.bit_length:1024,10);if(!bit_lengths[bit_length])throw new Error("Unsupported bit length.");primes[bit_length]||generatePrimes(bit_length),this.p=primes[bit_length].p,this.q=primes[bit_length].q,this.g=primes[bit_length].g,this.type=KEY_TYPE,this.x=makeRandom(ZERO,this.q),this.y=BigInt.powMod(this.g,this.x,this.p),opts.nocache&&(primes[bit_length]=null)}function tokenizeStr(str){var start,end;if(start=str.indexOf("("),end=str.lastIndexOf(")"),0>start||0>end)throw new Error("Malformed S-Expression");str=str.substring(start+1,end);var splt=str.search(/\s/),obj={type:str.substring(0,splt),val:[]};if(str=str.substring(splt+1,end),start=str.indexOf("("),0>start)obj.val.push(str);else for(var i,len,ss,es;start>-1;){for(i=start+1,len=str.length,ss=1,es=0;len>i&&ss>es;i++)"("===str[i]&&ss++,")"===str[i]&&es++;obj.val.push(tokenizeStr(str.substring(start,++i))),str=str.substring(++i),start=str.indexOf("(")}return obj}function parseLibotr(obj){if(!obj.type)throw new Error("Parse error.");var o,val;return"privkeys"===obj.type?(o=[],obj.val.forEach(function(i){o.push(parseLibotr(i))}),o):(o={},obj.val.forEach(function(i){val=i.val[0],"string"==typeof val?0===val.indexOf("#")&&(val=val.substring(1,val.lastIndexOf("#")),val=BigInt.str2bigInt(val,16)):val=parseLibotr(i),o[i.type]=val}),o)}var CryptoJS,BigInt,Worker,WWPath,HLP,root=this;"undefined"!=typeof module&&module.exports?(module.exports=DSA,CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js"),WWPath=require("path").join(__dirname,"/dsa-webworker.js"),HLP=require("./helpers.js")):(Object.keys(root.DSA).forEach(function(k){DSA[k]=root.DSA[k]}),root.DSA=DSA,CryptoJS=root.CryptoJS,BigInt=root.BigInt,Worker=root.Worker,WWPath="dsa-webworker.js",HLP=DSA.HLP);var ZERO=BigInt.str2bigInt("0",10),ONE=BigInt.str2bigInt("1",10),TWO=BigInt.str2bigInt("2",10),KEY_TYPE="\x00\x00",DEBUG=!1,rpprb=[],bit_lengths={1024:{N:160,repeat:40},2048:{N:224,repeat:56}},primes={};DSA.prototype={constructor:DSA,packPublic:function(){var str=this.type;return str+=HLP.packMPI(this.p),str+=HLP.packMPI(this.q),str+=HLP.packMPI(this.g),str+=HLP.packMPI(this.y)},packPrivate:function(){var str=this.packPublic()+HLP.packMPI(this.x);return str=CryptoJS.enc.Latin1.parse(str),str.toString(CryptoJS.enc.Base64)},generateNonce:function(m){var priv=BigInt.bigInt2bits(BigInt.trim(this.x,0)),rand=BigInt.bigInt2bits(BigInt.randBigInt(256)),sha256=CryptoJS.algo.SHA256.create();sha256.update(CryptoJS.enc.Latin1.parse(priv)),sha256.update(m),sha256.update(CryptoJS.enc.Latin1.parse(rand));var hash=sha256.finalize();return hash=HLP.bits2bigInt(hash.toString(CryptoJS.enc.Latin1)),BigInt.rightShift_(hash,256-BigInt.bitSize(this.q)),HLP.between(hash,ZERO,this.q)?hash:this.generateNonce(m)},sign:function(m){m=CryptoJS.enc.Latin1.parse(m);for(var k,b=BigInt.str2bigInt(m.toString(CryptoJS.enc.Hex),16),r=ZERO,s=ZERO;BigInt.isZero(s)||BigInt.isZero(r);)k=this.generateNonce(m),r=BigInt.mod(BigInt.powMod(this.g,k,this.p),this.q),BigInt.isZero(r)||(s=BigInt.inverseMod(k,this.q),s=BigInt.mult(s,BigInt.add(b,BigInt.mult(this.x,r))),s=BigInt.mod(s,this.q));return[r,s]},fingerprint:function(){var pk=this.packPublic();return this.type===KEY_TYPE&&(pk=pk.substring(2)),pk=CryptoJS.enc.Latin1.parse(pk),CryptoJS.SHA1(pk).toString(CryptoJS.enc.Hex)}},DSA.parsePublic=function(str,priv){var fields=["SHORT","MPI","MPI","MPI","MPI"];priv&&fields.push("MPI"),str=HLP.splitype(fields,str);var obj={type:str[0],p:HLP.readMPI(str[1]),q:HLP.readMPI(str[2]),g:HLP.readMPI(str[3]),y:HLP.readMPI(str[4])};return priv&&(obj.x=HLP.readMPI(str[5])),new DSA(obj)},DSA.parsePrivate=function(str,libotr){return libotr?parseLibotr(tokenizeStr(str))[0]["private-key"].dsa:(str=CryptoJS.enc.Base64.parse(str),str=str.toString(CryptoJS.enc.Latin1),DSA.parsePublic(str,!0))},DSA.verify=function(key,m,r,s){if(!HLP.between(r,ZERO,key.q)||!HLP.between(s,ZERO,key.q))return!1;var hm=CryptoJS.enc.Latin1.parse(m);hm=BigInt.str2bigInt(hm.toString(CryptoJS.enc.Hex),16);var w=BigInt.inverseMod(s,key.q),u1=BigInt.multMod(hm,w,key.q),u2=BigInt.multMod(r,w,key.q);u1=BigInt.powMod(key.g,u1,key.p),u2=BigInt.powMod(key.y,u2,key.p);var v=BigInt.mod(BigInt.multMod(u1,u2,key.p),key.q);return BigInt.equals(v,r)},DSA.createInWebWorker=function(options,cb){var opts={path:WWPath,seed:BigInt.getSeed};options&&"object"==typeof options&&Object.keys(options).forEach(function(k){opts[k]=options[k]}),"undefined"!=typeof module&&module.exports&&(Worker=require("webworker-threads").Worker);var worker=new Worker(opts.path);worker.onmessage=function(e){var data=e.data;switch(data.type){case"debug":if(!DEBUG||"undefined"==typeof console)return;console.log(data.val);break;case"data":worker.terminate(),cb(DSA.parsePrivate(data.val));break;default:throw new Error("Unrecognized type.")}},worker.postMessage({seed:opts.seed(),imports:opts.imports,debug:DEBUG})}}.call(this),function(){"use strict";var CryptoJS,CONST,HLP,root=this,Parse={};"undefined"!=typeof module&&module.exports?(module.exports=Parse,CryptoJS=require("../vendor/crypto.js"),CONST=require("./const.js"),HLP=require("./helpers.js")):(root.OTR.Parse=Parse,CryptoJS=root.CryptoJS,CONST=root.OTR.CONST,HLP=root.OTR.HLP);var tags={};tags[CONST.WHITESPACE_TAG_V2]=CONST.OTR_VERSION_2,tags[CONST.WHITESPACE_TAG_V3]=CONST.OTR_VERSION_3,Parse.parseMsg=function(otr,msg){var ver=[],start=msg.indexOf(CONST.OTR_TAG);if(!~start){if(this.initFragment(otr),ind=msg.indexOf(CONST.WHITESPACE_TAG),~ind){msg=msg.split(""),msg.splice(ind,16);for(var tag,len=msg.length;len>ind;)tag=msg.slice(ind,ind+8).join(""),Object.hasOwnProperty.call(tags,tag)?(msg.splice(ind,8),ver.push(tags[tag])):ind+=8;msg=msg.join("")}return{msg:msg,ver:ver}}var ind=start+CONST.OTR_TAG.length,com=msg[ind];if(","===com||"|"===com)return this.msgFragment(otr,msg.substring(ind+1),"|"===com);if(this.initFragment(otr),~["?","v"].indexOf(com)){"?"===msg[ind]&&(ver.push(CONST.OTR_VERSION_1),ind+=1);var vers={2:CONST.OTR_VERSION_2,3:CONST.OTR_VERSION_3},qs=msg.substring(ind+1),qi=qs.indexOf("?");return qi>=1&&(qs=qs.substring(0,qi).split(""),"v"===msg[ind]&&qs.forEach(function(q){Object.hasOwnProperty.call(vers,q)&&ver.push(vers[q])})),{cls:"query",ver:ver}}if(":"===com){ind+=1;var info=msg.substring(ind,ind+4);if(info.length<4)return{msg:msg};info=CryptoJS.enc.Base64.parse(info).toString(CryptoJS.enc.Latin1);var version=info.substring(0,2),type=info.substring(2);if(!otr["ALLOW_V"+HLP.unpackSHORT(version)])return{msg:msg};ind+=4;var end=msg.substring(ind).indexOf(".");if(!~end)return{msg:msg};msg=CryptoJS.enc.Base64.parse(msg.substring(ind,ind+end)),msg=CryptoJS.enc.Latin1.stringify(msg);var instance_tags;version===CONST.OTR_VERSION_3&&(instance_tags=msg.substring(0,8),msg=msg.substring(8));var cls;return~["","\n","",""].indexOf(type)?cls="ake":""===type&&(cls="data"),{version:version,type:type,msg:msg,cls:cls,instance_tags:instance_tags}}return" Error:"===msg.substring(ind,ind+7)?(otr.ERROR_START_AKE&&otr.sendQueryMsg(),{msg:msg.substring(ind+7),cls:"error"}):{msg:msg}},Parse.initFragment=function(otr){otr.fragment={s:"",j:0,k:0}},Parse.msgFragment=function(otr,msg,v3){if(msg=msg.split(","),v3){var its=msg.shift().split("|"),their_it=HLP.packINT(parseInt(its[0],16)),our_it=HLP.packINT(parseInt(its[1],16));if(otr.checkInstanceTags(their_it+our_it))return}if(!(msg.length<4||isNaN(parseInt(msg[0],10))||isNaN(parseInt(msg[1],10)))){var k=parseInt(msg[0],10),n=parseInt(msg[1],10);return msg=msg[2],k>n||0===n||0===k?void this.initFragment(otr):(1===k?(this.initFragment(otr),otr.fragment={k:1,n:n,s:msg}):n===otr.fragment.n&&k===otr.fragment.k+1?(otr.fragment.s+=msg,otr.fragment.k+=1):this.initFragment(otr),n===k?(msg=otr.fragment.s,this.initFragment(otr),this.parseMsg(otr,msg)):void 0)}}}.call(this),function(){"use strict";function hMac(gx,gy,pk,kid,m){var pass=CryptoJS.enc.Latin1.parse(m),hmac=CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256,pass);return hmac.update(CryptoJS.enc.Latin1.parse(HLP.packMPI(gx))),hmac.update(CryptoJS.enc.Latin1.parse(HLP.packMPI(gy))),hmac.update(CryptoJS.enc.Latin1.parse(pk)),hmac.update(CryptoJS.enc.Latin1.parse(kid)),hmac.finalize().toString(CryptoJS.enc.Latin1)}function AKE(otr){if(!(this instanceof AKE))return new AKE(otr);this.otr=otr,this.our_dh=otr.our_old_dh,this.our_keyid=otr.our_keyid-1,this.their_y=null,this.their_keyid=null,this.their_priv_pk=null,this.ssid=null,this.transmittedRS=!1,this.r=null;var self=this;["sendMsg"].forEach(function(meth){self[meth]=self[meth].bind(self)})}var CryptoJS,BigInt,CONST,HLP,DSA,root=this;"undefined"!=typeof module&&module.exports?(module.exports=AKE,CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js"),CONST=require("./const.js"),HLP=require("./helpers.js"),DSA=require("./dsa.js")):(root.OTR.AKE=AKE,CryptoJS=root.CryptoJS,BigInt=root.BigInt,CONST=root.OTR.CONST,HLP=root.OTR.HLP,DSA=root.DSA);var N=BigInt.str2bigInt(CONST.N,16),N_MINUS_2=BigInt.sub(N,BigInt.str2bigInt("2",10));AKE.prototype={constructor:AKE,createKeys:function(g){var s=BigInt.powMod(g,this.our_dh.privateKey,N),secbytes=HLP.packMPI(s);this.ssid=HLP.mask(HLP.h2("\x00",secbytes),0,64);var tmp=HLP.h2("",secbytes);this.c=HLP.mask(tmp,0,128),this.c_prime=HLP.mask(tmp,128,128),this.m1=HLP.h2("",secbytes),this.m2=HLP.h2("",secbytes),this.m1_prime=HLP.h2("",secbytes),this.m2_prime=HLP.h2("",secbytes)},verifySignMac:function(mac,aesctr,m2,c,their_y,our_dh_pk,m1,ctr){var vmac=HLP.makeMac(aesctr,m2);if(!HLP.compare(mac,vmac))return["MACs do not match."];var x=HLP.decryptAes(aesctr.substring(4),c,ctr);x=HLP.splitype(["PUBKEY","INT","SIG"],x.toString(CryptoJS.enc.Latin1));var m=hMac(their_y,our_dh_pk,x[0],x[1],m1),pub=DSA.parsePublic(x[0]),r=HLP.bits2bigInt(x[2].substring(0,20)),s=HLP.bits2bigInt(x[2].substring(20));return DSA.verify(pub,m,r,s)?[null,HLP.readLen(x[1]),pub]:["Cannot verify signature of m."]},makeM:function(their_y,m1,c,m2){var pk=this.otr.priv.packPublic(),kid=HLP.packINT(this.our_keyid),m=hMac(this.our_dh.publicKey,their_y,pk,kid,m1);m=this.otr.priv.sign(m);var msg=pk+kid;msg+=BigInt.bigInt2bits(m[0],20),msg+=BigInt.bigInt2bits(m[1],20),msg=CryptoJS.enc.Latin1.parse(msg);var aesctr=HLP.packData(HLP.encryptAes(msg,c,HLP.packCtr(0))),mac=HLP.makeMac(aesctr,m2);return aesctr+mac},akeSuccess:function(version){return HLP.debug.call(this.otr,"success"),BigInt.equals(this.their_y,this.our_dh.publicKey)?this.otr.error("equal keys - we have a problem."):(this.otr.our_old_dh=this.our_dh,this.otr.their_priv_pk=this.their_priv_pk,this.their_keyid===this.otr.their_keyid&&BigInt.equals(this.their_y,this.otr.their_y)||this.their_keyid===this.otr.their_keyid-1&&BigInt.equals(this.their_y,this.otr.their_old_y)||(this.otr.their_y=this.their_y,this.otr.their_old_y=null,this.otr.their_keyid=this.their_keyid,this.otr.sessKeys[0]=[new this.otr.DHSession(this.otr.our_dh,this.otr.their_y),null],this.otr.sessKeys[1]=[new this.otr.DHSession(this.otr.our_old_dh,this.otr.their_y),null]),this.otr.ssid=this.ssid,this.otr.transmittedRS=this.transmittedRS,this.otr_version=version,this.otr.authstate=CONST.AUTHSTATE_NONE,this.otr.msgstate=CONST.MSGSTATE_ENCRYPTED,this.r=null,this.myhashed=null,this.dhcommit=null,this.encrypted=null,this.hashed=null,this.otr.trigger("status",[CONST.STATUS_AKE_SUCCESS]),void this.otr.sendStored())},handleAKE:function(msg){var send,vsm,type,version=msg.version;switch(msg.type){case"":if(HLP.debug.call(this.otr,"d-h key message"),msg=HLP.splitype(["DATA","DATA"],msg.msg),this.otr.authstate===CONST.AUTHSTATE_AWAITING_DHKEY){var ourHash=HLP.readMPI(this.myhashed),theirHash=HLP.readMPI(msg[1]);if(BigInt.greater(ourHash,theirHash)){type="",send=this.dhcommit;break}this.our_dh=this.otr.dh(),this.otr.authstate=CONST.AUTHSTATE_NONE,this.r=null,this.myhashed=null}else this.otr.authstate===CONST.AUTHSTATE_AWAITING_SIG&&(this.our_dh=this.otr.dh());this.otr.authstate=CONST.AUTHSTATE_AWAITING_REVEALSIG,this.encrypted=msg[0].substring(4),this.hashed=msg[1].substring(4),type="\n",send=HLP.packMPI(this.our_dh.publicKey);break;case"\n":if(HLP.debug.call(this.otr,"reveal signature message"),msg=HLP.splitype(["MPI"],msg.msg),this.otr.authstate!==CONST.AUTHSTATE_AWAITING_DHKEY){if(this.otr.authstate!==CONST.AUTHSTATE_AWAITING_SIG)return;if(!BigInt.equals(this.their_y,HLP.readMPI(msg[0])))return}if(this.otr.authstate=CONST.AUTHSTATE_AWAITING_SIG,this.their_y=HLP.readMPI(msg[0]),!HLP.checkGroup(this.their_y,N_MINUS_2))return this.otr.error("Illegal g^y.");this.createKeys(this.their_y),type="",send=HLP.packMPI(this.r),send+=this.makeM(this.their_y,this.m1,this.c,this.m2),this.m1=null,this.m2=null,this.c=null;break;case"":if(HLP.debug.call(this.otr,"signature message"),this.otr.authstate!==CONST.AUTHSTATE_AWAITING_REVEALSIG)return;msg=HLP.splitype(["DATA","DATA","MAC"],msg.msg),this.r=HLP.readMPI(msg[0]);var key=CryptoJS.enc.Hex.parse(BigInt.bigInt2str(this.r,16));key=CryptoJS.enc.Latin1.stringify(key);var gxmpi=HLP.decryptAes(this.encrypted,key,HLP.packCtr(0));gxmpi=gxmpi.toString(CryptoJS.enc.Latin1),this.their_y=HLP.readMPI(gxmpi);var hash=CryptoJS.SHA256(CryptoJS.enc.Latin1.parse(gxmpi));return HLP.compare(this.hashed,hash.toString(CryptoJS.enc.Latin1))?HLP.checkGroup(this.their_y,N_MINUS_2)?(this.createKeys(this.their_y),vsm=this.verifySignMac(msg[2],msg[1],this.m2,this.c,this.their_y,this.our_dh.publicKey,this.m1,HLP.packCtr(0)),vsm[0]?this.otr.error(vsm[0]):(this.their_keyid=vsm[1],this.their_priv_pk=vsm[2],send=this.makeM(this.their_y,this.m1_prime,this.c_prime,this.m2_prime),this.m1=null,this.m2=null,this.m1_prime=null,this.m2_prime=null,this.c=null,this.c_prime=null,this.sendMsg(version,"",send),void this.akeSuccess(version))):this.otr.error("Illegal g^x."):this.otr.error("Hashed g^x does not match.");case"":if(HLP.debug.call(this.otr,"data message"),this.otr.authstate!==CONST.AUTHSTATE_AWAITING_SIG)return;return msg=HLP.splitype(["DATA","MAC"],msg.msg),vsm=this.verifySignMac(msg[1],msg[0],this.m2_prime,this.c_prime,this.their_y,this.our_dh.publicKey,this.m1_prime,HLP.packCtr(0)),vsm[0]?this.otr.error(vsm[0]):(this.their_keyid=vsm[1],this.their_priv_pk=vsm[2],this.m1_prime=null,this.m2_prime=null,this.c_prime=null,this.transmittedRS=!0,void this.akeSuccess(version));default:return}this.sendMsg(version,type,send)},sendMsg:function(version,type,msg){var send=version+type,v3=version===CONST.OTR_VERSION_3;return v3&&(HLP.debug.call(this.otr,"instance tags"),send+=this.otr.our_instance_tag,send+=this.otr.their_instance_tag),send+=msg,send=HLP.wrapMsg(send,this.otr.fragment_size,v3,this.otr.our_instance_tag,this.otr.their_instance_tag),send[0]?this.otr.error(send[0]):void this.otr.io(send[1])},initiateAKE:function(version){HLP.debug.call(this.otr,"d-h commit message"),this.otr.trigger("status",[CONST.STATUS_AKE_INIT]),this.otr.authstate=CONST.AUTHSTATE_AWAITING_DHKEY;var gxmpi=HLP.packMPI(this.our_dh.publicKey);gxmpi=CryptoJS.enc.Latin1.parse(gxmpi),this.r=BigInt.randBigInt(128);var key=CryptoJS.enc.Hex.parse(BigInt.bigInt2str(this.r,16));key=CryptoJS.enc.Latin1.stringify(key),this.myhashed=CryptoJS.SHA256(gxmpi),this.myhashed=HLP.packData(this.myhashed.toString(CryptoJS.enc.Latin1)),this.dhcommit=HLP.packData(HLP.encryptAes(gxmpi,key,HLP.packCtr(0))),this.dhcommit+=this.myhashed,this.sendMsg(version,"",this.dhcommit)}}}.call(this),function(){"use strict";function SM(reqs){return this instanceof SM?(this.version=1,this.our_fp=reqs.our_fp,this.their_fp=reqs.their_fp,this.ssid=reqs.ssid,this.debug=!!reqs.debug,void this.init()):new SM(reqs)}var CryptoJS,BigInt,EventEmitter,CONST,HLP,root=this;"undefined"!=typeof module&&module.exports?(module.exports=SM,CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js"),EventEmitter=require("../vendor/eventemitter.js"),CONST=require("./const.js"),HLP=require("./helpers.js")):(root.OTR.SM=SM,CryptoJS=root.CryptoJS,BigInt=root.BigInt,EventEmitter=root.EventEmitter,CONST=root.OTR.CONST,HLP=root.OTR.HLP);var G=BigInt.str2bigInt(CONST.G,10),N=BigInt.str2bigInt(CONST.N,16),N_MINUS_2=BigInt.sub(N,BigInt.str2bigInt("2",10)),Q=BigInt.sub(N,BigInt.str2bigInt("1",10));BigInt.divInt_(Q,2),HLP.extend(SM,EventEmitter),SM.prototype.init=function(){this.smpstate=CONST.SMPSTATE_EXPECT1,this.secret=null},SM.prototype.makeSecret=function(our,secret){var sha256=CryptoJS.algo.SHA256.create();sha256.update(CryptoJS.enc.Latin1.parse(HLP.packBytes(this.version,1))),sha256.update(CryptoJS.enc.Hex.parse(our?this.our_fp:this.their_fp)),sha256.update(CryptoJS.enc.Hex.parse(our?this.their_fp:this.our_fp)),sha256.update(CryptoJS.enc.Latin1.parse(this.ssid)),sha256.update(CryptoJS.enc.Latin1.parse(secret));var hash=sha256.finalize();this.secret=HLP.bits2bigInt(hash.toString(CryptoJS.enc.Latin1))},SM.prototype.makeG2s=function(){this.a2=HLP.randomExponent(),this.a3=HLP.randomExponent(),this.g2a=BigInt.powMod(G,this.a2,N),this.g3a=BigInt.powMod(G,this.a3,N),HLP.checkGroup(this.g2a,N_MINUS_2)&&HLP.checkGroup(this.g3a,N_MINUS_2)||this.makeG2s()},SM.prototype.computeGs=function(g2a,g3a){this.g2=BigInt.powMod(g2a,this.a2,N),this.g3=BigInt.powMod(g3a,this.a3,N)},SM.prototype.computePQ=function(r){this.p=BigInt.powMod(this.g3,r,N),this.q=HLP.multPowMod(G,r,this.g2,this.secret,N)},SM.prototype.computeR=function(){this.r=BigInt.powMod(this.QoQ,this.a3,N)},SM.prototype.computeRab=function(r){return BigInt.powMod(r,this.a3,N)},SM.prototype.computeC=function(v,r){return HLP.smpHash(v,BigInt.powMod(G,r,N))},SM.prototype.computeD=function(r,a,c){return BigInt.subMod(r,BigInt.multMod(a,c,Q),Q)},SM.prototype.handleSM=function(msg){var send,r2,r3,r7,t1,t2,t3,t4,rab,tmp2,cR,d7,ms,trust,expectStates={2:CONST.SMPSTATE_EXPECT1,3:CONST.SMPSTATE_EXPECT2,4:CONST.SMPSTATE_EXPECT3,5:CONST.SMPSTATE_EXPECT4,7:CONST.SMPSTATE_EXPECT1};if(6===msg.type)return this.init(),void this.trigger("abort");if(this.smpstate!==expectStates[msg.type])return this.abort();switch(this.smpstate){case CONST.SMPSTATE_EXPECT1:HLP.debug.call(this,"smp tlv 2");var ind,question;return 7===msg.type&&(ind=msg.msg.indexOf("\x00"),question=msg.msg.substring(0,ind),msg.msg=msg.msg.substring(ind+1)),ms=HLP.readLen(msg.msg.substr(0,4)),6!==ms?this.abort():(msg=HLP.unpackMPIs(6,msg.msg.substring(4)),HLP.checkGroup(msg[0],N_MINUS_2)&&HLP.checkGroup(msg[3],N_MINUS_2)&&HLP.ZKP(1,msg[1],HLP.multPowMod(G,msg[2],msg[0],msg[1],N))&&HLP.ZKP(2,msg[4],HLP.multPowMod(G,msg[5],msg[3],msg[4],N))?(this.g3ao=msg[3],this.makeG2s(),r2=HLP.randomExponent(),r3=HLP.randomExponent(),this.c2=this.computeC(3,r2),this.c3=this.computeC(4,r3),this.d2=this.computeD(r2,this.a2,this.c2),this.d3=this.computeD(r3,this.a3,this.c3),this.computeGs(msg[0],msg[3]),this.smpstate=CONST.SMPSTATE_EXPECT0,question&&(question=CryptoJS.enc.Latin1.parse(question).toString(CryptoJS.enc.Utf8)),void this.trigger("question",[question])):this.abort());
+case CONST.SMPSTATE_EXPECT2:if(HLP.debug.call(this,"smp tlv 3"),ms=HLP.readLen(msg.msg.substr(0,4)),11!==ms)return this.abort();if(msg=HLP.unpackMPIs(11,msg.msg.substring(4)),!(HLP.checkGroup(msg[0],N_MINUS_2)&&HLP.checkGroup(msg[3],N_MINUS_2)&&HLP.checkGroup(msg[6],N_MINUS_2)&&HLP.checkGroup(msg[7],N_MINUS_2)))return this.abort();if(!HLP.ZKP(3,msg[1],HLP.multPowMod(G,msg[2],msg[0],msg[1],N)))return this.abort();if(!HLP.ZKP(4,msg[4],HLP.multPowMod(G,msg[5],msg[3],msg[4],N)))return this.abort();if(this.g3ao=msg[3],this.computeGs(msg[0],msg[3]),t1=HLP.multPowMod(this.g3,msg[9],msg[6],msg[8],N),t2=HLP.multPowMod(G,msg[9],this.g2,msg[10],N),t2=BigInt.multMod(t2,BigInt.powMod(msg[7],msg[8],N),N),!HLP.ZKP(5,msg[8],t1,t2))return this.abort();var r4=HLP.randomExponent();this.computePQ(r4);var r5=HLP.randomExponent(),r6=HLP.randomExponent(),tmp=HLP.multPowMod(G,r5,this.g2,r6,N),cP=HLP.smpHash(6,BigInt.powMod(this.g3,r5,N),tmp),d5=this.computeD(r5,r4,cP),d6=this.computeD(r6,this.secret,cP);this.QoQ=BigInt.divMod(this.q,msg[7],N),this.PoP=BigInt.divMod(this.p,msg[6],N),this.computeR(),r7=HLP.randomExponent(),tmp2=BigInt.powMod(this.QoQ,r7,N),cR=HLP.smpHash(7,BigInt.powMod(G,r7,N),tmp2),d7=this.computeD(r7,this.a3,cR),this.smpstate=CONST.SMPSTATE_EXPECT4,send=HLP.packINT(8)+HLP.packMPIs([this.p,this.q,cP,d5,d6,this.r,cR,d7]),send=HLP.packTLV(4,send);break;case CONST.SMPSTATE_EXPECT3:if(HLP.debug.call(this,"smp tlv 4"),ms=HLP.readLen(msg.msg.substr(0,4)),8!==ms)return this.abort();if(msg=HLP.unpackMPIs(8,msg.msg.substring(4)),!HLP.checkGroup(msg[0],N_MINUS_2)||!HLP.checkGroup(msg[1],N_MINUS_2)||!HLP.checkGroup(msg[5],N_MINUS_2))return this.abort();if(t1=HLP.multPowMod(this.g3,msg[3],msg[0],msg[2],N),t2=HLP.multPowMod(G,msg[3],this.g2,msg[4],N),t2=BigInt.multMod(t2,BigInt.powMod(msg[1],msg[2],N),N),!HLP.ZKP(6,msg[2],t1,t2))return this.abort();if(t3=HLP.multPowMod(G,msg[7],this.g3ao,msg[6],N),this.QoQ=BigInt.divMod(msg[1],this.q,N),t4=HLP.multPowMod(this.QoQ,msg[7],msg[5],msg[6],N),!HLP.ZKP(7,msg[6],t3,t4))return this.abort();this.computeR(),r7=HLP.randomExponent(),tmp2=BigInt.powMod(this.QoQ,r7,N),cR=HLP.smpHash(8,BigInt.powMod(G,r7,N),tmp2),d7=this.computeD(r7,this.a3,cR),send=HLP.packINT(3)+HLP.packMPIs([this.r,cR,d7]),send=HLP.packTLV(5,send),rab=this.computeRab(msg[5]),trust=!!BigInt.equals(rab,BigInt.divMod(msg[0],this.p,N)),this.trigger("trust",[trust,"answered"]),this.init();break;case CONST.SMPSTATE_EXPECT4:return HLP.debug.call(this,"smp tlv 5"),ms=HLP.readLen(msg.msg.substr(0,4)),3!==ms?this.abort():(msg=HLP.unpackMPIs(3,msg.msg.substring(4)),HLP.checkGroup(msg[0],N_MINUS_2)?(t3=HLP.multPowMod(G,msg[2],this.g3ao,msg[1],N),t4=HLP.multPowMod(this.QoQ,msg[2],msg[0],msg[1],N),HLP.ZKP(8,msg[1],t3,t4)?(rab=this.computeRab(msg[0]),trust=!!BigInt.equals(rab,this.PoP),this.trigger("trust",[trust,"asked"]),void this.init()):this.abort()):this.abort())}this.sendMsg(send)},SM.prototype.sendMsg=function(send){this.trigger("send",[this.ssid,"\x00"+send])},SM.prototype.rcvSecret=function(secret,question){HLP.debug.call(this,"receive secret");var fn,our=!1;this.smpstate===CONST.SMPSTATE_EXPECT0?fn=this.answer:(fn=this.initiate,our=!0),this.makeSecret(our,secret),fn.call(this,question)},SM.prototype.answer=function(){HLP.debug.call(this,"smp answer");var r4=HLP.randomExponent();this.computePQ(r4);var r5=HLP.randomExponent(),r6=HLP.randomExponent(),tmp=HLP.multPowMod(G,r5,this.g2,r6,N),cP=HLP.smpHash(5,BigInt.powMod(this.g3,r5,N),tmp),d5=this.computeD(r5,r4,cP),d6=this.computeD(r6,this.secret,cP);this.smpstate=CONST.SMPSTATE_EXPECT3;var send=HLP.packINT(11)+HLP.packMPIs([this.g2a,this.c2,this.d2,this.g3a,this.c3,this.d3,this.p,this.q,cP,d5,d6]);this.sendMsg(HLP.packTLV(3,send))},SM.prototype.initiate=function(question){HLP.debug.call(this,"smp initiate"),this.smpstate!==CONST.SMPSTATE_EXPECT1&&this.abort(),this.makeG2s();var r2=HLP.randomExponent(),r3=HLP.randomExponent();this.c2=this.computeC(1,r2),this.c3=this.computeC(2,r3),this.d2=this.computeD(r2,this.a2,this.c2),this.d3=this.computeD(r3,this.a3,this.c3),this.smpstate=CONST.SMPSTATE_EXPECT2;var send="",type=2;question&&(send+=question,send+="\x00",type=7),send+=HLP.packINT(6)+HLP.packMPIs([this.g2a,this.c2,this.d2,this.g3a,this.c3,this.d3]),this.sendMsg(HLP.packTLV(type,send))},SM.prototype.abort=function(){this.init(),this.sendMsg(HLP.packTLV(6,"")),this.trigger("abort")}}.call(this),function(){"use strict";function OTRCB(cb){this.cb=cb}function OTR(options){if(!(this instanceof OTR))return new OTR(options);if(options=options||{},options.priv&&!(options.priv instanceof DSA))throw new Error("Requires long-lived DSA key.");if(this.priv=options.priv?options.priv:new DSA,this.fragment_size=options.fragment_size||0,this.fragment_size<0)throw new Error("Fragment size must be a positive integer.");if(this.send_interval=options.send_interval||0,this.send_interval<0)throw new Error("Send interval must be a positive integer.");this.outgoing=[],this.our_instance_tag=options.instance_tag||OTR.makeInstanceTag(),this.debug=!!options.debug,this.smw=options.smw,this.init();var self=this;["sendMsg","receiveMsg"].forEach(function(meth){self[meth]=self[meth].bind(self)}),EventEmitter.call(this)}var CryptoJS,BigInt,EventEmitter,Worker,SMWPath,CONST,HLP,Parse,AKE,SM,DSA,root=this;"undefined"!=typeof module&&module.exports?(module.exports=OTR,CryptoJS=require("../vendor/crypto.js"),BigInt=require("../vendor/bigint.js"),EventEmitter=require("../vendor/eventemitter.js"),SMWPath=require("path").join(__dirname,"/sm-webworker.js"),CONST=require("./const.js"),HLP=require("./helpers.js"),Parse=require("./parse.js"),AKE=require("./ake.js"),SM=require("./sm.js"),DSA=require("./dsa.js"),OTR.CONST=CONST):(Object.keys(root.OTR).forEach(function(k){OTR[k]=root.OTR[k]}),root.OTR=OTR,CryptoJS=root.CryptoJS,BigInt=root.BigInt,EventEmitter=root.EventEmitter,Worker=root.Worker,SMWPath="sm-webworker.js",CONST=OTR.CONST,HLP=OTR.HLP,Parse=OTR.Parse,AKE=OTR.AKE,SM=OTR.SM,DSA=root.DSA);var G=BigInt.str2bigInt(CONST.G,10),N=BigInt.str2bigInt(CONST.N,16),MAX_INT=Math.pow(2,53)-1,MAX_UINT=Math.pow(2,31)-1;HLP.extend(OTR,EventEmitter),OTR.prototype.init=function(){this.msgstate=CONST.MSGSTATE_PLAINTEXT,this.authstate=CONST.AUTHSTATE_NONE,this.ALLOW_V2=!0,this.ALLOW_V3=!0,this.REQUIRE_ENCRYPTION=!1,this.SEND_WHITESPACE_TAG=!1,this.WHITESPACE_START_AKE=!1,this.ERROR_START_AKE=!1,Parse.initFragment(this),this.their_y=null,this.their_old_y=null,this.their_keyid=0,this.their_priv_pk=null,this.their_instance_tag="\x00\x00\x00\x00",this.our_dh=this.dh(),this.our_old_dh=this.dh(),this.our_keyid=2,this.sessKeys=[new Array(2),new Array(2)],this.storedMgs=[],this.oldMacKeys=[],this.sm=null,this._akeInit(),this.receivedPlaintext=!1},OTR.prototype._akeInit=function(){this.ake=new AKE(this),this.transmittedRS=!1,this.ssid=null},OTR.prototype._SMW=function(otr,reqs){this.otr=otr;var opts={path:SMWPath,seed:BigInt.getSeed};"object"==typeof otr.smw&&Object.keys(otr.smw).forEach(function(k){opts[k]=otr.smw[k]}),"undefined"!=typeof module&&module.exports&&(Worker=require("webworker-threads").Worker),this.worker=new Worker(opts.path);var self=this;this.worker.onmessage=function(e){var d=e.data;d&&self.trigger(d.method,d.args)},this.worker.postMessage({type:"seed",seed:opts.seed(),imports:opts.imports}),this.worker.postMessage({type:"init",reqs:reqs})},HLP.extend(OTR.prototype._SMW,EventEmitter),["handleSM","rcvSecret","abort"].forEach(function(m){OTR.prototype._SMW.prototype[m]=function(){this.worker.postMessage({type:"method",method:m,args:Array.prototype.slice.call(arguments,0)})}}),OTR.prototype._smInit=function(){var reqs={ssid:this.ssid,our_fp:this.priv.fingerprint(),their_fp:this.their_priv_pk.fingerprint(),debug:this.debug};this.smw?(this.sm&&this.sm.worker.terminate(),this.sm=new this._SMW(this,reqs)):this.sm=new SM(reqs);var self=this;["trust","abort","question"].forEach(function(e){self.sm.on(e,function(){self.trigger("smp",[e].concat(Array.prototype.slice.call(arguments)))})}),this.sm.on("send",function(ssid,send){self.ssid===ssid&&(send=self.prepareMsg(send),self.io(send))})},OTR.prototype.io=function(msg,meta){msg=[].concat(msg).map(function(m){return{msg:m,meta:meta}}),this.outgoing=this.outgoing.concat(msg);var self=this;!function send(first){if(!first){if(!self.outgoing.length)return;var elem=self.outgoing.shift(),cb=null;elem.meta instanceof OTRCB&&(cb=elem.meta.cb,elem.meta=null),self.trigger("io",[elem.msg,elem.meta]),cb&&cb()}setTimeout(send,first?0:self.send_interval)}(!0)},OTR.prototype.dh=function(){var keys={privateKey:BigInt.randBigInt(320)};return keys.publicKey=BigInt.powMod(G,keys.privateKey,N),keys},OTR.prototype.DHSession=function DHSession(our_dh,their_y){if(!(this instanceof DHSession))return new DHSession(our_dh,their_y);var s=BigInt.powMod(their_y,our_dh.privateKey,N),secbytes=HLP.packMPI(s);this.id=HLP.mask(HLP.h2("\x00",secbytes),0,64);var sq=BigInt.greater(our_dh.publicKey,their_y),sendbyte=sq?"":"",rcvbyte=sq?"":"";this.sendenc=HLP.mask(HLP.h1(sendbyte,secbytes),0,128),this.sendmac=CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(this.sendenc)),this.sendmac=this.sendmac.toString(CryptoJS.enc.Latin1),this.rcvenc=HLP.mask(HLP.h1(rcvbyte,secbytes),0,128),this.rcvmac=CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(this.rcvenc)),this.rcvmac=this.rcvmac.toString(CryptoJS.enc.Latin1),this.rcvmacused=!1,this.extra_symkey=HLP.h2("ÿ",secbytes),this.send_counter=0,this.rcv_counter=0},OTR.prototype.rotateOurKeys=function(){var self=this;this.sessKeys[1].forEach(function(sk){sk&&sk.rcvmacused&&self.oldMacKeys.push(sk.rcvmac)}),this.our_old_dh=this.our_dh,this.our_dh=this.dh(),this.our_keyid+=1,this.sessKeys[1][0]=this.sessKeys[0][0],this.sessKeys[1][1]=this.sessKeys[0][1],this.sessKeys[0]=[this.their_y?new this.DHSession(this.our_dh,this.their_y):null,this.their_old_y?new this.DHSession(this.our_dh,this.their_old_y):null]},OTR.prototype.rotateTheirKeys=function(their_y){this.their_keyid+=1;var self=this;this.sessKeys.forEach(function(sk){sk[1]&&sk[1].rcvmacused&&self.oldMacKeys.push(sk[1].rcvmac)}),this.their_old_y=this.their_y,this.sessKeys[0][1]=this.sessKeys[0][0],this.sessKeys[1][1]=this.sessKeys[1][0],this.their_y=their_y,this.sessKeys[0][0]=new this.DHSession(this.our_dh,this.their_y),this.sessKeys[1][0]=new this.DHSession(this.our_old_dh,this.their_y)},OTR.prototype.prepareMsg=function(msg,esk){if(this.msgstate!==CONST.MSGSTATE_ENCRYPTED||0===this.their_keyid)return this.notify("Not ready to encrypt.");var sessKeys=this.sessKeys[1][0];if(sessKeys.send_counter>=MAX_INT)return this.notify("Should have rekeyed by now.");sessKeys.send_counter+=1;var ctr=HLP.packCtr(sessKeys.send_counter),send=this.ake.otr_version+"",v3=this.ake.otr_version===CONST.OTR_VERSION_3;if(v3&&(send+=this.our_instance_tag,send+=this.their_instance_tag),send+="\x00",send+=HLP.packINT(this.our_keyid-1),send+=HLP.packINT(this.their_keyid),send+=HLP.packMPI(this.our_dh.publicKey),send+=ctr.substring(0,8),Math.ceil(msg.length/8)>=MAX_UINT)return this.notify("Message is too long.");var aes=HLP.encryptAes(CryptoJS.enc.Latin1.parse(msg),sessKeys.sendenc,ctr);return send+=HLP.packData(aes),send+=HLP.make1Mac(send,sessKeys.sendmac),send+=HLP.packData(this.oldMacKeys.splice(0).join("")),send=HLP.wrapMsg(send,this.fragment_size,v3,this.our_instance_tag,this.their_instance_tag),send[0]?this.notify(send[0]):(esk&&this.trigger("file",["send",sessKeys.extra_symkey,esk]),send[1])},OTR.prototype.handleDataMsg=function(msg){var vt=msg.version+msg.type;this.ake.otr_version===CONST.OTR_VERSION_3&&(vt+=msg.instance_tags);var types=["BYTE","INT","INT","MPI","CTR","DATA","MAC","DATA"];msg=HLP.splitype(types,msg.msg);var ign=""===msg[0];if(this.msgstate!==CONST.MSGSTATE_ENCRYPTED||8!==msg.length)return void(ign||this.error("Received an unreadable encrypted message."));var our_keyid=this.our_keyid-HLP.readLen(msg[2]),their_keyid=this.their_keyid-HLP.readLen(msg[1]);if(0>our_keyid||our_keyid>1)return void(ign||this.error("Not of our latest keys."));if(0>their_keyid||their_keyid>1)return void(ign||this.error("Not of your latest keys."));var their_y=their_keyid?this.their_old_y:this.their_y;if(1===their_keyid&&!their_y)return void(ign||this.error("Do not have that key."));var sessKeys=this.sessKeys[our_keyid][their_keyid],ctr=HLP.unpackCtr(msg[4]);if(ctr<=sessKeys.rcv_counter)return void(ign||this.error("Counter in message is not larger."));sessKeys.rcv_counter=ctr,vt+=msg.slice(0,6).join("");var vmac=HLP.make1Mac(vt,sessKeys.rcvmac);if(!HLP.compare(msg[6],vmac))return void(ign||this.error("MACs do not match."));sessKeys.rcvmacused=!0;var out=HLP.decryptAes(msg[5].substring(4),sessKeys.rcvenc,HLP.padCtr(msg[4]));out=out.toString(CryptoJS.enc.Latin1),our_keyid||this.rotateOurKeys(),their_keyid||this.rotateTheirKeys(HLP.readMPI(msg[3]));var ind=out.indexOf("\x00");return~ind&&(this.handleTLVs(out.substring(ind+1),sessKeys),out=out.substring(0,ind)),out=CryptoJS.enc.Latin1.parse(out),out.toString(CryptoJS.enc.Utf8)},OTR.prototype.handleTLVs=function(tlvs,sessKeys){for(var type,len,msg;tlvs.length&&(type=HLP.unpackSHORT(tlvs.substr(0,2)),len=HLP.unpackSHORT(tlvs.substr(2,2)),msg=tlvs.substr(4,len),!(msg.length<len));){switch(type){case 1:this.msgstate=CONST.MSGSTATE_FINISHED,this.trigger("status",[CONST.STATUS_END_OTR]);break;case 2:case 3:case 4:case 5:case 6:case 7:if(this.msgstate!==CONST.MSGSTATE_ENCRYPTED)return void(this.sm&&this.sm.abort());this.sm||this._smInit(),this.sm.handleSM({msg:msg,type:type});break;case 8:msg=msg.substring(4),msg=CryptoJS.enc.Latin1.parse(msg),msg=msg.toString(CryptoJS.enc.Utf8),this.trigger("file",["receive",sessKeys.extra_symkey,msg])}tlvs=tlvs.substring(4+len)}},OTR.prototype.smpSecret=function(secret,question){return this.msgstate!==CONST.MSGSTATE_ENCRYPTED?this.notify("Must be encrypted for SMP."):"string"!=typeof secret||secret.length<1?this.notify("Secret is required."):(this.sm||this._smInit(),secret=CryptoJS.enc.Utf8.parse(secret).toString(CryptoJS.enc.Latin1),question&&(question=CryptoJS.enc.Utf8.parse(question).toString(CryptoJS.enc.Latin1)),void this.sm.rcvSecret(secret,question))},OTR.prototype.sendQueryMsg=function(){var versions={},msg=CONST.OTR_TAG;this.ALLOW_V2&&(versions[2]=!0),this.ALLOW_V3&&(versions[3]=!0);var vs=Object.keys(versions);vs.length&&(msg+="v",vs.forEach(function(v){"1"!==v&&(msg+=v)}),msg+="?"),this.io(msg),this.trigger("status",[CONST.STATUS_SEND_QUERY])},OTR.prototype.sendMsg=function(msg,meta){switch((this.REQUIRE_ENCRYPTION||this.msgstate!==CONST.MSGSTATE_PLAINTEXT)&&(msg=CryptoJS.enc.Utf8.parse(msg),msg=msg.toString(CryptoJS.enc.Latin1)),this.msgstate){case CONST.MSGSTATE_PLAINTEXT:if(this.REQUIRE_ENCRYPTION)return this.storedMgs.push({msg:msg,meta:meta}),void this.sendQueryMsg();this.SEND_WHITESPACE_TAG&&!this.receivedPlaintext&&(msg+=CONST.WHITESPACE_TAG,this.ALLOW_V3&&(msg+=CONST.WHITESPACE_TAG_V3),this.ALLOW_V2&&(msg+=CONST.WHITESPACE_TAG_V2));break;case CONST.MSGSTATE_FINISHED:return this.storedMgs.push({msg:msg,meta:meta}),void this.notify("Message cannot be sent at this time.","warn");case CONST.MSGSTATE_ENCRYPTED:msg=this.prepareMsg(msg);break;default:throw new Error("Unknown message state.")}msg&&this.io(msg,meta)},OTR.prototype.receiveMsg=function(msg,meta){if(msg=Parse.parseMsg(this,msg)){switch(msg.cls){case"error":return void this.notify(msg.msg);case"ake":return msg.version===CONST.OTR_VERSION_3&&this.checkInstanceTags(msg.instance_tags)?void this.notify("Received a message intended for a different session.","warn"):void this.ake.handleAKE(msg);case"data":if(msg.version===CONST.OTR_VERSION_3&&this.checkInstanceTags(msg.instance_tags))return void this.notify("Received a message intended for a different session.","warn");msg.msg=this.handleDataMsg(msg),msg.encrypted=!0;break;case"query":this.msgstate===CONST.MSGSTATE_ENCRYPTED&&this._akeInit(),this.doAKE(msg);break;default:(this.REQUIRE_ENCRYPTION||this.msgstate!==CONST.MSGSTATE_PLAINTEXT)&&this.notify("Received an unencrypted message.","warn"),this.receivedPlaintext=!0,this.WHITESPACE_START_AKE&&msg.ver.length>0&&this.doAKE(msg)}msg.msg&&this.trigger("ui",[msg.msg,!!msg.encrypted,meta])}},OTR.prototype.checkInstanceTags=function(it){var their_it=HLP.readLen(it.substr(0,4)),our_it=HLP.readLen(it.substr(4,4));if(our_it&&our_it!==HLP.readLen(this.our_instance_tag))return!0;if(HLP.readLen(this.their_instance_tag)){if(HLP.readLen(this.their_instance_tag)!==their_it)return!0}else{if(100>their_it)return!0;this.their_instance_tag=HLP.packINT(their_it)}},OTR.prototype.doAKE=function(msg){this.ALLOW_V3&&~msg.ver.indexOf(CONST.OTR_VERSION_3)?this.ake.initiateAKE(CONST.OTR_VERSION_3):this.ALLOW_V2&&~msg.ver.indexOf(CONST.OTR_VERSION_2)?this.ake.initiateAKE(CONST.OTR_VERSION_2):this.notify("OTR conversation requested, but no compatible protocol version found.","warn")},OTR.prototype.error=function(err){this.debug||(err="An OTR error has occurred."),this.io("?OTR Error:"+err),this.notify(err)},OTR.prototype.notify=function(err,severity){this.trigger("error",[err,severity||"error"])},OTR.prototype.sendStored=function(){var self=this;this.storedMgs.splice(0).forEach(function(elem){var msg=self.prepareMsg(elem.msg);self.io(msg,elem.meta)})},OTR.prototype.sendFile=function(filename){if(this.msgstate!==CONST.MSGSTATE_ENCRYPTED)return this.notify("Not ready to encrypt.");if(this.ake.otr_version!==CONST.OTR_VERSION_3)return this.notify("Protocol v3 required.");if(!filename)return this.notify("Please specify a filename.");var l1name=CryptoJS.enc.Utf8.parse(filename);if(l1name=l1name.toString(CryptoJS.enc.Latin1),l1name.length>=65532)return this.notify("Filename is too long.");var msg="\x00";msg+="\x00\b",msg+=HLP.packSHORT(4+l1name.length),msg+="\x00\x00\x00",msg+=l1name,msg=this.prepareMsg(msg,filename),this.io(msg)},OTR.prototype.endOtr=function(cb){this.msgstate===CONST.MSGSTATE_ENCRYPTED&&("function"==typeof cb&&(cb=new OTRCB(cb)),this.sendMsg("\x00\x00\x00\x00",cb),this.sm&&(this.smw&&this.sm.worker.terminate(),this.sm=null)),this.msgstate=CONST.MSGSTATE_PLAINTEXT,this.receivedPlaintext=!1,this.trigger("status",[CONST.STATUS_END_OTR])},OTR.makeInstanceTag=function(){var num=BigInt.randBigInt(32);return BigInt.greater(BigInt.str2bigInt("100",16),num)?OTR.makeInstanceTag():HLP.packINT(parseInt(BigInt.bigInt2str(num,10),10))}}.call(this),{OTR:this.OTR,DSA:this.DSA}}),/*!
+ * Source: lib/i18next/release/i18next-latest.min.js, license: MIT, url: http://i18next.com/
+ */
+!function(){function a(a,b){if(!b||"function"==typeof b)return a;for(var c in b)a[c]=b[c];return a}function b(a,c){for(var d in c)d in a?b(a[d],c[d]):a[d]=c[d];return a}function c(a,b,c){var d,e=0,f=a.length,g=void 0===f||"[object Array]"!==Object.prototype.toString.apply(a)||"function"==typeof a;if(c)if(g){for(d in a)if(b.apply(a[d],c)===!1)break}else for(;f>e&&b.apply(a[e++],c)!==!1;);else if(g){for(d in a)if(b.call(a[d],d,a[d])===!1)break}else for(;f>e&&b.call(a[e],e,a[e++])!==!1;);return a}function d(a){return"string"==typeof a?a.replace(/[&<>"'\/]/g,function(a){return Q[a]}):a}function e(a){var b=function(a){if(window.XMLHttpRequest)return a(null,new XMLHttpRequest);if(window.ActiveXObject)try{return a(null,new ActiveXObject("Msxml2.XMLHTTP"))}catch(b){return a(null,new ActiveXObject("Microsoft.XMLHTTP"))}return a(new Error)},c=function(a){if("string"==typeof a)return a;var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")},d=function(a){a=a.replace(/\r\n/g,"\n");for(var b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);128>d?b+=String.fromCharCode(d):d>127&&2048>d?(b+=String.fromCharCode(192|d>>6),b+=String.fromCharCode(128|63&d)):(b+=String.fromCharCode(224|d>>12),b+=String.fromCharCode(128|63&d>>6),b+=String.fromCharCode(128|63&d))}return b},e=function(a){var b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";a=d(a);var c,e,f,g,h,i,j,k="",l=0;do c=a.charCodeAt(l++),e=a.charCodeAt(l++),f=a.charCodeAt(l++),g=c>>2,h=(3&c)<<4|e>>4,i=(15&e)<<2|f>>6,j=63&f,isNaN(e)?i=j=64:isNaN(f)&&(j=64),k+=b.charAt(g)+b.charAt(h)+b.charAt(i)+b.charAt(j),c=e=f="",g=h=i=j="";while(l<a.length);return k},f=function(){for(var a=arguments[0],b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}return a},g=function(a,d,e,h){"function"==typeof e&&(h=e,e={}),e.cache=e.cache||!1,e.data=e.data||{},e.headers=e.headers||{},e.jsonp=e.jsonp||!1,e.async=void 0===e.async?!0:e.async;var i,j=f({accept:"*/*","content-type":"application/x-www-form-urlencoded;charset=UTF-8"},g.headers,e.headers);if(i="application/json"===j["content-type"]?JSON.stringify(e.data):c(e.data),"GET"===a){var k=[];if(i&&(k.push(i),i=null),e.cache||k.push("_="+(new Date).getTime()),e.jsonp&&(k.push("callback="+e.jsonp),k.push("jsonp="+e.jsonp)),k=k.join("&"),k.length>1&&(d+=d.indexOf("?")>-1?"&"+k:"?"+k),e.jsonp){var l=document.getElementsByTagName("head")[0],m=document.createElement("script");return m.type="text/javascript",m.src=d,void l.appendChild(m)}}b(function(b,c){if(b)return h(b);c.open(a,d,e.async);for(var f in j)j.hasOwnProperty(f)&&c.setRequestHeader(f,j[f]);c.onreadystatechange=function(){if(4===c.readyState){var a=c.responseText||"";if(!h)return;h(c.status,{text:function(){return a},json:function(){try{return JSON.parse(a)}catch(b){return T.error("Can not parse JSON. URL: "+d),{}}}})}},c.send(i)})},h={authBasic:function(a,b){g.headers.Authorization="Basic "+e(a+":"+b)},connect:function(a,b,c){return g("CONNECT",a,b,c)},del:function(a,b,c){return g("DELETE",a,b,c)},get:function(a,b,c){return g("GET",a,b,c)},head:function(a,b,c){return g("HEAD",a,b,c)},headers:function(a){g.headers=a||{}},isAllowed:function(a,b,c){this.options(a,function(a,d){c(-1!==d.text().indexOf(b))})},options:function(a,b,c){return g("OPTIONS",a,b,c)},patch:function(a,b,c){return g("PATCH",a,b,c)},post:function(a,b,c){return g("POST",a,b,c)},put:function(a,b,c){return g("PUT",a,b,c)},trace:function(a,b,c){return g("TRACE",a,b,c)}},i=a.type?a.type.toLowerCase():"get";h[i](a.url,a,function(b,c){200===b||0===b&&c.text()?a.success(c.json(),b,null):a.error(c.text(),b,null)})}function f(a,b){"function"==typeof a&&(b=a,a={}),a=a||{},T.extend(P,a),delete P.fixLng,P.functions&&(delete P.functions,T.extend(T,a.functions)),"string"==typeof P.ns&&(P.ns={namespaces:[P.ns],defaultNs:P.ns}),"string"==typeof P.fallbackNS&&(P.fallbackNS=[P.fallbackNS]),("string"==typeof P.fallbackLng||"boolean"==typeof P.fallbackLng)&&(P.fallbackLng=[P.fallbackLng]),P.interpolationPrefixEscaped=T.regexEscape(P.interpolationPrefix),P.interpolationSuffixEscaped=T.regexEscape(P.interpolationSuffix),P.lng||(P.lng=T.detectLanguage()),L=T.toLanguages(P.lng),F=L[0],T.log("currentLng set to: "+F),P.useCookie&&T.cookie.read(P.cookieName)!==F&&T.cookie.create(P.cookieName,F,P.cookieExpirationTime,P.cookieDomain),P.detectLngFromLocalStorage&&"undefined"!=typeof document&&window.localStorage&&T.localStorage.setItem("i18next_lng",F);var c=z;a.fixLng&&(c=function(a,b){return b=b||{},b.lng=b.lng||c.lng,z(a,b)},c.lng=F),W.setCurrentLng(F),H&&P.setJqueryExt&&s();var d;if(H&&H.Deferred&&(d=H.Deferred()),!P.resStore){var e=T.toLanguages(P.lng);"string"==typeof P.preload&&(P.preload=[P.preload]);for(var f=0,g=P.preload.length;g>f;f++)for(var h=T.toLanguages(P.preload[f]),i=0,j=h.length;j>i;i++)e.indexOf(h[i])<0&&e.push(h[i]);return I.sync.load(e,P,function(a,e){J=e,M=!0,b&&b(c),d&&d.resolve(c)}),d?d.promise():void 0}return J=P.resStore,M=!0,b&&b(c),d&&d.resolve(c),d?d.promise():void 0}function g(a,b){"string"==typeof a&&(a=[a]);for(var c=0,d=a.length;d>c;c++)P.preload.indexOf(a[c])<0&&P.preload.push(a[c]);return f(b)}function h(a,b,c,d){"string"!=typeof b?(c=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b),J[a]=J[a]||{},J[a][b]=J[a][b]||{},d?T.deepExtend(J[a][b],c):T.extend(J[a][b],c)}function i(a,b){"string"!=typeof b&&(b=P.ns.defaultNs),J[a]=J[a]||{};var c=J[a][b]||{},d=!1;for(var e in c)c.hasOwnProperty(e)&&(d=!0);return d}function j(a,b){"string"!=typeof b&&(b=P.ns.defaultNs),J[a]=J[a]||{},J[a][b]={}}function k(a,b,c,d){"string"!=typeof b?(resource=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b),J[a]=J[a]||{},J[a][b]=J[a][b]||{};for(var e=c.split(P.keyseparator),f=0,g=J[a][b];e[f];)f==e.length-1?g[e[f]]=d:(null==g[e[f]]&&(g[e[f]]={}),g=g[e[f]]),f++}function l(a,b,c){"string"!=typeof b?(resource=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b);for(var d in c)"string"==typeof c[d]&&k(a,b,d,c[d])}function m(a){P.ns.defaultNs=a}function n(a,b){o([a],b)}function o(a,b){var c={dynamicLoad:P.dynamicLoad,resGetPath:P.resGetPath,getAsync:P.getAsync,customLoad:P.customLoad,ns:{namespaces:a,defaultNs:""}},d=T.toLanguages(P.lng);"string"==typeof P.preload&&(P.preload=[P.preload]);for(var e=0,f=P.preload.length;f>e;e++)for(var g=T.toLanguages(P.preload[e]),h=0,i=g.length;i>h;h++)d.indexOf(g[h])<0&&d.push(g[h]);for(var j=[],k=0,l=d.length;l>k;k++){var m=!1,n=J[d[k]];if(n)for(var o=0,p=a.length;p>o;o++)n[a[o]]||(m=!0);else m=!0;m&&j.push(d[k])}j.length?I.sync._fetch(j,c,function(c,d){var e=a.length*j.length;T.each(a,function(a,c){P.ns.namespaces.indexOf(c)<0&&P.ns.namespaces.push(c),T.each(j,function(a,f){J[f]=J[f]||{},J[f][c]=d[f][c],e--,0===e&&b&&(P.useLocalStorage&&I.sync._storeLocal(J),b())})})}):b&&b()}function p(a,b,c){return"function"==typeof b?(c=b,b={}):b||(b={}),b.lng=a,f(b,c)}function q(){return F}function r(a){J={},p(F,a)}function s(){function a(a,b,c){if(0!==b.length){var d="text";if(0===b.indexOf("[")){var e=b.split("]");b=e[1],d=e[0].substr(1,e[0].length-1)}b.indexOf(";")===b.length-1&&(b=b.substr(0,b.length-2));var f;if("html"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.html(H.t(b,f));else if("text"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.text()},c):c,a.text(H.t(b,f));else if("prepend"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.prepend(H.t(b,f));else if("append"===d)f=P.defaultValueFromContent?H.extend({defaultValue:a.html()},c):c,a.append(H.t(b,f));else if(0===d.indexOf("data-")){var g=d.substr("data-".length);f=P.defaultValueFromContent?H.extend({defaultValue:a.data(g)},c):c;var h=H.t(b,f);a.data(g,h),a.attr(d,h)}else f=P.defaultValueFromContent?H.extend({defaultValue:a.attr(d)},c):c,a.attr(d,H.t(b,f))}}function b(b,c){var d=b.attr(P.selectorAttr);if(d||"undefined"==typeof d||d===!1||(d=b.text()||b.val()),d){var e=b,f=b.data("i18n-target");if(f&&(e=b.find(f)||b),c||P.useDataAttrOptions!==!0||(c=b.data("i18n-options")),c=c||{},d.indexOf(";")>=0){var g=d.split(";");H.each(g,function(b,d){""!==d&&a(e,d,c)})}else a(e,d,c);P.useDataAttrOptions===!0&&b.data("i18n-options",c)}}H.t=H.t||z,H.fn.i18n=function(a){return this.each(function(){b(H(this),a);var c=H(this).find("["+P.selectorAttr+"]");c.each(function(){b(H(this),a)})})}}function t(a,b,c,d){if(!a)return a;if(d=d||b,a.indexOf(d.interpolationPrefix||P.interpolationPrefix)<0)return a;var e=d.interpolationPrefix?T.regexEscape(d.interpolationPrefix):P.interpolationPrefixEscaped,f=d.interpolationSuffix?T.regexEscape(d.interpolationSuffix):P.interpolationSuffixEscaped,g="HTML"+f,h=b.replace&&"object"==typeof b.replace?b.replace:b;return T.each(h,function(b,h){var i=c?c+P.keyseparator+b:b;"object"==typeof h&&null!==h?a=t(a,h,i,d):d.escapeInterpolation||P.escapeInterpolation?(a=a.replace(new RegExp([e,i,g].join(""),"g"),T.regexReplacementEscape(h)),a=a.replace(new RegExp([e,i,f].join(""),"g"),T.regexReplacementEscape(T.escape(h)))):a=a.replace(new RegExp([e,i,f].join(""),"g"),T.regexReplacementEscape(h))}),a}function u(a,b){var c=",",d="{",e="}",f=T.extend({},b);for(delete f.postProcess;-1!=a.indexOf(P.reusePrefix)&&(K++,!(K>P.maxRecursion));){var g=a.lastIndexOf(P.reusePrefix),h=a.indexOf(P.reuseSuffix,g)+P.reuseSuffix.length,i=a.substring(g,h),j=i.replace(P.reusePrefix,"").replace(P.reuseSuffix,"");if(g>=h)return T.error("there is an missing closing in following translation value",a),"";if(-1!=j.indexOf(c)){var k=j.indexOf(c);if(-1!=j.indexOf(d,k)&&-1!=j.indexOf(e,k)){var l=j.indexOf(d,k),m=j.indexOf(e,l)+e.length;try{f=T.extend(f,JSON.parse(j.substring(l,m))),j=j.substring(0,k)}catch(n){}}}var o=C(j,f);a=a.replace(i,T.regexReplacementEscape(o))}return a}function v(a){return a.context&&("string"==typeof a.context||"number"==typeof a.context)}function w(a){return void 0!==a.count&&"string"!=typeof a.count}function x(a){return void 0!==a.indefinite_article&&"string"!=typeof a.indefinite_article&&a.indefinite_article}function y(a,b){b=b||{};var c=A(a,b),d=D(a,b);return void 0!==d||d===c}function z(a,b){return b=b||{},M?(K=0,C.apply(null,arguments)):(T.log("i18next not finished initialization. you might have called t function before loading resources finished."),b.defaultValue||"")}function A(a,b){return void 0!==b.defaultValue?b.defaultValue:a}function B(){for(var a=[],b=1;b<arguments.length;b++)a.push(arguments[b]);return{postProcess:"sprintf",sprintf:a}}function C(a,b){if(b&&"object"!=typeof b?"sprintf"===P.shortcutFunction?b=B.apply(null,arguments):"defaultValue"===P.shortcutFunction&&(b={defaultValue:b}):b=b||{},"object"==typeof P.defaultVariables&&(b=T.extend({},P.defaultVariables,b)),void 0===a||null===a||""===a)return"";"string"==typeof a&&(a=[a]);var c=a[0];if(a.length>1)for(var d=0;d<a.length&&(c=a[d],!y(c,b));d++);var e,f=A(c,b),g=D(c,b),h=b.lng?T.toLanguages(b.lng,b.fallbackLng):L,i=b.ns||P.ns.defaultNs;c.indexOf(P.nsseparator)>-1&&(e=c.split(P.nsseparator),i=e[0],c=e[1]),void 0===g&&P.sendMissing&&"function"==typeof P.missingKeyHandler&&(b.lng?P.missingKeyHandler(h[0],i,c,f,h):P.missingKeyHandler(P.lng,i,c,f,h));var j=b.postProcess||P.postProcess;void 0!==g&&j&&X[j]&&(g=X[j](g,c,b));var k=f;if(f.indexOf(P.nsseparator)>-1&&(e=f.split(P.nsseparator),k=e[1]),k===c&&P.parseMissingKey&&(f=P.parseMissingKey(f)),void 0===g&&(f=t(f,b),f=u(f,b),j&&X[j])){var l=A(c,b);g=X[j](l,c,b)}return void 0!==g?g:f}function D(a,b){b=b||{};var c,d,e=A(a,b),f=L;if(!J)return e;if("cimode"===f[0].toLowerCase())return e;if(b.lngs&&(f=b.lngs),b.lng&&(f=T.toLanguages(b.lng,b.fallbackLng),!J[f[0]])){var g=P.getAsync;P.getAsync=!1,I.sync.load(f,P,function(a,b){T.extend(J,b),P.getAsync=g})}var h=b.ns||P.ns.defaultNs;if(a.indexOf(P.nsseparator)>-1){var i=a.split(P.nsseparator);h=i[0],a=i[1]}if(v(b)){c=T.extend({},b),delete c.context,c.defaultValue=P.contextNotFound;var j=h+P.nsseparator+a+"_"+b.context;if(d=z(j,c),d!=P.contextNotFound)return t(d,{context:b.context})}if(w(b,f[0])){c=T.extend({lngs:[f[0]]},b),delete c.count,delete c.lng,c.defaultValue=P.pluralNotFound;var k;if(W.needsPlural(f[0],b.count)){k=h+P.nsseparator+a+P.pluralSuffix;var l=W.get(f[0],b.count);l>=0?k=k+"_"+l:1===l&&(k=h+P.nsseparator+a)}else k=h+P.nsseparator+a;if(d=z(k,c),d!=P.pluralNotFound)return t(d,{count:b.count,interpolationPrefix:b.interpolationPrefix,interpolationSuffix:b.interpolationSuffix});if(!(f.length>1))return d;var m=f.slice();if(m.shift(),b=T.extend(b,{lngs:m}),delete b.lng,d=z(h+P.nsseparator+a,b),d!=P.pluralNotFound)return d}if(x(b)){var n=T.extend({},b);delete n.indefinite_article,n.defaultValue=P.indefiniteNotFound;var o=h+P.nsseparator+a+(b.count&&!w(b,f[0])||!b.count?P.indefiniteSuffix:"");if(d=z(o,n),d!=P.indefiniteNotFound)return d}for(var p,q=a.split(P.keyseparator),r=0,s=f.length;s>r&&void 0===p;r++){for(var y=f[r],B=0,E=J[y]&&J[y][h];q[B];)E=E&&E[q[B]],B++;if(void 0!==E){var F=Object.prototype.toString.apply(E);if("string"==typeof E)E=t(E,b),E=u(E,b);else if("[object Array]"!==F||P.returnObjectTrees||b.returnObjectTrees){if(null===E&&P.fallbackOnNull===!0)E=void 0;else if(null!==E)if(P.returnObjectTrees||b.returnObjectTrees){if("[object Number]"!==F&&"[object Function]"!==F&&"[object RegExp]"!==F){var G="[object Array]"===F?[]:{};T.each(E,function(c){G[c]=C(h+P.nsseparator+a+P.keyseparator+c,b)}),E=G}}else P.objectTreeKeyHandler&&"function"==typeof P.objectTreeKeyHandler?E=P.objectTreeKeyHandler(a,E,y,h,b):(E="key '"+h+":"+a+" ("+y+")' returned an object instead of string.",T.log(E))}else E=E.join("\n"),E=t(E,b),E=u(E,b);"string"==typeof E&&""===E.trim()&&P.fallbackOnEmpty===!0&&(E=void 0),p=E}}if(void 0===p&&!b.isFallbackLookup&&(P.fallbackToDefaultNS===!0||P.fallbackNS&&P.fallbackNS.length>0)){if(b.isFallbackLookup=!0,P.fallbackNS.length){for(var H=0,K=P.fallbackNS.length;K>H;H++)if(p=D(P.fallbackNS[H]+P.nsseparator+a,b),p||""===p&&P.fallbackOnEmpty===!1){var M=p.indexOf(P.nsseparator)>-1?p.split(P.nsseparator)[1]:p,N=e.indexOf(P.nsseparator)>-1?e.split(P.nsseparator)[1]:e;if(M!==N)break}}else p=D(a,b);b.isFallbackLookup=!1}return p}function E(){var a,b=P.lngWhitelist||[],c=[];if("undefined"!=typeof window&&!function(){for(var a=window.location.search.substring(1),b=a.split("&"),d=0;d<b.length;d++){var e=b[d].indexOf("=");if(e>0){var f=b[d].substring(0,e);f==P.detectLngQS&&c.push(b[d].substring(e+1))}}}(),P.useCookie&&"undefined"!=typeof document){var d=T.cookie.read(P.cookieName);d&&c.push(d)}if(P.detectLngFromLocalStorage&&"undefined"!=typeof window&&window.localStorage&&c.push(window.localStorage.getItem("i18next_lng")),"undefined"!=typeof navigator){if(navigator.languages)for(var e=0;e<navigator.languages.length;e++)c.push(navigator.languages[e]);navigator.userLanguage&&c.push(navigator.userLanguage),navigator.language&&c.push(navigator.language)}return function(){for(var d=0;d<c.length;d++){var e=c[d];if(e.indexOf("-")>-1){var f=e.split("-");e=P.lowerCaseLng?f[0].toLowerCase()+"-"+f[1].toLowerCase():f[0].toLowerCase()+"-"+f[1].toUpperCase()}if(0===b.length||b.indexOf(e)>-1){a=e;break}}}(),a||(a=P.fallbackLng[0]),a}Array.prototype.indexOf||(Array.prototype.indexOf=function(a){"use strict";if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>0&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&1/0!=d&&d!=-1/0&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){"use strict";if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=c;arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d))));for(var e=d>=0?Math.min(d,c-1):c-Math.abs(d);e>=0;e--)if(e in b&&b[e]===a)return e;return-1}),"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});var F,G=this,H=G.jQuery||G.Zepto,I={},J={},K=0,L=[],M=!1,N={};if("undefined"!=typeof module&&module.exports){if(!H)try{H=require("jquery")}catch(O){}H&&(H.i18n=H.i18n||I),module.exports=I}else H&&(H.i18n=H.i18n||I),G.i18n=G.i18n||I;N={load:function(a,b,c){b.useLocalStorage?N._loadLocal(a,b,function(d,e){for(var f=[],g=0,h=a.length;h>g;g++)e[a[g]]||f.push(a[g]);f.length>0?N._fetch(f,b,function(a,b){T.extend(e,b),N._storeLocal(b),c(null,e)}):c(null,e)}):N._fetch(a,b,function(a,b){c(null,b)})},_loadLocal:function(a,b,c){var d={},e=(new Date).getTime();if(window.localStorage){var f=a.length;T.each(a,function(a,g){var h=window.localStorage.getItem("res_"+g);h&&(h=JSON.parse(h),h.i18nStamp&&h.i18nStamp+b.localStorageExpirationTime>e&&(d[g]=h)),f--,0===f&&c(null,d)})}},_storeLocal:function(a){if(window.localStorage)for(var b in a)a[b].i18nStamp=(new Date).getTime(),T.localStorage.setItem("res_"+b,JSON.stringify(a[b]))},_fetch:function(a,b,c){var d=b.ns,e={};if(b.dynamicLoad){var f=function(a,b){c(null,b)};if("function"==typeof b.customLoad)b.customLoad(a,d.namespaces,b,f);else{var g=t(b.resGetPath,{lng:a.join("+"),ns:d.namespaces.join("+")});T.ajax({url:g,success:function(a){T.log("loaded: "+g),f(null,a)},error:function(a,b,c){T.log("failed loading: "+g),f("failed loading resource.json error: "+c)},dataType:"json",async:b.getAsync})}}else{var h,i=d.namespaces.length*a.length;T.each(d.namespaces,function(d,f){T.each(a,function(a,d){var g=function(a,b){a&&(h=h||[],h.push(a)),e[d]=e[d]||{},e[d][f]=b,i--,0===i&&c(h,e)};"function"==typeof b.customLoad?b.customLoad(d,f,b,g):N._fetchOne(d,f,b,g)})})}},_fetchOne:function(a,b,c,d){var e=t(c.resGetPath,{lng:a,ns:b});T.ajax({url:e,success:function(a){T.log("loaded: "+e),d(null,a)},error:function(a,b,c){if(b&&200==b||a&&a.status&&200==a.status)T.error("There is a typo in: "+e);else if(b&&404==b||a&&a.status&&404==a.status)T.log("Does not exist: "+e);else{var f=b?b:a&&a.status?a.status:null;T.log(f+" when loading "+e)}d(c,{})},dataType:"json",async:c.getAsync})},postMissing:function(a,b,c,d,e){var f={};f[c]=d;var g=[];if("fallback"===P.sendMissingTo&&P.fallbackLng[0]!==!1)for(var h=0;h<P.fallbackLng.length;h++)g.push({lng:P.fallbackLng[h],url:t(P.resPostPath,{lng:P.fallbackLng[h],ns:b})});else if("current"===P.sendMissingTo||"fallback"===P.sendMissingTo&&P.fallbackLng[0]===!1)g.push({lng:a,url:t(P.resPostPath,{lng:a,ns:b})});else if("all"===P.sendMissingTo)for(var h=0,i=e.length;i>h;h++)g.push({lng:e[h],url:t(P.resPostPath,{lng:e[h],ns:b})});for(var j=0,k=g.length;k>j;j++){var l=g[j];T.ajax({url:l.url,type:P.sendType,data:f,success:function(){T.log("posted missing key '"+c+"' to: "+l.url);for(var a=c.split("."),e=0,f=J[l.lng][b];a[e];)f=f[a[e]]=e===a.length-1?d:f[a[e]]||{},e++},error:function(){T.log("failed posting missing key '"+c+"' to: "+l.url)},dataType:"json",async:P.postAsync})}},reload:r};var P={lng:void 0,load:"all",preload:[],lowerCaseLng:!1,returnObjectTrees:!1,fallbackLng:["dev"],fallbackNS:[],detectLngQS:"setLng",detectLngFromLocalStorage:!1,ns:"translation",fallbackOnNull:!0,fallbackOnEmpty:!1,fallbackToDefaultNS:!1,nsseparator:":",keyseparator:".",selectorAttr:"data-i18n",debug:!1,resGetPath:"locales/__lng__/__ns__.json",resPostPath:"locales/add/__lng__/__ns__",getAsync:!0,postAsync:!0,resStore:void 0,useLocalStorage:!1,localStorageExpirationTime:6048e5,dynamicLoad:!1,sendMissing:!1,sendMissingTo:"fallback",sendType:"POST",interpolationPrefix:"__",interpolationSuffix:"__",defaultVariables:!1,reusePrefix:"$t(",reuseSuffix:")",pluralSuffix:"_plural",pluralNotFound:["plural_not_found",Math.random()].join(""),contextNotFound:["context_not_found",Math.random()].join(""),escapeInterpolation:!1,indefiniteSuffix:"_indefinite",indefiniteNotFound:["indefinite_not_found",Math.random()].join(""),setJqueryExt:!0,defaultValueFromContent:!0,useDataAttrOptions:!1,cookieExpirationTime:void 0,useCookie:!0,cookieName:"i18next",cookieDomain:void 0,objectTreeKeyHandler:void 0,postProcess:void 0,parseMissingKey:void 0,missingKeyHandler:N.postMissing,shortcutFunction:"sprintf"},Q={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},R={create:function(a,b,c,d){var e;if(c){var f=new Date;f.setTime(f.getTime()+6e4*c),e="; expires="+f.toGMTString()}else e="";d=d?"domain="+d+";":"",document.cookie=a+"="+b+e+";"+d+"path=/"},read:function(a){for(var b=a+"=",c=document.cookie.split(";"),d=0;d<c.length;d++){for(var e=c[d];" "==e.charAt(0);)e=e.substring(1,e.length);if(0===e.indexOf(b))return e.substring(b.length,e.length)}return null},remove:function(a){this.create(a,"",-1)}},S={create:function(){},read:function(){return null},remove:function(){}},T={extend:H?H.extend:a,deepExtend:b,each:H?H.each:c,ajax:H?H.ajax:"undefined"!=typeof document?e:function(){},cookie:"undefined"!=typeof document?R:S,detectLanguage:E,escape:d,log:function(a){P.debug&&"undefined"!=typeof console&&console.log(a)},error:function(a){"undefined"!=typeof console&&console.error(a)},getCountyIndexOfLng:function(a){var b=0;return("nb-NO"===a||"nn-NO"===a||"nb-no"===a||"nn-no"===a)&&(b=1),b},toLanguages:function(a){function b(a){var b=a;if("string"==typeof a&&a.indexOf("-")>-1){var c=a.split("-");b=P.lowerCaseLng?c[0].toLowerCase()+"-"+c[1].toLowerCase():c[0].toLowerCase()+"-"+c[1].toUpperCase()}else b=P.lowerCaseLng?a.toLowerCase():a;return b}var c=this.log,d=[],e=P.lngWhitelist||!1,f=function(a){!e||e.indexOf(a)>-1?d.push(a):c("rejecting non-whitelisted language: "+a)};if("string"==typeof a&&a.indexOf("-")>-1){var g=a.split("-");"unspecific"!==P.load&&f(b(a)),"current"!==P.load&&f(b(g[this.getCountyIndexOfLng(a)]))}else f(b(a));for(var h=0;h<P.fallbackLng.length;h++)-1===d.indexOf(P.fallbackLng[h])&&P.fallbackLng[h]&&d.push(b(P.fallbackLng[h]));return d},regexEscape:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},regexReplacementEscape:function(a){return"string"==typeof a?a.replace(/\$/g,"$$$$"):a},localStorage:{setItem:function(a,b){if(window.localStorage)try{window.localStorage.setItem(a,b)}catch(c){T.log('failed to set value for key "'+a+'" to localStorage.')}}}};T.applyReplacement=t;var U=[["ach","Acholi",[1,2],1],["af","Afrikaans",[1,2],2],["ak","Akan",[1,2],1],["am","Amharic",[1,2],1],["an","Aragonese",[1,2],2],["ar","Arabic",[0,1,2,3,11,100],5],["arn","Mapudungun",[1,2],1],["ast","Asturian",[1,2],2],["ay","Aymará",[1],3],["az","Azerbaijani",[1,2],2],["be","Belarusian",[1,2,5],4],["bg","Bulgarian",[1,2],2],["bn","Bengali",[1,2],2],["bo","Tibetan",[1],3],["br","Breton",[1,2],1],["bs","Bosnian",[1,2,5],4],["ca","Catalan",[1,2],2],["cgg","Chiga",[1],3],["cs","Czech",[1,2,5],6],["csb","Kashubian",[1,2,5],7],["cy","Welsh",[1,2,3,8],8],["da","Danish",[1,2],2],["de","German",[1,2],2],["dev","Development Fallback",[1,2],2],["dz","Dzongkha",[1],3],["el","Greek",[1,2],2],["en","English",[1,2],2],["eo","Esperanto",[1,2],2],["es","Spanish",[1,2],2],["es_ar","Argentinean Spanish",[1,2],2],["et","Estonian",[1,2],2],["eu","Basque",[1,2],2],["fa","Persian",[1],3],["fi","Finnish",[1,2],2],["fil","Filipino",[1,2],1],["fo","Faroese",[1,2],2],["fr","French",[1,2],9],["fur","Friulian",[1,2],2],["fy","Frisian",[1,2],2],["ga","Irish",[1,2,3,7,11],10],["gd","Scottish Gaelic",[1,2,3,20],11],["gl","Galician",[1,2],2],["gu","Gujarati",[1,2],2],["gun","Gun",[1,2],1],["ha","Hausa",[1,2],2],["he","Hebrew",[1,2],2],["hi","Hindi",[1,2],2],["hr","Croatian",[1,2,5],4],["hu","Hungarian",[1,2],2],["hy","Armenian",[1,2],2],["ia","Interlingua",[1,2],2],["id","Indonesian",[1],3],["is","Icelandic",[1,2],12],["it","Italian",[1,2],2],["ja","Japanese",[1],3],["jbo","Lojban",[1],3],["jv","Javanese",[0,1],13],["ka","Georgian",[1],3],["kk","Kazakh",[1],3],["km","Khmer",[1],3],["kn","Kannada",[1,2],2],["ko","Korean",[1],3],["ku","Kurdish",[1,2],2],["kw","Cornish",[1,2,3,4],14],["ky","Kyrgyz",[1],3],["lb","Letzeburgesch",[1,2],2],["ln","Lingala",[1,2],1],["lo","Lao",[1],3],["lt","Lithuanian",[1,2,10],15],["lv","Latvian",[1,2,0],16],["mai","Maithili",[1,2],2],["mfe","Mauritian Creole",[1,2],1],["mg","Malagasy",[1,2],1],["mi","Maori",[1,2],1],["mk","Macedonian",[1,2],17],["ml","Malayalam",[1,2],2],["mn","Mongolian",[1,2],2],["mnk","Mandinka",[0,1,2],18],["mr","Marathi",[1,2],2],["ms","Malay",[1],3],["mt","Maltese",[1,2,11,20],19],["nah","Nahuatl",[1,2],2],["nap","Neapolitan",[1,2],2],["nb","Norwegian Bokmal",[1,2],2],["ne","Nepali",[1,2],2],["nl","Dutch",[1,2],2],["nn","Norwegian Nynorsk",[1,2],2],["no","Norwegian",[1,2],2],["nso","Northern Sotho",[1,2],2],["oc","Occitan",[1,2],1],["or","Oriya",[2,1],2],["pa","Punjabi",[1,2],2],["pap","Papiamento",[1,2],2],["pl","Polish",[1,2,5],7],["pms","Piemontese",[1,2],2],["ps","Pashto",[1,2],2],["pt","Portuguese",[1,2],2],["pt_br","Brazilian Portuguese",[1,2],2],["rm","Romansh",[1,2],2],["ro","Romanian",[1,2,20],20],["ru","Russian",[1,2,5],4],["sah","Yakut",[1],3],["sco","Scots",[1,2],2],["se","Northern Sami",[1,2],2],["si","Sinhala",[1,2],2],["sk","Slovak",[1,2,5],6],["sl","Slovenian",[5,1,2,3],21],["so","Somali",[1,2],2],["son","Songhay",[1,2],2],["sq","Albanian",[1,2],2],["sr","Serbian",[1,2,5],4],["su","Sundanese",[1],3],["sv","Swedish",[1,2],2],["sw","Swahili",[1,2],2],["ta","Tamil",[1,2],2],["te","Telugu",[1,2],2],["tg","Tajik",[1,2],1],["th","Thai",[1],3],["ti","Tigrinya",[1,2],1],["tk","Turkmen",[1,2],2],["tr","Turkish",[1,2],1],["tt","Tatar",[1],3],["ug","Uyghur",[1],3],["uk","Ukrainian",[1,2,5],4],["ur","Urdu",[1,2],2],["uz","Uzbek",[1,2],1],["vi","Vietnamese",[1],3],["wa","Walloon",[1,2],1],["wo","Wolof",[1],3],["yo","Yoruba",[1,2],2],["zh","Chinese",[1],3]],V={1:function(a){return Number(a>1)},2:function(a){return Number(1!=a)},3:function(){return 0},4:function(a){return Number(1==a%10&&11!=a%100?0:a%10>=2&&4>=a%10&&(10>a%100||a%100>=20)?1:2)},5:function(a){return Number(0===a?0:1==a?1:2==a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5)},6:function(a){return Number(1==a?0:a>=2&&4>=a?1:2)},7:function(a){return Number(1==a?0:a%10>=2&&4>=a%10&&(10>a%100||a%100>=20)?1:2)},8:function(a){return Number(1==a?0:2==a?1:8!=a&&11!=a?2:3)},9:function(a){return Number(a>=2)},10:function(a){return Number(1==a?0:2==a?1:7>a?2:11>a?3:4)},11:function(a){return Number(1==a||11==a?0:2==a||12==a?1:a>2&&20>a?2:3)},12:function(a){return Number(1!=a%10||11==a%100)},13:function(a){return Number(0!==a)},14:function(a){return Number(1==a?0:2==a?1:3==a?2:3)},15:function(a){return Number(1==a%10&&11!=a%100?0:a%10>=2&&(10>a%100||a%100>=20)?1:2)},16:function(a){return Number(1==a%10&&11!=a%100?0:0!==a?1:2)},17:function(a){return Number(1==a||1==a%10?0:1)},18:function(a){return Number(1==a?1:2)},19:function(a){return Number(1==a?0:0===a||a%100>1&&11>a%100?1:a%100>10&&20>a%100?2:3)},20:function(a){return Number(1==a?0:0===a||a%100>0&&20>a%100?1:2)},21:function(a){return Number(1==a%100?1:2==a%100?2:3==a%100||4==a%100?3:0)}},W={rules:function(){var a,b={};for(a=U.length;a--;)b[U[a][0]]={name:U[a][1],numbers:U[a][2],plurals:V[U[a][3]]};return b}(),addRule:function(a,b){W.rules[a]=b},setCurrentLng:function(a){if(!W.currentRule||W.currentRule.lng!==a){var b=a.split("-");W.currentRule={lng:a,rule:W.rules[b[0]]}}},needsPlural:function(a,b){var c,d=a.split("-");return c=W.currentRule&&W.currentRule.lng===a?W.currentRule.rule:W.rules[d[T.getCountyIndexOfLng(a)]],c&&c.numbers.length<=1?!1:1!==this.get(a,b)},get:function(a,b){function c(b,c){var d;if(d=W.currentRule&&W.currentRule.lng===a?W.currentRule.rule:W.rules[b]){var e;e=d.plurals(d.noAbs?c:Math.abs(c));var f=d.numbers[e];return 2===d.numbers.length&&1===d.numbers[0]&&(2===f?f=-1:1===f&&(f=1)),f}return 1===c?"1":"-1"}var d=a.split("-");return c(d[T.getCountyIndexOfLng(a)],b)}},X={},Y=function(a,b){X[a]=b},Z=function(){function a(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function b(a,b){for(var c=[];b>0;c[--b]=a);return c.join("")}var c=function(){return c.cache.hasOwnProperty(arguments[0])||(c.cache[arguments[0]]=c.parse(arguments[0])),c.format.call(null,c.cache[arguments[0]],arguments)};return c.format=function(c,d){var e,f,g,h,i,j,k,l=1,m=c.length,n="",o=[];for(f=0;m>f;f++)if(n=a(c[f]),"string"===n)o.push(c[f]);else if("array"===n){if(h=c[f],h[2])for(e=d[l],g=0;g<h[2].length;g++){if(!e.hasOwnProperty(h[2][g]))throw Z('[sprintf] property "%s" does not exist',h[2][g]);e=e[h[2][g]]}else e=h[1]?d[h[1]]:d[l++];if(/[^s]/.test(h[8])&&"number"!=a(e))throw Z("[sprintf] expecting number but found %s",a(e));switch(h[8]){case"b":e=e.toString(2);break;case"c":e=String.fromCharCode(e);break;case"d":e=parseInt(e,10);break;case"e":e=h[7]?e.toExponential(h[7]):e.toExponential();break;case"f":e=h[7]?parseFloat(e).toFixed(h[7]):parseFloat(e);break;case"o":e=e.toString(8);break;case"s":e=(e=String(e))&&h[7]?e.substring(0,h[7]):e;break;case"u":e=Math.abs(e);break;case"x":e=e.toString(16);break;case"X":e=e.toString(16).toUpperCase()}e=/[def]/.test(h[8])&&h[3]&&e>=0?"+"+e:e,j=h[4]?"0"==h[4]?"0":h[4].charAt(1):" ",k=h[6]-String(e).length,i=h[6]?b(j,k):"",o.push(h[5]?e+i:i+e)}return o.join("")},c.cache={},c.parse=function(a){for(var b=a,c=[],d=[],e=0;b;){if(null!==(c=/^[^\x25]+/.exec(b)))d.push(c[0]);else if(null!==(c=/^\x25{2}/.exec(b)))d.push("%");else{if(null===(c=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b)))throw"[sprintf] huh?";if(c[2]){e|=1;var f=[],g=c[2],h=[];if(null===(h=/^([a-z_][a-z_\d]*)/i.exec(g)))throw"[sprintf] huh?";for(f.push(h[1]);""!==(g=g.substring(h[0].length));)if(null!==(h=/^\.([a-z_][a-z_\d]*)/i.exec(g)))f.push(h[1]);else{if(null===(h=/^\[(\d+)\]/.exec(g)))throw"[sprintf] huh?";f.push(h[1])}c[2]=f}else e|=2;if(3===e)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";d.push(c)}b=b.substring(c[0].length)}return d},c}(),$=function(a,b){return b.unshift(a),Z.apply(null,b)};Y("sprintf",function(a,b,c){return c.sprintf?"[object Array]"===Object.prototype.toString.apply(c.sprintf)?$(a,c.sprintf):"object"==typeof c.sprintf?Z(a,c.sprintf):a:a}),I.init=f,I.setLng=p,I.preload=g,I.addResourceBundle=h,I.hasResourceBundle=i,I.addResource=k,I.addResources=l,I.removeResourceBundle=j,I.loadNamespace=n,I.loadNamespaces=o,I.setDefaultNamespace=m,I.t=z,I.translate=z,I.exists=y,I.detectLanguage=T.detectLanguage,I.pluralExtensions=W,I.sync=N,I.functions=T,I.lng=q,I.addPostProcessor=Y,I.options=P}();/*!
+ * Source: lib/translation.js, license: MIT, url: https://webtranslateit.com/en/projects/10365-JSXC
+ */
+var I18next={de:{translation:{Logging_in:"Login läuft…",your_connection_is_unencrypted:"Deine Verbindung ist unverschlüsselt.",your_connection_is_encrypted:"Deine Verbindung ist verschlüsselt.",your_buddy_closed_the_private_connection:"Dein Kontakt hat die private Verbindung getrennt.",start_private:"Privat starten",close_private:"Privat abbrechen",your_buddy_is_verificated:"Dein Kontakt ist verifiziert.",you_have_only_a_subscription_in_one_way:"Der Kontaktstatus ist einseitig.",authentication_query_sent:"Authentifizierungsanfrage gesendet.",your_message_wasnt_send_please_end_your_private_conversation:"Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.",unencrypted_message_received:"Unverschlüsselte Nachricht erhalten.",your_message_wasnt_send_because_you_have_no_valid_subscription:"Deine Nachricht wurde nicht gesandt, da der Kontaktstatus einseitig ist.",not_available:"Nicht verfügbar.",no_connection:"Keine Verbindung.",relogin:"Neu anmelden.",trying_to_start_private_conversation:"Versuche private Konversation zu starten.",Verified:"Verifiziert",Unverified:"Unverifiziert",private_conversation_started:"Private Konversation gestartet.",private_conversation_aborted:"Private Konversation abgebrochen.",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Dein Kontakt hat die private Konversation beendet. Das solltest du auch tun!",conversation_is_now_verified:"Konversation ist jetzt verifiziert",authentication_failed:"Authentifizierung fehlgeschlagen.",your_buddy_is_attempting_to_determine_:"Dein Kontakt versucht herauszufinden ob er wirklich mit dir redet.",to_authenticate_to_your_buddy:"Um dich gegenüber deinem Kontakt zu verifizieren ",enter_the_answer_and_click_answer:"gib die Antwort ein und klick auf Antworten.",enter_the_secret:"gib das Geheimnis ein.",Creating_your_private_key_:"Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.",Authenticating_a_buddy_helps_:"Einen Kontakt zu authentifizieren hilft sicherzustellen, dass die Person mit der du sprichst auch die ist die sie sagt.",How_do_you_want_to_authenticate_your_buddy:"Wie willst du {{bid_name}} (<b>{{bid_jid}}</b>) authentifizieren?",Select_method:"Wähle...",Manual:"Manual",Question:"Frage",Secret:"Geheimnis",To_verify_the_fingerprint_:"Um den Fingerprint zu verifizieren kontaktiere dein Kontakt über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.",Your_fingerprint:"Dein Fingerprint",Buddy_fingerprint:"Sein/Ihr Fingerprint",Close:"Schließen",Compared:"Verglichen",To_authenticate_using_a_question_:"Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Kontakt die Antwort kennt.",Ask:"Frage",To_authenticate_pick_a_secret_:"Um deinen Kontakt zu authentifizieren, wähle ein Geheimnis welches nur deinem Kontakt und dir bekannt ist.",Compare:"Vergleiche",Fingerprints:"Fingerprints",Authentication:"Authentifizierung",Message:"Nachricht",Add_buddy:"Kontakt hinzufügen",rename_buddy:"Kontakt umbenennen",delete_buddy:"Kontakt löschen",Login:"Anmeldung",Username:"Benutzername",Password:"Passwort",Cancel:"Abbrechen",Connect:"Verbinden",Type_in_the_full_username_:"Gib bitte den vollen Benutzernamen und optional ein Alias an.",Alias:"Alias",Add:"Hinzufügen",Subscription_request:"Kontaktanfrage",You_have_a_request_from:"Du hast eine Anfrage von",Deny:"Ablehnen",Approve:"Bestätigen",Remove_buddy:"Kontakt entfernen",You_are_about_to_remove_:"Du bist gerade dabei {{bid_name}} (<b>{{bid_jid}}</b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.",Continue_without_chat:"Weiter ohne Chat",Please_wait:"Bitte warten",Login_failed:"Chat-Anmeldung fehlgeschlagen",Sorry_we_cant_authentikate_:"Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?",Retry:"Zurück",clear_history:"Lösche Verlauf",New_message_from:"Neue Nachricht von",Should_we_notify_you_:"Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?",Please_accept_:'Bitte klick auf den "Zulassen" Button oben.',Hide_offline:"Offline ausblenden",Show_offline:"Offline einblenden",About:"Über",dnd:"Beschäftigt",Mute:"Ton aus",Unmute:"Ton an",Subscription:"Bezug",both:"beidseitig",Status:"Status",online:"online",chat:"chat",away:"abwesend",xa:"länger abwesend",offline:"offline",none:"keine",Unknown_instance_tag:"Unbekannter instance tag.",Not_one_of_our_latest_keys:"Nicht einer unserer letzten Schlüssel.",Received_an_unreadable_encrypted_message:"Eine unlesbare verschlüsselte Nachricht erhalten.",Online:"Online",Chatty:"Gesprächig",Away:"Abwesend",Extended_away:"Länger abwesend",Offline:"Offline",Friendship_request:"Kontaktanfrage",Confirm:"Bestätigen",Dismiss:"Ablehnen",Remove:"Löschen",Online_help:"Online Hilfe",FN:"Name",N:" ",FAMILY:"Familienname",GIVEN:"Vorname",NICKNAME:"Spitzname",URL:"URL",ADR:"Adresse",STREET:"Straße",EXTADD:"Zusätzliche Adresse",LOCALITY:"Ortschaft",REGION:"Region",PCODE:"Postleitzahl",CTRY:"Land",TEL:"Telefon",NUMBER:"Nummer",EMAIL:"E-Mail",USERID:" ",ORG:"Organisation",ORGNAME:"Name",ORGUNIT:"Abteilung",TITLE:"Titel",ROLE:"Rolle",BDAY:"Geburtstag",DESC:"Beschreibung",PHOTO:" ",send_message:"Sende Nachricht",get_info:"Benutzerinformationen",Settings:"Einstellungen",Priority:"Priorität",Save:"Speichern",User_settings:"Benutzereinstellungen",A_fingerprint_:"Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.",Your_roster_is_empty_add_a:"Deine Kontaktliste ist leer, füge einen neuen Kontakt ",new_buddy:"hinzu",is:"ist",Login_options:"Anmeldeoptionen",BOSH_url:"BOSH url",Domain:"Domain",Resource:"Ressource",On_login:"Beim Anmelden",Received_an_unencrypted_message:"Unverschlüsselte Nachricht empfangen",Sorry_your_buddy_doesnt_provide_any_information:"Dein Kontakt stellt leider keine Informationen bereit.",Info_about:"Info über",Authentication_aborted:"Authentifizierung abgebrochen.",Authentication_request_received:"Authentifizierungsanfrage empfangen.",Do_you_want_to_display_them:"Möchtest du sie sehen?",Log_in_without_chat:"Anmelden ohne Chat",has_come_online:"ist online gekommen",Unknown_sender:"Unbekannter Sender",You_received_a_message_from_an_unknown_sender:"Du hast eine Nachricht von einem unbekannten Sender erhalten",Please_allow_access_to_microphone_and_camera:'Bitte klick auf den "Zulassen" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.',Incoming_call:"Eingehender Anruf",from:"von",Do_you_want_to_accept_the_call_from:"Möchtest Du den Anruf annehmen von",Reject:"Ablehnen",Accept:"Annehmen",hang_up:"Auflegen",snapshot:"Schnappschuss",mute_my_audio:"Mein Ton aus",pause_my_video:"Mein Video pausieren",fullscreen:"Vollbild",Info:"Info",Local_IP:"Lokale IP",Remote_IP:"Remote IP",Local_Fingerprint:"Lokaler Fingerprint",Remote_Fingerprint:"Remote Fingerprint",Video_call_not_possible:"Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.",Start_video_call:"Starte Videoanruf",Join_chat:"Gruppe beitreten",Join:"Betreten",Room:"Gruppe",Nickname:"Nickname",left_the_building:"__nickname__ hat die Gruppe verlassen",entered_the_room:"__nickname__ ist der Gruppe beigetreten",is_now_known_as:"__oldNickname__ ist nun unter __newNickname__ bekannt",This_room_is:"Diese Gruppe ist",muc_hidden:{keyword:"versteckt",description:"kann durch die Suche nicht gefunden werden"},muc_membersonly:{keyword:"nur für Mitglieder",description:"du musst auf der Mitgliederliste stehen"},muc_moderated:{keyword:"moderiert",description:'Nur Personen die "Mitspracherecht" haben dürfen Nachrichten senden'},muc_nonanonymous:{keyword:"nicht anonym",description:"deine Jabber ID wird für alle Mitglieder sichtbar sein"},muc_open:{keyword:"offen",description:"jeder darf dieser Gruppe beitreten"},muc_passwordprotected:{keyword:"passwortgeschützt",description:"du benötigst das korrekte Passwort"},muc_persistent:{keyword:"permanent",description:"wird nicht geschlossen, wenn das letzte Mitglied die Gruppe verlässt"},muc_public:{keyword:"öffentlich",description:"kann durch die Suche gefunden werden"},muc_semianonymous:{keyword:"teilweise anonym",description:"deine Jabber ID wird nur für die Gruppen Administratoren sichtbar sein"},muc_temporary:{keyword:"temporär",description:"wird geschlossen, wenn das letzte Mitglied die Gruppe verlässt"},muc_unmoderated:{keyword:"nicht moderiert",description:"jeder darf Nachrichten senden"},muc_unsecured:{keyword:"ungesichert",description:"es wird kein Passwort benötigt"},Continue:"Weiter",Server:"Server",Rooms_are_loaded:"Gruppen werden geladen",Could_load_only:"Es konnten nur __count__ Gruppen für die Autovervollständigung geladen werden",muc_explanation:"Bitte trage den Gruppennamen und optional ein Nickname und Passwort ein um einer Gruppe beizutreten",You_already_joined_this_room:"Du bist dieser Gruppe bereits beigetreten",This_room_will_be_closed:"Diese Gruppe wird geschlossen",Room_not_found_:"Es wird eine neue Gruppe erstellt",Loading_room_information:"Informationen über Gruppe werden geladen",Destroy:"Auflösen",Leave:"Verlassen",changed_subject_to:"__nickname__ hat das Thema auf __subject__ geändert",muc_removed_kicked:"Du wurdest aus der Gruppe entfernt",muc_removed_info_kicked:"__nickname__ wurde aus der Gruppe entfernt",muc_removed_banned:"Du wurdest aus der Gruppe ausgeschlossen",muc_removed_info_banned:"__nickname__ wurde aus der Gruppe ausgeschlossen",muc_removed_affiliation:"Du wurdest aus der Gruppe entfernt wegen einer Änderung deines Mitgliedstatus",muc_removed_info_affiliation:"__nickname__ wurde aus der Gruppe entfernt wegen einer Änderung seines Mitgliedstatus",muc_removed_membersonly:"Diese Gruppe erlaubt jetzt nur noch eingetragene Mitglieder und da du nicht dazugehörst, wurdest du aus der Gruppen entfernt",muc_removed_info_membersonly:"Diese Gruppe erlaubt jetzt nur noch eingetragene Mitglieder und __nickname__ gehört nicht dazu, daher wurde er aus der Gruppe entfernt",muc_removed_shutdown:"Du wurdest aus der Gruppe entfernt, da der MUC Server heruntergefahren wird",Reason:"Grund",message_not_send:"Deine Nachricht wurde aufgrund eines Fehlers nicht versandt","message_not_send_item-not-found":"Deine Nachricht wurde nicht versandt, da der Raum nicht mehr existiert",message_not_send_forbidden:'Deine Nachricht wurde nicht versandt, da du kein "Mitspracherecht" hast',"message_not_send_not-acceptable":"Deine Nachricht wurde nicht versandt, da du kein Mitglied dieser Gruppe bist",This_room_has_been_closed:"Diese Gruppe wurde geschlossen",Room_logging_is_enabled:"Gesprächsverlauf kann öffentlich einsehbar sein",A_password_is_required:"Es wird ein Passwort benötigt",You_are_not_on_the_member_list:"Du bist kein eingetragenes Mitglied",You_are_banned_from_this_room:"Du wurdest von dieser Gruppe ausgeschlossen",Your_desired_nickname_:"Dein gewünschter Nickname wird bereits verwendet. Bitte wähle einen anderen.",The_maximum_number_:"Die maximale Anzahl der Mitglieder wurde erreicht.",This_room_is_locked_:"Diese Gruppe ist gesperrt",You_are_not_allowed_to_create_:"Du darfst keine neue Gruppe erstellen",Carbon_copy:null,Enable:"Aktivieren"}},el:{translation:{Logging_in:null,your_connection_is_unencrypted:null,your_connection_is_encrypted:null,your_buddy_closed_the_private_connection:null,start_private:null,close_private:null,your_buddy_is_verificated:null,you_have_only_a_subscription_in_one_way:null,authentication_query_sent:null,your_message_wasnt_send_please_end_your_private_conversation:null,unencrypted_message_received:null,your_message_wasnt_send_because_you_have_no_valid_subscription:null,not_available:null,no_connection:null,relogin:null,trying_to_start_private_conversation:null,Verified:null,Unverified:null,private_conversation_started:null,private_conversation_aborted:null,your_buddy_closed_the_private_conversation_you_should_do_the_same:null,conversation_is_now_verified:null,authentication_failed:null,your_buddy_is_attempting_to_determine_:null,to_authenticate_to_your_buddy:null,enter_the_answer_and_click_answer:null,enter_the_secret:null,Creating_your_private_key_:null,Authenticating_a_buddy_helps_:null,How_do_you_want_to_authenticate_your_buddy:null,Select_method:null,Manual:null,Question:null,Secret:null,To_verify_the_fingerprint_:null,Your_fingerprint:null,Buddy_fingerprint:null,Close:null,Compared:null,To_authenticate_using_a_question_:null,Ask:null,To_authenticate_pick_a_secret_:null,Compare:null,Fingerprints:null,Authentication:null,Message:null,Add_buddy:null,rename_buddy:null,delete_buddy:null,Login:null,Username:null,Password:null,Cancel:null,Connect:null,Type_in_the_full_username_:null,Alias:null,Add:null,Subscription_request:null,You_have_a_request_from:null,Deny:null,Approve:null,Remove_buddy:null,You_are_about_to_remove_:null,Continue_without_chat:null,Please_wait:null,Login_failed:null,Sorry_we_cant_authentikate_:null,Retry:null,clear_history:null,New_message_from:null,Should_we_notify_you_:null,Please_accept_:null,Hide_offline:null,Show_offline:null,About:null,dnd:null,Mute:null,Unmute:null,Subscription:null,both:null,Status:null,online:null,chat:null,away:null,xa:null,offline:null,none:null,Unknown_instance_tag:null,Not_one_of_our_latest_keys:null,Received_an_unreadable_encrypted_message:null,Online:null,Chatty:null,Away:null,Extended_away:null,Offline:null,Friendship_request:null,Confirm:null,Dismiss:null,Remove:null,Online_help:null,FN:null,N:null,FAMILY:null,GIVEN:null,NICKNAME:null,URL:null,ADR:null,STREET:null,EXTADD:null,LOCALITY:null,REGION:null,PCODE:null,CTRY:null,TEL:null,NUMBER:null,EMAIL:null,USERID:null,ORG:null,ORGNAME:null,ORGUNIT:null,TITLE:null,ROLE:null,BDAY:null,DESC:null,PHOTO:null,send_message:null,get_info:null,Settings:null,Priority:null,Save:null,User_settings:null,A_fingerprint_:null,Your_roster_is_empty_add_a:null,new_buddy:null,is:null,Login_options:null,BOSH_url:null,Domain:null,Resource:null,On_login:null,Received_an_unencrypted_message:null,Sorry_your_buddy_doesnt_provide_any_information:null,Info_about:null,Authentication_aborted:null,Authentication_request_received:null,Do_you_want_to_display_them:null,Log_in_without_chat:null,has_come_online:null,Unknown_sender:null,You_received_a_message_from_an_unknown_sender:null,Please_allow_access_to_microphone_and_camera:null,Incoming_call:null,from:null,Do_you_want_to_accept_the_call_from:null,Reject:null,Accept:null,hang_up:null,snapshot:null,mute_my_audio:null,pause_my_video:null,fullscreen:null,Info:null,Local_IP:null,Remote_IP:null,Local_Fingerprint:null,Remote_Fingerprint:null,Video_call_not_possible:null,Start_video_call:null,Join_chat:null,Join:null,Room:null,Nickname:null,left_the_building:null,entered_the_room:null,is_now_known_as:null,This_room_is:null,muc_hidden:{keyword:null,description:null},muc_membersonly:{keyword:null,description:null},muc_moderated:{keyword:null,description:null},muc_nonanonymous:{keyword:null,description:null},muc_open:{keyword:null,description:null},muc_passwordprotected:{keyword:null,description:null},muc_persistent:{keyword:null,description:null},muc_public:{keyword:null,description:null},muc_semianonymous:{keyword:null,description:null},muc_temporary:{keyword:null,description:null},muc_unmoderated:{keyword:null,description:null},muc_unsecured:{keyword:null,description:null},Continue:null,Server:null,Rooms_are_loaded:null,Could_load_only:null,muc_explanation:null,You_already_joined_this_room:null,This_room_will_be_closed:null,Room_not_found_:null,Loading_room_information:null,Destroy:null,Leave:null,changed_subject_to:null,muc_removed_kicked:null,muc_removed_info_kicked:null,muc_removed_banned:null,muc_removed_info_banned:null,muc_removed_affiliation:null,muc_removed_info_affiliation:null,muc_removed_membersonly:null,muc_removed_info_membersonly:null,muc_removed_shutdown:null,Reason:null,message_not_send:null,"message_not_send_item-not-found":null,message_not_send_forbidden:null,"message_not_send_not-acceptable":null,This_room_has_been_closed:null,Room_logging_is_enabled:null,A_password_is_required:null,You_are_not_on_the_member_list:null,You_are_banned_from_this_room:null,Your_desired_nickname_:null,The_maximum_number_:null,This_room_is_locked_:null,You_are_not_allowed_to_create_:null,Carbon_copy:null,Enable:null}},en:{translation:{Logging_in:"Logging in…",your_connection_is_unencrypted:"Your connection is unencrypted.",your_connection_is_encrypted:"Your connection is encrypted.",your_buddy_closed_the_private_connection:"Your contact closed the private connection.",start_private:"Start private",close_private:"Close private",your_buddy_is_verificated:"Your contact is verified.",you_have_only_a_subscription_in_one_way:"You only have a one-way subscription.",authentication_query_sent:"Authentication query sent.",your_message_wasnt_send_please_end_your_private_conversation:"Your message was not sent. Please end your private conversation.",unencrypted_message_received:"Unencrypted message received",your_message_wasnt_send_because_you_have_no_valid_subscription:"Your message was not sent because you have no valid subscription.",not_available:"Not available",no_connection:"No connection!",relogin:"relogin",trying_to_start_private_conversation:"Trying to start private conversation!",Verified:"Verified",Unverified:"Unverified",private_conversation_started:"Private conversation started.",private_conversation_aborted:"Private conversation aborted!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Your contact closed the private conversation! You should do the same.",conversation_is_now_verified:"Conversation is now verified.",authentication_failed:"Authentication failed.",your_buddy_is_attempting_to_determine_:"You contact is attempting to determine if they are really talking to you.",to_authenticate_to_your_buddy:"To authenticate to your contact, ",enter_the_answer_and_click_answer:"enter the answer and click Answer.",enter_the_secret:"enter the secret.",Creating_your_private_key_:"Creating your private key; this may take a while.",Authenticating_a_buddy_helps_:"Authenticating a contact helps ensure that the person you are talking to is really the one they claim to be.",How_do_you_want_to_authenticate_your_buddy:"How do you want to authenticate {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Select method...",Manual:"Manual",Question:"Question",Secret:"Secret",To_verify_the_fingerprint_:"To verify the fingerprint, contact your contact via some other trustworthy channel, such as the telephone.",Your_fingerprint:"Your fingerprint",Buddy_fingerprint:"Contact fingerprint",Close:"Close",Compared:"Compared",To_authenticate_using_a_question_:"To authenticate using a question, pick a question whose answer is known only you and your contact.",Ask:"Ask",To_authenticate_pick_a_secret_:"To authenticate, pick a secret known only to you and your contact.",Compare:"Compare",Fingerprints:"Fingerprints",Authentication:"Authentication",Message:"Message",Add_buddy:"Add contact",rename_buddy:"rename contact",delete_buddy:"delete contact",Login:"Login",Username:"Username",Password:"Password",Cancel:"Cancel",Connect:"Connect",Type_in_the_full_username_:"Type in the full username and an optional alias.",Alias:"Alias",Add:"Add",Subscription_request:"Subscription request",You_have_a_request_from:"You have a request from",Deny:"Deny",Approve:"Approve",Remove_buddy:"Remove contact",You_are_about_to_remove_:"You are about to remove {{bid_name}} (<b>{{bid_jid}}</b>) from your contact list. All related chats will be closed.",Continue_without_chat:"Continue without chat",Please_wait:"Please wait",Login_failed:"Chat login failed",Sorry_we_cant_authentikate_:"Authentication failed with the chat server. Maybe the password is wrong?",Retry:"Back",clear_history:"Clear history",New_message_from:"New message from",Should_we_notify_you_:"Should we notify you about new messages in the future?",Please_accept_:'Please click the "Allow" button at the top.',Hide_offline:"Hide offline contacts",Show_offline:"Show offline contacts",About:"About",dnd:"Do Not Disturb",Mute:"Mute",Unmute:"Unmute",Subscription:"Subscription",both:"both",Status:"Status",online:"online",chat:"chat",away:"away",xa:"extended away",offline:"offline",none:"none",Unknown_instance_tag:"Unknown instance tag.",Not_one_of_our_latest_keys:"Not one of our latest keys.",Received_an_unreadable_encrypted_message:"Received an unreadable encrypted message.",Online:"Online",Chatty:"Chatty",Away:"Away",Extended_away:"Extended away",Offline:"Offline",Friendship_request:"Contact request",Confirm:"Confirm",Dismiss:"Dismiss",Remove:"Remove",Online_help:"Online help",FN:"Full name",N:" ",FAMILY:"Family name",GIVEN:"Given name",NICKNAME:"Nickname",URL:"URL",ADR:"Address",STREET:"Street Address",EXTADD:"Extended Address",LOCALITY:"Locality",REGION:"Region",PCODE:"Postal Code",CTRY:"Country",TEL:"Telephone",NUMBER:"Number",EMAIL:"Email",USERID:" ",ORG:"Organization",ORGNAME:"Name",ORGUNIT:"Unit",TITLE:"Job title",ROLE:"Role",BDAY:"Birthday",DESC:"Description",PHOTO:" ",send_message:"Send message",get_info:"Show information",Settings:"Settings",Priority:"Priority",Save:"Save",User_settings:"User settings",A_fingerprint_:"A fingerprint is used to make sure that the person you are talking to is who he or she is saying.",Your_roster_is_empty_add_a:"Your roster is empty, add a ",new_buddy:"new contact",is:"is",Login_options:"Login options",BOSH_url:"BOSH URL",Domain:"Domain",Resource:"Resource",On_login:"On login",Received_an_unencrypted_message:"Received an unencrypted message",Sorry_your_buddy_doesnt_provide_any_information:"Sorry, your contact does not provide any information.",Info_about:"Info about",Authentication_aborted:"Authentication aborted.",Authentication_request_received:"Authentication request received.",Do_you_want_to_display_them:"Do you want to display them?",Log_in_without_chat:"Log in without chat",has_come_online:"has come online",Unknown_sender:"Unknown sender",You_received_a_message_from_an_unknown_sender:"You received a message from an unknown sender",Please_allow_access_to_microphone_and_camera:'Please click the "Allow" button at the top, to allow access to microphone and camera.',Incoming_call:"Incoming call",from:"from",Do_you_want_to_accept_the_call_from:"Do you want to accept the call from",Reject:"Reject",Accept:"Accept",hang_up:"hang up",snapshot:"snapshot",mute_my_audio:"mute my audio",pause_my_video:"pause my video",fullscreen:"fullscreen",Info:"Info",Local_IP:"Local IP",Remote_IP:"Remote IP",Local_Fingerprint:"Local fingerprint",Remote_Fingerprint:"Remote fingerprint",Video_call_not_possible:"Video call not possible. Your contact does not support video calls.",Start_video_call:"Start video call",Join_chat:"Join chat",Join:"Join",Room:"Room",Nickname:"Nickname",left_the_building:"__nickname__ left the building",entered_the_room:"__nickname__ entered the room",is_now_known_as:"__oldNickname__ is now known as __newNickname__",This_room_is:"This room is",muc_hidden:{keyword:"hidden",description:"can not be found through search"},muc_membersonly:{keyword:"members-only",description:"you need to be on the member list"},muc_moderated:{keyword:"moderated",description:'only persons with "voice" are allowed to send messages'},muc_nonanonymous:{keyword:"non-anonymous",description:"your jabber id is exposed to all other occupants"},muc_open:{keyword:"open",description:"everyone is allowed to join"},muc_passwordprotected:{keyword:"password-protected",description:"you need to provide the correct password"},muc_persistent:{keyword:"persistent",description:"will not be destroyed if the last occupant left"},muc_public:{keyword:"public",description:"can be found through search"},muc_semianonymous:{keyword:"semi-anonymous",description:"your jabber id is only exposed to room admins"},muc_temporary:{keyword:"temporary",description:"will be destroyed if the last occupant left"},muc_unmoderated:{keyword:"unmoderated",description:"everyone is allowed to send messages"},muc_unsecured:{keyword:"unsecured",description:"you need no password to enter"},Continue:"Continue",Server:"Server",Rooms_are_loaded:"Rooms are loaded",Could_load_only:"Could load only __count__ rooms for autocomplete",muc_explanation:"Please enter room name and optional a nickname and password to join a chat",You_already_joined_this_room:"You already joined this room",This_room_will_be_closed:"This room will be closed",Room_not_found_:"A new room will be created",Loading_room_information:"Loading room information",Destroy:"Destroy",Leave:"Leave",changed_subject_to:'__nickname__ changed the room subject to "__subject__"',muc_removed_kicked:"You have been kicked from the room",muc_removed_info_kicked:"__nickname__ has been kicked from the room",muc_removed_banned:"You have been banned from the room",muc_removed_info_banned:"__nickname__ has been banned from the room",muc_removed_affiliation:"You have been removed from the room, because of an affiliation change",muc_removed_info_affiliation:"__nickname__ has been removed from the room, because of an affiliation change",muc_removed_membersonly:"You have been removed from the room, because the room has been changed to members-only and you are no member",muc_removed_info_membersonly:"__nickname__ has been removed from the room, because the room has been changed to members-only and you are no member",muc_removed_shutdown:"You have been removed from the room, because the MUC service is being shut down",Reason:"Reason",message_not_send:"Your message was not send because of an error","message_not_send_item-not-found":"Your message was not send because this room does not exist",message_not_send_forbidden:"Your message was not send because you have no voice in this room","message_not_send_not-acceptable":"Your message was not send because you are no occupant of this room",This_room_has_been_closed:"This room has been closed",Room_logging_is_enabled:"Room logging is enabled",A_password_is_required:"A password is required",You_are_not_on_the_member_list:"You are not on the member list",You_are_banned_from_this_room:"You are banned from this room",Your_desired_nickname_:"Your desired nickname is already in use. Please choose another",The_maximum_number_:"The maximum number of user is reached in this room",This_room_is_locked_:"This room is locked",You_are_not_allowed_to_create_:"You are not allowed to create a room",Carbon_copy:"Carbon copy",Enable:"Enable"}},es:{translation:{Logging_in:"Por favor, espere...",your_connection_is_unencrypted:"Su conexión no está cifrada.",your_connection_is_encrypted:"Su conexión está cifrada.",your_buddy_closed_the_private_connection:"Su amigo ha cerrado la conexión privada.",start_private:"Iniciar privado",close_private:"Cerrar privado",your_buddy_is_verificated:"Tu amigo está verificado.",you_have_only_a_subscription_in_one_way:"Sólo tienes una suscripción de un modo.",authentication_query_sent:"Consulta de verificación enviada.",your_message_wasnt_send_please_end_your_private_conversation:"Su mensaje no fue enviado. Por favor, termine su conversación privada.",unencrypted_message_received:"Mensaje no cifrado recibido:",your_message_wasnt_send_because_you_have_no_valid_subscription:"Su mensaje no se ha enviado, porque usted no tiene suscripción válida.",not_available:"No disponible",no_connection:"Sin conexión!",relogin:"iniciar sesión nuevamente",trying_to_start_private_conversation:"Intentando iniciar una conversación privada!",Verified:"Verificado",Unverified:"No verificado",private_conversation_started:"se inició una conversación privada.",private_conversation_aborted:"Conversación privada abortada!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Su amigo cerró la conversación privada! Usted debería hacer lo mismo.",conversation_is_now_verified:"La conversación es ahora verificada.",authentication_failed:"Fallo la verificación.",your_buddy_is_attempting_to_determine_:"Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.",to_authenticate_to_your_buddy:"Para autenticar a su amigo, ",enter_the_answer_and_click_answer:"introduce la respuesta y haga clic en Contestar.",enter_the_secret:"especifique el secreto.",Creating_your_private_key_:"Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.",Authenticating_a_buddy_helps_:"Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.",How_do_you_want_to_authenticate_your_buddy:"¿Cómo desea autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Escoja un método...",Manual:"Manual",Question:"Pregunta",Secret:"Secreto",To_verify_the_fingerprint_:"Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.",Your_fingerprint:"Tu firma digital",Buddy_fingerprint:"firma digital de tu amigo",Close:"Cerrar",Compared:"Comparado",To_authenticate_using_a_question_:"Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.",Ask:"Preguntar",To_authenticate_pick_a_secret_:"Para autenticar, elija un secreto conocido sólo por usted y su amigo.",Compare:"Comparar",Fingerprints:"Firmas digitales",Authentication:"Autenticación",Message:"Mensaje",Add_buddy:"Añadir amigo",rename_buddy:"renombrar amigo",delete_buddy:"eliminar amigo",Login:"Iniciar Sesión",Username:"Usuario",Password:"Contraseña",Cancel:"Cancelar",Connect:"Conectar",Type_in_the_full_username_:"Escriba el usuario completo y un alias opcional.",Alias:"Alias",Add:"Añadir",Subscription_request:"Solicitud de suscripción",You_have_a_request_from:"Tienes una petición de",Deny:"Rechazar",Approve:"Aprobar",Remove_buddy:"Eliminar amigo",You_are_about_to_remove_:"Vas a eliminar a {{bid_name}} (<b>{{bid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.",Continue_without_chat:"Continuar",Please_wait:"Espere por favor",Login_failed:"Fallo el inicio de sesión",Sorry_we_cant_authentikate_:"Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?",Retry:"Reintentar",clear_history:"Borrar el historial",New_message_from:"Nuevo mensaje de",Should_we_notify_you_:"¿Debemos notificarle sobre nuevos mensajes en el futuro?",Please_accept_:'Por favor, haga clic en el botón "Permitir" en la parte superior.',Hide_offline:"Ocultar contactos desconectados",Show_offline:"Mostrar contactos desconectados",About:"Acerca de",dnd:"No Molestar",Mute:"Desactivar sonido",Unmute:"Activar sonido",Subscription:"Suscripción",both:"ambos",Status:"Estado",online:"en línea",chat:"chat",away:"ausente",xa:"mas ausente",offline:"desconectado",none:"nadie",Unknown_instance_tag:"Etiqueta de instancia desconocida.",Not_one_of_our_latest_keys:"No de nuestra ultima tecla.",Received_an_unreadable_encrypted_message:"Se recibió un mensaje cifrado ilegible.",Online:"En linea",Chatty:"Hablador",Away:"Ausente",Extended_away:"Mas ausente",Offline:"Desconectado",Friendship_request:"Solicitud de amistad",Confirm:"Confirmar",Dismiss:"Rechazar",Remove:"Eliminar",Online_help:"Ayuda en línea",FN:"Nombre completo ",N:" ",FAMILY:"Apellido",GIVEN:"Nombre",NICKNAME:"Apodar",URL:"URL",ADR:"Dirección",STREET:"Calle",EXTADD:"Extendido dirección",LOCALITY:"Población",REGION:"Región",PCODE:"Código postal",CTRY:"País",TEL:"Teléfono",NUMBER:"Número",EMAIL:"Emilio",USERID:" ",ORG:"Organización",ORGNAME:"Nombre",ORGUNIT:"Departamento",TITLE:"Título",ROLE:"Rol",BDAY:"Cumpleaños",DESC:"Descripción",PHOTO:" ",send_message:"mandar un texto",get_info:"obtener información",Settings:"Ajustes",Priority:"Prioridad",Save:"Guardar",User_settings:"Configuración de usuario",A_fingerprint_:"La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser",Your_roster_is_empty_add_a:"Tu lista de amigos esta vacia",new_buddy:"Nuevo amigo",is:"es",Login_options:"Opciones de login",BOSH_url:"BOSH url",Domain:"Dominio",Resource:"Recurso",On_login:"Iniciar sesión",Received_an_unencrypted_message:"Recibe un mensaje no cifrado",Sorry_your_buddy_doesnt_provide_any_information:"Lo sentimos, su amigo no provee ninguna información.",Info_about:"Info acerca de",Authentication_aborted:"Autenticación abortada",Authentication_request_received:"Pedido de autenticación recibido.",Do_you_want_to_display_them:"¿Quiere mostrarlos?",Log_in_without_chat:"Ingresar sin chat",has_come_online:"se ha conectado",Unknown_sender:"Remitente desconocido",You_received_a_message_from_an_unknown_sender:"Ha recibido un mensaje de un remitente desconocido",Please_allow_access_to_microphone_and_camera:"Por favor, permitir el acceso al micrófono y la cámara.",Incoming_call:"Llamada entrante",from:"de",Do_you_want_to_accept_the_call_from:"Desea aceptar la llamada de",Reject:"Rechazar",Accept:"Aceptar",hang_up:"colgar",snapshot:"instantánea",mute_my_audio:"silenciar mi audio",pause_my_video:"pausar mi vídeo",fullscreen:"pantalla completa",Info:"Info",Local_IP:"IP local",Remote_IP:"IP remota",Local_Fingerprint:"Firma digital local",Remote_Fingerprint:"Firma digital remota",Video_call_not_possible:"Llamada de vídeo no es posible",Start_video_call:"Iniciar llamada de vídeo",Join_chat:null,Join:null,Room:null,Nickname:null,left_the_building:null,entered_the_room:null,is_now_known_as:null,This_room_is:null,muc_hidden:{keyword:null,description:null},muc_membersonly:{keyword:null,description:null},muc_moderated:{keyword:null,description:null},muc_nonanonymous:{keyword:null,description:null},muc_open:{keyword:null,description:null},muc_passwordprotected:{keyword:null,description:null},muc_persistent:{keyword:null,description:null},muc_public:{keyword:null,description:null},muc_semianonymous:{keyword:null,description:null},muc_temporary:{keyword:null,description:null},muc_unmoderated:{keyword:null,description:null},muc_unsecured:{keyword:null,description:null},Continue:null,Server:null,Rooms_are_loaded:null,Could_load_only:null,muc_explanation:null,You_already_joined_this_room:null,This_room_will_be_closed:null,Room_not_found_:null,Loading_room_information:null,Destroy:null,Leave:null,changed_subject_to:null,muc_removed_kicked:null,muc_removed_info_kicked:null,muc_removed_banned:null,muc_removed_info_banned:null,muc_removed_affiliation:null,muc_removed_info_affiliation:null,muc_removed_membersonly:null,muc_removed_info_membersonly:null,muc_removed_shutdown:null,Reason:null,message_not_send:null,"message_not_send_item-not-found":null,message_not_send_forbidden:null,"message_not_send_not-acceptable":null,This_room_has_been_closed:null,Room_logging_is_enabled:null,A_password_is_required:null,You_are_not_on_the_member_list:null,You_are_banned_from_this_room:null,Your_desired_nickname_:null,The_maximum_number_:null,This_room_is_locked_:null,You_are_not_allowed_to_create_:null,Carbon_copy:null,Enable:"Activar"}},fr:{translation:{Logging_in:"Connexion...",your_connection_is_unencrypted:"Connexion non chiffrée.",your_connection_is_encrypted:"Connexion chiffrée.",your_buddy_closed_the_private_connection:"Votre ami a fermé la connexion privée.",start_private:"Démarrer une conversation privé",close_private:"Clôturer une conversation privée",your_buddy_is_verificated:"Votre contact est vérifié.",you_have_only_a_subscription_in_one_way:"Vous ne pouvez souscrire qu'une fois.",authentication_query_sent:"Requête d’authentification envoyée.",your_message_wasnt_send_please_end_your_private_conversation:"Votre message n'a pas été envoyé. Veuillez terminer votre conversation privée.",unencrypted_message_received:"Message non chiffré reçu",your_message_wasnt_send_because_you_have_no_valid_subscription:"Votre message n'a pas été envoyé car votre abonnement n'est pas valide.",not_available:"Pas disponible",no_connection:"Pas de connexion !",relogin:"Re-connexion",trying_to_start_private_conversation:"Essai de démarrage d'une conversation privée !",Verified:"Vérifié",Unverified:"Non vérifié",private_conversation_started:"Conversation privé démarrée.",private_conversation_aborted:"Conversation privée interrompue !",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Votre ami a fermé la conversation privée ! Vous devriez faire de même.",conversation_is_now_verified:"La conversation est maintenant vérifiée.",authentication_failed:"L'authentification a échoué.",your_buddy_is_attempting_to_determine_:"Votre ami tente de déterminer si il ou elle parle vraiment à vous.",to_authenticate_to_your_buddy:"Vous authentifier à votre ami, ",enter_the_answer_and_click_answer:"Saisissez une réponse et cliquer sur Répondre.",enter_the_secret:"Entrez le mot secret",Creating_your_private_key_:"Création de votre clé privée; cela peut prendre un moment.",Authenticating_a_buddy_helps_:"L'authentification d'un ami permet de s'assurer que la personne à qui vous parlez est vraiment celui qu'il ou elle prétend être.",How_do_you_want_to_authenticate_your_buddy:"Comment voulez-vous vous authentifier {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Sélection de la méthode...",Manual:"Manuel",Question:"Question",Secret:"Sécurité",To_verify_the_fingerprint_:"Pour vérifier l'empreinte, contactez votre ami via un autre canal digne de confiance, tel que le téléphone.",Your_fingerprint:"Votre empreinte",Buddy_fingerprint:"Empreinte de l'ami",Close:"Fermer",Compared:"Comparé",To_authenticate_using_a_question_:"Pour s'authentifier à l'aide d'une question, choisissez une question dont la réponse n'est connue que vous et de votre ami.",Ask:"Demander",To_authenticate_pick_a_secret_:"Pour vous authentifier, choisissez un secret connu seulement de vous et de votre ami.",Compare:"Comparer",Fingerprints:"Empreintes",Authentication:"Authentification",Message:"Message",Add_buddy:"Ajouter comme ami",rename_buddy:"Renommer l'ami",delete_buddy:"Supprimer l'ami",Login:"Connexion",Username:"Nom d'utilisateur",Password:"Mot de passe",Cancel:"Annuler",Connect:"Connecter",Type_in_the_full_username_:"Tapez un nom d'utilisateur complet et un alias(optionnel).",Alias:"Alias",Add:"Ajouter",Subscription_request:"Demande d'abonnement",You_have_a_request_from:"Vous avez une requête de ",Deny:"Refuser",Approve:"Approuver",Remove_buddy:"Supprimer l'ami",You_are_about_to_remove_:"Vous allez retirer {{bid_name}} (<b>{{bid_jid}}</b>) de votre liste d'amis. Toutes les fenêtres de chat en lien avec celui-ci seront fermées.",Continue_without_chat:"Continuer sans tchat",Please_wait:"Merci de patienter",Login_failed:"Authentification échouée",Sorry_we_cant_authentikate_:"La connexion avec le serveur de tchat a échoué. Vérifiez le mot de passe.",Retry:"Retour",clear_history:"Effacer l’historique",New_message_from:"Nouveau message de",Should_we_notify_you_:"Dans le futur, devrons-nous vous notifier les nouveaux messages ?",Please_accept_:'Merci de cliquer sur le bouton "autoriser" en haut de page',Hide_offline:"Masquer les contacts non connectés",Show_offline:"Afficher les contacts non connectés",About:"À propos",dnd:"Ne pas déranger",Mute:"Muet",Unmute:"Son actif",Subscription:"Abonnement",both:"Les deux",Status:"Status",online:"En ligne",chat:"tchat",away:"Absent",xa:"Options étendues",offline:"Hors ligne",none:"Aucun",Unknown_instance_tag:"Tag inconnu",Not_one_of_our_latest_keys:"Ce n'est pas l'une des dernières touches",Received_an_unreadable_encrypted_message:"Message chiffré non lisible",Online:"En ligne",Chatty:"tchatty",Away:"Absent",Extended_away:"Options étendues",Offline:"Hors ligne",Friendship_request:"Demande d'amitié",Confirm:"Valider",Dismiss:"Rejeter",Remove:"Supprimer",Online_help:"Aide en ligne",FN:"Nom",N:" N ",FAMILY:"Nom de famille",GIVEN:"prénom",NICKNAME:"Surnom",URL:"URL",ADR:"Adresse",STREET:"Rue",EXTADD:"Adresse (suite)",LOCALITY:"Localité",REGION:"Région",PCODE:"Code Postal",CTRY:"Pays",TEL:"Téléphone",NUMBER:"Numéro",EMAIL:"Courriel",USERID:" USERID ",ORG:"Organisation",ORGNAME:"Nom",ORGUNIT:"Unité",TITLE:"Qualité:",ROLE:"Rôle",BDAY:"Date de naissance",DESC:"Description",PHOTO:"Photo",send_message:"Envoyer le message",get_info:"Montrer les informations",Settings:"Réglages",Priority:"Priorité",Save:"Enregistrer",User_settings:"Paramètres utilisateur",A_fingerprint_:"Une empreinte est utilisée pour s'assurer de l'identité de la personne à qui vous parlez",Your_roster_is_empty_add_a:"Votre liste est vide, ajouter ",new_buddy:"Nouvel ami",is:"est",Login_options:"Options d'identification",BOSH_url:"URL BOSH",Domain:"Domaine",Resource:"Ressource",On_login:"Après authentification",Received_an_unencrypted_message:"Reçu un message non chiffré",Sorry_your_buddy_doesnt_provide_any_information:"Désolé, votre ami n'a pas fourni d'informations",Info_about:"A propos de",Authentication_aborted:"Authentification interrompue.",Authentication_request_received:"Requête d'authentification reçue.",Do_you_want_to_display_them:"Voulez-vous les afficher ?",Log_in_without_chat:"S'identifier sans tchat",has_come_online:"vient d'arriver",Unknown_sender:"Expéditeur inconnu",You_received_a_message_from_an_unknown_sender:"Vous avez reçu un message d'un expéditeur inconnu",Please_allow_access_to_microphone_and_camera:'Veuillez cliquez sur le bouton "Autoriser" en haut, pour permettre l\'accès au micro et à la caméra.',Incoming_call:"Appel entrant",from:"de",Do_you_want_to_accept_the_call_from:"Voulez-vous accepter l'appel de",Reject:"Rejeté",Accept:"Accepté",hang_up:"Décrochez",snapshot:"Capture d’écran",mute_my_audio:"Couper l'audio",pause_my_video:"Mettre ma vidéo en pause",fullscreen:"Plein écran",Info:"Info",Local_IP:"IP locale",Remote_IP:"IP distante",Local_Fingerprint:"Empreinte locale",Remote_Fingerprint:"Empreinte distante",Video_call_not_possible:"L'appel vidéo n'est possible. Votre ami ne supporte pas les appels vidéo.",Start_video_call:"Démarrer l'appel vidéo",Join_chat:"Joindre la discution",Join:"Joindre",Room:"Salon",Nickname:"Surnom",left_the_building:"__nickname__ a quitté l'immeuble",entered_the_room:"__nickname__ entre dans le salon",is_now_known_as:null,This_room_is:"Ce salon est",muc_hidden:{keyword:"caché",description:null},muc_membersonly:{keyword:"pour les membres seulement",description:"Vous devez être sur la liste des membres"},muc_moderated:{keyword:"modéré",description:'Seulement les personnes avec la "voix" sont autorisés à envoyer des messages'},muc_nonanonymous:{keyword:"non anonyme",description:"Votre identifiant Jabber est visible de tous les autres occupants"},muc_open:{keyword:"ouvert",description:"Tout le monde est autorisé à se connecter"},muc_passwordprotected:{keyword:"protégé par un mot de passe",description:"Vous devez fournir un mot de passe correct"},muc_persistent:{keyword:"persistent",description:null},muc_public:{keyword:"public",description:null},muc_semianonymous:{keyword:"semi-anonyme",description:"Votre identifiant Jabber est seulement visible aux administrateurs de ce salon"},muc_temporary:{keyword:"temporaire",description:"sera détruit au départ de son dernier occupant"},muc_unmoderated:{keyword:"non modéré",description:"Tout le monde est autorisé à envoyer des messages"},muc_unsecured:{keyword:"non sécurisé",description:"un mot de passe n'est pas nécessaire pour entrer"},Continue:"Continuer",Server:"Serveur",Rooms_are_loaded:"Les salons sont chargés",Could_load_only:null,muc_explanation:"Veuillez saisir le nom du salon, un surnom (optionnel) et un mot de passe pour joindre la conversation",You_already_joined_this_room:"Vous avez déjà rejoins ce salon",This_room_will_be_closed:"Ce salon va être fermé",Room_not_found_:"Un nouveau salon va être créé",Loading_room_information:"Chargement des informations du salon",Destroy:"Détruire",Leave:"Quitter",changed_subject_to:'__nickname__ a changé le sujet du salon à "__subject__"',muc_removed_kicked:"Vous avez été éjecté de ce salon",muc_removed_info_kicked:"__nickname__ a été éjecté de ce salon",muc_removed_banned:"Vous avez été banni de ce salon",muc_removed_info_banned:"__nickname__ a été banni de ce salon",muc_removed_affiliation:null,muc_removed_info_affiliation:null,muc_removed_membersonly:null,muc_removed_info_membersonly:null,muc_removed_shutdown:null,Reason:"Raison",message_not_send:null,"message_not_send_item-not-found":null,message_not_send_forbidden:null,"message_not_send_not-acceptable":"Votre message n'a pas été envoyé car il n'y a personne dans ce salon",This_room_has_been_closed:"Ce salon a été fermé",Room_logging_is_enabled:null,A_password_is_required:"Un mot de passe est requis",You_are_not_on_the_member_list:"Vous n'êtes pas sur la liste des membres",You_are_banned_from_this_room:"Vous avez été banni de ce salon",Your_desired_nickname_:"Votre Surnom souhaité est déjà utilisé.Veuillez en choisir un autre",The_maximum_number_:"Le nombre maximum d'utilisateur est atteint dans ce salon",This_room_is_locked_:"Ce salon est vérouillé",You_are_not_allowed_to_create_:"Vous n'êtes pas autorisé à créer un salon",Carbon_copy:null,Enable:null}},it:{translation:{Logging_in:"login…",your_connection_is_unencrypted:"La sua connessione è non cifrata.",your_connection_is_encrypted:"La sua connessione è cifrata.",your_buddy_closed_the_private_connection:"La sua connessione privata è stato chiuso dal suo compagno.",start_private:"Inizia privata",close_private:"Chiude privata",your_buddy_is_verificated:"Il tuo compagno è stato verificato",you_have_only_a_subscription_in_one_way:"Hai solo una one-way inscrizione.",authentication_query_sent:"Domanda d'autenticità inviata.",your_message_wasnt_send_please_end_your_private_conversation:"Il tuo messaggio non è stato inviato. Si prega di finire la sua conversazione privata.",unencrypted_message_received:"Messaggio non cifrato ricevuto",your_message_wasnt_send_because_you_have_no_valid_subscription:"Il tuo messaggio non è stato inviato perché non hai una sottoscrizione valida.",not_available:"non disponibile",no_connection:"nessun collegamento!",relogin:"nuovo login",trying_to_start_private_conversation:"Cercando di avviare una conversazione privata!",Verified:"verificato",Unverified:"non verificato",private_conversation_started:"Conversazione privata iniziato.",private_conversation_aborted:"Conversazione privata abortito!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Il tuo compagno ha chiuso la conversazione privata! Si dovrebbe fare lo stesso.",conversation_is_now_verified:"Conversazione è ora verificato.",authentication_failed:"autenticazione fallita.",your_buddy_is_attempting_to_determine_:"Il tuo compagno sta cercando di determinare se lui o lei sta davvero parlando con te.",to_authenticate_to_your_buddy:"Per autenticare a il tuo compagno. ",enter_the_answer_and_click_answer:"inserisci la risposta e fare click su risposta.",enter_the_secret:"inserire il segreto.",Creating_your_private_key_:"Creare la propria chiave privata; questo potrebbe richiedere un po'.",Authenticating_a_buddy_helps_:"Autenticazione un compagno aiuta a garantire che la persona si sta parlando è davvero quello che lui o lei sostiene di essere.",How_do_you_want_to_authenticate_your_buddy:"Come si desidera autenticare {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Seleziona metodo ..",Manual:"manuale",Question:"domanda",Secret:"segreto",To_verify_the_fingerprint_:"Per verificare l'impronta digitale, contattare il proprio compagno attraverso qualche altro canale affidabile, come il telefono.",Your_fingerprint:"il tuo impronta digitale",Buddy_fingerprint:"impronta digitale da compagno",Close:"chiude",Compared:"comparato",To_authenticate_using_a_question_:"Per autenticare tramite una questione, scegli una questione la cui risposta è nota solo voi e il tuo compagno",Ask:"chiedi",To_authenticate_pick_a_secret_:"Per autenticare, scegli un segreto noto solo a te e il tuo compagno.",Compare:"Comparare",Fingerprints:"Impronta digitale",Authentication:"Autenticazione",Message:"Messagio",Add_buddy:"Aggiungi un compagno",rename_buddy:"rinomina compagno",delete_buddy:"elimina compagno",Login:"Login",Username:"Identificazione dell'utente",Password:"Password",Cancel:"Cancella",Connect:"Collega",Type_in_the_full_username_:"Digita l'identificazione utente completo e un alias opzionale.",Alias:"Alias",Add:"Aggiungi",Subscription_request:"Rrichiesta di sottoscrizione",You_have_a_request_from:"Hai una richiesta da",Deny:"Refiuta",Approve:"Approva",Remove_buddy:"Rimuova il compagno",You_are_about_to_remove_:"Stai rimovendo {{bid_name}} (<b>{{bid_jid}}</b>) del suo lista di compagni. Tutte le chat appartenente saranno chiuse.",Continue_without_chat:"Continua senza chat",Please_wait:"Si prega d'attendere",Login_failed:"Chat login è fallito",Sorry_we_cant_authentikate_:"Autenticazione non riuscita con il server di chat. Forse la password è sbagliata?",Retry:"Indietro",clear_history:"Cancella la cronologia",New_message_from:"Nuovo messaggio da",Should_we_notify_you_:"Vuoi ricevere una notifica di nuovi messaggi in futuro?",Please_accept_:'Si prega di fare clic sul bottone "Autorizzazione" sopra.',Hide_offline:"Nascondere i contatti non in linea",Show_offline:"Mostra i contatti non in linea",About:"Informazione legale",dnd:"Non disturbare",Mute:"Muto attivo",Unmute:"Muto inattivo",Subscription:"Sottoscrizione",both:"etrambi",Status:"Status",online:"In linea",chat:"chat",away:"via",xa:"via estensivo",offline:"non in linea",none:"nessuno",Unknown_instance_tag:"Instance tag sconosciuta.",Not_one_of_our_latest_keys:"Non è una delle nostre ultime chiavi.",Received_an_unreadable_encrypted_message:"Ricevuto un messaggio crittografato illeggibile.",Online:"In linea",Chatty:"Chiacchierino",Away:"Via",Extended_away:"Via estensivo",Offline:"Non in linea",Friendship_request:"Amicizia richiesto",Confirm:"Conferma",Dismiss:"Rifiuta",Remove:"Rimuovi",Online_help:"Guida in linea",FN:"Nome e cognome",N:null,FAMILY:"Cognome",GIVEN:"Nome",NICKNAME:"Soprannome",URL:"URL",ADR:"Indirizzo",STREET:"Via",EXTADD:"Esteso Indirizzo",LOCALITY:"Località",REGION:"Regione",PCODE:"Codice Postale",CTRY:"Paese",TEL:"Telefono",NUMBER:"Numero",EMAIL:"E-mail",USERID:null,ORG:"Organizzazione",ORGNAME:"Nome",ORGUNIT:"Unità",TITLE:"Titolo di lavoro",ROLE:"Funzione",BDAY:"Compleanno",DESC:"Descrizione",PHOTO:null,send_message:"Messagio inviato",get_info:"Mostra informazioni",Settings:"Impostazione",Priority:"Priorità",Save:"Salva",User_settings:"Impostazione dell'utente",A_fingerprint_:"Una impronta digitale è usato per assicurarsi che la persona con cui stai parlando è lui o lei che sta dicendo.",Your_roster_is_empty_add_a:"Il suo elenco è vuoto, aggiungi un ",new_buddy:"compagno nuovo",is:"è",Login_options:"Opzioni di login",BOSH_url:"BOSH URL",Domain:"Domain",Resource:"Risorsa",On_login:"Login on",Received_an_unencrypted_message:"Ricevuto un messaggio non crittografato",Sorry_your_buddy_doesnt_provide_any_information:"Spiace, il tuo compagno non fornisce alcuna informazione.",Info_about:"Informazioni",Authentication_aborted:"Autenticazione interrotta",Authentication_request_received:"Richiesta di autenticazione ricevuto.",Do_you_want_to_display_them:"Vuoi che venga visualizzato?",Log_in_without_chat:"Log in senza chat",has_come_online:"È venuto in linea",Unknown_sender:"Mittente sconosciuto",You_received_a_message_from_an_unknown_sender:"Hai ricevuto un messaggio da un mittente sconosciuto",Please_allow_access_to_microphone_and_camera:'Si prega di fare clic sul bottone "Autorizzazione" sopra per autorizzazione del l\'accesso al microfono e fotocamera.',Incoming_call:"Chiamata in arrivo",from:"di",Do_you_want_to_accept_the_call_from:"Vuoi accettare la chiamata di",Reject:"Rifiuta",Accept:"Accetta",hang_up:"Riattacca",snapshot:"istantanea",mute_my_audio:"disattiva il mio audio",pause_my_video:"pausa il mio audio",fullscreen:"schermo intero",Info:"Informazione",Local_IP:"IP locale",Remote_IP:"IP remoto",Local_Fingerprint:"Impronta digitale locale",Remote_Fingerprint:"Impronta digitale remoto",Video_call_not_possible:"Videochiamata non è possibile. Il tuo compagno non può effettuare videochiamate.",Start_video_call:"Inizia videochiamata",Join_chat:null,Join:null,Room:null,Nickname:null,left_the_building:null,entered_the_room:null,is_now_known_as:null,This_room_is:null,muc_hidden:{keyword:null,description:null},muc_membersonly:{keyword:null,description:null},muc_moderated:{keyword:null,description:null},muc_nonanonymous:{keyword:null,description:null},muc_open:{keyword:null,description:null},muc_passwordprotected:{keyword:null,description:null},muc_persistent:{keyword:null,description:null},muc_public:{keyword:null,description:null},muc_semianonymous:{keyword:null,description:null},muc_temporary:{keyword:null,description:null},muc_unmoderated:{keyword:null,description:null},muc_unsecured:{keyword:null,description:null},Continue:null,Server:null,Rooms_are_loaded:null,Could_load_only:null,muc_explanation:null,You_already_joined_this_room:null,This_room_will_be_closed:null,Room_not_found_:null,Loading_room_information:null,Destroy:null,Leave:null,changed_subject_to:null,muc_removed_kicked:null,muc_removed_info_kicked:null,muc_removed_banned:null,muc_removed_info_banned:null,muc_removed_affiliation:null,muc_removed_info_affiliation:null,muc_removed_membersonly:null,muc_removed_info_membersonly:null,muc_removed_shutdown:null,Reason:null,message_not_send:null,"message_not_send_item-not-found":null,message_not_send_forbidden:null,"message_not_send_not-acceptable":null,This_room_has_been_closed:null,Room_logging_is_enabled:null,A_password_is_required:null,You_are_not_on_the_member_list:null,You_are_banned_from_this_room:null,Your_desired_nickname_:null,The_maximum_number_:null,This_room_is_locked_:null,You_are_not_allowed_to_create_:null,Carbon_copy:null,Enable:null}},nds:{translation:{Logging_in:null,your_connection_is_unencrypted:null,your_connection_is_encrypted:null,your_buddy_closed_the_private_connection:null,start_private:null,close_private:null,your_buddy_is_verificated:null,you_have_only_a_subscription_in_one_way:null,authentication_query_sent:null,your_message_wasnt_send_please_end_your_private_conversation:null,unencrypted_message_received:null,your_message_wasnt_send_because_you_have_no_valid_subscription:null,not_available:null,no_connection:null,relogin:null,trying_to_start_private_conversation:null,Verified:null,Unverified:null,private_conversation_started:null,private_conversation_aborted:null,your_buddy_closed_the_private_conversation_you_should_do_the_same:null,conversation_is_now_verified:null,authentication_failed:null,your_buddy_is_attempting_to_determine_:null,to_authenticate_to_your_buddy:null,enter_the_answer_and_click_answer:null,enter_the_secret:null,Creating_your_private_key_:null,Authenticating_a_buddy_helps_:null,How_do_you_want_to_authenticate_your_buddy:null,Select_method:null,Manual:null,Question:null,Secret:null,To_verify_the_fingerprint_:null,Your_fingerprint:null,Buddy_fingerprint:null,Close:null,Compared:null,To_authenticate_using_a_question_:null,Ask:null,To_authenticate_pick_a_secret_:null,Compare:null,Fingerprints:null,Authentication:null,Message:null,Add_buddy:null,rename_buddy:null,delete_buddy:null,Login:null,Username:null,Password:null,Cancel:null,Connect:null,Type_in_the_full_username_:null,Alias:null,Add:null,Subscription_request:null,You_have_a_request_from:null,Deny:null,Approve:null,Remove_buddy:null,You_are_about_to_remove_:null,Continue_without_chat:null,Please_wait:null,Login_failed:null,Sorry_we_cant_authentikate_:null,Retry:null,clear_history:null,New_message_from:null,Should_we_notify_you_:null,Please_accept_:null,Hide_offline:null,Show_offline:null,About:null,dnd:null,Mute:null,Unmute:null,Subscription:null,both:null,Status:null,online:null,chat:null,away:null,xa:null,offline:null,none:null,Unknown_instance_tag:null,Not_one_of_our_latest_keys:null,Received_an_unreadable_encrypted_message:null,Online:null,Chatty:null,Away:null,Extended_away:null,Offline:null,Friendship_request:null,Confirm:null,Dismiss:null,Remove:null,Online_help:null,FN:null,N:null,FAMILY:null,GIVEN:null,NICKNAME:null,URL:null,ADR:null,STREET:null,EXTADD:null,LOCALITY:null,REGION:null,PCODE:null,CTRY:null,TEL:null,NUMBER:null,EMAIL:null,USERID:null,ORG:null,ORGNAME:null,ORGUNIT:null,TITLE:null,ROLE:null,BDAY:null,DESC:null,PHOTO:null,send_message:null,get_info:null,Settings:null,Priority:null,Save:null,User_settings:null,A_fingerprint_:null,Your_roster_is_empty_add_a:null,new_buddy:null,is:null,Login_options:null,BOSH_url:null,Domain:null,Resource:null,On_login:null,Received_an_unencrypted_message:null,Sorry_your_buddy_doesnt_provide_any_information:null,Info_about:null,Authentication_aborted:null,Authentication_request_received:null,Do_you_want_to_display_them:null,Log_in_without_chat:null,has_come_online:null,Unknown_sender:null,You_received_a_message_from_an_unknown_sender:null,Please_allow_access_to_microphone_and_camera:null,Incoming_call:null,from:null,Do_you_want_to_accept_the_call_from:null,Reject:null,Accept:null,hang_up:null,snapshot:null,mute_my_audio:null,pause_my_video:null,fullscreen:null,Info:null,Local_IP:null,Remote_IP:null,Local_Fingerprint:null,Remote_Fingerprint:null,Video_call_not_possible:null,Start_video_call:null,Join_chat:null,Join:null,Room:null,Nickname:null,left_the_building:null,entered_the_room:null,is_now_known_as:null,This_room_is:null,muc_hidden:{keyword:null,description:null},muc_membersonly:{keyword:null,description:null},muc_moderated:{keyword:null,description:null},muc_nonanonymous:{keyword:null,description:null},muc_open:{keyword:null,description:null},muc_passwordprotected:{keyword:null,description:null},muc_persistent:{keyword:null,description:null},muc_public:{keyword:null,description:null},muc_semianonymous:{keyword:null,description:null},muc_temporary:{keyword:null,description:null},muc_unmoderated:{keyword:null,description:null},muc_unsecured:{keyword:null,description:null},Continue:null,Server:null,Rooms_are_loaded:null,Could_load_only:null,muc_explanation:null,You_already_joined_this_room:null,This_room_will_be_closed:null,Room_not_found_:null,Loading_room_information:null,Destroy:null,Leave:null,changed_subject_to:null,muc_removed_kicked:null,muc_removed_info_kicked:null,muc_removed_banned:null,muc_removed_info_banned:null,muc_removed_affiliation:null,muc_removed_info_affiliation:null,muc_removed_membersonly:null,muc_removed_info_membersonly:null,muc_removed_shutdown:null,Reason:null,message_not_send:null,"message_not_send_item-not-found":null,message_not_send_forbidden:null,"message_not_send_not-acceptable":null,This_room_has_been_closed:null,Room_logging_is_enabled:null,A_password_is_required:null,You_are_not_on_the_member_list:null,You_are_banned_from_this_room:null,Your_desired_nickname_:null,The_maximum_number_:null,This_room_is_locked_:null,You_are_not_allowed_to_create_:null,Carbon_copy:null,Enable:null}},pl:{translation:{Logging_in:"Logowanie...",your_connection_is_unencrypted:"Twoje połączenie nie jest szyfrowane.",your_connection_is_encrypted:"Twoje połączenie jest szyfrowane.",your_buddy_closed_the_private_connection:"Twój rozmówca zamknął połączenie.",start_private:"Rozpocznij rozmowę.",close_private:"Zakończ rozmowę.",your_buddy_is_verificated:"Twój rozmówca został zweryfikowany.",you_have_only_a_subscription_in_one_way:"Masz jednostronną subskrypcję.",authentication_query_sent:"Wysłano proźbę o autentykację.",your_message_wasnt_send_please_end_your_private_conversation:"Twoja wiadomość nie została wysłana. Proszę, zamknij rozmowę.",unencrypted_message_received:"Zwrotna niezaszyfrowana wiadomość.",your_message_wasnt_send_because_you_have_no_valid_subscription:"Wiadomość nie została wysłana ponieważ nie posiadasz subskrybcji u rozmówcy.",not_available:"Niedostępny.",no_connection:"Brak połączenia!",relogin:"Połącz ponownie",trying_to_start_private_conversation:"Rozpocznij rozmowę!",Verified:"Zweryfikowano",Unverified:"Niezweryfikowano",private_conversation_started:"Rozmowa prywatna rozpoczęta.",private_conversation_aborted:"Anulowano rozmowę!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Rozmówca przerwał połączenie!",conversation_is_now_verified:"Zweryfikowano połączenie.",authentication_failed:"Weryfikacja się nie powiodła.",your_buddy_is_attempting_to_determine_:"Twój rozmówca próbuje się z Tobą połączyć.",to_authenticate_to_your_buddy:"Autoryzacja z rozmówcą, ",enter_the_answer_and_click_answer:"napisz odpowiedź.",enter_the_secret:"wpisz hasło.",Creating_your_private_key_:"Tworzenie klucza prywatnego; może to chwilę potrwać",Authenticating_a_buddy_helps_:"Autoryzacja pomoże w ustaleniu faktycznej tożsamości rozmówcy ;).",How_do_you_want_to_authenticate_your_buddy:"Jakiej autoryzacji chcesz użyć {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Wybierz sposób...",Manual:"Ręcznie",Question:"Pytanie",Secret:"Hasło",To_verify_the_fingerprint_:"Aby zweryfikować kod najpierw skontaktuj się z rozmówcą np. za pomocą telefonu.",Your_fingerprint:"Twój kod:",Buddy_fingerprint:"Kod rozmówcy",Close:"Zamknij",Compared:"Porównano",To_authenticate_using_a_question_:"Aby autoryzować za pomocą pytania, wybierz pytanie na które tylko Twój rozmówca zna odpowiedź.",Ask:"Zadaj pytanie",To_authenticate_pick_a_secret_:"Aby autoryzować za pomocą hasła, wybierz hasło na które zna tylko Twój rozmówca.",Compare:"Dopasuj",Fingerprints:"Kody autoryzacyjne",Authentication:"Autoryzacja",Message:"Wiadomość",Add_buddy:"Dodaj kontakt",rename_buddy:"Zmień nazwę",delete_buddy:"Usuń kontakt",Login:"Login",Username:"Nazwa Użytkownika",Password:"Hasło",Cancel:"Anuluj",Connect:"Połączenie",Type_in_the_full_username_:"Wpisz pełną nazwę użytkownika (np. <B>imię.nazwisko@zajezdnia.local</B>) oraz jego nazwę wyświetlaną (Alias).",Alias:"Alias",Add:"Dodaj",Subscription_request:"Potwierdzenie subskrypcji",You_have_a_request_from:"Masz potwierdzenie od",Deny:"Odmów",Approve:"Zatwierdź",Remove_buddy:"Usuń rozmówcę",You_are_about_to_remove_:"Twój rozmówca {{bid_name}} (<b>{{bid_jid}}</b>) usunął Cię ze swojej listy kontaktów.",Continue_without_chat:"Kontynuuj bez komunikatora",Please_wait:"Proszę czekać",Login_failed:"Błędne logowanie",Sorry_we_cant_authentikate_:"Błędna autoryzacja z serwerem. Może hasło jest nieprawidłowe?",Retry:"Powrót",clear_history:"Wyczyść historię",New_message_from:"Nowa wiadomość od",Should_we_notify_you_:"Czy chcesz otrzymywać powiadomienia o nowych wiadomościach w przyszłości?",Please_accept_:'Kliknij "Zezwól" na górze.',Hide_offline:"Schowaj niedostępne kontakty",Show_offline:"Pokaż niedostępne kontakty",About:"Info",dnd:"Nie przeszkadzać",Mute:"Wycisz",Unmute:"Włącz dźwięk",Subscription:"Subskrybcja",both:"obustronna",Status:"Status",online:"Dostępny",chat:"czat",away:"z dala od kompa",xa:"hen hen...",offline:"niedostępny",none:"brak",Unknown_instance_tag:"Nieznany przypadek.",Not_one_of_our_latest_keys:"Not one of our latest keys.",Received_an_unreadable_encrypted_message:"Otrzymano nieczytelną, zaszyfrowaną wiadomość.",Online:"Połączony",Chatty:"Pogawędzimy?",Away:"Daleko",Extended_away:"Hen Hen...",Offline:"Niedostępny",Friendship_request:"Zapytanie od znajomego?",Confirm:"Potwierdzenie",Dismiss:"Odwołaj",Remove:"Usuń",Online_help:"Pomoc Online",FN:"Pełna nazwa",N:" ",FAMILY:"Nazwisko",GIVEN:"Imię",NICKNAME:"Pseudonim",URL:"Strona WWW",ADR:"Adres",STREET:"Ulica",EXTADD:"Pełny adres",LOCALITY:"Lokalizacja",REGION:"Region",PCODE:"Kod pocztowy",CTRY:"Kraj",TEL:"Telefon",NUMBER:"Numer",EMAIL:"Email",USERID:" ",ORG:"Organizacja",ORGNAME:"Nazwa",ORGUNIT:"Jednostka",TITLE:"Stanowisko",ROLE:"Rola",BDAY:"Data urodzin",DESC:"Opis",PHOTO:" ",send_message:"Wyślij wiadomość",get_info:"Pokaż informację",Settings:"Ustawienia",Priority:"Priorytet",Save:"Zapisz",User_settings:"Ustawienia Użytkownika",A_fingerprint_:"Kod służy do autoryzacji Twojego rozmówcy aby potwierdzić jego tożsamość.",Your_roster_is_empty_add_a:"Twoja lista jest pusta, dodaj kontakty ",new_buddy:"Nowy kontakt",is:"jest",Login_options:"opcje logowania",BOSH_url:"Adres BOSH",Domain:"Domena",Resource:"Źródło",On_login:"Na login",Received_an_unencrypted_message:"Zatwierdzono nieszyfrowaną wiadomość.",Sorry_your_buddy_doesnt_provide_any_information:"Twój rozmówca nie posiada żadnych informacji.",Info_about:"Informacja o...",Authentication_aborted:"Autoryzacja anulowana.",Authentication_request_received:"Prośba o autoryzację została przyjęta.",Do_you_want_to_display_them:"Chcesz to wyświetlić?",Log_in_without_chat:"Zaloguj bez komunikatora",has_come_online:"jest teraz dostępny",Unknown_sender:"Nieznany nadawca",You_received_a_message_from_an_unknown_sender:"Masz wiadomość od nieznanego nadawcy.",Please_allow_access_to_microphone_and_camera:'Kliknij "Potwierdź" na górze, aby móc korzystać z mikrofonu oraz kamery.',Incoming_call:"Przychodzące połączenie",from:"z",Do_you_want_to_accept_the_call_from:"Akceptujesz połączenie od",Reject:"Odrzuć",Accept:"Zaakceptuj",hang_up:"odbierz",snapshot:"zrób zdjęcie",mute_my_audio:"wycisz dźwięk",pause_my_video:"zatrzymaj moje wideo",fullscreen:"Pełny ekran",Info:"Informacja",Local_IP:"Adres IP",Remote_IP:"Zdalny adres IP",Local_Fingerprint:"Kod lokalny",Remote_Fingerprint:"Zdalny kod",Video_call_not_possible:"Rozmowa wideo jest niemożliwa. Twój rozmówca nie ma możliwości prowadzenia takich rozmów.",Start_video_call:"Rozpocznij rozmowę wideo",Join_chat:"Dołącz do czata",Join:"Dołącz",Room:"Pokój",Nickname:"Nazwa użytkownika",left_the_building:"__nickname__ wyszedł",entered_the_room:"__nickname__ wszedł do pokoju",is_now_known_as:"__oldNickname__ zmienił nazwę na __newNickname__",This_room_is:"Ten pokój jest",muc_hidden:{keyword:"ukryty",description:"nie można odnaleźć elementów wyszukiwania"},muc_membersonly:{keyword:"tylko zalogowani",description:"musisz być członkiem listy"},muc_moderated:{keyword:"moderowano",description:'tylko osoby z opcją "głos" mogą wysyłać wiadomość'},muc_nonanonymous:{keyword:"nie-anonimowy",description:"Twój identyfikator jabber jest widoczny dla wszystkich innych osób"},muc_open:{keyword:"otwarty",description:"wszyscy mają pozwolenie aby dołączyć"},muc_passwordprotected:{keyword:"ograniczone hasłem",description:"musisz wpisać prawidłowe hasło"},muc_persistent:{keyword:"trwale",description:"nie zostaną zniszczone, jeśli ostatnia osoba wyszła"},muc_public:{keyword:"publiczny",description:"wyszukawno"},muc_semianonymous:{keyword:"pół-anonimowy",description:"Twój identyfikator jabber jest widoczny w pokoju adminów"},muc_temporary:{keyword:"tymczasowy",description:"zostanie usunięty jeżeli ostatnia osoba wyjdzie"},muc_unmoderated:{keyword:"niemoderowany",description:"wszyscy są uprawnieni do pisania wiadomości"},muc_unsecured:{keyword:"niezabezpieczone",description:"nie musisz wpisywać hasła"},Continue:"Kontynuuj",Server:"Serwer",Rooms_are_loaded:"Pokoje zostały załadowane",Could_load_only:"Nie załadowano __count__ pokoi",muc_explanation:"Aby się zalogować, wpisz nazwę pokoju oraz opcjonalnie nazwę użytkownika i hasło",You_already_joined_this_room:"Już dołączyłeś do tego pokoju",This_room_will_be_closed:"Ten pokój będzie zamknięty",Room_not_found_:"Nowy pokój będzie stworzony",Loading_room_information:"Ładowani informacji o pokoju",Destroy:"Zniszczony",Leave:"Opuść",changed_subject_to:'__nickname__ zmienił temat pokoju na "__subject__"',muc_removed_kicked:"Zostałeś wyrzucony z pokoju",muc_removed_info_kicked:"__nickname__ został wyrzucony z pokoju",muc_removed_banned:"Zostałeś zbanowany",muc_removed_info_banned:"__nickname__ został zbanowany",muc_removed_affiliation:"Zostałeś usunięty z pokoju ze względu na zmianę przynależnosci",muc_removed_info_affiliation:"__nickname__ został usunięty z pokoju ze względu na zmianę przynależnosci",muc_removed_membersonly:"Zostałeś usunięty z pokoju ze względu na zmianę pokoju tylko dla członków, a Ty nie jesteś członkiem...",muc_removed_info_membersonly:"__nickname__ został usunięty z pokoju ze względu na zmianę pokoju na tylko dla członków",muc_removed_shutdown:"Zostałeś usunięty z pokoju ze względu na zamknięcie usługi",Reason:"Powód",message_not_send:"Wystąpił błąd i twoja wiadomość nie została wysłana.","message_not_send_item-not-found":"Twoja wiadomość nie została wysłana ponieważ ten pokój nie istnieje",message_not_send_forbidden:"Twoja wiadomość nie została wysłana ponieważ nie masz głosu w tym pokoju","message_not_send_not-acceptable":"Twoja wiadomość nie została wysłana ponieważ nie jesteś właścicielem tego pokoju",This_room_has_been_closed:"Ten pokój został zamknięty",Room_logging_is_enabled:"Logowanie do pokoju jest włączone",A_password_is_required:"Hasło jest wymagane",You_are_not_on_the_member_list:"Nie jesteś na liście członków",You_are_banned_from_this_room:"Zostałeś zbanowany w tym pokoju",Your_desired_nickname_:"Twoja nazwa użytkownika jest już użyta. Spróbuj wybrać inną",The_maximum_number_:"Została osiągnięta maksymalna liczba użytkowników w tym pokoju",This_room_is_locked_:"Ten pokój jest zablokowany",You_are_not_allowed_to_create_:"Nie masz uprawnień do tworzenia pokoju",Carbon_copy:"Do wiadomości",Enable:null}},"pt-BR":{translation:{Logging_in:"Entrando...",your_connection_is_unencrypted:"Sua conexão não é encriptada",your_connection_is_encrypted:"Sua conexão é encriptada",your_buddy_closed_the_private_connection:"Seu contato fechou a conexão privada",start_private:"Iniciar conversa privada",close_private:"Fechar conversa privada",your_buddy_is_verificated:"Seu contato está verificado",you_have_only_a_subscription_in_one_way:"Você só tem a inscrição one-way",authentication_query_sent:"Pergunta de autenticação enviada",your_message_wasnt_send_please_end_your_private_conversation:"Sua mensagem não foi enviada. Por favor finalize sua conversa privada",unencrypted_message_received:"Mensagem não encriptada recebida",your_message_wasnt_send_because_you_have_no_valid_subscription:"Sua mensagem não foi enviada porque sua inscrição não é válida",not_available:"Indisponível",no_connection:"Sem conexão!",relogin:"reentrar",trying_to_start_private_conversation:"Tentando iniciar conversa privada",Verified:"Verificado",Unverified:"Não verificado",private_conversation_started:"Conversa privada iniciada.",private_conversation_aborted:"Conversa privada abortada!",your_buddy_closed_the_private_conversation_you_should_do_the_same:"Seu contato encerrou a conversa privada! Você deveria fazer o mesmo.",conversation_is_now_verified:"Conversa verificada.",authentication_failed:"Autenticação falhou.",your_buddy_is_attempting_to_determine_:"Seu contato está tentando determinar se ele realmente está falando contigo.",to_authenticate_to_your_buddy:"Para autenticar seu contato, ",enter_the_answer_and_click_answer:"entre com a resposta e clique em Responder.",enter_the_secret:"escreva a senha.",Creating_your_private_key_:"Criando sua chave privada: isso pode demorar um pouco.",Authenticating_a_buddy_helps_:"Autenticar seu contato ajuda a garantir que a pessoa com a qual você está falando é realmente a pessoa que ela alega ser.",How_do_you_want_to_authenticate_your_buddy:"Como você gostaria de se autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?",Select_method:"Selecione o método...",Manual:"Manual",Question:"Pergunta",Secret:"Senha",To_verify_the_fingerprint_:"Para verificar o fingerprint, entre em contato com seu contato usando outro meio, de preferência seguro, como o telefone.",Your_fingerprint:"Seu fingerprint",Buddy_fingerprint:"Fingerprint do contato",Close:"Fechar",Compared:"Comparado",To_authenticate_using_a_question_:"Para autenticar seu contato faça uma pergunta, mas escolha que só ele saiba a resposta.",Ask:"Pergunta",To_authenticate_pick_a_secret_:"Para autenticar, escolha um segredo que somente você e seu contato saibam.",Compare:"Compare",Fingerprints:"Fingerprints",Authentication:"Autenticação",Message:"Mensagem",Add_buddy:"Adicionar contato",rename_buddy:"renomear contato",delete_buddy:"remover contato",Login:"Entrar",Username:"Usuário",Password:"Senha",Cancel:"Cancelar",Connect:"Conectar",Type_in_the_full_username_:"Digite seu nome completo e um apelido opcional.",Alias:"Apelido",Add:"Adicionar",Subscription_request:"Pedido de inscrição",You_have_a_request_from:"Você tem um pedido de",Deny:"Negar",Approve:"Aprovar",Remove_buddy:"Remover contato",You_are_about_to_remove_:"Você está prestes a remover {{bid_name}} (<b>{{bid_jid}}</b>) de sua lista de contatos. Todas as conversas serão fechadas.",Continue_without_chat:"Continue sem converar",Please_wait:"Por favor aguarde",Login_failed:"Autenticação da conversa falhou",Sorry_we_cant_authentikate_:"A autenticação com o servidor falhou. Talvez seja a senha errada?",Retry:"Voltar",clear_history:"Limpar histórico",New_message_from:"Nova mensagem de",Should_we_notify_you_:"Devemos continuar notificando sobre novas mensagens no futuro?",Please_accept_:'Por favor clique no botão "Permitir" na parte superior.',Hide_offline:"Esconder contatos desconectados",Show_offline:"Mostrar contatos desconectados",About:"Sobre",dnd:"Não perturbe",Mute:"Mudo",Unmute:"Ligar",Subscription:"Inscrição",both:"ambos",Status:"Status",online:"online",chat:"conversa",away:"ausente",xa:"ausente por mais tempo",offline:"desativado",none:"nenhum",Unknown_instance_tag:"Marcação desconhecida da instância",Not_one_of_our_latest_keys:"Nenhuma de nossas ultimas chaves.",Received_an_unreadable_encrypted_message:"Mensagem encriptada ilegível foi recebida.",Online:"Online",Chatty:"Tagarela",Away:"Ausente",Extended_away:"Ausente por mais tempo",Offline:"Desativado",Friendship_request:"Pedido de amizade",Confirm:"Confirmar",Dismiss:"Ignorar",Remove:"Remover",Online_help:"Ajuda online",FN:"Nome completo",N:" ",FAMILY:"Sobrenome",GIVEN:"Nome",NICKNAME:"Apelido",URL:"URL",ADR:"Endereço",STREET:"Rua, Av, etc",EXTADD:"Complemento",LOCALITY:"Localidade",REGION:"Região",PCODE:"CEP",CTRY:"País",TEL:"Telefone",NUMBER:"Número",EMAIL:"Email",USERID:" ",ORG:"Empresa",ORGNAME:"Nome",ORGUNIT:"Unidade",TITLE:"Cargo",ROLE:"Rol",BDAY:"Data de nascimento",DESC:"Descrição",PHOTO:" ",send_message:"Enviar mensagem",get_info:"Exibir informações",Settings:"Configurações",Priority:"Prioridade",Save:"Salvar",User_settings:"Configurações do usuário",A_fingerprint_:"O fingerprint é usado para certificar que a pessoa com a qual se está falando é que ela diz ser.",Your_roster_is_empty_add_a:"Sua lista está vazia, adicione um ",new_buddy:"novo contato",is:"é",Login_options:"Opções de login",BOSH_url:"BOSH URL",Domain:"Domínio",Resource:"Recurso",On_login:"Ao autenticar",Received_an_unencrypted_message:"Mensagem não encriptada recebida",Sorry_your_buddy_doesnt_provide_any_information:"Desculpe, seu contato não forneceu nenhuma informação",Info_about:"Informações sobre",Authentication_aborted:"Autenticação encerrada.",Authentication_request_received:"Pedido de autenticação recebido",Do_you_want_to_display_them:"Você quer mostrá-los?",Log_in_without_chat:"Entrar sem conversar",has_come_online:"ficou online",Unknown_sender:"Emissor desconhecido",You_received_a_message_from_an_unknown_sender:"Você recebeu uma mensagem de um emissor desconhecido",Please_allow_access_to_microphone_and_camera:'Por favor clique no botão "Permitir" no topo, para conceder acesso ao seu microfone e câmera.',Incoming_call:"Recebendo chamada",from:"de",Do_you_want_to_accept_the_call_from:"Você aceita a chamada de",Reject:"Negar",Accept:"Aceitar",hang_up:"desligar",snapshot:"registrar imagem",mute_my_audio:"mudo",pause_my_video:"pausar vídeo",fullscreen:"tela cheia",Info:"Informações",Local_IP:"IP local",Remote_IP:"IP remoto",Local_Fingerprint:"Fingerprint local",Remote_Fingerprint:"Fingerprint remoto",Video_call_not_possible:"Chamada de vídeo impossível. Seu contato não suporta chamadas desse tipo.",Start_video_call:"Iniciar chamada de vídeo",Join_chat:null,Join:null,Room:null,Nickname:null,left_the_building:null,entered_the_room:null,is_now_known_as:null,This_room_is:null,muc_hidden:{keyword:null,description:null},muc_membersonly:{keyword:null,description:null},muc_moderated:{keyword:null,description:null},muc_nonanonymous:{keyword:null,description:null},muc_open:{keyword:null,description:null},muc_passwordprotected:{keyword:null,description:null},muc_persistent:{keyword:null,description:null},muc_public:{keyword:null,description:null},muc_semianonymous:{keyword:null,description:null},muc_temporary:{keyword:null,description:null},muc_unmoderated:{keyword:null,description:null},muc_unsecured:{keyword:null,description:null},Continue:null,Server:null,Rooms_are_loaded:null,Could_load_only:null,muc_explanation:null,You_already_joined_this_room:null,This_room_will_be_closed:null,Room_not_found_:null,Loading_room_information:null,Destroy:null,Leave:null,changed_subject_to:null,muc_removed_kicked:null,muc_removed_info_kicked:null,muc_removed_banned:null,muc_removed_info_banned:null,muc_removed_affiliation:null,muc_removed_info_affiliation:null,muc_removed_membersonly:null,muc_removed_info_membersonly:null,muc_removed_shutdown:null,Reason:null,message_not_send:null,"message_not_send_item-not-found":null,message_not_send_forbidden:null,"message_not_send_not-acceptable":null,This_room_has_been_closed:null,Room_logging_is_enabled:null,A_password_is_required:null,You_are_not_on_the_member_list:null,You_are_banned_from_this_room:null,Your_desired_nickname_:null,The_maximum_number_:null,This_room_is_locked_:null,You_are_not_allowed_to_create_:null,Carbon_copy:null,Enable:null}},ro:{translation:{Logging_in:null,your_connection_is_unencrypted:null,your_connection_is_encrypted:null,your_buddy_closed_the_private_connection:null,start_private:null,close_private:null,your_buddy_is_verificated:null,you_have_only_a_subscription_in_one_way:null,authentication_query_sent:null,your_message_wasnt_send_please_end_your_private_conversation:null,unencrypted_message_received:null,your_message_wasnt_send_because_you_have_no_valid_subscription:null,not_available:null,no_connection:null,relogin:null,trying_to_start_private_conversation:null,Verified:null,Unverified:null,private_conversation_started:null,private_conversation_aborted:null,your_buddy_closed_the_private_conversation_you_should_do_the_same:null,conversation_is_now_verified:null,authentication_failed:null,your_buddy_is_attempting_to_determine_:null,to_authenticate_to_your_buddy:null,enter_the_answer_and_click_answer:null,enter_the_secret:null,Creating_your_private_key_:null,Authenticating_a_buddy_helps_:null,How_do_you_want_to_authenticate_your_buddy:null,Select_method:null,Manual:null,Question:null,Secret:null,To_verify_the_fingerprint_:null,Your_fingerprint:null,Buddy_fingerprint:null,Close:null,Compared:null,To_authenticate_using_a_question_:null,Ask:null,To_authenticate_pick_a_secret_:null,Compare:null,Fingerprints:null,Authentication:null,Message:null,Add_buddy:null,rename_buddy:null,delete_buddy:null,Login:null,Username:null,Password:null,Cancel:null,Connect:null,Type_in_the_full_username_:null,Alias:null,Add:null,Subscription_request:null,You_have_a_request_from:null,Deny:null,Approve:null,Remove_buddy:null,You_are_about_to_remove_:null,Continue_without_chat:null,Please_wait:null,Login_failed:null,Sorry_we_cant_authentikate_:null,Retry:null,clear_history:null,New_message_from:null,Should_we_notify_you_:null,Please_accept_:null,Hide_offline:null,Show_offline:null,About:null,dnd:null,Mute:null,Unmute:null,Subscription:null,both:null,Status:null,online:null,chat:null,away:null,xa:null,offline:null,none:null,Unknown_instance_tag:null,Not_one_of_our_latest_keys:null,Received_an_unreadable_encrypted_message:null,Online:null,Chatty:null,Away:null,Extended_away:null,Offline:null,Friendship_request:null,Confirm:null,Dismiss:null,Remove:null,Online_help:null,FN:null,N:null,FAMILY:null,GIVEN:null,NICKNAME:null,URL:null,ADR:null,STREET:null,EXTADD:null,LOCALITY:null,REGION:null,PCODE:null,CTRY:null,TEL:null,NUMBER:null,EMAIL:null,USERID:null,ORG:null,ORGNAME:null,ORGUNIT:null,TITLE:null,ROLE:null,BDAY:null,DESC:null,PHOTO:null,send_message:null,get_info:null,Settings:null,Priority:null,Save:null,User_settings:null,A_fingerprint_:null,Your_roster_is_empty_add_a:null,new_buddy:null,is:null,Login_options:null,BOSH_url:null,Domain:null,Resource:null,On_login:null,Received_an_unencrypted_message:null,Sorry_your_buddy_doesnt_provide_any_information:null,Info_about:null,Authentication_aborted:null,Authentication_request_received:null,Do_you_want_to_display_them:null,Log_in_without_chat:null,has_come_online:null,Unknown_sender:null,You_received_a_message_from_an_unknown_sender:null,Please_allow_access_to_microphone_and_camera:null,Incoming_call:null,from:null,Do_you_want_to_accept_the_call_from:null,Reject:null,Accept:null,hang_up:null,snapshot:null,mute_my_audio:null,pause_my_video:null,fullscreen:null,Info:null,Local_IP:null,Remote_IP:null,Local_Fingerprint:null,Remote_Fingerprint:null,Video_call_not_possible:null,Start_video_call:null,Join_chat:null,Join:null,Room:null,Nickname:null,left_the_building:null,entered_the_room:null,is_now_known_as:null,This_room_is:null,muc_hidden:{keyword:null,description:null},muc_membersonly:{keyword:null,description:null},muc_moderated:{keyword:null,description:null},muc_nonanonymous:{keyword:null,description:null},muc_open:{keyword:null,description:null},muc_passwordprotected:{keyword:null,description:null},muc_persistent:{keyword:null,description:null},muc_public:{keyword:null,description:null},muc_semianonymous:{keyword:null,description:null},muc_temporary:{keyword:null,description:null},muc_unmoderated:{keyword:null,description:null},muc_unsecured:{keyword:null,description:null},Continue:null,Server:null,Rooms_are_loaded:null,Could_load_only:null,muc_explanation:null,You_already_joined_this_room:null,This_room_will_be_closed:null,Room_not_found_:null,Loading_room_information:null,Destroy:null,Leave:null,changed_subject_to:null,muc_removed_kicked:null,muc_removed_info_kicked:null,muc_removed_banned:null,muc_removed_info_banned:null,muc_removed_affiliation:null,muc_removed_info_affiliation:null,muc_removed_membersonly:null,muc_removed_info_membersonly:null,muc_removed_shutdown:null,Reason:null,message_not_send:null,"message_not_send_item-not-found":null,message_not_send_forbidden:null,"message_not_send_not-acceptable":null,This_room_has_been_closed:null,Room_logging_is_enabled:null,A_password_is_required:null,You_are_not_on_the_member_list:null,You_are_banned_from_this_room:null,Your_desired_nickname_:null,The_maximum_number_:null,This_room_is_locked_:null,You_are_not_allowed_to_create_:null,Carbon_copy:null,Enable:null}}};
+
//# sourceMappingURL=jsxc.dep.min.js.map \ No newline at end of file
diff --git a/build/lib/jsxc.dep.min.js.map b/build/lib/jsxc.dep.min.js.map
index 5efce639..8a602adf 100644
--- a/build/lib/jsxc.dep.min.js.map
+++ b/build/lib/jsxc.dep.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"jsxc.dep.min.js","sources":["jsxc.dep.js"],"names":["b64_sha1","s","binb2b64","core_sha1","str2binb","length","str_sha1","binb2str","b64_hmac_sha1","key","data","core_hmac_sha1","str_hmac_sha1","x","len","i","j","t","olda","oldb","oldc","oldd","olde","w","Array","a","b","c","d","e","rol","safe_add","sha1_ft","sha1_kt","bkey","ipad","opad","hash","concat","y","lsw","msw","num","cnt","str","bin","mask","charCodeAt","String","fromCharCode","binarray","triplet","tab","charAt","Base64","keyStr","obj","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","isNaN","decode","replace","indexOf","MD5","bit_rol","str2binl","binl2str","binl2hex","hex_tab","md5_cmn","q","md5_ff","md5_gg","md5_hh","md5_ii","core_md5","hexdigest","Function","prototype","bind","func","this","_slice","slice","_concat","_args","call","arguments","apply","elt","from","Number","Math","ceil","floor","callback","$build","name","attrs","Strophe","Builder","$msg","$iq","$pres","VERSION","NS","HTTPBIND","BOSH","CLIENT","AUTH","ROSTER","PROFILE","DISCO_INFO","DISCO_ITEMS","MUC","SASL","STREAM","BIND","SESSION","STANZAS","XHTML_IM","XHTML","tags","attributes","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body","css","validTag","tag","validAttribute","attribute","validCSS","style","Status","ERROR","CONNECTING","CONNFAIL","AUTHENTICATING","AUTHFAIL","CONNECTED","DISCONNECTED","DISCONNECTING","ATTACHED","LogLevel","DEBUG","INFO","WARN","FATAL","ElementType","NORMAL","TEXT","CDATA","FRAGMENT","TIMEOUT","SECONDARY_TIMEOUT","addNamespace","value","forEachChild","elem","elemName","childNode","childNodes","nodeType","isTagEqual","el","tagName","toLowerCase","_xmlGenerator","_makeGenerator","doc","undefined","document","implementation","createDocument","documentMode","_getIEXmlDom","appendChild","createElement","xmlGenerator","docStrings","ActiveXObject","xmlElement","k","node","xmlTextNode","setAttribute","hasOwnProperty","xmlescape","text","createTextNode","xmlHtmlNode","html","window","DOMParser","parser","parseFromString","async","loadXML","getText","nodeValue","copyElement","nodeName","createHtml","cssAttrs","attr","cssName","cssValue","getAttribute","cssText","split","push","join","createDocumentFragment","escapeNode","unescapeNode","getNodeFromJid","jid","getDomainFromJid","bare","getBareJidFromJid","parts","splice","getResourceFromJid","log","level","msg","debug","info","warn","error","fatal","serialize","result","tree","child","_requestId","_connectionPlugins","addConnectionPlugin","ptype","xmlns","nodeTree","toString","up","parentNode","moreattrs","cnode","impNode","xmlGen","importNode","newElem","h","fragment","innerHTML","xhtml","Handler","handler","ns","type","id","options","matchBare","user","isMatch","nsMatch","that","run","sourceURL","line","message","fileName","console","trace","lineNumber","stack","TimedHandler","period","lastCalled","Date","getTime","reset","Connection","service","proto","protocol","_proto","Websocket","Bosh","domain","features","_sasl_data","do_session","do_bind","timedHandlers","handlers","removeTimeds","removeHandlers","addTimeds","addHandlers","_authentication","_idleTimeout","_disconnectTimeout","do_authentication","authenticated","disconnecting","connected","errors","paused","_data","_uniqueId","_sasl_success_handler","_sasl_failure_handler","_sasl_challenge_handler","maxRetries","setTimeout","_onIdle","F","init","_reset","_requests","pause","resume","getUniqueId","suffix","connect","pass","wait","hold","route","authzid","authcid","servtype","connect_callback","_changeConnectStatus","_connect","attach","sid","rid","wind","_attach","xmlInput","xmlOutput","rawInput","rawOutput","send","_queueData","_send","flush","clearTimeout","sendIQ","errback","timeout","timeoutHandler","addHandler","stanza","deleteTimedHandler","iqtype","addTimedHandler","deleteHandler","element","_sendRestart","thand","handRef","hand","disconnect","reason","pres","_addSysTimedHandler","_onDisconnectTimeout","_disconnect","status","condition","plugin","statusChanged","err","_doDisconnect","_dataRecv","req","raw","_reqToData","strip","pop","_emptyQueue","cond","conflict","typ","getElementsByTagName","newList","mechanisms","_connect_cb","_callback","bodyWrap","conncheck","sasl_scram_sha1","sasl_plain","sasl_digest_md5","sasl_anonymous","legacy_auth","hasFeatures","mech","matched","found_authentication","_no_auth_received","authenticate","higher","priority","swap","mechanism_found","test","_addSysHandler","_sasl_success_cb","_sasl_failure_cb","_sasl_challenge_cb","_sasl_mechanism","onStart","request_auth_exchange","mechanism","isClientFirst","response","onChallenge","_auth1_cb","to","challenge","iq","_auth2_cb","serverSignature","success","attribMatch","matches","match","onSuccess","_sasl_auth1_cb","_sasl_bind_cb","resource","jidNode","_sasl_session_cb","onFailure","since","now","SASLMechanism","connection","_connection","Error","SASLAnonymous","SASLPlain","auth_str","SASLSHA1","test_cnonce","cnonce","random","nonce","salt","iter","Hi","U","U_old","clientKey","serverKey","clientSignature","responseText","authMessage","substr","SASLMD5","_quote","realm","host","qop","digest_uri","A1","A2","Request","sends","xmlData","origFunc","date","NaN","abort","dead","age","timeDead","xhr","_newXHR","getResponse","responseXML","documentElement","XMLHttpRequest","overrideMimeType","onreadystatechange","_conn","_buildBody","jQuery","trigger","xml:lang","content","ver","xmpp:version","xmlns:xmpp","_onRequestStateChange","_throttledRequestHandler","parseInt","_sendTerminate","_hitError","reqStatus","xmpp:restart","_processRequest","time_elapsed","readyState","reqIs0","reqIs1","_removeRequest","_restartRequest","self","primaryTimeout","secondaryTimeout","requestCompletedWithServerError","open","sync","e2","sendFunc","customHeaders","headers","header","setRequestHeader","backoff","min","pow","abs","new_service","location","pathname","_buildStream","xmlns:stream","version","_check_streamerror","connectstatus","textContent","errorString","_closeSocket","socket","WebSocket","onopen","_onOpen","onerror","_onError","onclose","_onClose","onmessage","_connect_cb_wrapper","_handleStreamStart","ns_stream","namespaceURI","streamStart","string","_streamWrap","_onMessage","CLOSED","close","rawStanza","_removeClosingTag","search","firstChild","start","startString","Occupant","RoomConfig","XmppRoom","__bind","fn","me","rooms","roomNames","conn","_muc_handler","room","nick","msg_handler_cb","pres_handler_cb","roster_cb","password","history_attrs","extended_presence","room_nick","_ref","_this","test_append_nick","roomname","xquery","_i","_len","_message_handlers","_presence_handlers","leave","handler_cb","exit_msg","presence","presenceid","html_message","msgid","parent","removeChild","groupchat","invite","receiver","invitation","MUC_USER","directInvite","queryOccupants","success_cb","error_cb","configure","config","MUC_OWNER","cancelConfigure","saveConfiguration","conf","Form","toXML","createInstantRoom","roomiq","setTopic","topic","_modifyPrivilege","item","MUC_ADMIN","modifyRole","role","kick","voice","mute","op","deop","modifyAffiliation","affiliation","ban","member","revoke","owner","admin","changeNick","setStatus","show","listRooms","server","handle_cb","client","_roomRosterHandler","_addOccupant","roster","_roster_handlers","_handler_ids","muc","handler_type","removeHandler","occ","newnick","_parsePresence","update","c2","_j","_len1","_ref1","_ref2","_ref3","_ref4","_ref5","_ref6","_ref7","states","code","parse","field","identity","query","_k","_len2","identities","var","label","_identities","_features","_items","_onDiscoInfo","_onDiscoItems","addIdentity","category","lang","addFeature","var_name","removeFeature","addItem","call_back","items","_buildIQResult","query_attrs","iqresult","$","HASH","_ver","_knownCapabilities","JSON","localStorage","getItem","_jidVerIndex","disco","CAPS","_delegateCapabilities","generateCapsAttrs","generateVer","sort","_sortIdentities","identitiesLen","featuresLen","curIdent","getCapabilitiesByJid","hasFeatureByJid","feature","isArray","makeArray","querySelector","setItem","stringify","_requestCapabilities","_handleDiscoInfoReply","childNodesLen","_attributesToJsObject","buildIq","vCardEl","VCARD","get","set","error_rb","sessions","jid2session","ice_config","iceServers","pc_constraints","media_constraints","mandatory","OfferToReceiveAudio","OfferToReceiveVideo","localStream","onJingle","find","action","ack","sess","peerjid","JingleSession","localStreams","initiate","setRemoteDescription","startmuted","accept","terminate","addIceCandidate","affected","addSource","removeSource","myjid","sendOffer","state","sendTerminate","active","terminateByJid","getStunAndTurnCredentials","res","iceservers","each","idx","dict","url","navigator","userAgent","username","credential","initiator","responder","isInitiator","peerconnection","remoteStream","localSDP","remoteSDP","relayedStreams","remoteStreams","startTime","stopTime","drip_container","usetrickle","usepranswer","usedrip","hadstuncandidate","hadturncandidate","lasticecandidate","statsinterval","addssrc","removessrc","pendingop","nickname","filter_candidates","RTCPeerconnection","onicecandidate","event","sendIceCandidate","candidate","onaddstream","stream","onremovestream","onsignalingstatechange","oniceconnectionstatechange","iceConnectionState","forEach","addStream","pranswer","localDescription","lines","SDPUtil","find_lines","sdp","find_line","prsdp","SDP","toJingle","source","setLocalDescription","RTCSessionDescription","clearInterval","ice","iceparams","media","sdpMLineIndex","session","jcand","candidateToJingle","sendIceCandidates","signalingState","candidates","cand","mid","cands","filter","creator","sdpMid","tmp","parse_fingerprint","required","fingerprint","createOffer","createdOffer","parse_icecandidate","desctype","fromJingle","remoteDescription","remotedesc","cobbled","iscomplete","mediapart","candidateFromJingle","RTCIceCandidate","sendAnswer","provisional","createAnswer","createdAnswer","jingle","getAudioTracks","track","enabled","getVideoTracks","term","ssrc","modifySources","modifiedAnswer","hardMuteVideo","muted","sendMute","sendRinging","getStats","interval","recv","audio","video","lost","lastrecv","lastlost","loss","delta","setInterval","stats","results","packetsrecv","stat","packetslost","shift","mangle","mline","rtpmap","newdesc","parse_mline","fmt","parse_rtpmap","build_mline","removeSessionLines","prefix","removeMediaLines","mediaindex","thecreator","semantics","bundle","substring","parse_mid","parse_fmtp","RtcpFbToJingle","crypto","parse_crypto","ssrclines","linessrc","kv","parse_ssrc","parse_extmap","uri","direction","senders","TransportToJingle","port","fingerprints","setup","payloadtype","parse_rtcpfb","params","subtype","RtcpFbFromJingle","group","contents","map","m","jingle2media","desc","build_iceufrag","build_icepwd","build_rtpmap","mediadesc","sessiondesc","ufrag","parse_iceufrag","pwd","parse_icepwd","frag","clockrate","channels","elems","foundation","component","ip","generation","tcptype","network","build_icecandidate","hasOwnAttribute","pt","haystack","needle","sessionpart","needles","setupRTC","getUserMediaWithConstraints","TraceablePeerConnection","constraints","mozGetUserMedia","mozRTCPeerConnection","webkitRTCPeerConnection","updateLog","maxstats","what","time","onnegotiationneeded","ondatachannel","names","endTime","values","times","dumpSDP","description","__defineGetter__","removeStream","createDataChannel","opts","successCallback","failureCallback","offer","answer","RTC","browser","getUserMedia","attachMediaStream","mozSrcObject","play","MediaStream","mozRTCSessionDescription","mozRTCIceCandidate","webkitGetUserMedia","webkitURL","createObjectURL","optional","DtlsSrtpKeyAgreement","webkitMediaStream","videoTracks","audioTracks","um","resolution","bandwidth","fps","chromeMediaSource","minWidth","minHeight","minAspectRatio","maxFrameRate","minFrameRate","root","factory","define","amd","module","exports","Salsa20","rounds","sigmaWords","keyWords","nonceWords","counterWords","block","blockUsed","setKey","setNonce","getBytes","numberOfBytes","out","_generateBlock","_incrementCounter","getHexString","hex","bytes","u","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","msCrypto","require","BigInt","findPrimes","n","ans","millerRabin","mr_x1","dup","mr_r","mr_a","copy_","addInt_","isZero","bpe","rightShift_","powMod_","equalsInt","equals","squareMod_","bitSize","z","expand","int2bigInt","mod","mod_","trim","mult","mult_","powMod","sub","sub_","add","add_","inverseMod","inverseMod_","multMod","multMod_","randBigInt","randBigInt_","randomBitInt","max","copyInt_","eg_u","eg_v","eg_A","eg_B","eg_C","eg_D","halve_","greater","negative","inverseModInt","greaterShift","kx","ky","divide_","r","y1","y2","leftShift_","subShift_","radix","linCombShift_","addShift_","modInt","bits","minSize","buff","str2bigInt","base","kk","bb","digitsStr","multInt_","bigInt2str","s6","divInt_","ys","ss","s4","s5","s0","k1","k2","kn","np","s7","s3","mont_","one","ui","t2","ks","sa","divMod","den","subMod","two","twoToThe","bigInt2bits","bi","pad","ba","_num2bin","ba2bigInt","mpi","getSeed","randomBytes","randomByte","primes","buf","getRandomValues","Uint8Array","CryptoJS","C","C_lib","lib","Base","extend","overrides","mixIn","$super","create","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","_nDataBytes","_append","_process","doFlush","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","_minBufferSize","nWordsReady","nBytesReady","offset","_doProcessBlock","processedWords","C_algo","Hasher","cfg","_doReset","messageUpdate","finalize","_doFinalize","_createHelper","hasher","_createHmacHelper","HMAC","algo","_map","base64Chars","byte1","byte2","byte3","paddingChar","base64Str","base64StrLength","paddingIndex","bits1","bits2","Cipher","EvpKDF","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","_key","process","dataUpdate","finalProcessedData","keySize","ivSize","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","encrypt","decrypt","ciphertext","C_mode","StreamCipher","finalProcessedBlocks","mode","BlockCipherMode","iv","Encryptor","Decryptor","_cipher","_iv","CBC","xorBlock","_prevBlock","processBlock","encryptBlock","thisBlock","decryptBlock","C_pad","Pkcs7","nPaddingBytes","paddingWord","paddingWords","padding","unpad","CipherParams","BlockCipher","modeCreator","_mode","cipherParams","formatter","C_format","format","OpenSSLFormatter","OpenSSL","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","_parse","plaintext","C_kdf","kdf","OpenSSLKdf","execute","compute","derivedParams","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","RCON","AES","nRounds","_nRounds","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","M","_doCryptBlock","s1","s2","round","t0","t1","t3","W","SHA1","_hash","H","nBitsTotal","nBitsLeft","HmacSHA1","K","isPrime","sqrtN","sqrt","factor","getFractionalBits","nPrime","SHA256","f","g","gamma0x","gamma0","gamma1x","gamma1","ch","maj","sigma0","sigma1","HmacSHA256","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","hmac","NoPadding","CTR","counter","_counter","keystream","EventEmitter","indexOfListener","listeners","listener","alias","getListeners","evt","events","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","listenerIsWrapped","once","on","addOnceListener","defineEvent","defineEvents","evts","removeListener","index","off","addListeners","manipulateListeners","removeListeners","remove","single","multiple","RegExp","removeEvent","_events","emitEvent","args","_getOnceReturnValue","emit","setOnceReturnValue","_onceReturnValue","OTR","DSA","CONST","N","G","MSGSTATE_PLAINTEXT","MSGSTATE_ENCRYPTED","MSGSTATE_FINISHED","AUTHSTATE_NONE","AUTHSTATE_AWAITING_DHKEY","AUTHSTATE_AWAITING_REVEALSIG","AUTHSTATE_AWAITING_SIG","WHITESPACE_TAG","WHITESPACE_TAG_V2","WHITESPACE_TAG_V3","OTR_TAG","OTR_VERSION_1","OTR_VERSION_2","OTR_VERSION_3","SMPSTATE_EXPECT0","SMPSTATE_EXPECT1","SMPSTATE_EXPECT2","SMPSTATE_EXPECT3","SMPSTATE_EXPECT4","STATUS_SEND_QUERY","STATUS_AKE_INIT","STATUS_AKE_SUCCESS","STATUS_END_OTR","intCompare","HLP","DTS","BYTE","SHORT","INT","MAC","SIG","WRAPPER_BEGIN","WRAPPER_END","TWO","Ctor","constructor","Object","__super__","compare","str1","str2","randomExponent","smpHash","fmpi","smpi","sha256","packBytes","packMPI","bits2bigInt","makeMac","aesctr","mac","make1Mac","encryptAes","aesctr_decoded","decryptAes","multPowMod","ZKP","v","GTOE","between","checkGroup","N_MINUS_2","h1","secbytes","sha1","h2","_toString","val","nex","packINT","packCtr","padCtr","ctr","unpackCtr","toByteArray","unpack","arr","packData","packSHORT","short","unpackSHORT","packTLV","readLen","readData","readMPI","packMPIs","reduce","prv","cur","unpackMPIs","mpis","splitype","wrapMsg","fs","v3","our_it","their_it","its","ei","mf","mfs","_bin2num","rv","ary","iz","remain","timer","makeRandom","isProbPrime","B","l","rpprb","generatePrimes","bit_length","rem","repeat","bit_lengths","LM1","bl4","brk","ONE","pm1","prop","KEY_TYPE","ZERO","nocache","tokenizeStr","end","lastIndexOf","splt","es","parseLibotr","o","Worker","WWPath","__dirname","keys","1024","2048","packPublic","packPrivate","generateNonce","priv","rand","sign","pk","parsePublic","fields","parsePrivate","libotr","dsa","verify","hm","u1","u2","createInWebWorker","cb","path","seed","worker","postMessage","imports","Parse","parseMsg","otr","initFragment","ind","com","msgFragment","vers","2","3","qs","qi","cls","instance_tags","ERROR_START_AKE","sendQueryMsg","checkInstanceTags","hMac","gx","gy","kid","AKE","our_dh","our_old_dh","our_keyid","their_y","their_keyid","their_priv_pk","ssid","transmittedRS","meth","createKeys","privateKey","c_prime","m1","m2","m1_prime","m2_prime","verifySignMac","our_dh_pk","vmac","pub","makeM","publicKey","akeSuccess","their_old_y","sessKeys","DHSession","otr_version","authstate","msgstate","myhashed","dhcommit","encrypted","hashed","sendStored","handleAKE","vsm","ourHash","theirHash","dh","gxmpi","sendMsg","our_instance_tag","their_instance_tag","fragment_size","io","initiateAKE","SM","reqs","our_fp","their_fp","Q","smpstate","secret","makeSecret","our","makeG2s","a2","a3","g2a","g3a","computeGs","g2","g3","computePQ","computeR","QoQ","computeRab","computeC","computeD","handleSM","r2","r3","r7","t4","rab","tmp2","cR","d7","ms","trust","expectStates",4,5,7,"question","g3ao","c3","d2","d3","r4","r5","r6","cP","d5","d6","PoP","rcvSecret","OTRCB","send_interval","outgoing","instance_tag","makeInstanceTag","smw","SMWPath","MAX_INT","MAX_UINT","ALLOW_V2","ALLOW_V3","REQUIRE_ENCRYPTION","SEND_WHITESPACE_TAG","WHITESPACE_START_AKE","storedMgs","oldMacKeys","sm","_akeInit","receivedPlaintext","ake","_SMW","method","_smInit","prepareMsg","meta","first","sq","sendbyte","rcvbyte","sendenc","sendmac","rcvenc","rcvmac","rcvmacused","extra_symkey","send_counter","rcv_counter","rotateOurKeys","sk","rotateTheirKeys","esk","notify","aes","handleDataMsg","vt","types","ign","handleTLVs","tlvs","smpSecret","versions","vs","receiveMsg","doAKE","it","severity","sendFile","filename","l1name","endOtr","cache","jsonp","content-type","src","json","T","authBasic","Authorization","del","head","isAllowed","patch","post","put","P","fixLng","functions","namespaces","defaultNs","fallbackNS","fallbackLng","interpolationPrefixEscaped","regexEscape","interpolationPrefix","interpolationSuffixEscaped","interpolationSuffix","lng","detectLanguage","L","toLanguages","useCookie","cookie","read","cookieName","cookieExpirationTime","cookieDomain","detectLngFromLocalStorage","setCurrentLng","setJqueryExt","Deferred","resStore","preload","I","load","J","resolve","promise","deepExtend","keyseparator","dynamicLoad","resGetPath","getAsync","customLoad","_fetch","useLocalStorage","_storeLocal","defaultValueFromContent","defaultValue","prepend","append","selectorAttr","useDataAttrOptions","i18n","escapeInterpolation","regexReplacementEscape","postProcess","reusePrefix","maxRecursion","reuseSuffix","context","count","indefinite_article","A","D","sprintf","shortcutFunction","defaultVariables","nsseparator","sendMissing","missingKeyHandler","X","parseMissingKey","lngs","contextNotFound","pluralNotFound","needsPlural","pluralSuffix","indefiniteNotFound","indefiniteSuffix","E","returnObjectTrees","fallbackOnNull","objectTreeKeyHandler","fallbackOnEmpty","isFallbackLookup","fallbackToDefaultNS","lngWhitelist","detectLngQS","languages","userLanguage","language","lowerCaseLng","toUpperCase","TypeError","Zepto","O","_loadLocal","i18nStamp","localStorageExpirationTime","ajax","dataType","_fetchOne","postMissing","sendMissingTo","resPostPath","sendType","postAsync","reload","&","<",">","\"","'","/","R","setTime","toGMTString","S","getCountyIndexOfLng","applyReplacement","V",1,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,"rules","numbers","plurals","addRule","currentRule","rule","noAbs","Y","Z","toExponential","parseFloat","toFixed","exec","unshift","setLng","addResourceBundle","hasResourceBundle","addResource","addResources","removeResourceBundle","loadNamespace","loadNamespaces","setDefaultNamespace","translate","exists","pluralExtensions","addPostProcessor","I18next","de","translation","Logging_in","your_connection_is_unencrypted","your_connection_is_encrypted","your_buddy_closed_the_private_connection","start_private","close_private","your_buddy_is_verificated","you_have_only_a_subscription_in_one_way","authentication_query_sent","your_message_wasnt_send_please_end_your_private_conversation","unencrypted_message_received","your_message_wasnt_send_because_you_have_no_valid_subscription","not_available","no_connection","relogin","trying_to_start_private_conversation","Verified","Unverified","private_conversation_started","private_conversation_aborted","your_buddy_closed_the_private_conversation_you_should_do_the_same","conversation_is_now_verified","authentication_failed","your_buddy_is_attempting_to_determine_","to_authenticate_to_your_buddy","enter_the_answer_and_click_answer","enter_the_secret","Creating_your_private_key_","Authenticating_a_buddy_helps_","How_do_you_want_to_authenticate_your_buddy","Select_method","Manual","Question","Secret","To_verify_the_fingerprint_","Your_fingerprint","Buddy_fingerprint","Close","Compared","To_authenticate_using_a_question_","Ask","To_authenticate_pick_a_secret_","Compare","Fingerprints","Authentication","Message","Add_buddy","rename_buddy","delete_buddy","Login","Username","Password","Cancel","Connect","Type_in_the_full_username_","Alias","Add","Subscription_request","You_have_a_request_from","Deny","Approve","Remove_buddy","You_are_about_to_remove_","Continue_without_chat","Please_wait","Login_failed","Sorry_we_cant_authentikate_","Retry","clear_history","New_message_from","Should_we_notify_you_","Please_accept_","Hide_offline","Show_offline","About","dnd","Mute","Unmute","Subscription","both","online","chat","away","xa","offline","none","Unknown_instance_tag","Not_one_of_our_latest_keys","Received_an_unreadable_encrypted_message","Online","Chatty","Away","Extended_away","Offline","Friendship_request","Confirm","Dismiss","Remove","Online_help","FN","FAMILY","GIVEN","NICKNAME","URL","ADR","STREET","EXTADD","LOCALITY","REGION","PCODE","CTRY","TEL","NUMBER","EMAIL","USERID","ORG","ORGNAME","ORGUNIT","TITLE","ROLE","BDAY","DESC","PHOTO","send_message","get_info","Settings","Priority","Save","User_settings","A_fingerprint_","Your_roster_is_empty_add_a","new_buddy","is","Login_options","BOSH_url","Domain","Resource","On_login","Received_an_unencrypted_message","Sorry_your_buddy_doesnt_provide_any_information","Info_about","Authentication_aborted","Authentication_request_received","Do_you_want_to_display_them","Log_in_without_chat","has_come_online","Unknown_sender","You_received_a_message_from_an_unknown_sender","Please_allow_access_to_microphone_and_camera","Incoming_call","Do_you_want_to_accept_the_call_from","Reject","Accept","hang_up","snapshot","mute_my_audio","pause_my_video","fullscreen","Info","Local_IP","Remote_IP","Local_Fingerprint","Remote_Fingerprint","Video_call_not_possible","Start_video_call","en","Join_chat","Join","Room","Nickname","left_the_building","entered_the_room","is_now_known_as","This_room_is","muc_hidden","keyword","muc_membersonly","muc_moderated","muc_nonanonymous","muc_open","muc_passwordprotected","muc_persistent","muc_public","muc_semianonymous","muc_temporary","muc_unmoderated","muc_unsecured","Continue","Server","Rooms_are_loaded","Could_load_only","muc_explanation","You_already_joined_this_room","This_room_will_be_closed","Room_not_found_","Loading_room_information","Destroy","Leave","changed_subject_to","muc_removed_kicked","muc_removed_info_kicked","muc_removed_banned","muc_removed_info_banned","muc_removed_affiliation","muc_removed_info_affiliation","muc_removed_membersonly","muc_removed_info_membersonly","muc_removed_shutdown","Reason","message_not_send","message_not_send_item-not-found","message_not_send_forbidden","message_not_send_not-acceptable","This_room_has_been_closed","Room_logging_is_enabled","A_password_is_required","You_are_not_on_the_member_list","You_are_banned_from_this_room","Your_desired_nickname_","The_maximum_number_","This_room_is_locked_","You_are_not_allowed_to_create_","fr","nds","pl","pt-BR","ro"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"jsxc.dep.min.js","sources":["jsxc.dep.js"],"names":["b64_sha1","s","binb2b64","core_sha1","str2binb","length","str_sha1","binb2str","b64_hmac_sha1","key","data","core_hmac_sha1","str_hmac_sha1","x","len","i","j","t","olda","oldb","oldc","oldd","olde","w","Array","a","b","c","d","e","rol","safe_add","sha1_ft","sha1_kt","bkey","ipad","opad","hash","concat","y","lsw","msw","num","cnt","str","bin","mask","charCodeAt","String","fromCharCode","binarray","triplet","tab","charAt","Base64","keyStr","obj","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","isNaN","decode","replace","indexOf","MD5","bit_rol","str2binl","binl2str","binl2hex","hex_tab","md5_cmn","q","md5_ff","md5_gg","md5_hh","md5_ii","core_md5","hexdigest","Function","prototype","bind","func","this","_slice","slice","_concat","_args","call","arguments","apply","elt","from","Number","Math","ceil","floor","callback","$build","name","attrs","Strophe","Builder","$msg","$iq","$pres","VERSION","NS","HTTPBIND","BOSH","CLIENT","AUTH","ROSTER","PROFILE","DISCO_INFO","DISCO_ITEMS","MUC","SASL","STREAM","BIND","SESSION","STANZAS","XHTML_IM","XHTML","tags","attributes","blockquote","br","cite","em","img","li","ol","p","span","strong","ul","body","css","validTag","tag","validAttribute","attribute","validCSS","style","Status","ERROR","CONNECTING","CONNFAIL","AUTHENTICATING","AUTHFAIL","CONNECTED","DISCONNECTED","DISCONNECTING","ATTACHED","LogLevel","DEBUG","INFO","WARN","FATAL","ElementType","NORMAL","TEXT","CDATA","FRAGMENT","TIMEOUT","SECONDARY_TIMEOUT","addNamespace","value","forEachChild","elem","elemName","childNode","childNodes","nodeType","isTagEqual","el","tagName","toLowerCase","_xmlGenerator","_makeGenerator","doc","undefined","document","implementation","createDocument","documentMode","_getIEXmlDom","appendChild","createElement","xmlGenerator","docStrings","ActiveXObject","xmlElement","k","node","xmlTextNode","setAttribute","hasOwnProperty","xmlescape","text","createTextNode","xmlHtmlNode","html","window","DOMParser","parser","parseFromString","async","loadXML","getText","nodeValue","copyElement","nodeName","createHtml","cssAttrs","attr","cssName","cssValue","getAttribute","cssText","split","push","join","createDocumentFragment","escapeNode","unescapeNode","getNodeFromJid","jid","getDomainFromJid","bare","getBareJidFromJid","parts","splice","getResourceFromJid","log","debug","msg","info","warn","error","fatal","serialize","result","tree","child","_requestId","_connectionPlugins","addConnectionPlugin","ptype","xmlns","nodeTree","toString","up","parentNode","moreattrs","cnode","impNode","xmlGen","importNode","newElem","h","fragment","innerHTML","xhtml","Handler","handler","ns","type","id","options","matchBare","user","isMatch","nsMatch","that","run","sourceURL","line","message","fileName","console","trace","lineNumber","stack","TimedHandler","period","lastCalled","Date","getTime","reset","Connection","service","proto","protocol","_proto","Websocket","Bosh","domain","features","_sasl_data","do_session","do_bind","timedHandlers","handlers","removeTimeds","removeHandlers","addTimeds","addHandlers","_authentication","_idleTimeout","_disconnectTimeout","do_authentication","authenticated","disconnecting","connected","errors","paused","_data","_uniqueId","_sasl_success_handler","_sasl_failure_handler","_sasl_challenge_handler","maxRetries","setTimeout","_onIdle","F","init","_reset","_requests","pause","resume","getUniqueId","suffix","connect","pass","wait","hold","route","authzid","authcid","servtype","connect_callback","_changeConnectStatus","_connect","attach","sid","rid","wind","_attach","xmlInput","xmlOutput","rawInput","rawOutput","send","_queueData","_send","flush","clearTimeout","sendIQ","errback","timeout","timeoutHandler","addHandler","stanza","deleteTimedHandler","iqtype","addTimedHandler","deleteHandler","element","_sendRestart","thand","handRef","hand","disconnect","reason","pres","_addSysTimedHandler","_onDisconnectTimeout","_disconnect","status","condition","plugin","statusChanged","err","_doDisconnect","_dataRecv","req","raw","_reqToData","strip","pop","_emptyQueue","cond","conflict","typ","getElementsByTagName","newList","mechanisms","_connect_cb","_callback","bodyWrap","conncheck","sasl_scram_sha1","sasl_plain","sasl_digest_md5","sasl_anonymous","legacy_auth","hasFeatures","mech","matched","found_authentication","_no_auth_received","authenticate","higher","priority","swap","mechanism_found","test","_addSysHandler","_sasl_success_cb","_sasl_failure_cb","_sasl_challenge_cb","_sasl_mechanism","onStart","request_auth_exchange","mechanism","isClientFirst","response","onChallenge","_auth1_cb","to","challenge","iq","_auth2_cb","serverSignature","success","attribMatch","matches","match","onSuccess","_sasl_auth1_cb","_sasl_bind_cb","resource","jidNode","_sasl_session_cb","onFailure","since","now","SASLMechanism","connection","_connection","Error","SASLAnonymous","SASLPlain","auth_str","SASLSHA1","test_cnonce","cnonce","random","nonce","salt","iter","Hi","U","U_old","clientKey","serverKey","clientSignature","responseText","authMessage","substr","SASLMD5","_quote","realm","host","qop","digest_uri","A1","A2","Request","sends","xmlData","origFunc","date","NaN","abort","dead","age","timeDead","xhr","_newXHR","getResponse","responseXML","documentElement","XMLHttpRequest","overrideMimeType","onreadystatechange","_conn","_buildBody","jQuery","trigger","xml:lang","content","ver","xmpp:version","xmlns:xmpp","_onRequestStateChange","_throttledRequestHandler","parseInt","_sendTerminate","_hitError","reqStatus","xmpp:restart","_processRequest","time_elapsed","readyState","reqIs0","reqIs1","_removeRequest","_restartRequest","self","primaryTimeout","secondaryTimeout","requestCompletedWithServerError","open","sync","e2","sendFunc","customHeaders","headers","header","setRequestHeader","backoff","min","pow","abs","new_service","location","pathname","_buildStream","xmlns:stream","version","_check_streamerror","connectstatus","textContent","errorString","_closeSocket","socket","WebSocket","onopen","_onOpen","onerror","_onError","onclose","_onClose","onmessage","_connect_cb_wrapper","_handleStreamStart","ns_stream","namespaceURI","streamStart","string","_streamWrap","_onMessage","CLOSED","close","rawStanza","_removeClosingTag","search","firstChild","start","startString","Occupant","RoomConfig","XmppRoom","__bind","fn","me","rooms","roomNames","conn","_muc_handler","room","nick","msg_handler_cb","pres_handler_cb","roster_cb","password","history_attrs","extended_presence","room_nick","_ref","_this","test_append_nick","roomname","xquery","_i","_len","_message_handlers","_presence_handlers","leave","handler_cb","exit_msg","presence","presenceid","html_message","msgid","parent","removeChild","groupchat","invite","receiver","invitation","MUC_USER","directInvite","queryOccupants","success_cb","error_cb","configure","config","MUC_OWNER","cancelConfigure","saveConfiguration","conf","Form","toXML","createInstantRoom","roomiq","setTopic","topic","_modifyPrivilege","item","MUC_ADMIN","modifyRole","role","kick","voice","mute","op","deop","modifyAffiliation","affiliation","ban","member","revoke","owner","admin","changeNick","setStatus","show","listRooms","server","handle_cb","client","_roomRosterHandler","_addOccupant","roster","_roster_handlers","_handler_ids","muc","handler_type","removeHandler","occ","newnick","_parsePresence","update","c2","_j","_len1","_ref1","_ref2","_ref3","_ref4","_ref5","_ref6","_ref7","states","code","parse","field","identity","query","_k","_len2","identities","var","label","_identities","_features","_items","_onDiscoInfo","_onDiscoItems","addIdentity","category","lang","addFeature","var_name","removeFeature","addItem","call_back","items","_buildIQResult","query_attrs","iqresult","$","HASH","_ver","_knownCapabilities","JSON","localStorage","getItem","_jidVerIndex","disco","CAPS","_delegateCapabilities","generateCapsAttrs","generateVer","sort","_sortIdentities","identitiesLen","featuresLen","curIdent","getCapabilitiesByJid","hasFeatureByJid","feature","isArray","makeArray","querySelector","setItem","stringify","_requestCapabilities","_handleDiscoInfoReply","childNodesLen","_attributesToJsObject","buildIq","vCardEl","VCARD","get","set","error_rb","sessions","jid2session","ice_config","iceServers","pc_constraints","media_constraints","mandatory","OfferToReceiveAudio","OfferToReceiveVideo","localStream","onJingle","find","action","ack","sess","peerjid","JingleSession","localStreams","initiate","setRemoteDescription","startmuted","accept","terminate","addIceCandidate","affected","addSource","removeSource","myjid","sendOffer","state","sendTerminate","active","terminateByJid","getStunAndTurnCredentials","res","iceservers","each","idx","dict","url","navigator","userAgent","username","credential","initiator","responder","isInitiator","peerconnection","remoteStream","localSDP","remoteSDP","relayedStreams","remoteStreams","startTime","stopTime","drip_container","usetrickle","usepranswer","usedrip","hadstuncandidate","hadturncandidate","lasticecandidate","statsinterval","addssrc","removessrc","pendingop","nickname","filter_candidates","RTCPeerconnection","onicecandidate","event","sendIceCandidate","candidate","onaddstream","stream","onremovestream","onsignalingstatechange","oniceconnectionstatechange","iceConnectionState","forEach","addStream","pranswer","localDescription","lines","SDPUtil","find_lines","sdp","find_line","prsdp","SDP","toJingle","source","setLocalDescription","RTCSessionDescription","clearInterval","ice","iceparams","media","sdpMLineIndex","session","jcand","candidateToJingle","sendIceCandidates","signalingState","candidates","cand","mid","cands","filter","creator","sdpMid","tmp","parse_fingerprint","required","fingerprint","createOffer","createdOffer","parse_icecandidate","desctype","fromJingle","remoteDescription","remotedesc","cobbled","iscomplete","mediapart","candidateFromJingle","RTCIceCandidate","sendAnswer","provisional","createAnswer","createdAnswer","jingle","getAudioTracks","track","enabled","getVideoTracks","term","ssrc","modifySources","modifiedAnswer","hardMuteVideo","muted","sendMute","sendRinging","getStats","interval","recv","audio","video","lost","lastrecv","lastlost","loss","delta","setInterval","stats","results","packetsrecv","stat","packetslost","shift","mangle","mline","rtpmap","newdesc","parse_mline","fmt","parse_rtpmap","build_mline","removeSessionLines","prefix","removeMediaLines","mediaindex","thecreator","semantics","bundle","substring","parse_mid","parse_fmtp","RtcpFbToJingle","crypto","parse_crypto","ssrclines","linessrc","kv","parse_ssrc","parse_extmap","uri","direction","senders","TransportToJingle","port","fingerprints","setup","payloadtype","parse_rtcpfb","params","subtype","RtcpFbFromJingle","group","contents","map","m","jingle2media","desc","build_iceufrag","build_icepwd","build_rtpmap","mediadesc","sessiondesc","ufrag","parse_iceufrag","pwd","parse_icepwd","frag","clockrate","channels","elems","foundation","component","ip","generation","tcptype","network","build_icecandidate","hasOwnAttribute","pt","haystack","needle","sessionpart","needles","setupRTC","getUserMediaWithConstraints","TraceablePeerConnection","constraints","mozGetUserMedia","mozRTCPeerConnection","webkitRTCPeerConnection","updateLog","maxstats","what","time","onnegotiationneeded","ondatachannel","names","endTime","values","times","dumpSDP","description","__defineGetter__","removeStream","createDataChannel","opts","successCallback","failureCallback","offer","answer","RTC","browser","getUserMedia","attachMediaStream","mozSrcObject","play","MediaStream","mozRTCSessionDescription","mozRTCIceCandidate","webkitGetUserMedia","webkitURL","createObjectURL","optional","DtlsSrtpKeyAgreement","webkitMediaStream","videoTracks","audioTracks","um","resolution","bandwidth","fps","chromeMediaSource","minWidth","minHeight","minAspectRatio","maxFrameRate","minFrameRate","root","factory","define","amd","module","exports","Salsa20","rounds","sigmaWords","keyWords","nonceWords","counterWords","block","blockUsed","setKey","setNonce","getBytes","numberOfBytes","out","_generateBlock","_incrementCounter","getHexString","hex","bytes","u","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","msCrypto","require","BigInt","findPrimes","n","ans","millerRabin","mr_x1","dup","mr_r","mr_a","copy_","addInt_","isZero","bpe","rightShift_","powMod_","equalsInt","equals","squareMod_","bitSize","z","expand","int2bigInt","mod","mod_","trim","mult","mult_","powMod","sub","sub_","add","add_","inverseMod","inverseMod_","multMod","multMod_","randBigInt","randBigInt_","randomBitInt","max","copyInt_","eg_u","eg_v","eg_A","eg_B","eg_C","eg_D","halve_","greater","negative","inverseModInt","greaterShift","kx","ky","divide_","r","y1","y2","leftShift_","subShift_","radix","linCombShift_","addShift_","modInt","bits","minSize","buff","str2bigInt","base","kk","bb","digitsStr","multInt_","bigInt2str","s6","divInt_","ys","ss","s4","s5","s0","k1","k2","kn","np","s7","s3","mont_","one","ui","t2","ks","sa","divMod","den","subMod","two","twoToThe","bigInt2bits","bi","pad","ba","_num2bin","ba2bigInt","mpi","getSeed","randomBytes","randomByte","primes","buf","getRandomValues","Uint8Array","CryptoJS","C","C_lib","lib","Base","extend","overrides","mixIn","$super","create","instance","properties","propertyName","clone","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","C_enc","enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","BufferedBlockAlgorithm","_nDataBytes","_append","_process","doFlush","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","_minBufferSize","nWordsReady","nBytesReady","offset","_doProcessBlock","processedWords","C_algo","Hasher","cfg","_doReset","messageUpdate","finalize","_doFinalize","_createHelper","hasher","_createHmacHelper","HMAC","algo","_map","base64Chars","byte1","byte2","byte3","paddingChar","base64Str","base64StrLength","paddingIndex","bits1","bits2","Cipher","EvpKDF","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","_key","process","dataUpdate","finalProcessedData","keySize","ivSize","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","encrypt","decrypt","ciphertext","C_mode","StreamCipher","finalProcessedBlocks","mode","BlockCipherMode","iv","Encryptor","Decryptor","_cipher","_iv","CBC","xorBlock","_prevBlock","processBlock","encryptBlock","thisBlock","decryptBlock","C_pad","Pkcs7","nPaddingBytes","paddingWord","paddingWords","padding","unpad","CipherParams","BlockCipher","modeCreator","_mode","cipherParams","formatter","C_format","format","OpenSSLFormatter","OpenSSL","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","_parse","plaintext","C_kdf","kdf","OpenSSLKdf","execute","compute","derivedParams","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","RCON","AES","nRounds","_nRounds","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","M","_doCryptBlock","s1","s2","round","t0","t1","t3","W","SHA1","_hash","H","nBitsTotal","nBitsLeft","HmacSHA1","K","isPrime","sqrtN","sqrt","factor","getFractionalBits","nPrime","SHA256","f","g","gamma0x","gamma0","gamma1x","gamma1","ch","maj","sigma0","sigma1","HmacSHA256","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","hmac","NoPadding","CTR","counter","_counter","keystream","EventEmitter","indexOfListener","listeners","listener","alias","getListeners","evt","events","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","listenerIsWrapped","once","on","addOnceListener","defineEvent","defineEvents","evts","removeListener","index","off","addListeners","manipulateListeners","removeListeners","remove","single","multiple","RegExp","removeEvent","_events","emitEvent","args","_getOnceReturnValue","emit","setOnceReturnValue","_onceReturnValue","OTR","DSA","CONST","N","G","MSGSTATE_PLAINTEXT","MSGSTATE_ENCRYPTED","MSGSTATE_FINISHED","AUTHSTATE_NONE","AUTHSTATE_AWAITING_DHKEY","AUTHSTATE_AWAITING_REVEALSIG","AUTHSTATE_AWAITING_SIG","WHITESPACE_TAG","WHITESPACE_TAG_V2","WHITESPACE_TAG_V3","OTR_TAG","OTR_VERSION_1","OTR_VERSION_2","OTR_VERSION_3","SMPSTATE_EXPECT0","SMPSTATE_EXPECT1","SMPSTATE_EXPECT2","SMPSTATE_EXPECT3","SMPSTATE_EXPECT4","STATUS_SEND_QUERY","STATUS_AKE_INIT","STATUS_AKE_SUCCESS","STATUS_END_OTR","intCompare","HLP","DTS","BYTE","SHORT","INT","MAC","SIG","WRAPPER_BEGIN","WRAPPER_END","TWO","Ctor","constructor","Object","__super__","compare","str1","str2","randomExponent","smpHash","fmpi","smpi","sha256","packBytes","packMPI","bits2bigInt","makeMac","aesctr","mac","make1Mac","encryptAes","aesctr_decoded","decryptAes","multPowMod","ZKP","v","GTOE","between","checkGroup","N_MINUS_2","h1","secbytes","sha1","h2","_toString","val","nex","packINT","packCtr","padCtr","ctr","unpackCtr","toByteArray","unpack","arr","packData","packSHORT","short","unpackSHORT","packTLV","readLen","readData","readMPI","packMPIs","reduce","prv","cur","unpackMPIs","mpis","splitype","wrapMsg","fs","v3","our_it","their_it","its","ei","mf","mfs","_bin2num","rv","ary","iz","remain","timer","makeRandom","isProbPrime","B","l","rpprb","generatePrimes","bit_length","rem","repeat","bit_lengths","LM1","bl4","brk","ONE","pm1","prop","KEY_TYPE","ZERO","nocache","tokenizeStr","end","lastIndexOf","splt","es","parseLibotr","o","Worker","WWPath","__dirname","keys","1024","2048","packPublic","packPrivate","generateNonce","priv","rand","sign","pk","parsePublic","fields","parsePrivate","libotr","dsa","verify","hm","u1","u2","createInWebWorker","cb","path","seed","worker","postMessage","imports","Parse","parseMsg","otr","initFragment","ind","com","msgFragment","vers","2","3","qs","qi","cls","instance_tags","ERROR_START_AKE","sendQueryMsg","checkInstanceTags","hMac","gx","gy","kid","AKE","our_dh","our_old_dh","our_keyid","their_y","their_keyid","their_priv_pk","ssid","transmittedRS","meth","createKeys","privateKey","c_prime","m1","m2","m1_prime","m2_prime","verifySignMac","our_dh_pk","vmac","pub","makeM","publicKey","akeSuccess","their_old_y","sessKeys","DHSession","otr_version","authstate","msgstate","myhashed","dhcommit","encrypted","hashed","sendStored","handleAKE","vsm","ourHash","theirHash","dh","gxmpi","sendMsg","our_instance_tag","their_instance_tag","fragment_size","io","initiateAKE","SM","reqs","our_fp","their_fp","Q","smpstate","secret","makeSecret","our","makeG2s","a2","a3","g2a","g3a","computeGs","g2","g3","computePQ","computeR","QoQ","computeRab","computeC","computeD","handleSM","r2","r3","r7","t4","rab","tmp2","cR","d7","ms","trust","expectStates",4,5,7,"question","g3ao","c3","d2","d3","r4","r5","r6","cP","d5","d6","PoP","rcvSecret","OTRCB","send_interval","outgoing","instance_tag","makeInstanceTag","smw","SMWPath","MAX_INT","MAX_UINT","ALLOW_V2","ALLOW_V3","REQUIRE_ENCRYPTION","SEND_WHITESPACE_TAG","WHITESPACE_START_AKE","storedMgs","oldMacKeys","sm","_akeInit","receivedPlaintext","ake","_SMW","method","_smInit","prepareMsg","meta","first","sq","sendbyte","rcvbyte","sendenc","sendmac","rcvenc","rcvmac","rcvmacused","extra_symkey","send_counter","rcv_counter","rotateOurKeys","sk","rotateTheirKeys","esk","notify","aes","handleDataMsg","vt","types","ign","handleTLVs","tlvs","smpSecret","versions","vs","receiveMsg","doAKE","it","severity","sendFile","filename","l1name","endOtr","cache","jsonp","content-type","src","json","T","authBasic","Authorization","del","head","isAllowed","patch","post","put","P","fixLng","functions","namespaces","defaultNs","fallbackNS","fallbackLng","interpolationPrefixEscaped","regexEscape","interpolationPrefix","interpolationSuffixEscaped","interpolationSuffix","lng","detectLanguage","L","toLanguages","useCookie","cookie","read","cookieName","cookieExpirationTime","cookieDomain","detectLngFromLocalStorage","setCurrentLng","setJqueryExt","Deferred","resStore","preload","I","load","J","resolve","promise","deepExtend","keyseparator","dynamicLoad","resGetPath","getAsync","customLoad","_fetch","useLocalStorage","_storeLocal","defaultValueFromContent","defaultValue","prepend","append","selectorAttr","useDataAttrOptions","i18n","escapeInterpolation","regexReplacementEscape","postProcess","reusePrefix","maxRecursion","reuseSuffix","context","count","indefinite_article","A","D","sprintf","shortcutFunction","defaultVariables","nsseparator","sendMissing","missingKeyHandler","X","parseMissingKey","lngs","contextNotFound","pluralNotFound","needsPlural","pluralSuffix","indefiniteNotFound","indefiniteSuffix","E","returnObjectTrees","fallbackOnNull","objectTreeKeyHandler","fallbackOnEmpty","isFallbackLookup","fallbackToDefaultNS","lngWhitelist","detectLngQS","languages","userLanguage","language","lowerCaseLng","toUpperCase","TypeError","Zepto","O","_loadLocal","i18nStamp","localStorageExpirationTime","ajax","dataType","_fetchOne","postMissing","sendMissingTo","resPostPath","sendType","postAsync","reload","&","<",">","\"","'","/","R","setTime","toGMTString","S","getCountyIndexOfLng","applyReplacement","V",1,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,"rules","numbers","plurals","addRule","currentRule","rule","noAbs","Y","Z","toExponential","parseFloat","toFixed","exec","unshift","setLng","addResourceBundle","hasResourceBundle","addResource","addResources","removeResourceBundle","loadNamespace","loadNamespaces","setDefaultNamespace","translate","exists","pluralExtensions","addPostProcessor","I18next","de","translation","Logging_in","your_connection_is_unencrypted","your_connection_is_encrypted","your_buddy_closed_the_private_connection","start_private","close_private","your_buddy_is_verificated","you_have_only_a_subscription_in_one_way","authentication_query_sent","your_message_wasnt_send_please_end_your_private_conversation","unencrypted_message_received","your_message_wasnt_send_because_you_have_no_valid_subscription","not_available","no_connection","relogin","trying_to_start_private_conversation","Verified","Unverified","private_conversation_started","private_conversation_aborted","your_buddy_closed_the_private_conversation_you_should_do_the_same","conversation_is_now_verified","authentication_failed","your_buddy_is_attempting_to_determine_","to_authenticate_to_your_buddy","enter_the_answer_and_click_answer","enter_the_secret","Creating_your_private_key_","Authenticating_a_buddy_helps_","How_do_you_want_to_authenticate_your_buddy","Select_method","Manual","Question","Secret","To_verify_the_fingerprint_","Your_fingerprint","Buddy_fingerprint","Close","Compared","To_authenticate_using_a_question_","Ask","To_authenticate_pick_a_secret_","Compare","Fingerprints","Authentication","Message","Add_buddy","rename_buddy","delete_buddy","Login","Username","Password","Cancel","Connect","Type_in_the_full_username_","Alias","Add","Subscription_request","You_have_a_request_from","Deny","Approve","Remove_buddy","You_are_about_to_remove_","Continue_without_chat","Please_wait","Login_failed","Sorry_we_cant_authentikate_","Retry","clear_history","New_message_from","Should_we_notify_you_","Please_accept_","Hide_offline","Show_offline","About","dnd","Mute","Unmute","Subscription","both","online","chat","away","xa","offline","none","Unknown_instance_tag","Not_one_of_our_latest_keys","Received_an_unreadable_encrypted_message","Online","Chatty","Away","Extended_away","Offline","Friendship_request","Confirm","Dismiss","Remove","Online_help","FN","FAMILY","GIVEN","NICKNAME","URL","ADR","STREET","EXTADD","LOCALITY","REGION","PCODE","CTRY","TEL","NUMBER","EMAIL","USERID","ORG","ORGNAME","ORGUNIT","TITLE","ROLE","BDAY","DESC","PHOTO","send_message","get_info","Settings","Priority","Save","User_settings","A_fingerprint_","Your_roster_is_empty_add_a","new_buddy","is","Login_options","BOSH_url","Domain","Resource","On_login","Received_an_unencrypted_message","Sorry_your_buddy_doesnt_provide_any_information","Info_about","Authentication_aborted","Authentication_request_received","Do_you_want_to_display_them","Log_in_without_chat","has_come_online","Unknown_sender","You_received_a_message_from_an_unknown_sender","Please_allow_access_to_microphone_and_camera","Incoming_call","Do_you_want_to_accept_the_call_from","Reject","Accept","hang_up","snapshot","mute_my_audio","pause_my_video","fullscreen","Info","Local_IP","Remote_IP","Local_Fingerprint","Remote_Fingerprint","Video_call_not_possible","Start_video_call","Join_chat","Join","Room","Nickname","left_the_building","entered_the_room","is_now_known_as","This_room_is","muc_hidden","keyword","muc_membersonly","muc_moderated","muc_nonanonymous","muc_open","muc_passwordprotected","muc_persistent","muc_public","muc_semianonymous","muc_temporary","muc_unmoderated","muc_unsecured","Continue","Server","Rooms_are_loaded","Could_load_only","muc_explanation","You_already_joined_this_room","This_room_will_be_closed","Room_not_found_","Loading_room_information","Destroy","Leave","changed_subject_to","muc_removed_kicked","muc_removed_info_kicked","muc_removed_banned","muc_removed_info_banned","muc_removed_affiliation","muc_removed_info_affiliation","muc_removed_membersonly","muc_removed_info_membersonly","muc_removed_shutdown","Reason","message_not_send","message_not_send_item-not-found","message_not_send_forbidden","message_not_send_not-acceptable","This_room_has_been_closed","Room_logging_is_enabled","A_password_is_required","You_are_not_on_the_member_list","You_are_banned_from_this_room","Your_desired_nickname_","The_maximum_number_","This_room_is_locked_","You_are_not_allowed_to_create_","Carbon_copy","Enable","en","fr","nds","pl","pt-BR","ro"],"mappings":"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"} \ No newline at end of file
diff --git a/build/lib/translation.js b/build/lib/translation.js
index c8cb5c0e..e53b7a94 100644
--- a/build/lib/translation.js
+++ b/build/lib/translation.js
@@ -1 +1 @@
-var I18next = {"de":{"translation":{"Logging_in":"Login läuft…","your_connection_is_unencrypted":"Deine Verbindung ist Unverschlüsselt.","your_connection_is_encrypted":"Deine Verbindung ist verschlüsselt.","your_buddy_closed_the_private_connection":"Dein Kontakt hat die private Verbindung getrennt.","start_private":"Privat starten","close_private":"Privat abbrechen","your_buddy_is_verificated":"Dein Kontakt ist verifiziert.","you_have_only_a_subscription_in_one_way":"Der Kontaktstatus ist einseitig.","authentication_query_sent":"Authentifizierungsanfrage gesendet.","your_message_wasnt_send_please_end_your_private_conversation":"Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.","unencrypted_message_received":"Unverschlüsselte Nachricht erhalten.","your_message_wasnt_send_because_you_have_no_valid_subscription":"Deine Nachricht wurde nicht gesandt, da der Kontaktstatus einseitig ist.","not_available":"Nicht verfügbar.","no_connection":"Keine Verbindung.","relogin":"Neu anmelden.","trying_to_start_private_conversation":"Versuche private Konversation zu starten.","Verified":"Verifiziert","Unverified":"Unverifiziert","private_conversation_started":"Private Konversation gestartet.","private_conversation_aborted":"Private Konversation abgebrochen.","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Dein Kontakt hat die private Konversation beendet. Das solltest du auch tun!","conversation_is_now_verified":"Konversation ist jetzt verifiziert","authentication_failed":"Authentifizierung fehlgeschlagen.","your_buddy_is_attempting_to_determine_":"Dein Kontakt versucht herauszufinden ob er wirklich mit dir redet.","to_authenticate_to_your_buddy":"Um dich gegenüber deinem Kontakt zu verifizieren ","enter_the_answer_and_click_answer":"gib die Antwort ein und klick auf Antworten.","enter_the_secret":"gib das Geheimnis ein.","Creating_your_private_key_":"Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.","Authenticating_a_buddy_helps_":"Einen Kontakt zu authentifizieren hilft sicher zustellen, dass die Person mit der du sprichst auch die ist die sie sagt.","How_do_you_want_to_authenticate_your_buddy":"Wie willst du {{bid_name}} (<b>{{bid_jid}}</b>) authentifizieren?","Select_method":"Wähle...","Manual":"Manual","Question":"Frage","Secret":"Geheimnis","To_verify_the_fingerprint_":"Um den Fingerprint zu verifizieren kontaktiere dein Kontakt über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.","Your_fingerprint":"Dein Fingerprint","Buddy_fingerprint":"Sein/Ihr Fingerprint","Close":"Schließen","Compared":"Verglichen","To_authenticate_using_a_question_":"Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Kontakt die Antwort weiß.","Ask":"Frage","To_authenticate_pick_a_secret_":"Um deinen Kontakt zu authentifizieren, wähle ein Geheimnis welches nur deinem Kontakt und dir bekannt ist.","Compare":"Vergleiche","Fingerprints":"Fingerprints","Authentication":"Authentifizierung","Message":"Nachricht","Add_buddy":"Kontakt hinzufügen","rename_buddy":"Kontakt umbenennen","delete_buddy":"Kontakt löschen","Login":"Anmeldung","Username":"Benutzername","Password":"Passwort","Cancel":"Abbrechen","Connect":"Verbinden","Type_in_the_full_username_":"Gib bitte den vollen Benutzernamen und optional ein Alias an.","Alias":"Alias","Add":"Hinzufügen","Subscription_request":"Kontaktanfrage","You_have_a_request_from":"Du hast eine Anfrage von","Deny":"Ablehnen","Approve":"Bestätigen","Remove_buddy":"Kontakt entfernen","You_are_about_to_remove_":"Du bist gerade dabei {{bid_name}} (<b>{{bid_jid}}</b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.","Continue_without_chat":"Weiter ohne Chat","Please_wait":"Bitte warten","Login_failed":"Chat-Anmeldung fehlgeschlagen","Sorry_we_cant_authentikate_":"Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?","Retry":"Zurück","clear_history":"Lösche Verlauf","New_message_from":"Neue Nachricht von","Should_we_notify_you_":"Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?","Please_accept_":"Bitte klick auf den \"Zulassen\" Button oben.","Hide_offline":"Offline ausblenden","Show_offline":"Offline einblenden","About":"Über","dnd":"Beschäftigt","Mute":"Ton aus","Unmute":"Ton an","Subscription":"Bezug","both":"beidseitig","Status":"Status","online":"online","chat":"chat","away":"abwesend","xa":"länger abwesend","offline":"offline","none":"keine","Unknown_instance_tag":"Unbekannter instance tag.","Not_one_of_our_latest_keys":"Nicht einer unserer letzten Schlüssel.","Received_an_unreadable_encrypted_message":"Eine unlesbare verschlüsselte Nachricht erhalten.","Online":"Online","Chatty":"Gesprächig","Away":"Abwesend","Extended_away":"Länger abwesend","Offline":"Offline","Friendship_request":"Kontaktanfrage","Confirm":"Bestätigen","Dismiss":"Ablehnen","Remove":"Löschen","Online_help":"Online Hilfe","FN":"Name","N":" ","FAMILY":"Familienname","GIVEN":"Vorname","NICKNAME":"Spitzname","URL":"URL","ADR":"Adresse","STREET":"Straße","EXTADD":"Zusätzliche Adresse","LOCALITY":"Ortschaft","REGION":"Region","PCODE":"Postleitzahl","CTRY":"Land","TEL":"Telefon","NUMBER":"Nummer","EMAIL":"E-Mail","USERID":" ","ORG":"Organisation","ORGNAME":"Name","ORGUNIT":"Abteilung","TITLE":"Titel","ROLE":"Rolle","BDAY":"Geburtstag","DESC":"Beschreibung","PHOTO":" ","send_message":"Sende Nachricht","get_info":"Benutzerinformationen","Settings":"Einstellungen","Priority":"Priorität","Save":"Speichern","User_settings":"Benutzereinstellungen","A_fingerprint_":"Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.","Your_roster_is_empty_add_a":"Deine Kontaktliste ist leer, füge einen neuen Kontakt ","new_buddy":"hinzu","is":"ist","Login_options":"Anmeldeoptionen","BOSH_url":"BOSH url","Domain":"Domain","Resource":"Ressource","On_login":"Beim Anmelden","Received_an_unencrypted_message":"Unverschlüsselte Nachricht empfangen","Sorry_your_buddy_doesnt_provide_any_information":"Dein Kontakt stellt leider keine Informationen bereit.","Info_about":"Info über","Authentication_aborted":"Authentifizierung abgebrochen.","Authentication_request_received":"Authentifizierunganfrage empfangen.","Do_you_want_to_display_them":"Möchtest du sie sehen?","Log_in_without_chat":"Anmelden ohne Chat","has_come_online":"ist online gekommen","Unknown_sender":"Unbekannter Sender","You_received_a_message_from_an_unknown_sender":"Du hast eine Nachricht von einem unbekannten Sender erhalten","Please_allow_access_to_microphone_and_camera":"Bitte klick auf den \"Zulassen\" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.","Incoming_call":"Eingehender Anruf","from":"von","Do_you_want_to_accept_the_call_from":"Möchtest Du den Anruf annehmen von","Reject":"Ablehnen","Accept":"Annehmen","hang_up":"Auflegen","snapshot":"Schnappschuss","mute_my_audio":"Mein Ton aus","pause_my_video":"Mein Video pausieren","fullscreen":"Vollbild","Info":"Info","Local_IP":"Lokale IP","Remote_IP":"Remote IP","Local_Fingerprint":"Lokaler Fingerprint","Remote_Fingerprint":"Remote Fingerprint","Video_call_not_possible":"Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.","Start_video_call":"Starte Videoanruf"}},"el":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null}},"en":{"translation":{"Logging_in":"Logging in…","your_connection_is_unencrypted":"Your connection is unencrypted.","your_connection_is_encrypted":"Your connection is encrypted.","your_buddy_closed_the_private_connection":"Your buddy closed the private connection.","start_private":"Start private","close_private":"Close private","your_buddy_is_verificated":"Your buddy is verified.","you_have_only_a_subscription_in_one_way":"You only have a one-way subscription.","authentication_query_sent":"Authentication query sent.","your_message_wasnt_send_please_end_your_private_conversation":"Your message was not sent. Please end your private conversation.","unencrypted_message_received":"Unencrypted message received","your_message_wasnt_send_because_you_have_no_valid_subscription":"Your message was not sent because you have no valid subscription.","not_available":"Not available","no_connection":"No connection!","relogin":"relogin","trying_to_start_private_conversation":"Trying to start private conversation!","Verified":"Verified","Unverified":"Unverified","private_conversation_started":"Private conversation started.","private_conversation_aborted":"Private conversation aborted!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Your buddy closed the private conversation! You should do the same.","conversation_is_now_verified":"Conversation is now verified.","authentication_failed":"Authentication failed.","your_buddy_is_attempting_to_determine_":"You buddy is attempting to determine if he or she is really talking to you.","to_authenticate_to_your_buddy":"To authenticate to your buddy, ","enter_the_answer_and_click_answer":"enter the answer and click Answer.","enter_the_secret":"enter the secret.","Creating_your_private_key_":"Creating your private key; this may take a while.","Authenticating_a_buddy_helps_":"Authenticating a buddy helps ensure that the person you are talking to is really the one he or she claims to be.","How_do_you_want_to_authenticate_your_buddy":"How do you want to authenticate {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Select method...","Manual":"Manual","Question":"Question","Secret":"Secret","To_verify_the_fingerprint_":"To verify the fingerprint, contact your buddy via some other trustworthy channel, such as the telephone.","Your_fingerprint":"Your fingerprint","Buddy_fingerprint":"Buddy fingerprint","Close":"Close","Compared":"Compared","To_authenticate_using_a_question_":"To authenticate using a question, pick a question whose answer is known only you and your buddy.","Ask":"Ask","To_authenticate_pick_a_secret_":"To authenticate, pick a secret known only to you and your buddy.","Compare":"Compare","Fingerprints":"Fingerprints","Authentication":"Authentication","Message":"Message","Add_buddy":"Add buddy","rename_buddy":"rename buddy","delete_buddy":"delete buddy","Login":"Login","Username":"Username","Password":"Password","Cancel":"Cancel","Connect":"Connect","Type_in_the_full_username_":"Type in the full username and an optional alias.","Alias":"Alias","Add":"Add","Subscription_request":"Subscription request","You_have_a_request_from":"You have a request from","Deny":"Deny","Approve":"Approve","Remove_buddy":"Remove buddy","You_are_about_to_remove_":"You are about to remove {{bid_name}} (<b>{{bid_jid}}</b>) from your buddy list. All related chats will be closed.","Continue_without_chat":"Continue without chat","Please_wait":"Please wait","Login_failed":"Chat login failed","Sorry_we_cant_authentikate_":"Authentication failed with the chat server. Maybe the password is wrong?","Retry":"Back","clear_history":"Clear history","New_message_from":"New message from","Should_we_notify_you_":"Should we notify you about new messages in the future?","Please_accept_":"Please click the \"Allow\" button at the top.","Hide_offline":"Hide offline contacts","Show_offline":"Show offline contacts","About":"About","dnd":"Do Not Disturb","Mute":"Mute","Unmute":"Unmute","Subscription":"Subscription","both":"both","Status":"Status","online":"online","chat":"chat","away":"away","xa":"extended away","offline":"offline","none":"none","Unknown_instance_tag":"Unknown instance tag.","Not_one_of_our_latest_keys":"Not one of our latest keys.","Received_an_unreadable_encrypted_message":"Received an unreadable encrypted message.","Online":"Online","Chatty":"Chatty","Away":"Away","Extended_away":"Extended away","Offline":"Offline","Friendship_request":"Friendship request","Confirm":"Confirm","Dismiss":"Dismiss","Remove":"Remove","Online_help":"Online help","FN":"Full name","N":" ","FAMILY":"Family name","GIVEN":"Given name","NICKNAME":"Nickname","URL":"URL","ADR":"Address","STREET":"Street Address","EXTADD":"Extended Address","LOCALITY":"Locality","REGION":"Region","PCODE":"Postal Code","CTRY":"Country","TEL":"Telephone","NUMBER":"Number","EMAIL":"Email","USERID":" ","ORG":"Organization","ORGNAME":"Name","ORGUNIT":"Unit","TITLE":"Job title","ROLE":"Role","BDAY":"Birthday","DESC":"Description","PHOTO":" ","send_message":"Send message","get_info":"Show information","Settings":"Settings","Priority":"Priority","Save":"Save","User_settings":"User settings","A_fingerprint_":"A fingerprint is used to make sure that the person you are talking to is who he or she is saying.","Your_roster_is_empty_add_a":"Your roster is empty, add a ","new_buddy":"new buddy","is":"is","Login_options":"Login options","BOSH_url":"BOSH URL","Domain":"Domain","Resource":"Resource","On_login":"On login","Received_an_unencrypted_message":"Received an unencrypted message","Sorry_your_buddy_doesnt_provide_any_information":"Sorry, your buddy does not provide any information.","Info_about":"Info about","Authentication_aborted":"Authentication aborted.","Authentication_request_received":"Authentication request received.","Do_you_want_to_display_them":"Do you want to display them?","Log_in_without_chat":"Log in without chat","has_come_online":"has come online","Unknown_sender":"Unknown sender","You_received_a_message_from_an_unknown_sender":"You received a message from an unknown sender","Please_allow_access_to_microphone_and_camera":"Please click the \"Allow\" button at the top, to allow access to microphone and camera.","Incoming_call":"Incoming call","from":"from","Do_you_want_to_accept_the_call_from":"Do you want to accept the call from","Reject":"Reject","Accept":"Accept","hang_up":"hang up","snapshot":"snapshot","mute_my_audio":"mute my audio","pause_my_video":"pause my video","fullscreen":"fullscreen","Info":"Info","Local_IP":"Local IP","Remote_IP":"Remote IP","Local_Fingerprint":"Local fingerprint","Remote_Fingerprint":"Remote fingerprint","Video_call_not_possible":"Video call not possible. Your buddy does not support video calls.","Start_video_call":"Start video call","Join_chat":"Join chat","Join":"Join","Room":"Room","Nickname":"Nickname","left_the_building":"__nickname__ left the building","entered_the_room":"__nickname__ entered the room","is_now_known_as":"__oldNickname__ is now known as __newNickname__","This_room_is":"This room is","muc_hidden":{"keyword":"hidden","description":"can not be found through search"},"muc_membersonly":{"keyword":"members-only","description":"you need to be on the member list"},"muc_moderated":{"keyword":"moderated","description":"only persons with \"voice\" are allowed to send messages"},"muc_nonanonymous":{"keyword":"non-anonymous","description":"your jabber id is exposed to all other occupants"},"muc_open":{"keyword":"open","description":"everyone is allowed to join"},"muc_passwordprotected":{"keyword":"password-protected","description":"you need to provide the correct password"},"muc_persistent":{"keyword":"persistent","description":"will not be destroyed if the last occupant left"},"muc_public":{"keyword":"public","description":"can be found through search"},"muc_semianonymous":{"keyword":"semi-anonymous","description":"your jabber id is only exposed to room admins"},"muc_temporary":{"keyword":"temporary","description":"will be destroyed if the last occupant left"},"muc_unmoderated":{"keyword":"unmoderated","description":"everyone is allowed to send messages"},"muc_unsecured":{"keyword":"unsecured","description":"you need no password to enter"},"Continue":"Continue","Server":"Server","Rooms_are_loaded":"Rooms are loaded","Could_load_only":"Could load only __count__ rooms for autocomplete","muc_explanation":"Please enter room name and optional a nickname and password to join a chat","You_already_joined_this_room":"You already joined this room","This_room_will_be_closed":"This room will be closed","Room_not_found_":"A new room will be created","Loading_room_information":"Loading room information","Destroy":"Destroy","Leave":"Leave","changed_subject_to":"__nickname__ changed the room subject to \"__subject__\"","muc_removed_kicked":"You have been kicked from the room","muc_removed_info_kicked":"__nickname__ has been kicked from the room","muc_removed_banned":"You have been banned from the room","muc_removed_info_banned":"__nickname__ has been banned from the room","muc_removed_affiliation":"You have been removed from the room, because of an affiliation change","muc_removed_info_affiliation":"__nickname__ has been removed from the room, because of an affiliation change","muc_removed_membersonly":"You have been removed from the room, because the room has been changed to members-only and you are no member","muc_removed_info_membersonly":"__nickname__ has been removed from the room, because the room has been changed to members-only and you are no member","muc_removed_shutdown":"You have been removed from the room, because the MUC service is being shut down","Reason":"Reason","message_not_send":"Your message was not send because of an error","message_not_send_item-not-found":"Your message was not send because this room does not exist","message_not_send_forbidden":"Your message was not send because you have no voice in this room","message_not_send_not-acceptable":"Your message was not send because you are no occupant of this room","This_room_has_been_closed":"This room has been closed","Room_logging_is_enabled":"Room logging is enabled","A_password_is_required":"A password is required","You_are_not_on_the_member_list":"You are not on the member list","You_are_banned_from_this_room":"You are banned from this room","Your_desired_nickname_":"Your desired nickname is already in use. Please choose another","The_maximum_number_":"The maximum number of user is reached in this room","This_room_is_locked_":"This room is locked","You_are_not_allowed_to_create_":"You are not allowed to create a room"}},"es":{"translation":{"Logging_in":"Por favor, espere...","your_connection_is_unencrypted":"Su conexión no está cifrada.","your_connection_is_encrypted":"Su conexión está cifrada.","your_buddy_closed_the_private_connection":"Su amigo ha cerrado la conexión privada.","start_private":"Iniciar privado","close_private":"Cerrar privado","your_buddy_is_verificated":"Tu amigo está verificado.","you_have_only_a_subscription_in_one_way":"Sólo tienes una suscripción de un modo.","authentication_query_sent":"Consulta de verificación enviada.","your_message_wasnt_send_please_end_your_private_conversation":"Su mensaje no fue enviado. Por favor, termine su conversación privada.","unencrypted_message_received":"Mensaje no cifrado recibido:","your_message_wasnt_send_because_you_have_no_valid_subscription":"Su mensaje no se ha enviado, porque usted no tiene suscripción válida.","not_available":"No disponible","no_connection":"Sin conexión!","relogin":"iniciar sesión nuevamente","trying_to_start_private_conversation":"Intentando iniciar una conversación privada!","Verified":"Verificado","Unverified":"No verificado","private_conversation_started":"se inició una conversación privada.","private_conversation_aborted":"Conversación privada abortada!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Su amigo cerró la conversación privada! Usted debería hacer lo mismo.","conversation_is_now_verified":"La conversación es ahora verificada.","authentication_failed":"Fallo la verificación.","your_buddy_is_attempting_to_determine_":"Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.","to_authenticate_to_your_buddy":"Para autenticar a su amigo, ","enter_the_answer_and_click_answer":"introduce la respuesta y haga clic en Contestar.","enter_the_secret":"especifique el secreto.","Creating_your_private_key_":"Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.","Authenticating_a_buddy_helps_":"Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.","How_do_you_want_to_authenticate_your_buddy":"¿Cómo desea autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Escoja un método...","Manual":"Manual","Question":"Pregunta","Secret":"Secreto","To_verify_the_fingerprint_":"Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.","Your_fingerprint":"Tu firma digital","Buddy_fingerprint":"firma digital de tu amigo","Close":"Cerrar","Compared":"Comparado","To_authenticate_using_a_question_":"Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.","Ask":"Preguntar","To_authenticate_pick_a_secret_":"Para autenticar, elija un secreto conocido sólo por usted y su amigo.","Compare":"Comparar","Fingerprints":"Firmas digitales","Authentication":"Autenticación","Message":"Mensaje","Add_buddy":"Añadir amigo","rename_buddy":"renombrar amigo","delete_buddy":"eliminar amigo","Login":"Iniciar Sesión","Username":"Usuario","Password":"Contraseña","Cancel":"Cancelar","Connect":"Conectar","Type_in_the_full_username_":"Escriba el usuario completo y un alias opcional.","Alias":"Alias","Add":"Añadir","Subscription_request":"Solicitud de suscripción","You_have_a_request_from":"Tienes una petición de","Deny":"Rechazar","Approve":"Aprobar","Remove_buddy":"Eliminar amigo","You_are_about_to_remove_":"Vas a eliminar a {{bid_name}} (<b>{{bid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.","Continue_without_chat":"Continuar","Please_wait":"Espere por favor","Login_failed":"Fallo el inicio de sesión","Sorry_we_cant_authentikate_":"Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?","Retry":"Reintentar","clear_history":"Borrar el historial","New_message_from":"Nuevo mensaje de","Should_we_notify_you_":"¿Debemos notificarle sobre nuevos mensajes en el futuro?","Please_accept_":"Por favor, haga clic en el botón \"Permitir\" en la parte superior.","Hide_offline":"Ocultar contactos desconectados","Show_offline":"Mostrar contactos desconectados","About":"Acerca de","dnd":"No Molestar","Mute":"Desactivar sonido","Unmute":"Activar sonido","Subscription":"Suscripción","both":"ambos","Status":"Estado","online":"en línea","chat":"chat","away":"ausente","xa":"mas ausente","offline":"desconectado","none":"nadie","Unknown_instance_tag":"Etiqueta de instancia desconocida.","Not_one_of_our_latest_keys":"No de nuestra ultima tecla.","Received_an_unreadable_encrypted_message":"Se recibió un mensaje cifrado ilegible.","Online":"En linea","Chatty":"Hablador","Away":"Ausente","Extended_away":"Mas ausente","Offline":"Desconectado","Friendship_request":"Solicitud de amistad","Confirm":"Confirmar","Dismiss":"Rechazar","Remove":"Eliminar","Online_help":"Ayuda en línea","FN":"Nombre completo ","N":" ","FAMILY":"Apellido","GIVEN":"Nombre","NICKNAME":"Apodar","URL":"URL","ADR":"Dirección","STREET":"Calle","EXTADD":"Extendido dirección","LOCALITY":"Población","REGION":"Región","PCODE":"Código postal","CTRY":"País","TEL":"Teléfono","NUMBER":"Número","EMAIL":"Emilio","USERID":" ","ORG":"Organización","ORGNAME":"Nombre","ORGUNIT":"Departamento","TITLE":"Título","ROLE":"Rol","BDAY":"Cumpleaños","DESC":"Descripción","PHOTO":" ","send_message":"mandar un texto","get_info":"obtener información","Settings":"Ajustes","Priority":"Prioridad","Save":"Guardar","User_settings":"Configuración de usuario","A_fingerprint_":"La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser","Your_roster_is_empty_add_a":"Tu lista de amigos esta vacia","new_buddy":"Nuevo amigo","is":"es","Login_options":"Opciones de login","BOSH_url":"BOSH url","Domain":"Dominio","Resource":"Recurso","On_login":"Iniciar sesión","Received_an_unencrypted_message":"Recibe un mensaje no cifrado","Sorry_your_buddy_doesnt_provide_any_information":"Lo sentimos, su amigo no provee ninguna información.","Info_about":"Info acerca de","Authentication_aborted":"Autenticación abortada","Authentication_request_received":"Pedido de autenticación recibido.","Do_you_want_to_display_them":"¿Quiere mostrarlos?","Log_in_without_chat":"Ingresar sin chat","has_come_online":"se ha conectado","Unknown_sender":"Remitente desconocido","You_received_a_message_from_an_unknown_sender":"Ha recibido un mensaje de un remitente desconocido","Please_allow_access_to_microphone_and_camera":"Por favor, permitir el acceso al micrófono y la cámara.","Incoming_call":"Llamada entrante","from":"de","Do_you_want_to_accept_the_call_from":"Desea aceptar la llamada de","Reject":"Rechazar","Accept":"Aceptar","hang_up":"colgar","snapshot":"instantánea","mute_my_audio":"silenciar mi audio","pause_my_video":"pausar mi vídeo","fullscreen":"pantalla completa","Info":"Info","Local_IP":"IP local","Remote_IP":"IP remota","Local_Fingerprint":"Firma digital local","Remote_Fingerprint":"Firma digital remota","Video_call_not_possible":"Llamada de vídeo no es posible","Start_video_call":"Iniciar llamada de vídeo"}},"fr":{"translation":{"Logging_in":"Connexion...","your_connection_is_unencrypted":"Connexion non chiffrée.","your_connection_is_encrypted":"Connexion chiffrée.","your_buddy_closed_the_private_connection":"Votre ami a fermé la connexion privée.","start_private":"Démarrer une conversation privé","close_private":"Clôturer une conversation privée","your_buddy_is_verificated":"Votre ami est vérifié.","you_have_only_a_subscription_in_one_way":"Vous ne pouvez souscrire qu'une fois.","authentication_query_sent":"Requête d’authentification envoyée.","your_message_wasnt_send_please_end_your_private_conversation":"Votre message n'a pas été envoyé. Veuillez terminer votre conversation privée.","unencrypted_message_received":"Message non chiffré reçu","your_message_wasnt_send_because_you_have_no_valid_subscription":"Votre message n'a pas été envoyé car votre abonnement n'est pas valide.","not_available":"Pas disponible","no_connection":"Pas de connexion !","relogin":"Re-connexion","trying_to_start_private_conversation":"Essai de démarrage d'une conversation privée !","Verified":"Vérifié","Unverified":"Non vérifié","private_conversation_started":"Conversation privé démarrée.","private_conversation_aborted":"Conversation privée interrompue !","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Votre ami a fermé la conversation privée ! Vous devriez faire de même.","conversation_is_now_verified":"La conversation est maintenant vérifiée.","authentication_failed":"L'authentification a échoué.","your_buddy_is_attempting_to_determine_":"Votre ami tente de déterminer si il ou elle parle vraiment à vous.","to_authenticate_to_your_buddy":"Vous authentifier à votre ami, ","enter_the_answer_and_click_answer":"Saisissez une réponse et cliquer sur Répondre.","enter_the_secret":"Entrez le mot secret","Creating_your_private_key_":"Création de votre clé privée; cela peut prendre un moment.","Authenticating_a_buddy_helps_":"L'authentification d'un ami permet de s'assurer que la personne à qui vous parlez est vraiment celui qu'il ou elle prétend être.","How_do_you_want_to_authenticate_your_buddy":"Comment voulez-vous vous authentifier {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Sélection de la méthode...","Manual":"Manuel","Question":"Question","Secret":"Sécurité","To_verify_the_fingerprint_":"Pour vérifier l'empreinte, contactez votre ami via un autre canal digne de confiance, tel que le téléphone.","Your_fingerprint":"Votre empreinte","Buddy_fingerprint":"Empreinte de l'ami","Close":"Fermer","Compared":"Comparé","To_authenticate_using_a_question_":"Pour s'authentifier à l'aide d'une question, choisissez une question dont la réponse n'est connue que vous et de votre ami.","Ask":"Demander","To_authenticate_pick_a_secret_":"Pour vous authentifier, choisissez un secret connu seulement de vous et de votre ami.","Compare":"Comparer","Fingerprints":"Empreintes","Authentication":"Authentification","Message":"Message","Add_buddy":"Ajouter comme ami","rename_buddy":"Renommer l'ami","delete_buddy":"Supprimer l'ami","Login":"Connexion","Username":"Nom d'utilisateur","Password":"Mot de passe","Cancel":"Annuler","Connect":"Connecter","Type_in_the_full_username_":"Tapez un nom d'utilisateur complet et un alias(optionnel).","Alias":"Alias","Add":"Ajouter","Subscription_request":"Demande d'abonnement","You_have_a_request_from":"Vous avez une requête de ","Deny":"Refuser","Approve":"Approuver","Remove_buddy":"Supprimer l'ami","You_are_about_to_remove_":"Vous allez retirer {{bid_name}} (<b>{{bid_jid}}</b>) de votre liste d'amis. Toutes les fenêtres de chat en lien avec celui-ci seront fermées.","Continue_without_chat":"Continuer sans tchat","Please_wait":"Merci de patienter","Login_failed":"Authentification échouée","Sorry_we_cant_authentikate_":"La connexion avec le serveur de tchat a échoué. Vérifiez le mot de passe.","Retry":"Retour","clear_history":"Effacer l’historique","New_message_from":"Nouveau message de","Should_we_notify_you_":"Dans le futur, devrons-nous vous notifier les nouveaux messages ?","Please_accept_":"Merci de cliquer sur le bouton \"autoriser\" en haut de page","Hide_offline":"Masquer les contacts non connectés","Show_offline":"Afficher les contacts non connectés","About":"À propos","dnd":"Ne pas déranger","Mute":"Muet","Unmute":"Son actif","Subscription":"Abonnement","both":"Les deux","Status":"Status","online":"En ligne","chat":"tchat","away":"Absent","xa":"Options étendues","offline":"Hors ligne","none":"Aucun","Unknown_instance_tag":"Tag inconnu","Not_one_of_our_latest_keys":"Ce n'est pas l'une des dernières touches","Received_an_unreadable_encrypted_message":"Message chiffré non lisible","Online":"En ligne","Chatty":"tchatty","Away":"Absent","Extended_away":"Options étendues","Offline":"Hors ligne","Friendship_request":"Demande d'amitié","Confirm":"Valider","Dismiss":"Rejeter","Remove":"Supprimer","Online_help":"Aide en ligne","FN":"Nom","N":" N ","FAMILY":"Nom de famille","GIVEN":"prénom","NICKNAME":"Surnom","URL":"URL","ADR":"Adresse","STREET":"Rue","EXTADD":"Adresse (suite)","LOCALITY":"Localité","REGION":"Région","PCODE":"Code Postal","CTRY":"Pays","TEL":"Téléphone","NUMBER":"Numéro","EMAIL":"Courriel","USERID":" USERID ","ORG":"Organisation","ORGNAME":"Nom","ORGUNIT":"Unité","TITLE":"Qualité:","ROLE":"Rôle","BDAY":"Date de naissance","DESC":"Description","PHOTO":"Photo","send_message":"Envoyer le message","get_info":"Montrer les informations","Settings":"Réglages","Priority":"Priorité","Save":"Enregistrer","User_settings":"Paramètres utilisateur","A_fingerprint_":"Une empreinte est utilisée pour s'assurer de l'identité de la personne à qui vous parlez","Your_roster_is_empty_add_a":"Votre liste est vide, ajouter ","new_buddy":"Nouvel ami","is":"est","Login_options":"Options d'identification","BOSH_url":"URL BOSH","Domain":"Domaine","Resource":"Ressource","On_login":"Après authentification","Received_an_unencrypted_message":"Reçu un message non chiffré","Sorry_your_buddy_doesnt_provide_any_information":"Désolé, votre ami n'a pas fourni d'informations","Info_about":"A propos de","Authentication_aborted":"Authentification interrompue.","Authentication_request_received":"Requête d'authentification reçue.","Do_you_want_to_display_them":"Voulez-vous les afficher ?","Log_in_without_chat":"S'identifier sans tchat","has_come_online":"vient d'arriver","Unknown_sender":"Expéditeur inconnu","You_received_a_message_from_an_unknown_sender":"Vous avez reçu un message d'un expéditeur inconnu","Please_allow_access_to_microphone_and_camera":"Veuillez cliquez sur le bouton \"Autoriser\" en haut, pour permettre l'accès au micro et à la caméra.","Incoming_call":"Appel entrant","from":"de","Do_you_want_to_accept_the_call_from":"Voulez-vous accepter l'appel de","Reject":"Rejeté","Accept":"Accepté","hang_up":"Décrochez","snapshot":"Capture d’écran","mute_my_audio":"Couper l'audio","pause_my_video":"Mettre ma vidéo en pause","fullscreen":"Plein écran","Info":"Info","Local_IP":"IP locale","Remote_IP":"IP distante","Local_Fingerprint":"Empreinte locale","Remote_Fingerprint":"Empreinte distante","Video_call_not_possible":"L'appel vidéo n'est possible. Votre ami ne supporte pas les appels vidéo.","Start_video_call":"Démarrer l'appel vidéo"}},"it":{"translation":{"Logging_in":"login…","your_connection_is_unencrypted":"La sua connessione è non cifrata.","your_connection_is_encrypted":"La sua connessione è cifrata.","your_buddy_closed_the_private_connection":"La sua connessione privata è stato chiuso dal suo compagno.","start_private":"Inizia privata","close_private":"Chiude privata","your_buddy_is_verificated":"Il tuo compagno è stato verificato","you_have_only_a_subscription_in_one_way":"Hai solo una one-way inscrizione.","authentication_query_sent":"Domanda d'autenticità inviata.","your_message_wasnt_send_please_end_your_private_conversation":"Il tuo messaggio non è stato inviato. Si prega di finire la sua conversazione privata.","unencrypted_message_received":"Messaggio non cifrato ricevuto","your_message_wasnt_send_because_you_have_no_valid_subscription":"Il tuo messaggio non è stato inviato perché non hai una sottoscrizione valida.","not_available":"non disponibile","no_connection":"nessun collegamento!","relogin":"nuovo login","trying_to_start_private_conversation":"Cercando di avviare una conversazione privata!","Verified":"verificato","Unverified":"non verificato","private_conversation_started":"Conversazione privata iniziato.","private_conversation_aborted":"Conversazione privata abortito!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Il tuo compagno ha chiuso la conversazione privata! Si dovrebbe fare lo stesso.","conversation_is_now_verified":"Conversazione è ora verificato.","authentication_failed":"autenticazione fallita.","your_buddy_is_attempting_to_determine_":"Il tuo compagno sta cercando di determinare se lui o lei sta davvero parlando con te.","to_authenticate_to_your_buddy":"Per autenticare a il tuo compagno. ","enter_the_answer_and_click_answer":"inserisci la risposta e fare click su risposta.","enter_the_secret":"inserire il segreto.","Creating_your_private_key_":"Creare la propria chiave privata; questo potrebbe richiedere un po'.","Authenticating_a_buddy_helps_":"Autenticazione un compagno aiuta a garantire che la persona si sta parlando è davvero quello che lui o lei sostiene di essere.","How_do_you_want_to_authenticate_your_buddy":"Come si desidera autenticare {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Seleziona metodo ..","Manual":"manuale","Question":"domanda","Secret":"segreto","To_verify_the_fingerprint_":"Per verificare l'impronta digitale, contattare il proprio compagno attraverso qualche altro canale affidabile, come il telefono.","Your_fingerprint":"il tuo impronta digitale","Buddy_fingerprint":"impronta digitale da compagno","Close":"chiude","Compared":"comparato","To_authenticate_using_a_question_":"Per autenticare tramite una questione, scegli una questione la cui risposta è nota solo voi e il tuo compagno","Ask":"chiedi","To_authenticate_pick_a_secret_":"Per autenticare, scegli un segreto noto solo a te e il tuo compagno.","Compare":"Comparare","Fingerprints":"Impronta digitale","Authentication":"Autenticazione","Message":"Messagio","Add_buddy":"Aggiungi un compagno","rename_buddy":"rinomina compagno","delete_buddy":"elimina compagno","Login":"Login","Username":"Identificazione dell'utente","Password":"Password","Cancel":"Cancella","Connect":"Collega","Type_in_the_full_username_":"Digita l'identificazione utente completo e un alias opzionale.","Alias":"Alias","Add":"Aggiungi","Subscription_request":"Rrichiesta di sottoscrizione","You_have_a_request_from":"Hai una richiesta da","Deny":"Refiuta","Approve":"Approva","Remove_buddy":"Rimuova il compagno","You_are_about_to_remove_":"Stai rimovendo {{bid_name}} (<b>{{bid_jid}}</b>) del suo lista di compagni. Tutte le chat appartenente saranno chiuse.","Continue_without_chat":"Continua senza chat","Please_wait":"Si prega d'attendere","Login_failed":"Chat login è fallito","Sorry_we_cant_authentikate_":"Autenticazione non riuscita con il server di chat. Forse la password è sbagliata?","Retry":"Indietro","clear_history":"Cancella la cronologia","New_message_from":"Nuovo messaggio da","Should_we_notify_you_":"Vuoi ricevere una notifica di nuovi messaggi in futuro?","Please_accept_":"Si prega di fare clic sul bottone \"Autorizzazione\" sopra.","Hide_offline":"Nascondere i contatti non in linea","Show_offline":"Mostra i contatti non in linea","About":"Informazione legale","dnd":"Non disturbare","Mute":"Muto attivo","Unmute":"Muto inattivo","Subscription":"Sottoscrizione","both":"etrambi","Status":"Status","online":"In linea","chat":"chat","away":"via","xa":"via estensivo","offline":"non in linea","none":"nessuno","Unknown_instance_tag":"Instance tag sconosciuta.","Not_one_of_our_latest_keys":"Non è una delle nostre ultime chiavi.","Received_an_unreadable_encrypted_message":"Ricevuto un messaggio crittografato illeggibile.","Online":"In linea","Chatty":"Chiacchierino","Away":"Via","Extended_away":"Via estensivo","Offline":"Non in linea","Friendship_request":"Amicizia richiesto","Confirm":"Conferma","Dismiss":"Rifiuta","Remove":"Rimuovi","Online_help":"Guida in linea","FN":"Nome e cognome","N":null,"FAMILY":"Cognome","GIVEN":"Nome","NICKNAME":"Soprannome","URL":"URL","ADR":"Indirizzo","STREET":"Via","EXTADD":"Esteso Indirizzo","LOCALITY":"Località","REGION":"Regione","PCODE":"Codice Postale","CTRY":"Paese","TEL":"Telefono","NUMBER":"Numero","EMAIL":"E-mail","USERID":null,"ORG":"Organizzazione","ORGNAME":"Nome","ORGUNIT":"Unità","TITLE":"Titolo di lavoro","ROLE":"Funzione","BDAY":"Compleanno","DESC":"Descrizione","PHOTO":null,"send_message":"Messagio inviato","get_info":"Mostra informazioni","Settings":"Impostazione","Priority":"Priorità","Save":"Salva","User_settings":"Impostazione dell'utente","A_fingerprint_":"Una impronta digitale è usato per assicurarsi che la persona con cui stai parlando è lui o lei che sta dicendo.","Your_roster_is_empty_add_a":"Il suo elenco è vuoto, aggiungi un ","new_buddy":"compagno nuovo","is":"è","Login_options":"Opzioni di login","BOSH_url":"BOSH URL","Domain":"Domain","Resource":"Risorsa","On_login":"Login on","Received_an_unencrypted_message":"Ricevuto un messaggio non crittografato","Sorry_your_buddy_doesnt_provide_any_information":"Spiace, il tuo compagno non fornisce alcuna informazione.","Info_about":"Informazioni","Authentication_aborted":"Autenticazione interrotta","Authentication_request_received":"Richiesta di autenticazione ricevuto.","Do_you_want_to_display_them":"Vuoi che venga visualizzato?","Log_in_without_chat":"Log in senza chat","has_come_online":"È venuto in linea","Unknown_sender":"Mittente sconosciuto","You_received_a_message_from_an_unknown_sender":"Hai ricevuto un messaggio da un mittente sconosciuto","Please_allow_access_to_microphone_and_camera":"Si prega di fare clic sul bottone \"Autorizzazione\" sopra per autorizzazione del l'accesso al microfono e fotocamera.","Incoming_call":"Chiamata in arrivo","from":"di","Do_you_want_to_accept_the_call_from":"Vuoi accettare la chiamata di","Reject":"Rifiuta","Accept":"Accetta","hang_up":"Riattacca","snapshot":"istantanea","mute_my_audio":"disattiva il mio audio","pause_my_video":"pausa il mio audio","fullscreen":"schermo intero","Info":"Informazione","Local_IP":"IP locale","Remote_IP":"IP remoto","Local_Fingerprint":"Impronta digitale locale","Remote_Fingerprint":"Impronta digitale remoto","Video_call_not_possible":"Videochiamata non è possibile. Il tuo compagno non può effettuare videochiamate.","Start_video_call":"Inizia videochiamata"}},"nds":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null}},"pl":{"translation":{"Logging_in":"Logowanie...","your_connection_is_unencrypted":"Twoje połączenie nie jest szyfrowane.","your_connection_is_encrypted":"Twoje połączenie jest szyfrowane.","your_buddy_closed_the_private_connection":"Twój rozmówca zamknął połączenie.","start_private":"Rozpocznij rozmowę.","close_private":"Zakończ rozmowę.","your_buddy_is_verificated":"Twój rozmówca został zweryfikowany.","you_have_only_a_subscription_in_one_way":"Masz jednostronną subskrypcję.","authentication_query_sent":"Wysłano proźbę o autentykację.","your_message_wasnt_send_please_end_your_private_conversation":"Twoja wiadomość nie została wysłana. Proszę, zamknij rozmowę.","unencrypted_message_received":"Zwrotna niezaszyfrowana wiadomość.","your_message_wasnt_send_because_you_have_no_valid_subscription":"Wiadomość nie została wysłana ponieważ nie posiadasz subskrybcji u rozmówcy.","not_available":"Niedostępny.","no_connection":"Brak połączenia!","relogin":"Połącz ponownie","trying_to_start_private_conversation":"Rozpocznij rozmowę!","Verified":"Zweryfikowano","Unverified":"Niezweryfikowano","private_conversation_started":"Rozmowa prywatna rozpoczęta.","private_conversation_aborted":"Anulowano rozmowę!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Rozmówca przerwał połączenie!","conversation_is_now_verified":"Zweryfikowano połączenie.","authentication_failed":"Weryfikacja się nie powiodła.","your_buddy_is_attempting_to_determine_":"Twój rozmówca próbuje się z Tobą połączyć.","to_authenticate_to_your_buddy":"Autoryzacja z rozmówcą, ","enter_the_answer_and_click_answer":"napisz odpowiedź.","enter_the_secret":"wpisz hasło.","Creating_your_private_key_":"Tworzenie klucza prywatnego; może to chwilę potrwać","Authenticating_a_buddy_helps_":"Autoryzacja pomoże w ustaleniu faktycznej tożsamości rozmówcy ;).","How_do_you_want_to_authenticate_your_buddy":"Jakiej autoryzacji chcesz użyć {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Wybierz sposób...","Manual":"Ręcznie","Question":"Pytanie","Secret":"Hasło","To_verify_the_fingerprint_":"Aby zweryfikować kod najpierw skontaktuj się z rozmówcą np. za pomocą telefonu.","Your_fingerprint":"Twój kod:","Buddy_fingerprint":"Kod rozmówcy","Close":"Zamknij","Compared":"Porównano","To_authenticate_using_a_question_":"Aby autoryzować za pomocą pytania, wybierz pytanie na które tylko Twój rozmówca zna odpowiedź.","Ask":"Zadaj pytanie","To_authenticate_pick_a_secret_":"Aby autoryzować za pomocą hasła, wybierz hasło na które zna tylko Twój rozmówca.","Compare":"Dopasuj","Fingerprints":"Kody autoryzacyjne","Authentication":"Autoryzacja","Message":"Wiadomość","Add_buddy":"Dodaj kontakt","rename_buddy":"Zmień nazwę","delete_buddy":"Usuń kontakt","Login":"Login","Username":"Nazwa Użytkownika","Password":"Hasło","Cancel":"Anuluj","Connect":"Połączenie","Type_in_the_full_username_":"Wpisz pełną nazwę użytkownika (np. <B>imię.nazwisko@zajezdnia.local</B>) oraz jego nazwę wyświetlaną (Alias).","Alias":"Alias","Add":"Dodaj","Subscription_request":"Potwierdzenie subskrypcji","You_have_a_request_from":"Masz potwierdzenie od","Deny":"Odmów","Approve":"Zatwierdź","Remove_buddy":"Usuń rozmówcę","You_are_about_to_remove_":"Twój rozmówca {{bid_name}} (<b>{{bid_jid}}</b>) usunął Cię ze swojej listy kontaktów.","Continue_without_chat":"Kontynuuj bez komunikatora","Please_wait":"Proszę czekać","Login_failed":"Błędne logowanie","Sorry_we_cant_authentikate_":"Błędna autoryzacja z serwerem. Może hasło jest nieprawidłowe?","Retry":"Powrót","clear_history":"Wyczyść historię","New_message_from":"Nowa wiadomość od","Should_we_notify_you_":"Czy chcesz otrzymywać powiadomienia o nowych wiadomościach w przyszłości?","Please_accept_":"Kliknij \"Zezwól\" na górze.","Hide_offline":"Schowaj niedostępne kontakty","Show_offline":"Pokaż niedostępne kontakty","About":"Info","dnd":"Nie przeszkadzać","Mute":"Wycisz","Unmute":"Włącz dźwięk","Subscription":"Subskrybcja","both":"obustronna","Status":"Status","online":"Dostępny","chat":"czat","away":"z dala od kompa","xa":"hen hen...","offline":"niedostępny","none":"brak","Unknown_instance_tag":"Nieznany przypadek.","Not_one_of_our_latest_keys":"Not one of our latest keys.","Received_an_unreadable_encrypted_message":"Received an unreadable encrypted message.","Online":"Połączony","Chatty":"Pogawędzimy?","Away":"Daleko","Extended_away":"Hen Hen...","Offline":"Niedostępny","Friendship_request":"Zapytanie od znajomego?","Confirm":"Potwierdzenie","Dismiss":"Odwołaj","Remove":"Usuń","Online_help":"Pomoc Online","FN":"Pełna nazwa","N":" ","FAMILY":"Nazwisko","GIVEN":"Imię","NICKNAME":"Pseudonim","URL":"Strona WWW","ADR":"Adres","STREET":"Ulica","EXTADD":"Extended Address","LOCALITY":"Lokalizacja","REGION":"Region","PCODE":"Kod pocztowy","CTRY":"Kraj","TEL":"Telefon","NUMBER":"Numer","EMAIL":"Email","USERID":" ","ORG":"Organizacja","ORGNAME":"Nazwa","ORGUNIT":"Jednostka","TITLE":"Stanowisko","ROLE":"Rola","BDAY":"Data urodzin","DESC":"Opis","PHOTO":" ","send_message":"Wyślij wiadomość","get_info":"Pokaż informację","Settings":"Ustawienia","Priority":"Priorytet","Save":"Zapisz","User_settings":"Ustawienia Użytkownika","A_fingerprint_":"Kod służy do autoryzacji Twojego rozmówcy aby potwierdzić jego tożsamość.","Your_roster_is_empty_add_a":"Twoja lista jest pusta, dodaj kontakty ","new_buddy":"Nowy kontakt","is":"jest","Login_options":"opcje logowania","BOSH_url":"Adres BOSH","Domain":"Domena","Resource":"Źródło","On_login":"Na login","Received_an_unencrypted_message":"Zatwierdzono nieszyfrowaną wiadomość.","Sorry_your_buddy_doesnt_provide_any_information":"Twój rozmówca nie posiada żadnych informacji.","Info_about":"Informacja o...","Authentication_aborted":"Autoryzacja anulowana.","Authentication_request_received":"Prośba o autoryzację została przyjęta.","Do_you_want_to_display_them":"Chcesz to wyświetlić?","Log_in_without_chat":"Zaloguj bez komunikatora","has_come_online":"jest teraz dostępny","Unknown_sender":"Nieznany nadawca","You_received_a_message_from_an_unknown_sender":"Masz wiadomość od nieznanego nadawcy.","Please_allow_access_to_microphone_and_camera":"Kliknij \"Potwierdź\" na górze, aby móc korzystać z mikrofonu oraz kamery.","Incoming_call":"Przychodzące połączenie","from":"z","Do_you_want_to_accept_the_call_from":"Akceptujesz połączenie od","Reject":"Odrzuć","Accept":"Zaakceptuj","hang_up":"odbierz","snapshot":"zrób zdjęcie","mute_my_audio":"wycisz dźwięk","pause_my_video":"zatrzymaj moje wideo","fullscreen":"Pełny ekran","Info":"Informacja","Local_IP":"Adres IP","Remote_IP":"Zdalny adres IP","Local_Fingerprint":"Kod lokalny","Remote_Fingerprint":"Zdalny kod","Video_call_not_possible":"Rozmowa wideo jest niemożliwa. Twój rozmówca nie ma możliwości prowadzenia takich rozmów.","Start_video_call":"Rozpocznij rozmowę wideo"}},"pt-BR":{"translation":{"Logging_in":"Entrando...","your_connection_is_unencrypted":"Sua conexão não é encriptada","your_connection_is_encrypted":"Sua conexão é encriptada","your_buddy_closed_the_private_connection":"Seu contato fechou a conexão privada","start_private":"Iniciar conversa privada","close_private":"Fechar conversa privada","your_buddy_is_verificated":"Seu contato está verificado","you_have_only_a_subscription_in_one_way":"Você só tem a inscrição one-way","authentication_query_sent":"Pergunta de autenticação enviada","your_message_wasnt_send_please_end_your_private_conversation":"Sua mensagem não foi enviada. Por favor finalize sua conversa privada","unencrypted_message_received":"Mensagem não encriptada recebida","your_message_wasnt_send_because_you_have_no_valid_subscription":"Sua mensagem não foi enviada porque sua inscrição não é válida","not_available":"Indisponível","no_connection":"Sem conexão!","relogin":"reentrar","trying_to_start_private_conversation":"Tentando iniciar conversa privada","Verified":"Verificado","Unverified":"Não verificado","private_conversation_started":"Conversa privada iniciada.","private_conversation_aborted":"Conversa privada abortada!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Seu contato encerrou a conversa privada! Você deveria fazer o mesmo.","conversation_is_now_verified":"Conversa verificada.","authentication_failed":"Autenticação falhou.","your_buddy_is_attempting_to_determine_":"Seu contato está tentando determinar se ele realmente está falando contigo.","to_authenticate_to_your_buddy":"Para autenticar seu contato, ","enter_the_answer_and_click_answer":"entre com a resposta e clique em Responder.","enter_the_secret":"escreva a senha.","Creating_your_private_key_":"Criando sua chave privada: isso pode demorar um pouco.","Authenticating_a_buddy_helps_":"Autenticar seu contato ajuda a garantir que a pessoa com a qual você está falando é realmente a pessoa que ela alega ser.","How_do_you_want_to_authenticate_your_buddy":"Como você gostaria de se autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Selecione o método...","Manual":"Manual","Question":"Pergunta","Secret":"Senha","To_verify_the_fingerprint_":"Para verificar o fingerprint, entre em contato com seu contato usando outro meio, de preferência seguro, como o telefone.","Your_fingerprint":"Seu fingerprint","Buddy_fingerprint":"Fingerprint do contato","Close":"Fechar","Compared":"Comparado","To_authenticate_using_a_question_":"Para autenticar seu contato faça uma pergunta, mas escolha que só ele saiba a resposta.","Ask":"Pergunta","To_authenticate_pick_a_secret_":"Para autenticar, escolha um segredo que somente você e seu contato saibam.","Compare":"Compare","Fingerprints":"Fingerprints","Authentication":"Autenticação","Message":"Mensagem","Add_buddy":"Adicionar contato","rename_buddy":"renomear contato","delete_buddy":"remover contato","Login":"Entrar","Username":"Usuário","Password":"Senha","Cancel":"Cancelar","Connect":"Conectar","Type_in_the_full_username_":"Digite seu nome completo e um apelido opcional.","Alias":"Apelido","Add":"Adicionar","Subscription_request":"Pedido de inscrição","You_have_a_request_from":"Você tem um pedido de","Deny":"Negar","Approve":"Aprovar","Remove_buddy":"Remover contato","You_are_about_to_remove_":"Você está prestes a remover {{bid_name}} (<b>{{bid_jid}}</b>) de sua lista de contatos. Todas as conversas serão fechadas.","Continue_without_chat":"Continue sem converar","Please_wait":"Por favor aguarde","Login_failed":"Autenticação da conversa falhou","Sorry_we_cant_authentikate_":"A autenticação com o servidor falhou. Talvez seja a senha errada?","Retry":"Voltar","clear_history":"Limpar histórico","New_message_from":"Nova mensagem de","Should_we_notify_you_":"Devemos continuar notificando sobre novas mensagens no futuro?","Please_accept_":"Por favor clique no botão \"Permitir\" na parte superior.","Hide_offline":"Esconder contatos desconectados","Show_offline":"Mostrar contatos desconectados","About":"Sobre","dnd":"Não perturbe","Mute":"Mudo","Unmute":"Ligar","Subscription":"Inscrição","both":"ambos","Status":"Status","online":"online","chat":"conversa","away":"ausente","xa":"ausente por mais tempo","offline":"desativado","none":"nenhum","Unknown_instance_tag":"Marcação desconhecida da instância","Not_one_of_our_latest_keys":"Nenhuma de nossas ultimas chaves.","Received_an_unreadable_encrypted_message":"Mensagem encriptada ilegível foi recebida.","Online":"Online","Chatty":"Tagarela","Away":"Ausente","Extended_away":"Ausente por mais tempo","Offline":"Desativado","Friendship_request":"Pedido de amizade","Confirm":"Confirmar","Dismiss":"Ignorar","Remove":"Remover","Online_help":"Ajuda online","FN":"Nome completo","N":" ","FAMILY":"Sobrenome","GIVEN":"Nome","NICKNAME":"Apelido","URL":"URL","ADR":"Endereço","STREET":"Rua, Av, etc","EXTADD":"Complemento","LOCALITY":"Localidade","REGION":"Região","PCODE":"CEP","CTRY":"País","TEL":"Telefone","NUMBER":"Número","EMAIL":"Email","USERID":" ","ORG":"Empresa","ORGNAME":"Nome","ORGUNIT":"Unidade","TITLE":"Cargo","ROLE":"Rol","BDAY":"Data de nascimento","DESC":"Descrição","PHOTO":" ","send_message":"Enviar mensagem","get_info":"Exibir informações","Settings":"Configurações","Priority":"Prioridade","Save":"Salvar","User_settings":"Configurações do usuário","A_fingerprint_":"O fingerprint é usado para certificar que a pessoa com a qual se está falando é que ela diz ser.","Your_roster_is_empty_add_a":"Sua lista está vazia, adicione um ","new_buddy":"novo contato","is":"é","Login_options":"Opções de login","BOSH_url":"BOSH URL","Domain":"Domínio","Resource":"Recurso","On_login":"Ao autenticar","Received_an_unencrypted_message":"Mensagem não encriptada recebida","Sorry_your_buddy_doesnt_provide_any_information":"Desculpe, seu contato não forneceu nenhuma informação","Info_about":"Informações sobre","Authentication_aborted":"Autenticação encerrada.","Authentication_request_received":"Pedido de autenticação recebido","Do_you_want_to_display_them":"Você quer mostrá-los?","Log_in_without_chat":"Entrar sem conversar","has_come_online":"ficou online","Unknown_sender":"Emissor desconhecido","You_received_a_message_from_an_unknown_sender":"Você recebeu uma mensagem de um emissor desconhecido","Please_allow_access_to_microphone_and_camera":"Por favor clique no botão \"Permitir\" no topo, para conceder acesso ao seu microfone e câmera.","Incoming_call":"Recebendo chamada","from":"de","Do_you_want_to_accept_the_call_from":"Você aceita a chamada de","Reject":"Negar","Accept":"Aceitar","hang_up":"desligar","snapshot":"registrar imagem","mute_my_audio":"mudo","pause_my_video":"pausar vídeo","fullscreen":"tela cheia","Info":"Informações","Local_IP":"IP local","Remote_IP":"IP remoto","Local_Fingerprint":"Fingerprint local","Remote_Fingerprint":"Fingerprint remoto","Video_call_not_possible":"Chamada de vídeo impossível. Seu contato não suporta chamadas desse tipo.","Start_video_call":"Iniciar chamada de vídeo"}},"ro":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null}}}; \ No newline at end of file
+var I18next = {"de":{"translation":{"Logging_in":"Login läuft…","your_connection_is_unencrypted":"Deine Verbindung ist unverschlüsselt.","your_connection_is_encrypted":"Deine Verbindung ist verschlüsselt.","your_buddy_closed_the_private_connection":"Dein Kontakt hat die private Verbindung getrennt.","start_private":"Privat starten","close_private":"Privat abbrechen","your_buddy_is_verificated":"Dein Kontakt ist verifiziert.","you_have_only_a_subscription_in_one_way":"Der Kontaktstatus ist einseitig.","authentication_query_sent":"Authentifizierungsanfrage gesendet.","your_message_wasnt_send_please_end_your_private_conversation":"Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.","unencrypted_message_received":"Unverschlüsselte Nachricht erhalten.","your_message_wasnt_send_because_you_have_no_valid_subscription":"Deine Nachricht wurde nicht gesandt, da der Kontaktstatus einseitig ist.","not_available":"Nicht verfügbar.","no_connection":"Keine Verbindung.","relogin":"Neu anmelden.","trying_to_start_private_conversation":"Versuche private Konversation zu starten.","Verified":"Verifiziert","Unverified":"Unverifiziert","private_conversation_started":"Private Konversation gestartet.","private_conversation_aborted":"Private Konversation abgebrochen.","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Dein Kontakt hat die private Konversation beendet. Das solltest du auch tun!","conversation_is_now_verified":"Konversation ist jetzt verifiziert","authentication_failed":"Authentifizierung fehlgeschlagen.","your_buddy_is_attempting_to_determine_":"Dein Kontakt versucht herauszufinden ob er wirklich mit dir redet.","to_authenticate_to_your_buddy":"Um dich gegenüber deinem Kontakt zu verifizieren ","enter_the_answer_and_click_answer":"gib die Antwort ein und klick auf Antworten.","enter_the_secret":"gib das Geheimnis ein.","Creating_your_private_key_":"Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.","Authenticating_a_buddy_helps_":"Einen Kontakt zu authentifizieren hilft sicherzustellen, dass die Person mit der du sprichst auch die ist die sie sagt.","How_do_you_want_to_authenticate_your_buddy":"Wie willst du {{bid_name}} (<b>{{bid_jid}}</b>) authentifizieren?","Select_method":"Wähle...","Manual":"Manual","Question":"Frage","Secret":"Geheimnis","To_verify_the_fingerprint_":"Um den Fingerprint zu verifizieren kontaktiere dein Kontakt über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.","Your_fingerprint":"Dein Fingerprint","Buddy_fingerprint":"Sein/Ihr Fingerprint","Close":"Schließen","Compared":"Verglichen","To_authenticate_using_a_question_":"Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Kontakt die Antwort kennt.","Ask":"Frage","To_authenticate_pick_a_secret_":"Um deinen Kontakt zu authentifizieren, wähle ein Geheimnis welches nur deinem Kontakt und dir bekannt ist.","Compare":"Vergleiche","Fingerprints":"Fingerprints","Authentication":"Authentifizierung","Message":"Nachricht","Add_buddy":"Kontakt hinzufügen","rename_buddy":"Kontakt umbenennen","delete_buddy":"Kontakt löschen","Login":"Anmeldung","Username":"Benutzername","Password":"Passwort","Cancel":"Abbrechen","Connect":"Verbinden","Type_in_the_full_username_":"Gib bitte den vollen Benutzernamen und optional ein Alias an.","Alias":"Alias","Add":"Hinzufügen","Subscription_request":"Kontaktanfrage","You_have_a_request_from":"Du hast eine Anfrage von","Deny":"Ablehnen","Approve":"Bestätigen","Remove_buddy":"Kontakt entfernen","You_are_about_to_remove_":"Du bist gerade dabei {{bid_name}} (<b>{{bid_jid}}</b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.","Continue_without_chat":"Weiter ohne Chat","Please_wait":"Bitte warten","Login_failed":"Chat-Anmeldung fehlgeschlagen","Sorry_we_cant_authentikate_":"Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?","Retry":"Zurück","clear_history":"Lösche Verlauf","New_message_from":"Neue Nachricht von","Should_we_notify_you_":"Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?","Please_accept_":"Bitte klick auf den \"Zulassen\" Button oben.","Hide_offline":"Offline ausblenden","Show_offline":"Offline einblenden","About":"Über","dnd":"Beschäftigt","Mute":"Ton aus","Unmute":"Ton an","Subscription":"Bezug","both":"beidseitig","Status":"Status","online":"online","chat":"chat","away":"abwesend","xa":"länger abwesend","offline":"offline","none":"keine","Unknown_instance_tag":"Unbekannter instance tag.","Not_one_of_our_latest_keys":"Nicht einer unserer letzten Schlüssel.","Received_an_unreadable_encrypted_message":"Eine unlesbare verschlüsselte Nachricht erhalten.","Online":"Online","Chatty":"Gesprächig","Away":"Abwesend","Extended_away":"Länger abwesend","Offline":"Offline","Friendship_request":"Kontaktanfrage","Confirm":"Bestätigen","Dismiss":"Ablehnen","Remove":"Löschen","Online_help":"Online Hilfe","FN":"Name","N":" ","FAMILY":"Familienname","GIVEN":"Vorname","NICKNAME":"Spitzname","URL":"URL","ADR":"Adresse","STREET":"Straße","EXTADD":"Zusätzliche Adresse","LOCALITY":"Ortschaft","REGION":"Region","PCODE":"Postleitzahl","CTRY":"Land","TEL":"Telefon","NUMBER":"Nummer","EMAIL":"E-Mail","USERID":" ","ORG":"Organisation","ORGNAME":"Name","ORGUNIT":"Abteilung","TITLE":"Titel","ROLE":"Rolle","BDAY":"Geburtstag","DESC":"Beschreibung","PHOTO":" ","send_message":"Sende Nachricht","get_info":"Benutzerinformationen","Settings":"Einstellungen","Priority":"Priorität","Save":"Speichern","User_settings":"Benutzereinstellungen","A_fingerprint_":"Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.","Your_roster_is_empty_add_a":"Deine Kontaktliste ist leer, füge einen neuen Kontakt ","new_buddy":"hinzu","is":"ist","Login_options":"Anmeldeoptionen","BOSH_url":"BOSH url","Domain":"Domain","Resource":"Ressource","On_login":"Beim Anmelden","Received_an_unencrypted_message":"Unverschlüsselte Nachricht empfangen","Sorry_your_buddy_doesnt_provide_any_information":"Dein Kontakt stellt leider keine Informationen bereit.","Info_about":"Info über","Authentication_aborted":"Authentifizierung abgebrochen.","Authentication_request_received":"Authentifizierungsanfrage empfangen.","Do_you_want_to_display_them":"Möchtest du sie sehen?","Log_in_without_chat":"Anmelden ohne Chat","has_come_online":"ist online gekommen","Unknown_sender":"Unbekannter Sender","You_received_a_message_from_an_unknown_sender":"Du hast eine Nachricht von einem unbekannten Sender erhalten","Please_allow_access_to_microphone_and_camera":"Bitte klick auf den \"Zulassen\" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.","Incoming_call":"Eingehender Anruf","from":"von","Do_you_want_to_accept_the_call_from":"Möchtest Du den Anruf annehmen von","Reject":"Ablehnen","Accept":"Annehmen","hang_up":"Auflegen","snapshot":"Schnappschuss","mute_my_audio":"Mein Ton aus","pause_my_video":"Mein Video pausieren","fullscreen":"Vollbild","Info":"Info","Local_IP":"Lokale IP","Remote_IP":"Remote IP","Local_Fingerprint":"Lokaler Fingerprint","Remote_Fingerprint":"Remote Fingerprint","Video_call_not_possible":"Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.","Start_video_call":"Starte Videoanruf","Join_chat":"Gruppe beitreten","Join":"Betreten","Room":"Gruppe","Nickname":"Nickname","left_the_building":"__nickname__ hat die Gruppe verlassen","entered_the_room":"__nickname__ ist der Gruppe beigetreten","is_now_known_as":"__oldNickname__ ist nun unter __newNickname__ bekannt","This_room_is":"Diese Gruppe ist","muc_hidden":{"keyword":"versteckt","description":"kann durch die Suche nicht gefunden werden"},"muc_membersonly":{"keyword":"nur für Mitglieder","description":"du musst auf der Mitgliederliste stehen"},"muc_moderated":{"keyword":"moderiert","description":"Nur Personen die \"Mitspracherecht\" haben dürfen Nachrichten senden"},"muc_nonanonymous":{"keyword":"nicht anonym","description":"deine Jabber ID wird für alle Mitglieder sichtbar sein"},"muc_open":{"keyword":"offen","description":"jeder darf dieser Gruppe beitreten"},"muc_passwordprotected":{"keyword":"passwortgeschützt","description":"du benötigst das korrekte Passwort"},"muc_persistent":{"keyword":"permanent","description":"wird nicht geschlossen, wenn das letzte Mitglied die Gruppe verlässt"},"muc_public":{"keyword":"öffentlich","description":"kann durch die Suche gefunden werden"},"muc_semianonymous":{"keyword":"teilweise anonym","description":"deine Jabber ID wird nur für die Gruppen Administratoren sichtbar sein"},"muc_temporary":{"keyword":"temporär","description":"wird geschlossen, wenn das letzte Mitglied die Gruppe verlässt"},"muc_unmoderated":{"keyword":"nicht moderiert","description":"jeder darf Nachrichten senden"},"muc_unsecured":{"keyword":"ungesichert","description":"es wird kein Passwort benötigt"},"Continue":"Weiter","Server":"Server","Rooms_are_loaded":"Gruppen werden geladen","Could_load_only":"Es konnten nur __count__ Gruppen für die Autovervollständigung geladen werden","muc_explanation":"Bitte trage den Gruppennamen und optional ein Nickname und Passwort ein um einer Gruppe beizutreten","You_already_joined_this_room":"Du bist dieser Gruppe bereits beigetreten","This_room_will_be_closed":"Diese Gruppe wird geschlossen","Room_not_found_":"Es wird eine neue Gruppe erstellt","Loading_room_information":"Informationen über Gruppe werden geladen","Destroy":"Auflösen","Leave":"Verlassen","changed_subject_to":"__nickname__ hat das Thema auf __subject__ geändert","muc_removed_kicked":"Du wurdest aus der Gruppe entfernt","muc_removed_info_kicked":"__nickname__ wurde aus der Gruppe entfernt","muc_removed_banned":"Du wurdest aus der Gruppe ausgeschlossen","muc_removed_info_banned":"__nickname__ wurde aus der Gruppe ausgeschlossen","muc_removed_affiliation":"Du wurdest aus der Gruppe entfernt wegen einer Änderung deines Mitgliedstatus","muc_removed_info_affiliation":"__nickname__ wurde aus der Gruppe entfernt wegen einer Änderung seines Mitgliedstatus","muc_removed_membersonly":"Diese Gruppe erlaubt jetzt nur noch eingetragene Mitglieder und da du nicht dazugehörst, wurdest du aus der Gruppen entfernt","muc_removed_info_membersonly":"Diese Gruppe erlaubt jetzt nur noch eingetragene Mitglieder und __nickname__ gehört nicht dazu, daher wurde er aus der Gruppe entfernt","muc_removed_shutdown":"Du wurdest aus der Gruppe entfernt, da der MUC Server heruntergefahren wird","Reason":"Grund","message_not_send":"Deine Nachricht wurde aufgrund eines Fehlers nicht versandt","message_not_send_item-not-found":"Deine Nachricht wurde nicht versandt, da der Raum nicht mehr existiert","message_not_send_forbidden":"Deine Nachricht wurde nicht versandt, da du kein \"Mitspracherecht\" hast","message_not_send_not-acceptable":"Deine Nachricht wurde nicht versandt, da du kein Mitglied dieser Gruppe bist","This_room_has_been_closed":"Diese Gruppe wurde geschlossen","Room_logging_is_enabled":"Gesprächsverlauf kann öffentlich einsehbar sein","A_password_is_required":"Es wird ein Passwort benötigt","You_are_not_on_the_member_list":"Du bist kein eingetragenes Mitglied","You_are_banned_from_this_room":"Du wurdest von dieser Gruppe ausgeschlossen","Your_desired_nickname_":"Dein gewünschter Nickname wird bereits verwendet. Bitte wähle einen anderen.","The_maximum_number_":"Die maximale Anzahl der Mitglieder wurde erreicht.","This_room_is_locked_":"Diese Gruppe ist gesperrt","You_are_not_allowed_to_create_":"Du darfst keine neue Gruppe erstellen","Carbon_copy":null,"Enable":"Aktivieren"}},"el":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null,"Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}},"en":{"translation":{"Logging_in":"Logging in…","your_connection_is_unencrypted":"Your connection is unencrypted.","your_connection_is_encrypted":"Your connection is encrypted.","your_buddy_closed_the_private_connection":"Your contact closed the private connection.","start_private":"Start private","close_private":"Close private","your_buddy_is_verificated":"Your contact is verified.","you_have_only_a_subscription_in_one_way":"You only have a one-way subscription.","authentication_query_sent":"Authentication query sent.","your_message_wasnt_send_please_end_your_private_conversation":"Your message was not sent. Please end your private conversation.","unencrypted_message_received":"Unencrypted message received","your_message_wasnt_send_because_you_have_no_valid_subscription":"Your message was not sent because you have no valid subscription.","not_available":"Not available","no_connection":"No connection!","relogin":"relogin","trying_to_start_private_conversation":"Trying to start private conversation!","Verified":"Verified","Unverified":"Unverified","private_conversation_started":"Private conversation started.","private_conversation_aborted":"Private conversation aborted!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Your contact closed the private conversation! You should do the same.","conversation_is_now_verified":"Conversation is now verified.","authentication_failed":"Authentication failed.","your_buddy_is_attempting_to_determine_":"You contact is attempting to determine if they are really talking to you.","to_authenticate_to_your_buddy":"To authenticate to your contact, ","enter_the_answer_and_click_answer":"enter the answer and click Answer.","enter_the_secret":"enter the secret.","Creating_your_private_key_":"Creating your private key; this may take a while.","Authenticating_a_buddy_helps_":"Authenticating a contact helps ensure that the person you are talking to is really the one they claim to be.","How_do_you_want_to_authenticate_your_buddy":"How do you want to authenticate {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Select method...","Manual":"Manual","Question":"Question","Secret":"Secret","To_verify_the_fingerprint_":"To verify the fingerprint, contact your contact via some other trustworthy channel, such as the telephone.","Your_fingerprint":"Your fingerprint","Buddy_fingerprint":"Contact fingerprint","Close":"Close","Compared":"Compared","To_authenticate_using_a_question_":"To authenticate using a question, pick a question whose answer is known only you and your contact.","Ask":"Ask","To_authenticate_pick_a_secret_":"To authenticate, pick a secret known only to you and your contact.","Compare":"Compare","Fingerprints":"Fingerprints","Authentication":"Authentication","Message":"Message","Add_buddy":"Add contact","rename_buddy":"rename contact","delete_buddy":"delete contact","Login":"Login","Username":"Username","Password":"Password","Cancel":"Cancel","Connect":"Connect","Type_in_the_full_username_":"Type in the full username and an optional alias.","Alias":"Alias","Add":"Add","Subscription_request":"Subscription request","You_have_a_request_from":"You have a request from","Deny":"Deny","Approve":"Approve","Remove_buddy":"Remove contact","You_are_about_to_remove_":"You are about to remove {{bid_name}} (<b>{{bid_jid}}</b>) from your contact list. All related chats will be closed.","Continue_without_chat":"Continue without chat","Please_wait":"Please wait","Login_failed":"Chat login failed","Sorry_we_cant_authentikate_":"Authentication failed with the chat server. Maybe the password is wrong?","Retry":"Back","clear_history":"Clear history","New_message_from":"New message from","Should_we_notify_you_":"Should we notify you about new messages in the future?","Please_accept_":"Please click the \"Allow\" button at the top.","Hide_offline":"Hide offline contacts","Show_offline":"Show offline contacts","About":"About","dnd":"Do Not Disturb","Mute":"Mute","Unmute":"Unmute","Subscription":"Subscription","both":"both","Status":"Status","online":"online","chat":"chat","away":"away","xa":"extended away","offline":"offline","none":"none","Unknown_instance_tag":"Unknown instance tag.","Not_one_of_our_latest_keys":"Not one of our latest keys.","Received_an_unreadable_encrypted_message":"Received an unreadable encrypted message.","Online":"Online","Chatty":"Chatty","Away":"Away","Extended_away":"Extended away","Offline":"Offline","Friendship_request":"Contact request","Confirm":"Confirm","Dismiss":"Dismiss","Remove":"Remove","Online_help":"Online help","FN":"Full name","N":" ","FAMILY":"Family name","GIVEN":"Given name","NICKNAME":"Nickname","URL":"URL","ADR":"Address","STREET":"Street Address","EXTADD":"Extended Address","LOCALITY":"Locality","REGION":"Region","PCODE":"Postal Code","CTRY":"Country","TEL":"Telephone","NUMBER":"Number","EMAIL":"Email","USERID":" ","ORG":"Organization","ORGNAME":"Name","ORGUNIT":"Unit","TITLE":"Job title","ROLE":"Role","BDAY":"Birthday","DESC":"Description","PHOTO":" ","send_message":"Send message","get_info":"Show information","Settings":"Settings","Priority":"Priority","Save":"Save","User_settings":"User settings","A_fingerprint_":"A fingerprint is used to make sure that the person you are talking to is who he or she is saying.","Your_roster_is_empty_add_a":"Your roster is empty, add a ","new_buddy":"new contact","is":"is","Login_options":"Login options","BOSH_url":"BOSH URL","Domain":"Domain","Resource":"Resource","On_login":"On login","Received_an_unencrypted_message":"Received an unencrypted message","Sorry_your_buddy_doesnt_provide_any_information":"Sorry, your contact does not provide any information.","Info_about":"Info about","Authentication_aborted":"Authentication aborted.","Authentication_request_received":"Authentication request received.","Do_you_want_to_display_them":"Do you want to display them?","Log_in_without_chat":"Log in without chat","has_come_online":"has come online","Unknown_sender":"Unknown sender","You_received_a_message_from_an_unknown_sender":"You received a message from an unknown sender","Please_allow_access_to_microphone_and_camera":"Please click the \"Allow\" button at the top, to allow access to microphone and camera.","Incoming_call":"Incoming call","from":"from","Do_you_want_to_accept_the_call_from":"Do you want to accept the call from","Reject":"Reject","Accept":"Accept","hang_up":"hang up","snapshot":"snapshot","mute_my_audio":"mute my audio","pause_my_video":"pause my video","fullscreen":"fullscreen","Info":"Info","Local_IP":"Local IP","Remote_IP":"Remote IP","Local_Fingerprint":"Local fingerprint","Remote_Fingerprint":"Remote fingerprint","Video_call_not_possible":"Video call not possible. Your contact does not support video calls.","Start_video_call":"Start video call","Join_chat":"Join chat","Join":"Join","Room":"Room","Nickname":"Nickname","left_the_building":"__nickname__ left the building","entered_the_room":"__nickname__ entered the room","is_now_known_as":"__oldNickname__ is now known as __newNickname__","This_room_is":"This room is","muc_hidden":{"keyword":"hidden","description":"can not be found through search"},"muc_membersonly":{"keyword":"members-only","description":"you need to be on the member list"},"muc_moderated":{"keyword":"moderated","description":"only persons with \"voice\" are allowed to send messages"},"muc_nonanonymous":{"keyword":"non-anonymous","description":"your jabber id is exposed to all other occupants"},"muc_open":{"keyword":"open","description":"everyone is allowed to join"},"muc_passwordprotected":{"keyword":"password-protected","description":"you need to provide the correct password"},"muc_persistent":{"keyword":"persistent","description":"will not be destroyed if the last occupant left"},"muc_public":{"keyword":"public","description":"can be found through search"},"muc_semianonymous":{"keyword":"semi-anonymous","description":"your jabber id is only exposed to room admins"},"muc_temporary":{"keyword":"temporary","description":"will be destroyed if the last occupant left"},"muc_unmoderated":{"keyword":"unmoderated","description":"everyone is allowed to send messages"},"muc_unsecured":{"keyword":"unsecured","description":"you need no password to enter"},"Continue":"Continue","Server":"Server","Rooms_are_loaded":"Rooms are loaded","Could_load_only":"Could load only __count__ rooms for autocomplete","muc_explanation":"Please enter room name and optional a nickname and password to join a chat","You_already_joined_this_room":"You already joined this room","This_room_will_be_closed":"This room will be closed","Room_not_found_":"A new room will be created","Loading_room_information":"Loading room information","Destroy":"Destroy","Leave":"Leave","changed_subject_to":"__nickname__ changed the room subject to \"__subject__\"","muc_removed_kicked":"You have been kicked from the room","muc_removed_info_kicked":"__nickname__ has been kicked from the room","muc_removed_banned":"You have been banned from the room","muc_removed_info_banned":"__nickname__ has been banned from the room","muc_removed_affiliation":"You have been removed from the room, because of an affiliation change","muc_removed_info_affiliation":"__nickname__ has been removed from the room, because of an affiliation change","muc_removed_membersonly":"You have been removed from the room, because the room has been changed to members-only and you are no member","muc_removed_info_membersonly":"__nickname__ has been removed from the room, because the room has been changed to members-only and you are no member","muc_removed_shutdown":"You have been removed from the room, because the MUC service is being shut down","Reason":"Reason","message_not_send":"Your message was not send because of an error","message_not_send_item-not-found":"Your message was not send because this room does not exist","message_not_send_forbidden":"Your message was not send because you have no voice in this room","message_not_send_not-acceptable":"Your message was not send because you are no occupant of this room","This_room_has_been_closed":"This room has been closed","Room_logging_is_enabled":"Room logging is enabled","A_password_is_required":"A password is required","You_are_not_on_the_member_list":"You are not on the member list","You_are_banned_from_this_room":"You are banned from this room","Your_desired_nickname_":"Your desired nickname is already in use. Please choose another","The_maximum_number_":"The maximum number of user is reached in this room","This_room_is_locked_":"This room is locked","You_are_not_allowed_to_create_":"You are not allowed to create a room","Carbon_copy":"Carbon copy","Enable":"Enable"}},"es":{"translation":{"Logging_in":"Por favor, espere...","your_connection_is_unencrypted":"Su conexión no está cifrada.","your_connection_is_encrypted":"Su conexión está cifrada.","your_buddy_closed_the_private_connection":"Su amigo ha cerrado la conexión privada.","start_private":"Iniciar privado","close_private":"Cerrar privado","your_buddy_is_verificated":"Tu amigo está verificado.","you_have_only_a_subscription_in_one_way":"Sólo tienes una suscripción de un modo.","authentication_query_sent":"Consulta de verificación enviada.","your_message_wasnt_send_please_end_your_private_conversation":"Su mensaje no fue enviado. Por favor, termine su conversación privada.","unencrypted_message_received":"Mensaje no cifrado recibido:","your_message_wasnt_send_because_you_have_no_valid_subscription":"Su mensaje no se ha enviado, porque usted no tiene suscripción válida.","not_available":"No disponible","no_connection":"Sin conexión!","relogin":"iniciar sesión nuevamente","trying_to_start_private_conversation":"Intentando iniciar una conversación privada!","Verified":"Verificado","Unverified":"No verificado","private_conversation_started":"se inició una conversación privada.","private_conversation_aborted":"Conversación privada abortada!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Su amigo cerró la conversación privada! Usted debería hacer lo mismo.","conversation_is_now_verified":"La conversación es ahora verificada.","authentication_failed":"Fallo la verificación.","your_buddy_is_attempting_to_determine_":"Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.","to_authenticate_to_your_buddy":"Para autenticar a su amigo, ","enter_the_answer_and_click_answer":"introduce la respuesta y haga clic en Contestar.","enter_the_secret":"especifique el secreto.","Creating_your_private_key_":"Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.","Authenticating_a_buddy_helps_":"Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.","How_do_you_want_to_authenticate_your_buddy":"¿Cómo desea autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Escoja un método...","Manual":"Manual","Question":"Pregunta","Secret":"Secreto","To_verify_the_fingerprint_":"Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.","Your_fingerprint":"Tu firma digital","Buddy_fingerprint":"firma digital de tu amigo","Close":"Cerrar","Compared":"Comparado","To_authenticate_using_a_question_":"Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.","Ask":"Preguntar","To_authenticate_pick_a_secret_":"Para autenticar, elija un secreto conocido sólo por usted y su amigo.","Compare":"Comparar","Fingerprints":"Firmas digitales","Authentication":"Autenticación","Message":"Mensaje","Add_buddy":"Añadir amigo","rename_buddy":"renombrar amigo","delete_buddy":"eliminar amigo","Login":"Iniciar Sesión","Username":"Usuario","Password":"Contraseña","Cancel":"Cancelar","Connect":"Conectar","Type_in_the_full_username_":"Escriba el usuario completo y un alias opcional.","Alias":"Alias","Add":"Añadir","Subscription_request":"Solicitud de suscripción","You_have_a_request_from":"Tienes una petición de","Deny":"Rechazar","Approve":"Aprobar","Remove_buddy":"Eliminar amigo","You_are_about_to_remove_":"Vas a eliminar a {{bid_name}} (<b>{{bid_jid}}</b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.","Continue_without_chat":"Continuar","Please_wait":"Espere por favor","Login_failed":"Fallo el inicio de sesión","Sorry_we_cant_authentikate_":"Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?","Retry":"Reintentar","clear_history":"Borrar el historial","New_message_from":"Nuevo mensaje de","Should_we_notify_you_":"¿Debemos notificarle sobre nuevos mensajes en el futuro?","Please_accept_":"Por favor, haga clic en el botón \"Permitir\" en la parte superior.","Hide_offline":"Ocultar contactos desconectados","Show_offline":"Mostrar contactos desconectados","About":"Acerca de","dnd":"No Molestar","Mute":"Desactivar sonido","Unmute":"Activar sonido","Subscription":"Suscripción","both":"ambos","Status":"Estado","online":"en línea","chat":"chat","away":"ausente","xa":"mas ausente","offline":"desconectado","none":"nadie","Unknown_instance_tag":"Etiqueta de instancia desconocida.","Not_one_of_our_latest_keys":"No de nuestra ultima tecla.","Received_an_unreadable_encrypted_message":"Se recibió un mensaje cifrado ilegible.","Online":"En linea","Chatty":"Hablador","Away":"Ausente","Extended_away":"Mas ausente","Offline":"Desconectado","Friendship_request":"Solicitud de amistad","Confirm":"Confirmar","Dismiss":"Rechazar","Remove":"Eliminar","Online_help":"Ayuda en línea","FN":"Nombre completo ","N":" ","FAMILY":"Apellido","GIVEN":"Nombre","NICKNAME":"Apodar","URL":"URL","ADR":"Dirección","STREET":"Calle","EXTADD":"Extendido dirección","LOCALITY":"Población","REGION":"Región","PCODE":"Código postal","CTRY":"País","TEL":"Teléfono","NUMBER":"Número","EMAIL":"Emilio","USERID":" ","ORG":"Organización","ORGNAME":"Nombre","ORGUNIT":"Departamento","TITLE":"Título","ROLE":"Rol","BDAY":"Cumpleaños","DESC":"Descripción","PHOTO":" ","send_message":"mandar un texto","get_info":"obtener información","Settings":"Ajustes","Priority":"Prioridad","Save":"Guardar","User_settings":"Configuración de usuario","A_fingerprint_":"La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser","Your_roster_is_empty_add_a":"Tu lista de amigos esta vacia","new_buddy":"Nuevo amigo","is":"es","Login_options":"Opciones de login","BOSH_url":"BOSH url","Domain":"Dominio","Resource":"Recurso","On_login":"Iniciar sesión","Received_an_unencrypted_message":"Recibe un mensaje no cifrado","Sorry_your_buddy_doesnt_provide_any_information":"Lo sentimos, su amigo no provee ninguna información.","Info_about":"Info acerca de","Authentication_aborted":"Autenticación abortada","Authentication_request_received":"Pedido de autenticación recibido.","Do_you_want_to_display_them":"¿Quiere mostrarlos?","Log_in_without_chat":"Ingresar sin chat","has_come_online":"se ha conectado","Unknown_sender":"Remitente desconocido","You_received_a_message_from_an_unknown_sender":"Ha recibido un mensaje de un remitente desconocido","Please_allow_access_to_microphone_and_camera":"Por favor, permitir el acceso al micrófono y la cámara.","Incoming_call":"Llamada entrante","from":"de","Do_you_want_to_accept_the_call_from":"Desea aceptar la llamada de","Reject":"Rechazar","Accept":"Aceptar","hang_up":"colgar","snapshot":"instantánea","mute_my_audio":"silenciar mi audio","pause_my_video":"pausar mi vídeo","fullscreen":"pantalla completa","Info":"Info","Local_IP":"IP local","Remote_IP":"IP remota","Local_Fingerprint":"Firma digital local","Remote_Fingerprint":"Firma digital remota","Video_call_not_possible":"Llamada de vídeo no es posible","Start_video_call":"Iniciar llamada de vídeo","Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":"Activar"}},"fr":{"translation":{"Logging_in":"Connexion...","your_connection_is_unencrypted":"Connexion non chiffrée.","your_connection_is_encrypted":"Connexion chiffrée.","your_buddy_closed_the_private_connection":"Votre ami a fermé la connexion privée.","start_private":"Démarrer une conversation privé","close_private":"Clôturer une conversation privée","your_buddy_is_verificated":"Votre contact est vérifié.","you_have_only_a_subscription_in_one_way":"Vous ne pouvez souscrire qu'une fois.","authentication_query_sent":"Requête d’authentification envoyée.","your_message_wasnt_send_please_end_your_private_conversation":"Votre message n'a pas été envoyé. Veuillez terminer votre conversation privée.","unencrypted_message_received":"Message non chiffré reçu","your_message_wasnt_send_because_you_have_no_valid_subscription":"Votre message n'a pas été envoyé car votre abonnement n'est pas valide.","not_available":"Pas disponible","no_connection":"Pas de connexion !","relogin":"Re-connexion","trying_to_start_private_conversation":"Essai de démarrage d'une conversation privée !","Verified":"Vérifié","Unverified":"Non vérifié","private_conversation_started":"Conversation privé démarrée.","private_conversation_aborted":"Conversation privée interrompue !","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Votre ami a fermé la conversation privée ! Vous devriez faire de même.","conversation_is_now_verified":"La conversation est maintenant vérifiée.","authentication_failed":"L'authentification a échoué.","your_buddy_is_attempting_to_determine_":"Votre ami tente de déterminer si il ou elle parle vraiment à vous.","to_authenticate_to_your_buddy":"Vous authentifier à votre ami, ","enter_the_answer_and_click_answer":"Saisissez une réponse et cliquer sur Répondre.","enter_the_secret":"Entrez le mot secret","Creating_your_private_key_":"Création de votre clé privée; cela peut prendre un moment.","Authenticating_a_buddy_helps_":"L'authentification d'un ami permet de s'assurer que la personne à qui vous parlez est vraiment celui qu'il ou elle prétend être.","How_do_you_want_to_authenticate_your_buddy":"Comment voulez-vous vous authentifier {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Sélection de la méthode...","Manual":"Manuel","Question":"Question","Secret":"Sécurité","To_verify_the_fingerprint_":"Pour vérifier l'empreinte, contactez votre ami via un autre canal digne de confiance, tel que le téléphone.","Your_fingerprint":"Votre empreinte","Buddy_fingerprint":"Empreinte de l'ami","Close":"Fermer","Compared":"Comparé","To_authenticate_using_a_question_":"Pour s'authentifier à l'aide d'une question, choisissez une question dont la réponse n'est connue que vous et de votre ami.","Ask":"Demander","To_authenticate_pick_a_secret_":"Pour vous authentifier, choisissez un secret connu seulement de vous et de votre ami.","Compare":"Comparer","Fingerprints":"Empreintes","Authentication":"Authentification","Message":"Message","Add_buddy":"Ajouter comme ami","rename_buddy":"Renommer l'ami","delete_buddy":"Supprimer l'ami","Login":"Connexion","Username":"Nom d'utilisateur","Password":"Mot de passe","Cancel":"Annuler","Connect":"Connecter","Type_in_the_full_username_":"Tapez un nom d'utilisateur complet et un alias(optionnel).","Alias":"Alias","Add":"Ajouter","Subscription_request":"Demande d'abonnement","You_have_a_request_from":"Vous avez une requête de ","Deny":"Refuser","Approve":"Approuver","Remove_buddy":"Supprimer l'ami","You_are_about_to_remove_":"Vous allez retirer {{bid_name}} (<b>{{bid_jid}}</b>) de votre liste d'amis. Toutes les fenêtres de chat en lien avec celui-ci seront fermées.","Continue_without_chat":"Continuer sans tchat","Please_wait":"Merci de patienter","Login_failed":"Authentification échouée","Sorry_we_cant_authentikate_":"La connexion avec le serveur de tchat a échoué. Vérifiez le mot de passe.","Retry":"Retour","clear_history":"Effacer l’historique","New_message_from":"Nouveau message de","Should_we_notify_you_":"Dans le futur, devrons-nous vous notifier les nouveaux messages ?","Please_accept_":"Merci de cliquer sur le bouton \"autoriser\" en haut de page","Hide_offline":"Masquer les contacts non connectés","Show_offline":"Afficher les contacts non connectés","About":"À propos","dnd":"Ne pas déranger","Mute":"Muet","Unmute":"Son actif","Subscription":"Abonnement","both":"Les deux","Status":"Status","online":"En ligne","chat":"tchat","away":"Absent","xa":"Options étendues","offline":"Hors ligne","none":"Aucun","Unknown_instance_tag":"Tag inconnu","Not_one_of_our_latest_keys":"Ce n'est pas l'une des dernières touches","Received_an_unreadable_encrypted_message":"Message chiffré non lisible","Online":"En ligne","Chatty":"tchatty","Away":"Absent","Extended_away":"Options étendues","Offline":"Hors ligne","Friendship_request":"Demande d'amitié","Confirm":"Valider","Dismiss":"Rejeter","Remove":"Supprimer","Online_help":"Aide en ligne","FN":"Nom","N":" N ","FAMILY":"Nom de famille","GIVEN":"prénom","NICKNAME":"Surnom","URL":"URL","ADR":"Adresse","STREET":"Rue","EXTADD":"Adresse (suite)","LOCALITY":"Localité","REGION":"Région","PCODE":"Code Postal","CTRY":"Pays","TEL":"Téléphone","NUMBER":"Numéro","EMAIL":"Courriel","USERID":" USERID ","ORG":"Organisation","ORGNAME":"Nom","ORGUNIT":"Unité","TITLE":"Qualité:","ROLE":"Rôle","BDAY":"Date de naissance","DESC":"Description","PHOTO":"Photo","send_message":"Envoyer le message","get_info":"Montrer les informations","Settings":"Réglages","Priority":"Priorité","Save":"Enregistrer","User_settings":"Paramètres utilisateur","A_fingerprint_":"Une empreinte est utilisée pour s'assurer de l'identité de la personne à qui vous parlez","Your_roster_is_empty_add_a":"Votre liste est vide, ajouter ","new_buddy":"Nouvel ami","is":"est","Login_options":"Options d'identification","BOSH_url":"URL BOSH","Domain":"Domaine","Resource":"Ressource","On_login":"Après authentification","Received_an_unencrypted_message":"Reçu un message non chiffré","Sorry_your_buddy_doesnt_provide_any_information":"Désolé, votre ami n'a pas fourni d'informations","Info_about":"A propos de","Authentication_aborted":"Authentification interrompue.","Authentication_request_received":"Requête d'authentification reçue.","Do_you_want_to_display_them":"Voulez-vous les afficher ?","Log_in_without_chat":"S'identifier sans tchat","has_come_online":"vient d'arriver","Unknown_sender":"Expéditeur inconnu","You_received_a_message_from_an_unknown_sender":"Vous avez reçu un message d'un expéditeur inconnu","Please_allow_access_to_microphone_and_camera":"Veuillez cliquez sur le bouton \"Autoriser\" en haut, pour permettre l'accès au micro et à la caméra.","Incoming_call":"Appel entrant","from":"de","Do_you_want_to_accept_the_call_from":"Voulez-vous accepter l'appel de","Reject":"Rejeté","Accept":"Accepté","hang_up":"Décrochez","snapshot":"Capture d’écran","mute_my_audio":"Couper l'audio","pause_my_video":"Mettre ma vidéo en pause","fullscreen":"Plein écran","Info":"Info","Local_IP":"IP locale","Remote_IP":"IP distante","Local_Fingerprint":"Empreinte locale","Remote_Fingerprint":"Empreinte distante","Video_call_not_possible":"L'appel vidéo n'est possible. Votre ami ne supporte pas les appels vidéo.","Start_video_call":"Démarrer l'appel vidéo","Join_chat":"Joindre la discution","Join":"Joindre","Room":"Salon","Nickname":"Surnom","left_the_building":"__nickname__ a quitté l'immeuble","entered_the_room":"__nickname__ entre dans le salon","is_now_known_as":null,"This_room_is":"Ce salon est","muc_hidden":{"keyword":"caché","description":null},"muc_membersonly":{"keyword":"pour les membres seulement","description":"Vous devez être sur la liste des membres"},"muc_moderated":{"keyword":"modéré","description":"Seulement les personnes avec la \"voix\" sont autorisés à envoyer des messages"},"muc_nonanonymous":{"keyword":"non anonyme","description":"Votre identifiant Jabber est visible de tous les autres occupants"},"muc_open":{"keyword":"ouvert","description":"Tout le monde est autorisé à se connecter"},"muc_passwordprotected":{"keyword":"protégé par un mot de passe","description":"Vous devez fournir un mot de passe correct"},"muc_persistent":{"keyword":"persistent","description":null},"muc_public":{"keyword":"public","description":null},"muc_semianonymous":{"keyword":"semi-anonyme","description":"Votre identifiant Jabber est seulement visible aux administrateurs de ce salon"},"muc_temporary":{"keyword":"temporaire","description":"sera détruit au départ de son dernier occupant"},"muc_unmoderated":{"keyword":"non modéré","description":"Tout le monde est autorisé à envoyer des messages"},"muc_unsecured":{"keyword":"non sécurisé","description":"un mot de passe n'est pas nécessaire pour entrer"},"Continue":"Continuer","Server":"Serveur","Rooms_are_loaded":"Les salons sont chargés","Could_load_only":null,"muc_explanation":"Veuillez saisir le nom du salon, un surnom (optionnel) et un mot de passe pour joindre la conversation","You_already_joined_this_room":"Vous avez déjà rejoins ce salon","This_room_will_be_closed":"Ce salon va être fermé","Room_not_found_":"Un nouveau salon va être créé","Loading_room_information":"Chargement des informations du salon","Destroy":"Détruire","Leave":"Quitter","changed_subject_to":"__nickname__ a changé le sujet du salon à \"__subject__\"","muc_removed_kicked":"Vous avez été éjecté de ce salon","muc_removed_info_kicked":"__nickname__ a été éjecté de ce salon","muc_removed_banned":"Vous avez été banni de ce salon","muc_removed_info_banned":"__nickname__ a été banni de ce salon","muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":"Raison","message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":"Votre message n'a pas été envoyé car il n'y a personne dans ce salon","This_room_has_been_closed":"Ce salon a été fermé","Room_logging_is_enabled":null,"A_password_is_required":"Un mot de passe est requis","You_are_not_on_the_member_list":"Vous n'êtes pas sur la liste des membres","You_are_banned_from_this_room":"Vous avez été banni de ce salon","Your_desired_nickname_":"Votre Surnom souhaité est déjà utilisé.Veuillez en choisir un autre","The_maximum_number_":"Le nombre maximum d'utilisateur est atteint dans ce salon","This_room_is_locked_":"Ce salon est vérouillé","You_are_not_allowed_to_create_":"Vous n'êtes pas autorisé à créer un salon","Carbon_copy":null,"Enable":null}},"it":{"translation":{"Logging_in":"login…","your_connection_is_unencrypted":"La sua connessione è non cifrata.","your_connection_is_encrypted":"La sua connessione è cifrata.","your_buddy_closed_the_private_connection":"La sua connessione privata è stato chiuso dal suo compagno.","start_private":"Inizia privata","close_private":"Chiude privata","your_buddy_is_verificated":"Il tuo compagno è stato verificato","you_have_only_a_subscription_in_one_way":"Hai solo una one-way inscrizione.","authentication_query_sent":"Domanda d'autenticità inviata.","your_message_wasnt_send_please_end_your_private_conversation":"Il tuo messaggio non è stato inviato. Si prega di finire la sua conversazione privata.","unencrypted_message_received":"Messaggio non cifrato ricevuto","your_message_wasnt_send_because_you_have_no_valid_subscription":"Il tuo messaggio non è stato inviato perché non hai una sottoscrizione valida.","not_available":"non disponibile","no_connection":"nessun collegamento!","relogin":"nuovo login","trying_to_start_private_conversation":"Cercando di avviare una conversazione privata!","Verified":"verificato","Unverified":"non verificato","private_conversation_started":"Conversazione privata iniziato.","private_conversation_aborted":"Conversazione privata abortito!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Il tuo compagno ha chiuso la conversazione privata! Si dovrebbe fare lo stesso.","conversation_is_now_verified":"Conversazione è ora verificato.","authentication_failed":"autenticazione fallita.","your_buddy_is_attempting_to_determine_":"Il tuo compagno sta cercando di determinare se lui o lei sta davvero parlando con te.","to_authenticate_to_your_buddy":"Per autenticare a il tuo compagno. ","enter_the_answer_and_click_answer":"inserisci la risposta e fare click su risposta.","enter_the_secret":"inserire il segreto.","Creating_your_private_key_":"Creare la propria chiave privata; questo potrebbe richiedere un po'.","Authenticating_a_buddy_helps_":"Autenticazione un compagno aiuta a garantire che la persona si sta parlando è davvero quello che lui o lei sostiene di essere.","How_do_you_want_to_authenticate_your_buddy":"Come si desidera autenticare {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Seleziona metodo ..","Manual":"manuale","Question":"domanda","Secret":"segreto","To_verify_the_fingerprint_":"Per verificare l'impronta digitale, contattare il proprio compagno attraverso qualche altro canale affidabile, come il telefono.","Your_fingerprint":"il tuo impronta digitale","Buddy_fingerprint":"impronta digitale da compagno","Close":"chiude","Compared":"comparato","To_authenticate_using_a_question_":"Per autenticare tramite una questione, scegli una questione la cui risposta è nota solo voi e il tuo compagno","Ask":"chiedi","To_authenticate_pick_a_secret_":"Per autenticare, scegli un segreto noto solo a te e il tuo compagno.","Compare":"Comparare","Fingerprints":"Impronta digitale","Authentication":"Autenticazione","Message":"Messagio","Add_buddy":"Aggiungi un compagno","rename_buddy":"rinomina compagno","delete_buddy":"elimina compagno","Login":"Login","Username":"Identificazione dell'utente","Password":"Password","Cancel":"Cancella","Connect":"Collega","Type_in_the_full_username_":"Digita l'identificazione utente completo e un alias opzionale.","Alias":"Alias","Add":"Aggiungi","Subscription_request":"Rrichiesta di sottoscrizione","You_have_a_request_from":"Hai una richiesta da","Deny":"Refiuta","Approve":"Approva","Remove_buddy":"Rimuova il compagno","You_are_about_to_remove_":"Stai rimovendo {{bid_name}} (<b>{{bid_jid}}</b>) del suo lista di compagni. Tutte le chat appartenente saranno chiuse.","Continue_without_chat":"Continua senza chat","Please_wait":"Si prega d'attendere","Login_failed":"Chat login è fallito","Sorry_we_cant_authentikate_":"Autenticazione non riuscita con il server di chat. Forse la password è sbagliata?","Retry":"Indietro","clear_history":"Cancella la cronologia","New_message_from":"Nuovo messaggio da","Should_we_notify_you_":"Vuoi ricevere una notifica di nuovi messaggi in futuro?","Please_accept_":"Si prega di fare clic sul bottone \"Autorizzazione\" sopra.","Hide_offline":"Nascondere i contatti non in linea","Show_offline":"Mostra i contatti non in linea","About":"Informazione legale","dnd":"Non disturbare","Mute":"Muto attivo","Unmute":"Muto inattivo","Subscription":"Sottoscrizione","both":"etrambi","Status":"Status","online":"In linea","chat":"chat","away":"via","xa":"via estensivo","offline":"non in linea","none":"nessuno","Unknown_instance_tag":"Instance tag sconosciuta.","Not_one_of_our_latest_keys":"Non è una delle nostre ultime chiavi.","Received_an_unreadable_encrypted_message":"Ricevuto un messaggio crittografato illeggibile.","Online":"In linea","Chatty":"Chiacchierino","Away":"Via","Extended_away":"Via estensivo","Offline":"Non in linea","Friendship_request":"Amicizia richiesto","Confirm":"Conferma","Dismiss":"Rifiuta","Remove":"Rimuovi","Online_help":"Guida in linea","FN":"Nome e cognome","N":null,"FAMILY":"Cognome","GIVEN":"Nome","NICKNAME":"Soprannome","URL":"URL","ADR":"Indirizzo","STREET":"Via","EXTADD":"Esteso Indirizzo","LOCALITY":"Località","REGION":"Regione","PCODE":"Codice Postale","CTRY":"Paese","TEL":"Telefono","NUMBER":"Numero","EMAIL":"E-mail","USERID":null,"ORG":"Organizzazione","ORGNAME":"Nome","ORGUNIT":"Unità","TITLE":"Titolo di lavoro","ROLE":"Funzione","BDAY":"Compleanno","DESC":"Descrizione","PHOTO":null,"send_message":"Messagio inviato","get_info":"Mostra informazioni","Settings":"Impostazione","Priority":"Priorità","Save":"Salva","User_settings":"Impostazione dell'utente","A_fingerprint_":"Una impronta digitale è usato per assicurarsi che la persona con cui stai parlando è lui o lei che sta dicendo.","Your_roster_is_empty_add_a":"Il suo elenco è vuoto, aggiungi un ","new_buddy":"compagno nuovo","is":"è","Login_options":"Opzioni di login","BOSH_url":"BOSH URL","Domain":"Domain","Resource":"Risorsa","On_login":"Login on","Received_an_unencrypted_message":"Ricevuto un messaggio non crittografato","Sorry_your_buddy_doesnt_provide_any_information":"Spiace, il tuo compagno non fornisce alcuna informazione.","Info_about":"Informazioni","Authentication_aborted":"Autenticazione interrotta","Authentication_request_received":"Richiesta di autenticazione ricevuto.","Do_you_want_to_display_them":"Vuoi che venga visualizzato?","Log_in_without_chat":"Log in senza chat","has_come_online":"È venuto in linea","Unknown_sender":"Mittente sconosciuto","You_received_a_message_from_an_unknown_sender":"Hai ricevuto un messaggio da un mittente sconosciuto","Please_allow_access_to_microphone_and_camera":"Si prega di fare clic sul bottone \"Autorizzazione\" sopra per autorizzazione del l'accesso al microfono e fotocamera.","Incoming_call":"Chiamata in arrivo","from":"di","Do_you_want_to_accept_the_call_from":"Vuoi accettare la chiamata di","Reject":"Rifiuta","Accept":"Accetta","hang_up":"Riattacca","snapshot":"istantanea","mute_my_audio":"disattiva il mio audio","pause_my_video":"pausa il mio audio","fullscreen":"schermo intero","Info":"Informazione","Local_IP":"IP locale","Remote_IP":"IP remoto","Local_Fingerprint":"Impronta digitale locale","Remote_Fingerprint":"Impronta digitale remoto","Video_call_not_possible":"Videochiamata non è possibile. Il tuo compagno non può effettuare videochiamate.","Start_video_call":"Inizia videochiamata","Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}},"nds":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null,"Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}},"pl":{"translation":{"Logging_in":"Logowanie...","your_connection_is_unencrypted":"Twoje połączenie nie jest szyfrowane.","your_connection_is_encrypted":"Twoje połączenie jest szyfrowane.","your_buddy_closed_the_private_connection":"Twój rozmówca zamknął połączenie.","start_private":"Rozpocznij rozmowę.","close_private":"Zakończ rozmowę.","your_buddy_is_verificated":"Twój rozmówca został zweryfikowany.","you_have_only_a_subscription_in_one_way":"Masz jednostronną subskrypcję.","authentication_query_sent":"Wysłano proźbę o autentykację.","your_message_wasnt_send_please_end_your_private_conversation":"Twoja wiadomość nie została wysłana. Proszę, zamknij rozmowę.","unencrypted_message_received":"Zwrotna niezaszyfrowana wiadomość.","your_message_wasnt_send_because_you_have_no_valid_subscription":"Wiadomość nie została wysłana ponieważ nie posiadasz subskrybcji u rozmówcy.","not_available":"Niedostępny.","no_connection":"Brak połączenia!","relogin":"Połącz ponownie","trying_to_start_private_conversation":"Rozpocznij rozmowę!","Verified":"Zweryfikowano","Unverified":"Niezweryfikowano","private_conversation_started":"Rozmowa prywatna rozpoczęta.","private_conversation_aborted":"Anulowano rozmowę!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Rozmówca przerwał połączenie!","conversation_is_now_verified":"Zweryfikowano połączenie.","authentication_failed":"Weryfikacja się nie powiodła.","your_buddy_is_attempting_to_determine_":"Twój rozmówca próbuje się z Tobą połączyć.","to_authenticate_to_your_buddy":"Autoryzacja z rozmówcą, ","enter_the_answer_and_click_answer":"napisz odpowiedź.","enter_the_secret":"wpisz hasło.","Creating_your_private_key_":"Tworzenie klucza prywatnego; może to chwilę potrwać","Authenticating_a_buddy_helps_":"Autoryzacja pomoże w ustaleniu faktycznej tożsamości rozmówcy ;).","How_do_you_want_to_authenticate_your_buddy":"Jakiej autoryzacji chcesz użyć {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Wybierz sposób...","Manual":"Ręcznie","Question":"Pytanie","Secret":"Hasło","To_verify_the_fingerprint_":"Aby zweryfikować kod najpierw skontaktuj się z rozmówcą np. za pomocą telefonu.","Your_fingerprint":"Twój kod:","Buddy_fingerprint":"Kod rozmówcy","Close":"Zamknij","Compared":"Porównano","To_authenticate_using_a_question_":"Aby autoryzować za pomocą pytania, wybierz pytanie na które tylko Twój rozmówca zna odpowiedź.","Ask":"Zadaj pytanie","To_authenticate_pick_a_secret_":"Aby autoryzować za pomocą hasła, wybierz hasło na które zna tylko Twój rozmówca.","Compare":"Dopasuj","Fingerprints":"Kody autoryzacyjne","Authentication":"Autoryzacja","Message":"Wiadomość","Add_buddy":"Dodaj kontakt","rename_buddy":"Zmień nazwę","delete_buddy":"Usuń kontakt","Login":"Login","Username":"Nazwa Użytkownika","Password":"Hasło","Cancel":"Anuluj","Connect":"Połączenie","Type_in_the_full_username_":"Wpisz pełną nazwę użytkownika (np. <B>imię.nazwisko@zajezdnia.local</B>) oraz jego nazwę wyświetlaną (Alias).","Alias":"Alias","Add":"Dodaj","Subscription_request":"Potwierdzenie subskrypcji","You_have_a_request_from":"Masz potwierdzenie od","Deny":"Odmów","Approve":"Zatwierdź","Remove_buddy":"Usuń rozmówcę","You_are_about_to_remove_":"Twój rozmówca {{bid_name}} (<b>{{bid_jid}}</b>) usunął Cię ze swojej listy kontaktów.","Continue_without_chat":"Kontynuuj bez komunikatora","Please_wait":"Proszę czekać","Login_failed":"Błędne logowanie","Sorry_we_cant_authentikate_":"Błędna autoryzacja z serwerem. Może hasło jest nieprawidłowe?","Retry":"Powrót","clear_history":"Wyczyść historię","New_message_from":"Nowa wiadomość od","Should_we_notify_you_":"Czy chcesz otrzymywać powiadomienia o nowych wiadomościach w przyszłości?","Please_accept_":"Kliknij \"Zezwól\" na górze.","Hide_offline":"Schowaj niedostępne kontakty","Show_offline":"Pokaż niedostępne kontakty","About":"Info","dnd":"Nie przeszkadzać","Mute":"Wycisz","Unmute":"Włącz dźwięk","Subscription":"Subskrybcja","both":"obustronna","Status":"Status","online":"Dostępny","chat":"czat","away":"z dala od kompa","xa":"hen hen...","offline":"niedostępny","none":"brak","Unknown_instance_tag":"Nieznany przypadek.","Not_one_of_our_latest_keys":"Not one of our latest keys.","Received_an_unreadable_encrypted_message":"Otrzymano nieczytelną, zaszyfrowaną wiadomość.","Online":"Połączony","Chatty":"Pogawędzimy?","Away":"Daleko","Extended_away":"Hen Hen...","Offline":"Niedostępny","Friendship_request":"Zapytanie od znajomego?","Confirm":"Potwierdzenie","Dismiss":"Odwołaj","Remove":"Usuń","Online_help":"Pomoc Online","FN":"Pełna nazwa","N":" ","FAMILY":"Nazwisko","GIVEN":"Imię","NICKNAME":"Pseudonim","URL":"Strona WWW","ADR":"Adres","STREET":"Ulica","EXTADD":"Pełny adres","LOCALITY":"Lokalizacja","REGION":"Region","PCODE":"Kod pocztowy","CTRY":"Kraj","TEL":"Telefon","NUMBER":"Numer","EMAIL":"Email","USERID":" ","ORG":"Organizacja","ORGNAME":"Nazwa","ORGUNIT":"Jednostka","TITLE":"Stanowisko","ROLE":"Rola","BDAY":"Data urodzin","DESC":"Opis","PHOTO":" ","send_message":"Wyślij wiadomość","get_info":"Pokaż informację","Settings":"Ustawienia","Priority":"Priorytet","Save":"Zapisz","User_settings":"Ustawienia Użytkownika","A_fingerprint_":"Kod służy do autoryzacji Twojego rozmówcy aby potwierdzić jego tożsamość.","Your_roster_is_empty_add_a":"Twoja lista jest pusta, dodaj kontakty ","new_buddy":"Nowy kontakt","is":"jest","Login_options":"opcje logowania","BOSH_url":"Adres BOSH","Domain":"Domena","Resource":"Źródło","On_login":"Na login","Received_an_unencrypted_message":"Zatwierdzono nieszyfrowaną wiadomość.","Sorry_your_buddy_doesnt_provide_any_information":"Twój rozmówca nie posiada żadnych informacji.","Info_about":"Informacja o...","Authentication_aborted":"Autoryzacja anulowana.","Authentication_request_received":"Prośba o autoryzację została przyjęta.","Do_you_want_to_display_them":"Chcesz to wyświetlić?","Log_in_without_chat":"Zaloguj bez komunikatora","has_come_online":"jest teraz dostępny","Unknown_sender":"Nieznany nadawca","You_received_a_message_from_an_unknown_sender":"Masz wiadomość od nieznanego nadawcy.","Please_allow_access_to_microphone_and_camera":"Kliknij \"Potwierdź\" na górze, aby móc korzystać z mikrofonu oraz kamery.","Incoming_call":"Przychodzące połączenie","from":"z","Do_you_want_to_accept_the_call_from":"Akceptujesz połączenie od","Reject":"Odrzuć","Accept":"Zaakceptuj","hang_up":"odbierz","snapshot":"zrób zdjęcie","mute_my_audio":"wycisz dźwięk","pause_my_video":"zatrzymaj moje wideo","fullscreen":"Pełny ekran","Info":"Informacja","Local_IP":"Adres IP","Remote_IP":"Zdalny adres IP","Local_Fingerprint":"Kod lokalny","Remote_Fingerprint":"Zdalny kod","Video_call_not_possible":"Rozmowa wideo jest niemożliwa. Twój rozmówca nie ma możliwości prowadzenia takich rozmów.","Start_video_call":"Rozpocznij rozmowę wideo","Join_chat":"Dołącz do czata","Join":"Dołącz","Room":"Pokój","Nickname":"Nazwa użytkownika","left_the_building":"__nickname__ wyszedł","entered_the_room":"__nickname__ wszedł do pokoju","is_now_known_as":"__oldNickname__ zmienił nazwę na __newNickname__","This_room_is":"Ten pokój jest","muc_hidden":{"keyword":"ukryty","description":"nie można odnaleźć elementów wyszukiwania"},"muc_membersonly":{"keyword":"tylko zalogowani","description":"musisz być członkiem listy"},"muc_moderated":{"keyword":"moderowano","description":"tylko osoby z opcją \"głos\" mogą wysyłać wiadomość"},"muc_nonanonymous":{"keyword":"nie-anonimowy","description":"Twój identyfikator jabber jest widoczny dla wszystkich innych osób"},"muc_open":{"keyword":"otwarty","description":"wszyscy mają pozwolenie aby dołączyć"},"muc_passwordprotected":{"keyword":"ograniczone hasłem","description":"musisz wpisać prawidłowe hasło"},"muc_persistent":{"keyword":"trwale","description":"nie zostaną zniszczone, jeśli ostatnia osoba wyszła"},"muc_public":{"keyword":"publiczny","description":"wyszukawno"},"muc_semianonymous":{"keyword":"pół-anonimowy","description":"Twój identyfikator jabber jest widoczny w pokoju adminów"},"muc_temporary":{"keyword":"tymczasowy","description":"zostanie usunięty jeżeli ostatnia osoba wyjdzie"},"muc_unmoderated":{"keyword":"niemoderowany","description":"wszyscy są uprawnieni do pisania wiadomości"},"muc_unsecured":{"keyword":"niezabezpieczone","description":"nie musisz wpisywać hasła"},"Continue":"Kontynuuj","Server":"Serwer","Rooms_are_loaded":"Pokoje zostały załadowane","Could_load_only":"Nie załadowano __count__ pokoi","muc_explanation":"Aby się zalogować, wpisz nazwę pokoju oraz opcjonalnie nazwę użytkownika i hasło","You_already_joined_this_room":"Już dołączyłeś do tego pokoju","This_room_will_be_closed":"Ten pokój będzie zamknięty","Room_not_found_":"Nowy pokój będzie stworzony","Loading_room_information":"Ładowani informacji o pokoju","Destroy":"Zniszczony","Leave":"Opuść","changed_subject_to":"__nickname__ zmienił temat pokoju na \"__subject__\"","muc_removed_kicked":"Zostałeś wyrzucony z pokoju","muc_removed_info_kicked":"__nickname__ został wyrzucony z pokoju","muc_removed_banned":"Zostałeś zbanowany","muc_removed_info_banned":"__nickname__ został zbanowany","muc_removed_affiliation":"Zostałeś usunięty z pokoju ze względu na zmianę przynależnosci","muc_removed_info_affiliation":"__nickname__ został usunięty z pokoju ze względu na zmianę przynależnosci","muc_removed_membersonly":"Zostałeś usunięty z pokoju ze względu na zmianę pokoju tylko dla członków, a Ty nie jesteś członkiem...","muc_removed_info_membersonly":"__nickname__ został usunięty z pokoju ze względu na zmianę pokoju na tylko dla członków","muc_removed_shutdown":"Zostałeś usunięty z pokoju ze względu na zamknięcie usługi","Reason":"Powód","message_not_send":"Wystąpił błąd i twoja wiadomość nie została wysłana.","message_not_send_item-not-found":"Twoja wiadomość nie została wysłana ponieważ ten pokój nie istnieje","message_not_send_forbidden":"Twoja wiadomość nie została wysłana ponieważ nie masz głosu w tym pokoju","message_not_send_not-acceptable":"Twoja wiadomość nie została wysłana ponieważ nie jesteś właścicielem tego pokoju","This_room_has_been_closed":"Ten pokój został zamknięty","Room_logging_is_enabled":"Logowanie do pokoju jest włączone","A_password_is_required":"Hasło jest wymagane","You_are_not_on_the_member_list":"Nie jesteś na liście członków","You_are_banned_from_this_room":"Zostałeś zbanowany w tym pokoju","Your_desired_nickname_":"Twoja nazwa użytkownika jest już użyta. Spróbuj wybrać inną","The_maximum_number_":"Została osiągnięta maksymalna liczba użytkowników w tym pokoju","This_room_is_locked_":"Ten pokój jest zablokowany","You_are_not_allowed_to_create_":"Nie masz uprawnień do tworzenia pokoju","Carbon_copy":"Do wiadomości","Enable":null}},"pt-BR":{"translation":{"Logging_in":"Entrando...","your_connection_is_unencrypted":"Sua conexão não é encriptada","your_connection_is_encrypted":"Sua conexão é encriptada","your_buddy_closed_the_private_connection":"Seu contato fechou a conexão privada","start_private":"Iniciar conversa privada","close_private":"Fechar conversa privada","your_buddy_is_verificated":"Seu contato está verificado","you_have_only_a_subscription_in_one_way":"Você só tem a inscrição one-way","authentication_query_sent":"Pergunta de autenticação enviada","your_message_wasnt_send_please_end_your_private_conversation":"Sua mensagem não foi enviada. Por favor finalize sua conversa privada","unencrypted_message_received":"Mensagem não encriptada recebida","your_message_wasnt_send_because_you_have_no_valid_subscription":"Sua mensagem não foi enviada porque sua inscrição não é válida","not_available":"Indisponível","no_connection":"Sem conexão!","relogin":"reentrar","trying_to_start_private_conversation":"Tentando iniciar conversa privada","Verified":"Verificado","Unverified":"Não verificado","private_conversation_started":"Conversa privada iniciada.","private_conversation_aborted":"Conversa privada abortada!","your_buddy_closed_the_private_conversation_you_should_do_the_same":"Seu contato encerrou a conversa privada! Você deveria fazer o mesmo.","conversation_is_now_verified":"Conversa verificada.","authentication_failed":"Autenticação falhou.","your_buddy_is_attempting_to_determine_":"Seu contato está tentando determinar se ele realmente está falando contigo.","to_authenticate_to_your_buddy":"Para autenticar seu contato, ","enter_the_answer_and_click_answer":"entre com a resposta e clique em Responder.","enter_the_secret":"escreva a senha.","Creating_your_private_key_":"Criando sua chave privada: isso pode demorar um pouco.","Authenticating_a_buddy_helps_":"Autenticar seu contato ajuda a garantir que a pessoa com a qual você está falando é realmente a pessoa que ela alega ser.","How_do_you_want_to_authenticate_your_buddy":"Como você gostaria de se autenticar {{bid_name}} (<b>{{bid_jid}}</b>)?","Select_method":"Selecione o método...","Manual":"Manual","Question":"Pergunta","Secret":"Senha","To_verify_the_fingerprint_":"Para verificar o fingerprint, entre em contato com seu contato usando outro meio, de preferência seguro, como o telefone.","Your_fingerprint":"Seu fingerprint","Buddy_fingerprint":"Fingerprint do contato","Close":"Fechar","Compared":"Comparado","To_authenticate_using_a_question_":"Para autenticar seu contato faça uma pergunta, mas escolha que só ele saiba a resposta.","Ask":"Pergunta","To_authenticate_pick_a_secret_":"Para autenticar, escolha um segredo que somente você e seu contato saibam.","Compare":"Compare","Fingerprints":"Fingerprints","Authentication":"Autenticação","Message":"Mensagem","Add_buddy":"Adicionar contato","rename_buddy":"renomear contato","delete_buddy":"remover contato","Login":"Entrar","Username":"Usuário","Password":"Senha","Cancel":"Cancelar","Connect":"Conectar","Type_in_the_full_username_":"Digite seu nome completo e um apelido opcional.","Alias":"Apelido","Add":"Adicionar","Subscription_request":"Pedido de inscrição","You_have_a_request_from":"Você tem um pedido de","Deny":"Negar","Approve":"Aprovar","Remove_buddy":"Remover contato","You_are_about_to_remove_":"Você está prestes a remover {{bid_name}} (<b>{{bid_jid}}</b>) de sua lista de contatos. Todas as conversas serão fechadas.","Continue_without_chat":"Continue sem converar","Please_wait":"Por favor aguarde","Login_failed":"Autenticação da conversa falhou","Sorry_we_cant_authentikate_":"A autenticação com o servidor falhou. Talvez seja a senha errada?","Retry":"Voltar","clear_history":"Limpar histórico","New_message_from":"Nova mensagem de","Should_we_notify_you_":"Devemos continuar notificando sobre novas mensagens no futuro?","Please_accept_":"Por favor clique no botão \"Permitir\" na parte superior.","Hide_offline":"Esconder contatos desconectados","Show_offline":"Mostrar contatos desconectados","About":"Sobre","dnd":"Não perturbe","Mute":"Mudo","Unmute":"Ligar","Subscription":"Inscrição","both":"ambos","Status":"Status","online":"online","chat":"conversa","away":"ausente","xa":"ausente por mais tempo","offline":"desativado","none":"nenhum","Unknown_instance_tag":"Marcação desconhecida da instância","Not_one_of_our_latest_keys":"Nenhuma de nossas ultimas chaves.","Received_an_unreadable_encrypted_message":"Mensagem encriptada ilegível foi recebida.","Online":"Online","Chatty":"Tagarela","Away":"Ausente","Extended_away":"Ausente por mais tempo","Offline":"Desativado","Friendship_request":"Pedido de amizade","Confirm":"Confirmar","Dismiss":"Ignorar","Remove":"Remover","Online_help":"Ajuda online","FN":"Nome completo","N":" ","FAMILY":"Sobrenome","GIVEN":"Nome","NICKNAME":"Apelido","URL":"URL","ADR":"Endereço","STREET":"Rua, Av, etc","EXTADD":"Complemento","LOCALITY":"Localidade","REGION":"Região","PCODE":"CEP","CTRY":"País","TEL":"Telefone","NUMBER":"Número","EMAIL":"Email","USERID":" ","ORG":"Empresa","ORGNAME":"Nome","ORGUNIT":"Unidade","TITLE":"Cargo","ROLE":"Rol","BDAY":"Data de nascimento","DESC":"Descrição","PHOTO":" ","send_message":"Enviar mensagem","get_info":"Exibir informações","Settings":"Configurações","Priority":"Prioridade","Save":"Salvar","User_settings":"Configurações do usuário","A_fingerprint_":"O fingerprint é usado para certificar que a pessoa com a qual se está falando é que ela diz ser.","Your_roster_is_empty_add_a":"Sua lista está vazia, adicione um ","new_buddy":"novo contato","is":"é","Login_options":"Opções de login","BOSH_url":"BOSH URL","Domain":"Domínio","Resource":"Recurso","On_login":"Ao autenticar","Received_an_unencrypted_message":"Mensagem não encriptada recebida","Sorry_your_buddy_doesnt_provide_any_information":"Desculpe, seu contato não forneceu nenhuma informação","Info_about":"Informações sobre","Authentication_aborted":"Autenticação encerrada.","Authentication_request_received":"Pedido de autenticação recebido","Do_you_want_to_display_them":"Você quer mostrá-los?","Log_in_without_chat":"Entrar sem conversar","has_come_online":"ficou online","Unknown_sender":"Emissor desconhecido","You_received_a_message_from_an_unknown_sender":"Você recebeu uma mensagem de um emissor desconhecido","Please_allow_access_to_microphone_and_camera":"Por favor clique no botão \"Permitir\" no topo, para conceder acesso ao seu microfone e câmera.","Incoming_call":"Recebendo chamada","from":"de","Do_you_want_to_accept_the_call_from":"Você aceita a chamada de","Reject":"Negar","Accept":"Aceitar","hang_up":"desligar","snapshot":"registrar imagem","mute_my_audio":"mudo","pause_my_video":"pausar vídeo","fullscreen":"tela cheia","Info":"Informações","Local_IP":"IP local","Remote_IP":"IP remoto","Local_Fingerprint":"Fingerprint local","Remote_Fingerprint":"Fingerprint remoto","Video_call_not_possible":"Chamada de vídeo impossível. Seu contato não suporta chamadas desse tipo.","Start_video_call":"Iniciar chamada de vídeo","Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}},"ro":{"translation":{"Logging_in":null,"your_connection_is_unencrypted":null,"your_connection_is_encrypted":null,"your_buddy_closed_the_private_connection":null,"start_private":null,"close_private":null,"your_buddy_is_verificated":null,"you_have_only_a_subscription_in_one_way":null,"authentication_query_sent":null,"your_message_wasnt_send_please_end_your_private_conversation":null,"unencrypted_message_received":null,"your_message_wasnt_send_because_you_have_no_valid_subscription":null,"not_available":null,"no_connection":null,"relogin":null,"trying_to_start_private_conversation":null,"Verified":null,"Unverified":null,"private_conversation_started":null,"private_conversation_aborted":null,"your_buddy_closed_the_private_conversation_you_should_do_the_same":null,"conversation_is_now_verified":null,"authentication_failed":null,"your_buddy_is_attempting_to_determine_":null,"to_authenticate_to_your_buddy":null,"enter_the_answer_and_click_answer":null,"enter_the_secret":null,"Creating_your_private_key_":null,"Authenticating_a_buddy_helps_":null,"How_do_you_want_to_authenticate_your_buddy":null,"Select_method":null,"Manual":null,"Question":null,"Secret":null,"To_verify_the_fingerprint_":null,"Your_fingerprint":null,"Buddy_fingerprint":null,"Close":null,"Compared":null,"To_authenticate_using_a_question_":null,"Ask":null,"To_authenticate_pick_a_secret_":null,"Compare":null,"Fingerprints":null,"Authentication":null,"Message":null,"Add_buddy":null,"rename_buddy":null,"delete_buddy":null,"Login":null,"Username":null,"Password":null,"Cancel":null,"Connect":null,"Type_in_the_full_username_":null,"Alias":null,"Add":null,"Subscription_request":null,"You_have_a_request_from":null,"Deny":null,"Approve":null,"Remove_buddy":null,"You_are_about_to_remove_":null,"Continue_without_chat":null,"Please_wait":null,"Login_failed":null,"Sorry_we_cant_authentikate_":null,"Retry":null,"clear_history":null,"New_message_from":null,"Should_we_notify_you_":null,"Please_accept_":null,"Hide_offline":null,"Show_offline":null,"About":null,"dnd":null,"Mute":null,"Unmute":null,"Subscription":null,"both":null,"Status":null,"online":null,"chat":null,"away":null,"xa":null,"offline":null,"none":null,"Unknown_instance_tag":null,"Not_one_of_our_latest_keys":null,"Received_an_unreadable_encrypted_message":null,"Online":null,"Chatty":null,"Away":null,"Extended_away":null,"Offline":null,"Friendship_request":null,"Confirm":null,"Dismiss":null,"Remove":null,"Online_help":null,"FN":null,"N":null,"FAMILY":null,"GIVEN":null,"NICKNAME":null,"URL":null,"ADR":null,"STREET":null,"EXTADD":null,"LOCALITY":null,"REGION":null,"PCODE":null,"CTRY":null,"TEL":null,"NUMBER":null,"EMAIL":null,"USERID":null,"ORG":null,"ORGNAME":null,"ORGUNIT":null,"TITLE":null,"ROLE":null,"BDAY":null,"DESC":null,"PHOTO":null,"send_message":null,"get_info":null,"Settings":null,"Priority":null,"Save":null,"User_settings":null,"A_fingerprint_":null,"Your_roster_is_empty_add_a":null,"new_buddy":null,"is":null,"Login_options":null,"BOSH_url":null,"Domain":null,"Resource":null,"On_login":null,"Received_an_unencrypted_message":null,"Sorry_your_buddy_doesnt_provide_any_information":null,"Info_about":null,"Authentication_aborted":null,"Authentication_request_received":null,"Do_you_want_to_display_them":null,"Log_in_without_chat":null,"has_come_online":null,"Unknown_sender":null,"You_received_a_message_from_an_unknown_sender":null,"Please_allow_access_to_microphone_and_camera":null,"Incoming_call":null,"from":null,"Do_you_want_to_accept_the_call_from":null,"Reject":null,"Accept":null,"hang_up":null,"snapshot":null,"mute_my_audio":null,"pause_my_video":null,"fullscreen":null,"Info":null,"Local_IP":null,"Remote_IP":null,"Local_Fingerprint":null,"Remote_Fingerprint":null,"Video_call_not_possible":null,"Start_video_call":null,"Join_chat":null,"Join":null,"Room":null,"Nickname":null,"left_the_building":null,"entered_the_room":null,"is_now_known_as":null,"This_room_is":null,"muc_hidden":{"keyword":null,"description":null},"muc_membersonly":{"keyword":null,"description":null},"muc_moderated":{"keyword":null,"description":null},"muc_nonanonymous":{"keyword":null,"description":null},"muc_open":{"keyword":null,"description":null},"muc_passwordprotected":{"keyword":null,"description":null},"muc_persistent":{"keyword":null,"description":null},"muc_public":{"keyword":null,"description":null},"muc_semianonymous":{"keyword":null,"description":null},"muc_temporary":{"keyword":null,"description":null},"muc_unmoderated":{"keyword":null,"description":null},"muc_unsecured":{"keyword":null,"description":null},"Continue":null,"Server":null,"Rooms_are_loaded":null,"Could_load_only":null,"muc_explanation":null,"You_already_joined_this_room":null,"This_room_will_be_closed":null,"Room_not_found_":null,"Loading_room_information":null,"Destroy":null,"Leave":null,"changed_subject_to":null,"muc_removed_kicked":null,"muc_removed_info_kicked":null,"muc_removed_banned":null,"muc_removed_info_banned":null,"muc_removed_affiliation":null,"muc_removed_info_affiliation":null,"muc_removed_membersonly":null,"muc_removed_info_membersonly":null,"muc_removed_shutdown":null,"Reason":null,"message_not_send":null,"message_not_send_item-not-found":null,"message_not_send_forbidden":null,"message_not_send_not-acceptable":null,"This_room_has_been_closed":null,"Room_logging_is_enabled":null,"A_password_is_required":null,"You_are_not_on_the_member_list":null,"You_are_banned_from_this_room":null,"Your_desired_nickname_":null,"The_maximum_number_":null,"This_room_is_locked_":null,"You_are_not_allowed_to_create_":null,"Carbon_copy":null,"Enable":null}}}; \ No newline at end of file
diff --git a/doc/global.html b/doc/global.html
new file mode 100644
index 00000000..310c3233
--- /dev/null
+++ b/doc/global.html
@@ -0,0 +1,236 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Global</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Global</h1>
+
+
+
+
+
+<section>
+
+<header>
+ <h2>
+
+ </h2>
+
+</header>
+
+<article>
+ <div class="container-overview">
+
+
+
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <h3 class="subsection-title">Type Definitions</h3>
+
+ <dl>
+
+<dt>
+ <h4 class="name" id="getUsers-cb"><span class="type-signature"></span>getUsers-cb<span class="signature">(list)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Processes user list.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>list</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">object</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">List of users, key: username, value: alias</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line153">line 153</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+ </dl>
+
+
+
+</article>
+
+</section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html> \ No newline at end of file
diff --git a/doc/index.html b/doc/index.html
index e7cb9d71..1d01ae32 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -48,13 +48,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.gui.dialog.html b/doc/jsxc.gui.dialog.html
index b7986761..8ea39b2f 100644
--- a/doc/jsxc.gui.dialog.html
+++ b/doc/jsxc.gui.dialog.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2384">line 2384</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1576">line 1576</a>
</li></ul></dd>
@@ -141,7 +141,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2450">line 2450</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1642">line 1642</a>
</li></ul></dd>
@@ -361,7 +361,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2399">line 2399</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1591">line 1591</a>
</li></ul></dd>
@@ -500,7 +500,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2460">line 2460</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1652">line 1652</a>
</li></ul></dd>
@@ -541,13 +541,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.gui.html b/doc/jsxc.gui.html
index a1dad097..019a7d98 100644
--- a/doc/jsxc.gui.html
+++ b/doc/jsxc.gui.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line893">line 893</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1">line 1</a>
</li></ul></dd>
@@ -153,7 +153,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line900">line 900</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line8">line 8</a>
</li></ul></dd>
@@ -289,7 +289,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1867">line 1867</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1021">line 1021</a>
</li></ul></dd>
@@ -401,7 +401,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1941">line 1941</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1095">line 1095</a>
</li></ul></dd>
@@ -518,7 +518,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1191">line 1191</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line297">line 297</a>
</li></ul></dd>
@@ -609,7 +609,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line942">line 942</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line50">line 50</a>
</li></ul></dd>
@@ -721,7 +721,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1926">line 1926</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1080">line 1080</a>
</li></ul></dd>
@@ -833,7 +833,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1162">line 1162</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line268">line 268</a>
</li></ul></dd>
@@ -902,7 +902,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1573">line 1573</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line712">line 712</a>
</li></ul></dd>
@@ -1019,7 +1019,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1521">line 1521</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line660">line 660</a>
</li></ul></dd>
@@ -1154,7 +1154,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1402">line 1402</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line508">line 508</a>
</li></ul></dd>
@@ -1223,7 +1223,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1530">line 1530</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line669">line 669</a>
</li></ul></dd>
@@ -1404,7 +1404,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1554">line 1554</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line693">line 693</a>
</li></ul></dd>
@@ -1551,7 +1551,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1440">line 1440</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line546">line 546</a>
</li></ul></dd>
@@ -1620,7 +1620,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1586">line 1586</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line725">line 725</a>
</li></ul></dd>
@@ -1737,7 +1737,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1283">line 1283</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line389">line 389</a>
</li></ul></dd>
@@ -1806,7 +1806,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1247">line 1247</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line353">line 353</a>
</li></ul></dd>
@@ -1923,7 +1923,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1481">line 1481</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line620">line 620</a>
</li></ul></dd>
@@ -2010,7 +2010,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1827">line 1827</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line966">line 966</a>
</li></ul></dd>
@@ -2127,7 +2127,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1614">line 1614</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line753">line 753</a>
</li></ul></dd>
@@ -2244,7 +2244,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1292">line 1292</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line398">line 398</a>
</li></ul></dd>
@@ -2313,7 +2313,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line835">line 835</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line837">line 837</a>
</li></ul></dd>
@@ -2430,7 +2430,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1509">line 1509</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line648">line 648</a>
</li></ul></dd>
@@ -2517,7 +2517,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1202">line 1202</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line308">line 308</a>
</li></ul></dd>
@@ -2634,7 +2634,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line990">line 990</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line98">line 98</a>
</li></ul></dd>
@@ -2746,7 +2746,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1913">line 1913</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1067">line 1067</a>
</li></ul></dd>
@@ -2863,7 +2863,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1006">line 1006</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line114">line 114</a>
</li></ul></dd>
@@ -3026,7 +3026,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1082">line 1082</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line186">line 186</a>
</li></ul></dd>
@@ -3161,7 +3161,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1889">line 1889</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1043">line 1043</a>
</li></ul></dd>
@@ -3230,7 +3230,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1146">line 1146</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line252">line 252</a>
</li></ul></dd>
@@ -3271,13 +3271,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.gui.queryActions.html b/doc/jsxc.gui.queryActions.html
index 92376dd4..1fb873dc 100644
--- a/doc/jsxc.gui.queryActions.html
+++ b/doc/jsxc.gui.queryActions.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line902">line 902</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line10">line 10</a>
</li></ul></dd>
@@ -141,7 +141,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line909">line 909</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line17">line 17</a>
</li></ul></dd>
@@ -210,7 +210,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line918">line 918</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line26">line 26</a>
</li></ul></dd>
@@ -279,7 +279,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line923">line 923</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line31">line 31</a>
</li></ul></dd>
@@ -348,7 +348,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line932">line 932</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line40">line 40</a>
</li></ul></dd>
@@ -389,13 +389,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.gui.roster.html b/doc/jsxc.gui.roster.html
index e5912c98..38d05846 100644
--- a/doc/jsxc.gui.roster.html
+++ b/doc/jsxc.gui.roster.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2019">line 2019</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1197">line 1197</a>
</li></ul></dd>
@@ -93,6 +93,64 @@
+ <h3 class="subsection-title">Members</h3>
+
+ <dl>
+
+<dt>
+ <h4 class="name" id="ready"><span class="type-signature">&lt;static> </span>ready<span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+ <div class="description">
+ True if roster is initialised
+ </div>
+
+
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1205">line 1205</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+</dd>
+
+ </dl>
+
<h3 class="subsection-title">Methods</h3>
@@ -212,7 +270,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2309">line 2309</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1496">line 1496</a>
</li></ul></dd>
@@ -347,7 +405,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2133">line 2133</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1320">line 1320</a>
</li></ul></dd>
@@ -416,7 +474,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2370">line 2370</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1562">line 1562</a>
</li></ul></dd>
@@ -485,7 +543,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2032">line 2032</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1213">line 1213</a>
</li></ul></dd>
@@ -644,7 +702,7 @@ alphabetical of the name
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2196">line 2196</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1383">line 1383</a>
</li></ul></dd>
@@ -731,7 +789,7 @@ alphabetical of the name
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2357">line 2357</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1547">line 1547</a>
</li></ul></dd>
@@ -848,7 +906,7 @@ alphabetical of the name
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2248">line 2248</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1435">line 1435</a>
</li></ul></dd>
@@ -965,7 +1023,7 @@ alphabetical of the name
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2239">line 2239</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1426">line 1426</a>
</li></ul></dd>
@@ -1104,7 +1162,7 @@ alphabetical of the name
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2269">line 2269</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1456">line 1456</a>
</li></ul></dd>
@@ -1239,7 +1297,7 @@ alphabetical of the name
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2229">line 2229</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1416">line 1416</a>
</li></ul></dd>
@@ -1374,7 +1432,7 @@ alphabetical of the name
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2332">line 2332</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1522">line 1522</a>
</li></ul></dd>
@@ -1415,13 +1473,13 @@ alphabetical of the name
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.gui.template.html b/doc/jsxc.gui.template.html
index e99ed97f..bd6fb525 100644
--- a/doc/jsxc.gui.template.html
+++ b/doc/jsxc.gui.template.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3001">line 3001</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line2242">line 2242</a>
</li></ul></dd>
@@ -109,13 +109,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.gui.window.html b/doc/jsxc.gui.window.html
index 8aa58a7b..0cccd422 100644
--- a/doc/jsxc.gui.window.html
+++ b/doc/jsxc.gui.window.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2465">line 2465</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1664">line 1664</a>
</li></ul></dd>
@@ -189,7 +189,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2701">line 2701</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1906">line 1906</a>
</li></ul></dd>
@@ -306,7 +306,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2781">line 2781</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1986">line 1986</a>
</li></ul></dd>
@@ -470,7 +470,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2882">line 2882</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line2090">line 2090</a>
</li></ul></dd>
@@ -587,7 +587,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2749">line 2749</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1954">line 1954</a>
</li></ul></dd>
@@ -722,7 +722,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2995">line 2995</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line2236">line 2236</a>
</li></ul></dd>
@@ -857,7 +857,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2676">line 2676</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1881">line 1881</a>
</li></ul></dd>
@@ -974,7 +974,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2632">line 2632</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1837">line 1837</a>
</li></ul></dd>
@@ -1113,7 +1113,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2770">line 2770</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1975">line 1975</a>
</li></ul></dd>
@@ -1230,7 +1230,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2792">line 2792</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1997">line 1997</a>
</li></ul></dd>
@@ -1347,7 +1347,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2478">line 2478</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1677">line 1677</a>
</li></ul></dd>
@@ -1405,8 +1405,8 @@
<div class="description">
- Open a window, related to the bid. If the window doesn't exist, it will
-be created.
+ Open a window, related to the bid. If the window doesn't exist, it will be
+created.
</div>
@@ -1487,7 +1487,7 @@ be created.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2643">line 2643</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1848">line 1848</a>
</li></ul></dd>
@@ -1537,7 +1537,7 @@ be created.
<dt>
- <h4 class="name" id="postMessage"><span class="type-signature">&lt;static> </span>postMessage<span class="signature">(bid, direction, msg, encrypted, forwarded, stamp)</span><span class="type-signature"></span></h4>
+ <h4 class="name" id="postMessage"><span class="type-signature">&lt;static> </span>postMessage<span class="signature">(bid, direction, msg, encrypted, forwarded, stamp, sender)</span><span class="type-signature"></span></h4>
</dt>
@@ -1715,6 +1715,29 @@ be created.
</tr>
+
+ <tr>
+
+ <td class="name"><code>sender</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">object</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Information about sender</td>
+ </tr>
+
+
</tbody>
</table>
@@ -1723,6 +1746,80 @@ be created.
<dl class="details">
+ <h5 class="subsection-title">Properties:</h5>
+
+ <dl>
+
+<table class="props">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>sender.jid</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Sender Jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>sender.name</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Sender name or nickname</td>
+ </tr>
+
+
+ </tbody>
+</table></dl>
+
+
+
@@ -1742,7 +1839,7 @@ be created.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2831">line 2831</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line2039">line 2039</a>
</li></ul></dd>
@@ -1859,7 +1956,7 @@ be created.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2980">line 2980</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line2221">line 2221</a>
</li></ul></dd>
@@ -1994,7 +2091,7 @@ be created.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2807">line 2807</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line2012">line 2012</a>
</li></ul></dd>
@@ -2134,7 +2231,7 @@ be created.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2970">line 2970</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line2211">line 2211</a>
</li></ul></dd>
@@ -2269,7 +2366,7 @@ be created.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2736">line 2736</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1941">line 1941</a>
</li></ul></dd>
@@ -2386,7 +2483,7 @@ be created.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line2714">line 2714</a>
+ <a href="jsxc.lib.gui.js.html">jsxc.lib.gui.js</a>, <a href="jsxc.lib.gui.js.html#line1919">line 1919</a>
</li></ul></dd>
@@ -2427,13 +2524,13 @@ be created.
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.html b/doc/jsxc.html
index 48ced803..33b03b68 100644
--- a/doc/jsxc.html
+++ b/doc/jsxc.html
@@ -64,7 +64,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line6">line 6</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line1">line 1</a>
</li></ul></dd>
@@ -95,7 +95,7 @@
<dt><a href="namespaces.html#jsxc.gui"><a href="jsxc.gui.html">gui</a></a></dt>
<dd></dd>
- <dt><a href="namespaces.html#jsxc.l10n"><a href="jsxc.l10n.html">l10n</a></a></dt>
+ <dt><a href="namespaces.html#jsxc.muc"><a href="jsxc.muc.html">muc</a></a></dt>
<dd></dd>
<dt><a href="namespaces.html#jsxc.notification"><a href="jsxc.notification.html">notification</a></a></dt>
@@ -160,7 +160,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line64">line 64</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line59">line 59</a>
</li></ul></dd>
@@ -214,7 +214,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line67">line 67</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line62">line 62</a>
</li></ul></dd>
@@ -268,7 +268,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line34">line 34</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line29">line 29</a>
</li></ul></dd>
@@ -322,7 +322,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line174">line 174</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line169">line 169</a>
</li></ul></dd>
@@ -376,7 +376,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line52">line 52</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line47">line 47</a>
</li></ul></dd>
@@ -430,7 +430,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line16">line 16</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line11">line 11</a>
</li></ul></dd>
@@ -484,7 +484,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5688">line 5688</a>
+ <a href="jsxc.lib.notice.js.html">jsxc.lib.notice.js</a>, <a href="jsxc.lib.notice.js.html#line7">line 7</a>
</li></ul></dd>
@@ -538,7 +538,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line37">line 37</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line32">line 32</a>
</li></ul></dd>
@@ -592,7 +592,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line40">line 40</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line35">line 35</a>
</li></ul></dd>
@@ -646,7 +646,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line19">line 19</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line14">line 14</a>
</li></ul></dd>
@@ -701,7 +701,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line58">line 58</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line53">line 53</a>
</li></ul></dd>
@@ -755,7 +755,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line22">line 22</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line17">line 17</a>
</li></ul></dd>
@@ -809,7 +809,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line25">line 25</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line20">line 20</a>
</li></ul></dd>
@@ -863,7 +863,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line28">line 28</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line23">line 23</a>
</li></ul></dd>
@@ -917,7 +917,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line31">line 31</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line26">line 26</a>
</li></ul></dd>
@@ -971,7 +971,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line61">line 61</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line56">line 56</a>
</li></ul></dd>
@@ -1025,7 +1025,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line43">line 43</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line38">line 38</a>
</li></ul></dd>
@@ -1079,7 +1079,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line46">line 46</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line41">line 41</a>
</li></ul></dd>
@@ -1133,7 +1133,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line49">line 49</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line44">line 44</a>
</li></ul></dd>
@@ -1187,7 +1187,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line13">line 13</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line8">line 8</a>
</li></ul></dd>
@@ -1252,7 +1252,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line430">line 430</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line435">line 435</a>
</li></ul></dd>
@@ -1321,7 +1321,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line474">line 474</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line480">line 480</a>
</li></ul></dd>
@@ -1484,7 +1484,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line121">line 121</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line116">line 116</a>
</li></ul></dd>
@@ -1601,7 +1601,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line532">line 532</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line538">line 538</a>
</li></ul></dd>
@@ -1759,7 +1759,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line169">line 169</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line164">line 164</a>
</li></ul></dd>
@@ -1828,7 +1828,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line634">line 634</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line640">line 640</a>
</li></ul></dd>
@@ -1968,7 +1968,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line726">line 726</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line735">line 735</a>
</li></ul></dd>
@@ -2095,7 +2095,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line94">line 94</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line89">line 89</a>
</li></ul></dd>
@@ -2133,6 +2133,236 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt>
+ <h4 class="name" id="hasFocus"><span class="type-signature">&lt;static> </span>hasFocus<span class="signature">()</span><span class="type-signature"> &rarr; {boolean}</span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Checks if tab has focus.
+ </div>
+
+
+
+
+
+
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line711">line 711</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+ <h5>Returns:</h5>
+
+
+<div class="param-desc">
+ True if tabs has focus
+</div>
+
+
+
+<dl>
+ <dt>
+ Type
+ </dt>
+ <dd>
+
+<span class="param-type">boolean</span>
+
+
+ </dd>
+</dl>
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="hashStr"><span class="type-signature">&lt;static> </span>hashStr<span class="signature">(str)</span><span class="type-signature"> &rarr; {integer}</span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Hash string into 32-bit signed integer.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>str</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">input string</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line755">line 755</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+ <h5>Returns:</h5>
+
+
+<div class="param-desc">
+ 32-bit signed integer
+</div>
+
+
+
+<dl>
+ <dt>
+ Type
+ </dt>
+ <dd>
+
+<span class="param-type">integer</span>
+
+
+ </dd>
+</dl>
+
+
+
+
+</dd>
+
+
+
+<dt>
<h4 class="name" id="init"><span class="type-signature">&lt;static> </span>init<span class="signature">(options)</span><span class="type-signature"></span></h4>
@@ -2222,7 +2452,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line182">line 182</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line177">line 177</a>
</li></ul></dd>
@@ -2291,7 +2521,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line677">line 677</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line683">line 683</a>
</li></ul></dd>
@@ -2425,7 +2655,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line557">line 557</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line563">line 563</a>
</li></ul></dd>
@@ -2552,7 +2782,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line542">line 542</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line548">line 548</a>
</li></ul></dd>
@@ -2643,7 +2873,7 @@ workaround) 0: conform, 1: not conform, 2: not shure
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line491">line 491</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line497">line 497</a>
</li></ul></dd>
@@ -2713,7 +2943,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line503">line 503</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line509">line 509</a>
</li></ul></dd>
@@ -2782,7 +3012,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line404">line 404</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line409">line 409</a>
</li></ul></dd>
@@ -2851,7 +3081,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line389">line 389</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line394">line 394</a>
</li></ul></dd>
@@ -2920,7 +3150,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line333">line 333</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line338">line 338</a>
</li></ul></dd>
@@ -3047,7 +3277,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line522">line 522</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line528">line 528</a>
</li></ul></dd>
@@ -3181,7 +3411,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line646">line 646</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line652">line 652</a>
</li></ul></dd>
@@ -3260,7 +3490,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line564">line 564</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line570">line 570</a>
</li></ul></dd>
@@ -3329,7 +3559,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line585">line 585</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line591">line 591</a>
</li></ul></dd>
@@ -3398,7 +3628,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line484">line 484</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line490">line 490</a>
</li></ul></dd>
@@ -3467,7 +3697,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line615">line 615</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line621">line 621</a>
</li></ul></dd>
@@ -3607,7 +3837,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line657">line 657</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line663">line 663</a>
</li></ul></dd>
@@ -3657,145 +3887,6 @@ normal signal
<dt>
- <h4 class="name" id="translate"><span class="type-signature">&lt;static> </span>translate<span class="signature">(text)</span><span class="type-signature"> &rarr; {String}</span></h4>
-
-
-</dt>
-<dd>
-
-
- <div class="description">
- Replace %%tokens%% with correct translation.
- </div>
-
-
-
-
-
-
-
- <h5>Parameters:</h5>
-
-
-<table class="params">
- <thead>
- <tr>
-
- <th>Name</th>
-
-
- <th>Type</th>
-
-
-
-
-
- <th class="last">Description</th>
- </tr>
- </thead>
-
- <tbody>
-
-
- <tr>
-
- <td class="name"><code>text</code></td>
-
-
- <td class="type">
-
-
-<span class="param-type">String</span>
-
-
-
- </td>
-
-
-
-
-
- <td class="description last">Given text</td>
- </tr>
-
-
- </tbody>
-</table>
-
-
-
-<dl class="details">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <dt class="tag-source">Source:</dt>
- <dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line706">line 706</a>
- </li></ul></dd>
-
-
-
-
-
-
-
-</dl>
-
-
-
-
-
-
-
-
-
-
-
- <h5>Returns:</h5>
-
-
-<div class="param-desc">
- Translated string
-</div>
-
-
-
-<dl>
- <dt>
- Type
- </dt>
- <dd>
-
-<span class="param-type">String</span>
-
-
- </dd>
-</dl>
-
-
-
-
-</dd>
-
-
-
-<dt>
<h4 class="name" id="warn"><span class="type-signature">&lt;static> </span>warn<span class="signature">(msg, data)</span><span class="type-signature"></span></h4>
@@ -3908,7 +3999,7 @@ normal signal
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line158">line 158</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line153">line 153</a>
</li></ul></dd>
@@ -3949,13 +4040,13 @@ normal signal
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:13 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.lib.gui.js.html b/doc/jsxc.lib.gui.js.html
new file mode 100644
index 00000000..bfbd4bd9
--- /dev/null
+++ b/doc/jsxc.lib.gui.js.html
@@ -0,0 +1,2564 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Source: jsxc.lib.gui.js</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Source: jsxc.lib.gui.js</h1>
+
+
+
+
+
+ <section>
+ <article>
+ <pre class="prettyprint source"><code>/**
+ * Handle functions for chat window's and buddylist
+ *
+ * @namespace jsxc.gui
+ */
+jsxc.gui = {
+ /** Smilie token to file mapping */
+ emotions: [ [ 'O:-) O:)', 'angel' ], [ '>:-( >:( &gt;:-( &gt;:(', 'angry' ], [ ':-) :)', 'smile' ], [ ':-D :D', 'grin' ], [ ':-( :(', 'sad' ], [ ';-) ;)', 'wink' ], [ ':-P :P', 'tonguesmile' ], [ '=-O', 'surprised' ], [ ':kiss: :-*', 'kiss' ], [ '8-) :cool:', 'sunglassess' ], [ ':\'-( :\'( :&amp;apos;-(', 'crysad' ], [ ':-/', 'doubt' ], [ ':-X :X', 'zip' ], [ ':yes:', 'thumbsup' ], [ ':no:', 'thumbsdown' ], [ ':beer:', 'beer' ], [ ':devil:', 'devil' ], [ ':kiss: :kissing:', 'kissing' ], [ '@->-- :rose: @-&gt;--', 'rose' ], [ ':music:', 'music' ], [ ':love:', 'love' ], [ ':zzz:', 'tired' ] ],
+
+ /**
+ * Different uri query actions as defined in XEP-0147.
+ *
+ * @namespace jsxc.gui.queryActions
+ */
+ queryActions: {
+ /** xmpp:JID?message[;body=TEXT] */
+ message: function(jid, params) {
+ var win = jsxc.gui.window.open(jsxc.jidToBid(jid));
+
+ if (params && typeof params.body === 'string') {
+ win.find('.jsxc_textinput').val(params.body);
+ }
+ },
+
+ /** xmpp:JID?remove */
+ remove: function(jid) {
+ jsxc.gui.showRemoveDialog(jsxc.jidToBid(jid));
+ },
+
+ /** xmpp:JID?subscribe[;name=NAME] */
+ subscribe: function(jid, params) {
+ jsxc.gui.showContactDialog(jid);
+
+ if (params && typeof params.name) {
+ $('#jsxc_alias').val(params.name);
+ }
+ },
+
+ /** xmpp:JID?vcard */
+ vcard: function(jid) {
+ jsxc.gui.showVcard(jid);
+ }
+ },
+
+ /**
+ * Creates application skeleton.
+ *
+ * @memberOf jsxc.gui
+ */
+ init: function() {
+ // Prevent duplicate windowList
+ if ($('#jsxc_windowList').length > 0) {
+ return;
+ }
+
+ $('body').append($(jsxc.gui.template.get('windowList')));
+
+ $(window).resize(jsxc.gui.updateWindowListSB);
+ $('#jsxc_windowList').resize(jsxc.gui.updateWindowListSB);
+
+ $('#jsxc_windowListSB .jsxc_scrollLeft').click(function() {
+ jsxc.gui.scrollWindowListBy(-200);
+ });
+ $('#jsxc_windowListSB .jsxc_scrollRight').click(function() {
+ jsxc.gui.scrollWindowListBy(200);
+ });
+ $('#jsxc_windowList').on('wheel', function(ev) {
+ if ($('#jsxc_windowList').data('isOver')) {
+ jsxc.gui.scrollWindowListBy((ev.originalEvent.wheelDelta > 0) ? 200 : -200);
+ }
+ });
+
+ jsxc.gui.tooltip('#jsxc_windowList');
+
+ if (!jsxc.el_exists('#jsxc_roster')) {
+ jsxc.gui.roster.init();
+ }
+
+ // prepare regexp for emotions
+ $.each(jsxc.gui.emotions, function(i, val) {
+ // escape characters
+ var reg = val[0].replace(/(\/|\||\*|\.|\+|\?|\^|\$|\(|\)|\[|\]|\{|\})/g, '\\$1');
+ reg = '(' + reg.split(' ').join('|') + ')';
+ jsxc.gui.emotions[i][2] = new RegExp(reg, 'g');
+ });
+
+ // We need this often, so we creates some template jquery objects
+ jsxc.gui.windowTemplate = $(jsxc.gui.template.get('chatWindow'));
+ jsxc.gui.buddyTemplate = $(jsxc.gui.template.get('rosterBuddy'));
+ },
+
+ /**
+ * Init tooltip plugin for given jQuery selector.
+ *
+ * @param {String} selector jQuery selector
+ * @memberOf jsxc.gui
+ */
+ tooltip: function(selector) {
+ $(selector).tooltip({
+ show: {
+ delay: 600
+ },
+ content: function() {
+ return $(this).attr('title').replace(/\n/g, '&lt;br />');
+ }
+ });
+ },
+
+ /**
+ * Updates Information in roster and chatbar
+ *
+ * @param {String} bid bar jid
+ */
+ update: function(bid) {
+ var data = jsxc.storage.getUserItem('buddy', bid);
+
+ if (!data) {
+ jsxc.debug('No data for ' + bid);
+ return;
+ }
+
+ var ri = jsxc.gui.roster.getItem(bid); // roster item from user
+ var we = jsxc.gui.window.get(bid); // window element from user
+ var ue = ri.add(we); // both
+ var spot = $('.jsxc_spot[data-bid="' + bid + '"]');
+
+ // Attach data to corresponding roster item
+ ri.data(data);
+
+ // Add online status
+ ue.add(spot).removeClass('jsxc_' + jsxc.CONST.STATUS.join(' jsxc_')).addClass('jsxc_' + jsxc.CONST.STATUS[data.status]);
+
+ // Change name and add title
+ ue.find('.jsxc_name:first').add(spot).text(data.name).attr('title', $.t('is') + ' ' + jsxc.CONST.STATUS[data.status]);
+
+ // Update gui according to encryption state
+ switch (data.msgstate) {
+ case 0:
+ we.find('.jsxc_transfer').removeClass('jsxc_enc jsxc_fin').attr('title', $.t('your_connection_is_unencrypted'));
+ we.find('.jsxc_settings .jsxc_verification').addClass('jsxc_disabled');
+ we.find('.jsxc_settings .jsxc_transfer').text($.t('start_private'));
+ break;
+ case 1:
+ we.find('.jsxc_transfer').addClass('jsxc_enc').attr('title', $.t('your_connection_is_encrypted'));
+ we.find('.jsxc_settings .jsxc_verification').removeClass('jsxc_disabled');
+ we.find('.jsxc_settings .jsxc_transfer').text($.t('close_private'));
+ break;
+ case 2:
+ we.find('.jsxc_settings .jsxc_verification').addClass('jsxc_disabled');
+ we.find('.jsxc_transfer').removeClass('jsxc_enc').addClass('jsxc_fin').attr('title', $.t('your_buddy_closed_the_private_connection'));
+ we.find('.jsxc_settings .jsxc_transfer').text($.t('close_private'));
+ break;
+ }
+
+ // update gui according to verification state
+ if (data.trust) {
+ we.find('.jsxc_transfer').addClass('jsxc_trust').attr('title', $.t('your_buddy_is_verificated'));
+ } else {
+ we.find('.jsxc_transfer').removeClass('jsxc_trust');
+ }
+
+ // update gui according to subscription state
+ if (data.sub && data.sub !== 'both') {
+ ue.addClass('jsxc_oneway');
+ } else {
+ ue.removeClass('jsxc_oneway');
+ }
+
+ var info = '&lt;b>' + Strophe.getBareJidFromJid(data.jid) + '&lt;/b>\n';
+ info += $.t('Subscription') + ': ' + $.t(data.sub) + '\n';
+ info += $.t('Status') + ': ' + $.t(jsxc.CONST.STATUS[data.status]);
+
+ ri.find('.jsxc_name').attr('title', info);
+
+ jsxc.gui.updateAvatar(ri.add(we.find('.jsxc_bar')), data.jid, data.avatar);
+ },
+
+ /**
+ * Update avatar on all given elements.
+ *
+ * @memberOf jsxc.gui
+ * @param {jQuery} el Elements with subelement .jsxc_avatar
+ * @param {string} jid Jid
+ * @param {string} aid Avatar id (sha1 hash of image)
+ */
+ updateAvatar: function(el, jid, aid) {
+
+ var setAvatar = function(src) {
+ if (src === 0 || src === '0') {
+ if (typeof jsxc.options.defaultAvatar === 'function') {
+ jsxc.options.defaultAvatar.call(el, jid);
+ return;
+ }
+ jsxc.gui.avatarPlaceholder(el.find('.jsxc_avatar'), jid);
+ return;
+ }
+
+ el.find('.jsxc_avatar').removeAttr('style');
+
+ el.find('.jsxc_avatar').css({
+ 'background-image': 'url(' + src + ')',
+ 'text-indent': '999px'
+ });
+ };
+
+ if (typeof aid === 'undefined') {
+ setAvatar(0);
+ return;
+ }
+
+ var avatarSrc = jsxc.storage.getUserItem('avatar', aid);
+
+ if (avatarSrc !== null) {
+ setAvatar(avatarSrc);
+ } else {
+ jsxc.xmpp.conn.vcard.get(function(stanza) {
+ jsxc.debug('vCard', stanza);
+
+ var vCard = $(stanza).find("vCard > PHOTO");
+ var src;
+
+ if (vCard.length === 0) {
+ jsxc.debug('No photo provided');
+ src = '0';
+ } else if (vCard.find('EXTVAL').length > 0) {
+ src = vCard.find('EXTVAL').text();
+ } else {
+ var img = vCard.find('BINVAL').text();
+ var type = vCard.find('TYPE').text();
+ src = 'data:' + type + ';base64,' + img;
+ }
+
+ // concat chunks
+ src = src.replace(/[\t\r\n\f]/gi, '');
+
+ jsxc.storage.setUserItem('avatar', aid, src);
+ setAvatar(src);
+ }, Strophe.getBareJidFromJid(jid), function(msg) {
+ jsxc.warn('Could not load vcard.', msg);
+
+ jsxc.storage.setUserItem('avatar', aid, 0);
+ setAvatar(0);
+ });
+ }
+ },
+
+ /**
+ * Updates scrollbar handlers.
+ *
+ * @memberOf jsxc.gui
+ */
+ updateWindowListSB: function() {
+
+ if ($('#jsxc_windowList>ul').width() > $('#jsxc_windowList').width()) {
+ $('#jsxc_windowListSB > div').removeClass('jsxc_disabled');
+ } else {
+ $('#jsxc_windowListSB > div').addClass('jsxc_disabled');
+ $('#jsxc_windowList>ul').css('right', '0px');
+ }
+ },
+
+ /**
+ * Scroll window list by offset.
+ *
+ * @memberOf jsxc.gui
+ * @param offset
+ */
+ scrollWindowListBy: function(offset) {
+
+ var scrollWidth = $('#jsxc_windowList>ul').width();
+ var width = $('#jsxc_windowList').width();
+ var el = $('#jsxc_windowList>ul');
+ var right = parseInt(el.css('right')) - offset;
+ var padding = $("#jsxc_windowListSB").width();
+
+ if (scrollWidth &lt; width) {
+ return;
+ }
+
+ if (right > 0) {
+ right = 0;
+ }
+
+ if (right &lt; width - scrollWidth - padding) {
+ right = width - scrollWidth - padding;
+ }
+
+ el.css('right', right + 'px');
+ },
+
+ /**
+ * Returns the window element
+ *
+ * @param {String} bid
+ * @returns {jquery} jQuery object of the window element
+ */
+ getWindow: function(bid) {
+ jsxc.warn('jsxc.gui.getWindow is deprecated!');
+
+ return jsxc.gui.window.get(bid);
+ },
+
+ /**
+ * Toggle list with timeout, like menu or settings
+ *
+ * @memberof jsxc.gui
+ */
+ toggleList: function() {
+ var self = $(this);
+
+ self.disableSelection();
+
+ var ul = self.find('ul');
+ var slideUp = null;
+
+ slideUp = function() {
+ ul.slideUp({
+ complete: function() {
+ self.removeClass('jsxc_opened');
+ }
+ });
+
+ $('body').off('click', null, slideUp);
+ };
+
+ $(this).click(function() {
+
+ if (ul.is(":hidden")) {
+ // hide other lists
+ $('body').click();
+ $('body').one('click', slideUp);
+ } else {
+ $('body').off('click', null, slideUp);
+ }
+
+ ul.slideToggle();
+
+ window.clearTimeout(ul.data('timer'));
+
+ self.toggleClass('jsxc_opened');
+
+ return false;
+ }).mouseleave(function() {
+ ul.data('timer', window.setTimeout(slideUp, 2000));
+ }).mouseenter(function() {
+ window.clearTimeout(ul.data('timer'));
+ });
+ },
+
+ /**
+ * Creates and show loginbox
+ */
+ showLoginBox: function() {
+ // Set focus to password field
+ $(document).on("complete.dialog.jsxc", function() {
+ $('#jsxc_password').focus();
+ });
+
+ jsxc.gui.dialog.open(jsxc.gui.template.get('loginBox'));
+
+ $('#jsxc_dialog').find('form').submit(function() {
+
+ $(this).find('input[type=submit]').prop('disabled', true);
+
+ jsxc.options.loginForm.form = $(this);
+ jsxc.options.loginForm.jid = $(this).find('#jsxc_username');
+ jsxc.options.loginForm.pass = $(this).find('#jsxc_password');
+
+ var settings = jsxc.prepareLogin();
+
+ jsxc.triggeredFromBox = true;
+ jsxc.options.loginForm.triggered = false;
+
+ if (settings === false) {
+ jsxc.gui.showAuthFail();
+ } else {
+ jsxc.xmpp.login();
+ }
+
+ return false;
+ });
+ },
+
+ /**
+ * Creates and show the fingerprint dialog
+ *
+ * @param {String} bid
+ */
+ showFingerprints: function(bid) {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('fingerprintsDialog', bid));
+ },
+
+ /**
+ * Creates and show the verification dialog
+ *
+ * @param {String} bid
+ */
+ showVerification: function(bid) {
+
+ // Check if there is a open dialog
+ if ($('#jsxc_dialog').length > 0) {
+ setTimeout(function() {
+ jsxc.gui.showVerification(bid);
+ }, 3000);
+ return;
+ }
+
+ // verification only possible if the connection is encrypted
+ if (jsxc.storage.getUserItem('buddy', bid).msgstate !== OTR.CONST.MSGSTATE_ENCRYPTED) {
+ jsxc.warn('Connection not encrypted');
+ return;
+ }
+
+ jsxc.gui.dialog.open(jsxc.gui.template.get('authenticationDialog', bid));
+
+ // Add handler
+
+ $('#jsxc_dialog > div:gt(0)').hide();
+ $('#jsxc_dialog select').change(function() {
+ $('#jsxc_dialog > div:gt(0)').hide();
+ $('#jsxc_dialog > div:eq(' + $(this).prop('selectedIndex') + ')').slideDown({
+ complete: function() {
+ jsxc.gui.dialog.resize();
+ }
+ });
+ });
+
+ // Manual
+ $('#jsxc_dialog > div:eq(1) a.creation').click(function() {
+ if (jsxc.master) {
+ jsxc.otr.objects[bid].trust = true;
+ }
+
+ jsxc.storage.updateUserItem('buddy', bid, 'trust', true);
+
+ jsxc.gui.dialog.close();
+
+ jsxc.storage.updateUserItem('buddy', bid, 'trust', true);
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('conversation_is_now_verified'));
+ jsxc.gui.update(bid);
+ });
+
+ // Question
+ $('#jsxc_dialog > div:eq(2) a.creation').click(function() {
+ var div = $('#jsxc_dialog > div:eq(2)');
+ var sec = div.find('#jsxc_secret2').val();
+ var quest = div.find('#jsxc_quest').val();
+
+ if (sec === '' || quest === '') {
+ // Add information for the user which form is missing
+ div.find('input[value=""]').addClass('jsxc_invalid').keyup(function() {
+ if ($(this).val().match(/.*/)) {
+ $(this).removeClass('jsxc_invalid');
+ }
+ });
+ return;
+ }
+
+ if (jsxc.master) {
+ jsxc.otr.sendSmpReq(bid, sec, quest);
+ } else {
+ jsxc.storage.setUserItem('smp_' + bid, {
+ sec: sec,
+ quest: quest
+ });
+ }
+
+ jsxc.gui.dialog.close();
+
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('authentication_query_sent'));
+ });
+
+ // Secret
+ $('#jsxc_dialog > div:eq(3) .creation').click(function() {
+ var div = $('#jsxc_dialog > div:eq(3)');
+ var sec = div.find('#jsxc_secret').val();
+
+ if (sec === '') {
+ // Add information for the user which form is missing
+ div.find('#jsxc_secret').addClass('jsxc_invalid').keyup(function() {
+ if ($(this).val().match(/.*/)) {
+ $(this).removeClass('jsxc_invalid');
+ }
+ });
+ return;
+ }
+
+ if (jsxc.master) {
+ jsxc.otr.sendSmpReq(bid, sec);
+ } else {
+ jsxc.storage.setUserItem('smp_' + bid, {
+ sec: sec,
+ quest: null
+ });
+ }
+
+ jsxc.gui.dialog.close();
+
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('authentication_query_sent'));
+ });
+ },
+
+ /**
+ * Create and show approve dialog
+ *
+ * @param {type} from valid jid
+ */
+ showApproveDialog: function(from) {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('approveDialog'), {
+ 'noClose': true
+ });
+
+ $('#jsxc_dialog .jsxc_their_jid').text(Strophe.getBareJidFromJid(from));
+
+ $('#jsxc_dialog .jsxc_deny').click(function(ev) {
+ ev.stopPropagation();
+
+ jsxc.xmpp.resFriendReq(from, false);
+
+ jsxc.gui.dialog.close();
+ });
+
+ $('#jsxc_dialog .jsxc_approve').click(function(ev) {
+ ev.stopPropagation();
+
+ var data = jsxc.storage.getUserItem('buddy', jsxc.jidToBid(from));
+
+ jsxc.xmpp.resFriendReq(from, true);
+
+ // If friendship is not mutual show contact dialog
+ if (!data || data.sub === 'from') {
+ $(document).one('close.dialog.jsxc', function() {
+ jsxc.gui.showContactDialog(from);
+ });
+ }
+
+ jsxc.gui.dialog.close();
+ });
+ },
+
+ /**
+ * Create and show dialog to add a buddy
+ *
+ * @param {string} [username] jabber id
+ */
+ showContactDialog: function(username) {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('contactDialog'));
+
+ // If we got a friendship request, we would display the username in our
+ // response
+ if (username) {
+ $('#jsxc_username').val(username);
+ }
+
+ $('#jsxc_username').keyup(function() {
+ if (typeof jsxc.options.getUsers === 'function') {
+ var val = $(this).val();
+ $('#jsxc_userlist').empty();
+
+ if (val !== '') {
+ jsxc.options.getUsers.call(this, val, function(list) {
+ $.each(list || {}, function(uid, displayname) {
+ var option = $('&lt;option>');
+ option.attr('data-username', uid);
+ option.attr('data-alias', displayname);
+
+ option.attr('value', uid).appendTo('#jsxc_userlist');
+
+ if (uid !== displayname) {
+ option.clone().attr('value', displayname).appendTo('#jsxc_userlist');
+ }
+ });
+ });
+ }
+ }
+ });
+
+ $('#jsxc_username').on('input', function() {
+ var val = $(this).val();
+ var option = $('#jsxc_userlist').find('option[data-username="' + val + '"], option[data-alias="' + val + '"]');
+
+ if (option.length > 0) {
+ $('#jsxc_username').val(option.attr('data-username'));
+ $('#jsxc_alias').val(option.attr('data-alias'));
+ }
+ });
+
+ $('#jsxc_dialog form').submit(function() {
+ var username = $('#jsxc_username').val();
+ var alias = $('#jsxc_alias').val();
+
+ if (!username.match(/@(.*)$/)) {
+ username += '@' + Strophe.getDomainFromJid(jsxc.storage.getItem('jid'));
+ }
+
+ // Check if the username is valid
+ if (!username || !username.match(jsxc.CONST.REGEX.JID)) {
+ // Add notification
+ $('#jsxc_username').addClass('jsxc_invalid').keyup(function() {
+ if ($(this).val().match(jsxc.CONST.REGEX.JID)) {
+ $(this).removeClass('jsxc_invalid');
+ }
+ });
+ return false;
+ }
+ jsxc.xmpp.addBuddy(username, alias);
+
+ jsxc.gui.dialog.close();
+
+ return false;
+ });
+ },
+
+ /**
+ * Create and show dialog to remove a buddy
+ *
+ * @param {type} bid
+ * @returns {undefined}
+ */
+ showRemoveDialog: function(bid) {
+
+ jsxc.gui.dialog.open(jsxc.gui.template.get('removeDialog', bid));
+
+ var data = jsxc.storage.getUserItem('buddy', bid);
+
+ $('#jsxc_dialog .creation').click(function(ev) {
+ ev.stopPropagation();
+
+ if (jsxc.master) {
+ jsxc.xmpp.removeBuddy(data.jid);
+ } else {
+ // inform master
+ jsxc.storage.setUserItem('deletebuddy', bid, {
+ jid: data.jid
+ });
+ }
+
+ jsxc.gui.dialog.close();
+ });
+ },
+
+ /**
+ * Create and show a wait dialog
+ *
+ * @param {type} msg message to display to the user
+ * @returns {undefined}
+ */
+ showWaitAlert: function(msg) {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('waitAlert', null, msg), {
+ 'noClose': true
+ });
+ },
+
+ /**
+ * Create and show a wait dialog
+ *
+ * @param {type} msg message to display to the user
+ * @returns {undefined}
+ */
+ showAlert: function(msg) {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('alert', null, msg));
+ },
+
+ /**
+ * Create and show a auth fail dialog
+ *
+ * @returns {undefined}
+ */
+ showAuthFail: function() {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('authFailDialog'));
+
+ if (jsxc.options.loginForm.triggered !== false) {
+ $('#jsxc_dialog .jsxc_cancel').hide();
+ }
+
+ $('#jsxc_dialog .creation').click(function() {
+ jsxc.gui.dialog.close();
+ });
+
+ $('#jsxc_dialog .jsxc_cancel').click(function() {
+ jsxc.submitLoginForm();
+ });
+ },
+
+ /**
+ * Create and show a confirm dialog
+ *
+ * @param {String} msg Message
+ * @param {function} confirm
+ * @param {function} dismiss
+ * @returns {undefined}
+ */
+ showConfirmDialog: function(msg, confirm, dismiss) {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('confirmDialog', null, msg), {
+ noClose: true
+ });
+
+ if (confirm) {
+ $('#jsxc_dialog .creation').click(confirm);
+ }
+
+ if (dismiss) {
+ $('#jsxc_dialog .jsxc_cancel').click(dismiss);
+ }
+ },
+
+ /**
+ * Show about dialog.
+ *
+ * @memberOf jsxc.gui
+ */
+ showAboutDialog: function() {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('aboutDialog'));
+
+ $('#jsxc_dialog .jsxc_debuglog').click(function() {
+ jsxc.gui.showDebugLog();
+ });
+ },
+
+ /**
+ * Show debug log.
+ *
+ * @memberOf jsxc.gui
+ */
+ showDebugLog: function() {
+ var userInfo = '&lt;h3>User information&lt;/h3>';
+
+ if (navigator) {
+ var key;
+ for (key in navigator) {
+ if (navigator.hasOwnProperty(key) && typeof navigator[key] === 'string') {
+ userInfo += '&lt;b>' + key + ':&lt;/b> ' + navigator[key] + '&lt;br />';
+ }
+ }
+ }
+
+ if (window.screen) {
+ userInfo += '&lt;b>Height:&lt;/b> ' + window.screen.height + '&lt;br />';
+ userInfo += '&lt;b>Width:&lt;/b> ' + window.screen.width + '&lt;br />';
+ }
+
+ userInfo += '&lt;b>jsxc version:&lt;/b> ' + jsxc.version + '&lt;br />';
+
+ jsxc.gui.dialog.open('&lt;div class="jsxc_log">' + userInfo + '&lt;h3>Log&lt;/h3>&lt;pre>' + jsxc.escapeHTML(jsxc.log) + '&lt;/pre>&lt;/div>');
+ },
+
+ /**
+ * Show vCard of user with the given bar jid.
+ *
+ * @memberOf jsxc.gui
+ * @param {String} jid
+ */
+ showVcard: function(jid) {
+ var bid = jsxc.jidToBid(jid);
+ jsxc.gui.dialog.open(jsxc.gui.template.get('vCard', bid));
+
+ var data = jsxc.storage.getUserItem('buddy', bid);
+
+ if (data) {
+ // Display resources and corresponding information
+ var i, j, res, identities, identity = null, cap, client;
+ for (i = 0; i &lt; data.res.length; i++) {
+ res = data.res[i];
+
+ identities = [];
+ cap = jsxc.xmpp.getCapabilitiesByJid(bid + '/' + res);
+
+ if (cap !== null && cap.identities !== null) {
+ identities = cap.identities;
+ }
+
+ client = '';
+ for (j = 0; j &lt; identities.length; j++) {
+ identity = identities[j];
+ if (identity.category === 'client') {
+ if (client !== '') {
+ client += ',\n';
+ }
+
+ client += identity.name + ' (' + identity.type + ')';
+ }
+ }
+
+ var status = jsxc.storage.getUserItem('res', bid)[res];
+
+ $('#jsxc_dialog ul.jsxc_vCard').append('&lt;li class="jsxc_sep">&lt;strong>' + $.t('Resource') + ':&lt;/strong> ' + res + '&lt;/li>');
+ $('#jsxc_dialog ul.jsxc_vCard').append('&lt;li>&lt;strong>' + $.t('Client') + ':&lt;/strong> ' + client + '&lt;/li>');
+ $('#jsxc_dialog ul.jsxc_vCard').append('&lt;li>&lt;strong>' + $.t('Status') + ':&lt;/strong> ' + $.t(jsxc.CONST.STATUS[status]) + '&lt;/li>');
+ }
+ }
+
+ var printProp = function(el, depth) {
+ var content = '';
+
+ el.each(function() {
+ var item = $(this);
+ var children = $(this).children();
+
+ content += '&lt;li>';
+
+ var prop = $.t(item[0].tagName);
+
+ if (prop !== ' ') {
+ content += '&lt;strong>' + prop + ':&lt;/strong> ';
+ }
+
+ if (item[0].tagName === 'PHOTO') {
+
+ } else if (children.length > 0) {
+ content += '&lt;ul>';
+ content += printProp(children, depth + 1);
+ content += '&lt;/ul>';
+ } else if (item.text() !== '') {
+ content += jsxc.escapeHTML(item.text());
+ }
+
+ content += '&lt;/li>';
+
+ if (depth === 0 && $('#jsxc_dialog ul.jsxc_vCard').length > 0) {
+ if ($('#jsxc_dialog ul.jsxc_vCard li.jsxc_sep:first').length > 0) {
+ $('#jsxc_dialog ul.jsxc_vCard li.jsxc_sep:first').before(content);
+ } else {
+ $('#jsxc_dialog ul.jsxc_vCard').append(content);
+ }
+ content = '';
+ }
+ });
+
+ if (depth > 0) {
+ return content;
+ }
+ };
+
+ var failedToLoad = function() {
+ if ($('#jsxc_dialog ul.jsxc_vCard').length === 0) {
+ return;
+ }
+
+ $('#jsxc_dialog p').remove();
+
+ var content = '&lt;p>';
+ content += $.t('Sorry_your_buddy_doesnt_provide_any_information');
+ content += '&lt;/p>';
+
+ $('#jsxc_dialog').append(content);
+ };
+
+ jsxc.xmpp.loadVcard(bid, function(stanza) {
+
+ if ($('#jsxc_dialog ul.jsxc_vCard').length === 0) {
+ return;
+ }
+
+ $('#jsxc_dialog p').remove();
+
+ var photo = $(stanza).find("vCard > PHOTO");
+
+ if (photo.length > 0) {
+ var img = photo.find('BINVAL').text();
+ var type = photo.find('TYPE').text();
+ var src = 'data:' + type + ';base64,' + img;
+
+ if (photo.find('EXTVAL').length > 0) {
+ src = photo.find('EXTVAL').text();
+ }
+
+ // concat chunks
+ src = src.replace(/[\t\r\n\f]/gi, '');
+
+ var img_el = $('&lt;img class="jsxc_vCard" alt="avatar" />');
+ img_el.attr('src', src);
+
+ $('#jsxc_dialog h3').before(img_el);
+ }
+
+ if ($(stanza).find('vCard').length === 0 || ($(stanza).find('vcard > *').length === 1 && photo.length === 1)) {
+ failedToLoad();
+ return;
+ }
+
+ printProp($(stanza).find('vcard > *'), 0);
+
+ }, failedToLoad);
+ },
+
+ showSettings: function() {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('settings'));
+
+ if (jsxc.options.get('xmpp').overwrite === 'false' || jsxc.options.get('xmpp').overwrite === false) {
+ $('.jsxc_fieldsetXmpp').hide();
+ }
+
+ $('#jsxc_dialog form').each(function() {
+ var self = $(this);
+
+ self.find('input[type!="submit"]').each(function() {
+ var id = this.id.split("-");
+ var prop = id[0];
+ var key = id[1];
+ var type = this.type;
+
+ var data = jsxc.options.get(prop);
+
+ if (data && typeof data[key] !== 'undefined') {
+ if (type === 'checkbox') {
+ if (data[key] !== 'false' && data[key] !== false) {
+ this.checked = 'checked';
+ }
+ } else {
+ $(this).val(data[key]);
+ }
+ }
+ });
+ });
+
+ $('#jsxc_dialog form').submit(function() {
+
+ var self = $(this);
+ var data = {};
+
+ self.find('input[type!="submit"]').each(function() {
+ var id = this.id.split("-");
+ var prop = id[0];
+ var key = id[1];
+ var val;
+ var type = this.type;
+
+ if (type === 'checkbox') {
+ val = this.checked;
+ } else {
+ val = $(this).val();
+ }
+
+ if (!data[prop]) {
+ data[prop] = {};
+ }
+
+ data[prop][key] = val;
+ });
+
+ $.each(data, function(key, val) {
+ jsxc.options.set(key, val);
+ });
+
+ var err = jsxc.options.saveSettinsPermanent.call(this, data);
+
+ if (typeof self.attr('data-onsubmit') === 'string') {
+ jsxc.exec(self.attr('data-onsubmit'), [ err ]);
+ }
+
+ setTimeout(function() {
+ self.find('input[type="submit"]').effect('highlight', {
+ color: (err) ? 'green' : 'red'
+ }, 4000);
+ }, 200);
+
+ return false;
+ });
+ },
+
+ /**
+ * Show prompt for notification permission.
+ *
+ * @memberOf jsxc.gui
+ */
+ showRequestNotification: function() {
+
+ jsxc.switchEvents({
+ 'notificationready.jsxc': function() {
+ jsxc.gui.dialog.close();
+ jsxc.notification.init();
+ jsxc.storage.setUserItem('notification', 1);
+ },
+ 'notificationfailure.jsxc': function() {
+ jsxc.gui.dialog.close();
+ jsxc.options.notification = false;
+ jsxc.storage.setUserItem('notification', 0);
+ }
+ });
+
+ jsxc.gui.showConfirmDialog($.t('Should_we_notify_you_'), function() {
+ jsxc.gui.dialog.open(jsxc.gui.template.get('pleaseAccept'), {
+ noClose: true
+ });
+
+ jsxc.notification.requestPermission();
+ }, function() {
+ $(document).trigger('notificationfailure.jsxc');
+ });
+ },
+
+ showUnknownSender: function(bid) {
+ var confirmationText = $.t('You_received_a_message_from_an_unknown_sender') + ' (' + bid + '). ' + $.t('Do_you_want_to_display_them');
+ jsxc.gui.showConfirmDialog(confirmationText, function() {
+
+ jsxc.gui.dialog.close();
+
+ jsxc.storage.saveBuddy(bid, {
+ jid: bid,
+ name: bid,
+ status: 0,
+ sub: 'none',
+ res: []
+ });
+
+ jsxc.gui.window.open(bid);
+
+ }, function() {
+ // reset state
+ jsxc.storage.removeUserItem('chat', bid);
+ });
+ },
+
+ /**
+ * Change own presence to pres.
+ *
+ * @memberOf jsxc.gui
+ * @param pres {CONST.STATUS} New presence state
+ * @param external {boolean} True if triggered from other tab.
+ */
+ changePresence: function(pres, external) {
+
+ if (external !== true) {
+ jsxc.storage.setUserItem('presence', pres);
+ }
+
+ if (jsxc.master) {
+ jsxc.xmpp.sendPres();
+ }
+
+ $('#jsxc_presence > span').text($('#jsxc_presence > ul .jsxc_' + pres).text());
+
+ jsxc.gui.updatePresence('own', pres);
+ },
+
+ /**
+ * Update all presence objects for given user.
+ *
+ * @memberOf jsxc.gui
+ * @param bid bar jid of user.
+ * @param {CONST.STATUS} pres New presence state.
+ */
+ updatePresence: function(bid, pres) {
+
+ if (bid === 'own') {
+ if (pres === 'dnd') {
+ $('#jsxc_menu .jsxc_muteNotification').addClass('jsxc_disabled');
+ jsxc.notification.muteSound(true);
+ } else {
+ $('#jsxc_menu .jsxc_muteNotification').removeClass('jsxc_disabled');
+
+ if (!jsxc.options.get('muteNotification')) {
+ jsxc.notification.unmuteSound(true);
+ }
+ }
+ }
+
+ $('.jsxc_presence[data-bid="' + bid + '"]').removeClass('jsxc_' + jsxc.CONST.STATUS.join(' jsxc_')).addClass('jsxc_' + pres);
+ },
+
+ /**
+ * Switch read state to UNread.
+ *
+ * @memberOf jsxc.gui
+ * @param bid
+ */
+ unreadMsg: function(bid) {
+ var win = jsxc.gui.window.get(bid);
+
+ jsxc.gui.roster.getItem(bid).add(win).addClass('jsxc_unreadMsg');
+ jsxc.storage.updateUserItem('window', bid, 'unread', true);
+ },
+
+ /**
+ * Switch read state to read.
+ *
+ * @memberOf jsxc.gui
+ * @param bid
+ */
+ readMsg: function(bid) {
+ var win = jsxc.gui.window.get(bid);
+
+ if (win.hasClass('jsxc_unreadMsg')) {
+ jsxc.gui.roster.getItem(bid).add(win).removeClass('jsxc_unreadMsg');
+ jsxc.storage.updateUserItem('window', bid, 'unread', false);
+ }
+ },
+
+ /**
+ * This function searches for URI scheme according to XEP-0147.
+ *
+ * @memberOf jsxc.gui
+ * @param container In which element should we search?
+ */
+ detectUriScheme: function(container) {
+ container = (container) ? $(container) : $('body');
+
+ container.find("a[href^='xmpp:']").each(function() {
+
+ var element = $(this);
+ var href = element.attr('href').replace(/^xmpp:/, '');
+ var jid = href.split('?')[0];
+ var action, params = {};
+
+ if (href.indexOf('?') &lt; 0) {
+ action = 'message';
+ } else {
+ var pairs = href.substring(href.indexOf('?') + 1).split(';');
+ action = pairs[0];
+
+ var i, key, value;
+ for (i = 1; i &lt; pairs.length; i++) {
+ key = pairs[i].split('=')[0];
+ value = (pairs[i].indexOf('=') > 0) ? pairs[i].substring(pairs[i].indexOf('=') + 1) : null;
+
+ params[decodeURIComponent(key)] = decodeURIComponent(value);
+ }
+ }
+
+ if (typeof jsxc.gui.queryActions[action] === 'function') {
+ element.addClass('jsxc_uriScheme jsxc_uriScheme_' + action);
+
+ element.off('click').click(function(ev) {
+ ev.stopPropagation();
+
+ jsxc.gui.queryActions[action].call(jsxc, jid, params);
+
+ return false;
+ });
+ }
+ });
+ },
+
+ detectEmail: function(container) {
+ container = (container) ? $(container) : $('body');
+
+ container.find('a[href^="mailto:"]').each(function() {
+ var spot = $("&lt;span>X&lt;/span>").addClass("jsxc_spot");
+ var href = $(this).attr("href").replace(/^ *mailto:/, "").trim();
+
+ if (href !== '' && href !== Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))) {
+ var bid = jsxc.jidToBid(href);
+ var self = $(this);
+ var s = self.prev();
+
+ if (!s.hasClass('jsxc_spot')) {
+ s = spot.clone().attr('data-bid', bid);
+
+ self.before(s);
+ }
+
+ s.off('click');
+
+ if (jsxc.storage.getUserItem('buddy', bid)) {
+ jsxc.gui.update(bid);
+ s.click(function() {
+ jsxc.gui.window.open(bid);
+
+ return false;
+ });
+ } else {
+ s.click(function() {
+ jsxc.gui.showContactDialog(href);
+
+ return false;
+ });
+ }
+ }
+ });
+ },
+
+ avatarPlaceholder: function(el, seed, text) {
+ text = text || seed;
+
+ var options = jsxc.options.get('avatarplaceholder') || {};
+ var hash = jsxc.hashStr(seed);
+
+ var hue = Math.abs(hash) % 360;
+ var saturation = options.saturation || 90;
+ var lightness = options.lightness || 65;
+
+ el.css({
+ 'background-color': 'hsl(' + hue + ', ' + saturation + '%, ' + lightness + '%)',
+ 'color': '#fff',
+ 'font-weight': 'bold',
+ 'text-align': 'center',
+ 'line-height': el.height() + 'px',
+ 'font-size': el.height() * 0.6 + 'px'
+ });
+
+ if (typeof text === 'string' && text.length > 0) {
+ el.text(text[0].toUpperCase());
+ }
+ }
+};
+
+/**
+ * Handle functions related to the gui of the roster
+ *
+ * @namespace jsxc.gui.roster
+ */
+jsxc.gui.roster = {
+
+ /** True if roster is initialised */
+ ready: false,
+
+ /**
+ * Init the roster skeleton
+ *
+ * @memberOf jsxc.gui.roster
+ * @returns {undefined}
+ */
+ init: function() {
+ $(jsxc.options.rosterAppend + ':first').append($(jsxc.gui.template.get('roster')));
+
+ if (jsxc.options.get('hideOffline')) {
+ $('#jsxc_menu .jsxc_hideOffline').text($.t('Show_offline'));
+ $('#jsxc_buddylist').addClass('jsxc_hideOffline');
+ }
+
+ $('#jsxc_menu .jsxc_settings').click(function() {
+ jsxc.gui.showSettings();
+ });
+
+ $('#jsxc_menu .jsxc_hideOffline').click(function() {
+ var hideOffline = !jsxc.options.get('hideOffline');
+
+ if (hideOffline) {
+ $('#jsxc_buddylist').addClass('jsxc_hideOffline');
+ } else {
+ $('#jsxc_buddylist').removeClass('jsxc_hideOffline');
+ }
+
+ $(this).text(hideOffline ? $.t('Show_offline') : $.t('Hide_offline'));
+
+ jsxc.options.set('hideOffline', hideOffline);
+ });
+
+ if (jsxc.options.get('muteNotification')) {
+ jsxc.notification.muteSound();
+ }
+
+ $('#jsxc_menu .jsxc_muteNotification').click(function() {
+
+ if (jsxc.storage.getUserItem('presence') === 'dnd') {
+ return;
+ }
+
+ // invert current choice
+ var mute = !jsxc.options.get('muteNotification');
+
+ if (mute) {
+ jsxc.notification.muteSound();
+ } else {
+ jsxc.notification.unmuteSound();
+ }
+ });
+
+ $('#jsxc_roster .jsxc_addBuddy').click(function() {
+ jsxc.gui.showContactDialog();
+ });
+
+ $('#jsxc_roster .jsxc_onlineHelp').click(function() {
+ window.open("http://www.jsxc.org/manual.html", "onlineHelp");
+ });
+
+ $('#jsxc_roster .jsxc_about').click(function() {
+ jsxc.gui.showAboutDialog();
+ });
+
+ $('#jsxc_toggleRoster').click(function() {
+ jsxc.gui.roster.toggle();
+ });
+
+ $('#jsxc_presence > ul > li').click(function() {
+ var self = $(this);
+ var pres = self.data('pres');
+
+ if (pres === 'offline') {
+ jsxc.xmpp.logout(false);
+ } else {
+ jsxc.gui.changePresence(pres);
+ }
+ });
+
+ $('#jsxc_buddylist').slimScroll({
+ distance: '3px',
+ height: ($('#jsxc_roster').height() - 31) + 'px',
+ width: $('#jsxc_buddylist').width() + 'px',
+ color: '#fff',
+ opacity: '0.5'
+ });
+
+ $('#jsxc_roster > .jsxc_bottom > div').each(function() {
+ jsxc.gui.toggleList.call($(this));
+ });
+
+ if (jsxc.storage.getUserItem('roster') === 'hidden') {
+ $('#jsxc_roster').css('right', '-200px');
+ $('#jsxc_windowList > ul').css('paddingRight', '10px');
+ }
+
+ var pres = jsxc.storage.getUserItem('presence') || 'online';
+ $('#jsxc_presence > span').text($('#jsxc_presence > ul .jsxc_' + pres).text());
+ jsxc.gui.updatePresence('own', pres);
+
+ jsxc.gui.tooltip('#jsxc_roster');
+
+ jsxc.notice.load();
+
+ jsxc.gui.roster.ready = true;
+ $(document).trigger('ready.roster.jsxc');
+ },
+
+ /**
+ * Create roster item and add it to the roster
+ *
+ * @param {String} bid bar jid
+ */
+ add: function(bid) {
+ var data = jsxc.storage.getUserItem('buddy', bid);
+ var bud = jsxc.gui.buddyTemplate.clone().attr('data-bid', bid).attr('data-type', data.type || 'chat');
+
+ jsxc.gui.roster.insert(bid, bud);
+
+ bud.click(function() {
+ jsxc.gui.window.open(bid);
+ });
+
+ bud.find('.jsxc_chaticon').click(function() {
+ jsxc.gui.window.open(bid);
+ });
+
+ bud.find('.jsxc_rename').click(function() {
+ jsxc.gui.roster.rename(bid);
+ return false;
+ });
+
+ bud.find('.jsxc_delete').click(function() {
+ jsxc.gui.showRemoveDialog(bid);
+ return false;
+ });
+
+ var expandClick = function() {
+ bud.trigger('extra.jsxc');
+
+ bud.toggleClass('jsxc_expand');
+
+ jsxc.gui.updateAvatar(bud, data.jid, data.avatar);
+ return false;
+ };
+
+ bud.find('.jsxc_control').click(expandClick);
+ bud.dblclick(expandClick);
+
+ bud.find('.jsxc_vcardicon').click(function() {
+ jsxc.gui.showVcard(data.jid);
+ return false;
+ });
+
+ jsxc.gui.update(bid);
+
+ // update scrollbar
+ $('#jsxc_buddylist').slimScroll({
+ scrollTo: '0px'
+ });
+
+ $(document).trigger('add.roster.jsxc', [ bid, data, bud ]);
+ },
+
+ getItem: function(bid) {
+ return $("#jsxc_buddylist > li[data-bid='" + bid + "']");
+ },
+
+ /**
+ * Insert roster item. First order: online > away > offline. Second order:
+ * alphabetical of the name
+ *
+ * @param {type} bid
+ * @param {jquery} li roster item which should be insert
+ * @returns {undefined}
+ */
+ insert: function(bid, li) {
+
+ var data = jsxc.storage.getUserItem('buddy', bid);
+ var listElements = $('#jsxc_buddylist > li');
+ var insert = false;
+
+ // Insert buddy with no mutual friendship to the end
+ var status = (data.sub === 'both') ? data.status : -1;
+
+ listElements.each(function() {
+
+ var thisStatus = ($(this).data('sub') === 'both') ? $(this).data('status') : -1;
+
+ if (($(this).data('name').toLowerCase() > data.name.toLowerCase() && thisStatus === status) || thisStatus &lt; status) {
+
+ $(this).before(li);
+ insert = true;
+
+ return false;
+ }
+ });
+
+ if (!insert) {
+ li.appendTo('#jsxc_buddylist');
+ }
+ },
+
+ /**
+ * Initiate reorder of roster item
+ *
+ * @param {type} bid
+ * @returns {undefined}
+ */
+ reorder: function(bid) {
+ jsxc.gui.roster.insert(bid, jsxc.gui.roster.remove(bid));
+ },
+
+ /**
+ * Removes buddy from roster
+ *
+ * @param {String} bid bar jid
+ * @return {JQueryObject} Roster list element
+ */
+ remove: function(bid) {
+ return jsxc.gui.roster.getItem(bid).detach();
+ },
+
+ /**
+ * Removes buddy from roster and clean up
+ *
+ * @param {String} bid bar compatible jid
+ */
+ purge: function(bid) {
+ if (jsxc.master) {
+ jsxc.storage.removeUserItem('buddy', bid);
+ jsxc.storage.removeUserItem('otr', bid);
+ jsxc.storage.removeUserItem('otr_version_' + bid);
+ jsxc.storage.removeUserItem('chat', bid);
+ jsxc.storage.removeUserItem('window', bid);
+ jsxc.storage.removeUserElement('buddylist', bid);
+ jsxc.storage.removeUserElement('windowlist', bid);
+ }
+
+ jsxc.gui.window._close(bid);
+ jsxc.gui.roster.remove(bid);
+ },
+
+ /**
+ * Create input element for rename action
+ *
+ * @param {type} bid
+ * @returns {undefined}
+ */
+ rename: function(bid) {
+ var name = jsxc.gui.roster.getItem(bid).find('.jsxc_name');
+ var options = jsxc.gui.roster.getItem(bid).find('.jsxc_options, .jsxc_control');
+ var input = $('&lt;input type="text" name="name"/>');
+
+ options.hide();
+ name = name.replaceWith(input);
+
+ input.val(name.text());
+ input.keypress(function(ev) {
+ if (ev.which !== 13) {
+ return;
+ }
+
+ options.show();
+ input.replaceWith(name);
+ jsxc.gui.roster._rename(bid, $(this).val());
+
+ $('html').off('click');
+ });
+
+ // Disable html click event, if click on input
+ input.click(function() {
+ return false;
+ });
+
+ $('html').one('click', function() {
+ options.show();
+ input.replaceWith(name);
+ jsxc.gui.roster._rename(bid, input.val());
+ });
+ },
+
+ /**
+ * Rename buddy
+ *
+ * @param {type} bid
+ * @param {type} newname new name of buddy
+ * @returns {undefined}
+ */
+ _rename: function(bid, newname) {
+ if (jsxc.master) {
+ var d = jsxc.storage.getUserItem('buddy', bid);
+
+ if (d.type === 'chat') {
+ var iq = $iq({
+ type: 'set'
+ }).c('query', {
+ xmlns: 'jabber:iq:roster'
+ }).c('item', {
+ jid: Strophe.getBareJidFromJid(d.jid),
+ name: newname
+ });
+ jsxc.xmpp.conn.sendIQ(iq);
+ }
+ }
+
+ jsxc.storage.updateUserItem('buddy', bid, 'name', newname);
+ jsxc.gui.update(bid);
+ },
+
+ /**
+ * Toogle complete roster
+ *
+ * @param {Integer} d Duration in ms
+ */
+ toggle: function(d) {
+ var duration = d || 500;
+
+ var roster = $('#jsxc_roster');
+ var wl = $('#jsxc_windowList');
+
+ var roster_width = roster.innerWidth();
+ var roster_right = parseFloat($('#jsxc_roster').css('right'));
+ var state = (roster_right &lt; 0) ? 'shown' : 'hidden';
+
+ jsxc.storage.setUserItem('roster', state);
+
+ roster.animate({
+ right: ((roster_width + roster_right) * -1) + 'px'
+ }, duration);
+ wl.animate({
+ right: (10 - roster_right) + 'px'
+ }, duration);
+
+ $(document).trigger('toggle.roster.jsxc', [ state, duration ]);
+ },
+
+ /**
+ * Shows a text with link to a login box that no connection exists.
+ */
+ noConnection: function() {
+ $('#jsxc_roster').addClass('jsxc_noConnection');
+
+ $('#jsxc_buddylist').empty();
+
+ $('#jsxc_roster').append($('&lt;p>' + $.t('no_connection') + '&lt;/p>').append(' &lt;a>' + $.t('relogin') + '&lt;/a>').click(function() {
+ jsxc.gui.showLoginBox();
+ }));
+ },
+
+ /**
+ * Shows a text with link to add a new buddy.
+ *
+ * @memberOf jsxc.gui.roster
+ */
+ empty: function() {
+ var text = $('&lt;p>' + $.t('Your_roster_is_empty_add_a') + '&lt;/p>');
+ var link = $('&lt;a>' + $.t('new_buddy') + '&lt;/a>');
+
+ link.click(function() {
+ jsxc.gui.showContactDialog();
+ });
+ text.append(link);
+ text.append('.');
+
+ $('#jsxc_roster').prepend(text);
+ }
+};
+
+/**
+ * Wrapper for dialog
+ *
+ * @namespace jsxc.gui.dialog
+ */
+jsxc.gui.dialog = {
+ /**
+ * Open a Dialog.
+ *
+ * @memberOf jsxc.gui.dialog
+ * @param {String} data Data of the dialog
+ * @param {Object} [o] Options for the dialog
+ * @param {Boolean} [o.noClose] If true, hide all default close options
+ * @returns {jQuery} Dialog object
+ */
+ open: function(data, o) {
+
+ var opt = o || {};
+
+ // default options
+ var options = {};
+ options = {
+ onComplete: function() {
+ $('#jsxc_dialog .jsxc_close').click(function(ev) {
+ ev.preventDefault();
+
+ jsxc.gui.dialog.close();
+ });
+
+ // workaround for old colorbox version (used by firstrunwizard)
+ if (options.closeButton === false) {
+ $('#cboxClose').hide();
+ }
+
+ jsxc.gui.dialog.resize();
+
+ $(document).trigger('complete.dialog.jsxc');
+ },
+ onClosed: function() {
+ $(document).trigger('close.dialog.jsxc');
+ },
+ onCleanup: function() {
+ $(document).trigger('cleanup.dialog.jsxc');
+ },
+ opacity: 0.5
+ };
+
+ if (opt.noClose) {
+ options.overlayClose = false;
+ options.escKey = false;
+ options.closeButton = false;
+ delete opt.noClose;
+ }
+
+ $.extend(options, opt);
+
+ options.html = '&lt;div id="jsxc_dialog">' + data + '&lt;/div>';
+
+ $.colorbox(options);
+
+ return $('#jsxc_dialog');
+ },
+
+ /**
+ * Close current dialog.
+ */
+ close: function() {
+ jsxc.debug('close dialog');
+ $.colorbox.close();
+ },
+
+ /**
+ * Resizes current dialog.
+ *
+ * @param {Object} options e.g. width and height
+ */
+ resize: function(options) {
+ options = $.extend({
+ innerWidth: $('#jsxc_dialog').outerWidth(),
+ innerHeight: $('#jsxc_dialog').outerHeight()
+ }, options || {});
+
+ $('#cboxLoadedContent').css('overflow', 'hidden');
+
+ $.colorbox.resize(options);
+ }
+};
+
+/**
+ * Handle functions related to the gui of the window
+ *
+ * @namespace jsxc.gui.window
+ */
+jsxc.gui.window = {
+ /**
+ * Init a window skeleton
+ *
+ * @memberOf jsxc.gui.window
+ * @param {String} bid
+ * @returns {jQuery} Window object
+ */
+ init: function(bid) {
+ if (jsxc.gui.window.get(bid).length > 0) {
+ return jsxc.gui.window.get(bid);
+ }
+
+ var win = jsxc.gui.windowTemplate.clone().attr('data-bid', bid).hide().appendTo('#jsxc_windowList > ul').show('slow');
+ var data = jsxc.storage.getUserItem('buddy', bid);
+
+ // Attach jid to window
+ win.data('jid', data.jid);
+
+ // Add handler
+
+ jsxc.gui.toggleList.call(win.find('.jsxc_settings'));
+
+ win.find('.jsxc_verification').click(function() {
+ jsxc.gui.showVerification(bid);
+ });
+
+ win.find('.jsxc_fingerprints').click(function() {
+ jsxc.gui.showFingerprints(bid);
+ });
+
+ win.find('.jsxc_transfer').click(function() {
+ jsxc.otr.toggleTransfer(bid);
+ });
+
+ win.find('.jsxc_bar').click(function() {
+ jsxc.gui.window.toggle(bid);
+ });
+
+ win.find('.jsxc_close').click(function() {
+ jsxc.gui.window.close(bid);
+ });
+
+ win.find('.jsxc_clear').click(function() {
+ jsxc.gui.window.clear(bid);
+ });
+
+ win.find('.jsxc_tools').click(function() {
+ return false;
+ });
+
+ win.find('.jsxc_textinput').keyup(function(ev) {
+ var body = $(this).val();
+
+ if (ev.which === 13) {
+ body = '';
+ }
+
+ jsxc.storage.updateUserItem('window', bid, 'text', body);
+
+ if (ev.which === 27) {
+ jsxc.gui.window.close(bid);
+ }
+ }).keypress(function(ev) {
+ if (ev.which !== 13 || !$(this).val()) {
+ return;
+ }
+
+ jsxc.gui.window.postMessage(bid, 'out', $(this).val());
+
+ $(this).val('');
+ }).focus(function() {
+ // remove unread flag
+ jsxc.gui.readMsg(bid);
+ }).mouseenter(function() {
+ $('#jsxc_windowList').data('isOver', true);
+ }).mouseleave(function() {
+ $('#jsxc_windowList').data('isOver', false);
+ });
+
+ win.find('.jsxc_textarea').click(function() {
+ // check if user clicks element or selects text
+ if (typeof getSelection === 'function' && !getSelection().toString()) {
+ win.find('.jsxc_textinput').focus();
+ }
+ });
+
+ win.find('.jsxc_textarea').slimScroll({
+ height: '234px',
+ distance: '3px'
+ });
+
+ win.find('.jsxc_fade').hide();
+
+ win.find('.jsxc_name').disableSelection();
+
+ win.find('.slimScrollDiv').resizable({
+ handles: 'w, nw, n',
+ minHeight: 234,
+ minWidth: 250,
+ resize: function(event, ui) {
+ win.width(ui.size.width);
+ win.find('.jsxc_textarea').slimScroll({
+ height: ui.size.height
+ });
+ var offset = win.find('.slimScrollDiv').position().top;
+ win.find('.jsxc_emoticons').css('top', (ui.size.height + offset + 6) + 'px');
+
+ $(document).trigger('resize.window.jsxc', [ win, bid, ui.size ]);
+ }
+ });
+
+ if ($.inArray(bid, jsxc.storage.getUserItem('windowlist')) &lt; 0) {
+
+ // add window to windowlist
+ var wl = jsxc.storage.getUserItem('windowlist');
+ wl.push(bid);
+ jsxc.storage.setUserItem('windowlist', wl);
+
+ // init window element in storage
+ jsxc.storage.setUserItem('window', bid, {
+ minimize: true,
+ text: '',
+ unread: false
+ });
+ } else {
+
+ if (jsxc.storage.getUserItem('window', bid).unread) {
+ jsxc.gui.unreadMsg(bid);
+ }
+ }
+
+ $.each(jsxc.gui.emotions, function(i, val) {
+ var ins = val[0].split(' ')[0];
+ var li = $('&lt;li>&lt;div title="' + ins + '" class="jsxc_' + val[1] + '"/>&lt;/li>');
+ li.click(function() {
+ win.find('input').val(win.find('input').val() + ins);
+ win.find('input').focus();
+ });
+ win.find('.jsxc_emoticons ul').append(li);
+ });
+
+ jsxc.gui.toggleList.call(win.find('.jsxc_emoticons'));
+
+ jsxc.gui.window.restoreChat(bid);
+
+ jsxc.gui.update(bid);
+
+ jsxc.gui.updateWindowListSB();
+
+ // create related otr object
+ if (jsxc.master && !jsxc.otr.objects[bid]) {
+ jsxc.otr.create(bid);
+ } else {
+ jsxc.otr.enable(bid);
+ }
+
+ $(document).trigger('init.window.jsxc', [ win ]);
+
+ return win;
+ },
+
+ /**
+ * Returns the window element
+ *
+ * @param {String} bid
+ * @returns {jquery} jQuery object of the window element
+ */
+ get: function(id) {
+ return $("li.jsxc_windowItem[data-bid='" + jsxc.jidToBid(id) + "']");
+ },
+
+ /**
+ * Open a window, related to the bid. If the window doesn't exist, it will be
+ * created.
+ *
+ * @param {String} bid
+ * @returns {jQuery} Window object
+ */
+ open: function(bid) {
+ var win = jsxc.gui.window.init(bid);
+ jsxc.gui.window.show(bid);
+ jsxc.gui.window.highlight(bid);
+
+ var padding = $("#jsxc_windowListSB").width();
+ var innerWidth = $('#jsxc_windowList>ul').width();
+ var outerWidth = $('#jsxc_windowList').width() - padding;
+
+ if (innerWidth > outerWidth) {
+ var offset = parseInt($('#jsxc_windowList>ul').css('right'));
+ var width = win.outerWidth(true);
+
+ var right = innerWidth - win.position().left - width + offset;
+ var left = outerWidth - (innerWidth - win.position().left) - offset;
+
+ if (left &lt; 0) {
+ jsxc.gui.scrollWindowListBy(left * -1);
+ }
+
+ if (right &lt; 0) {
+ jsxc.gui.scrollWindowListBy(right);
+ }
+ }
+
+ return win;
+ },
+
+ /**
+ * Close chatwindow and clean up
+ *
+ * @param {String} bid bar jid
+ */
+ close: function(bid) {
+
+ if (jsxc.gui.window.get(bid).length === 0) {
+ jsxc.warn('Want to close a window, that is not open.');
+ return;
+ }
+
+ jsxc.storage.removeUserElement('windowlist', bid);
+ jsxc.storage.removeUserItem('window', bid);
+
+ if (jsxc.storage.getUserItem('buddylist').indexOf(bid) &lt; 0) {
+ // delete data from unknown sender
+
+ jsxc.storage.removeUserItem('buddy', bid);
+ jsxc.storage.removeUserItem('chat', bid);
+ }
+
+ jsxc.gui.window._close(bid);
+ },
+
+ /**
+ * Close chatwindow
+ *
+ * @param {String} bid
+ */
+ _close: function(bid) {
+ jsxc.gui.window.get(bid).hide('slow', function() {
+ $(this).remove();
+
+ jsxc.gui.updateWindowListSB();
+ });
+ },
+
+ /**
+ * Toggle between minimize and maximize of the text area
+ *
+ * @param {String} bid bar jid
+ */
+ toggle: function(bid) {
+
+ var win = jsxc.gui.window.get(bid);
+
+ if (win.parents("#jsxc_windowList").length === 0) {
+ return;
+ }
+
+ if (win.find('.jsxc_fade').is(':hidden')) {
+ jsxc.gui.window.show(bid);
+ } else {
+ jsxc.gui.window.hide(bid);
+ }
+
+ jsxc.gui.updateWindowListSB();
+ },
+
+ /**
+ * Maximize text area and save
+ *
+ * @param {String} bid
+ */
+ show: function(bid) {
+
+ jsxc.storage.updateUserItem('window', bid, 'minimize', false);
+
+ jsxc.gui.window._show(bid);
+ },
+
+ /**
+ * Maximize text area
+ *
+ * @param {String} bid
+ * @returns {undefined}
+ */
+ _show: function(bid) {
+ var win = jsxc.gui.window.get(bid);
+ jsxc.gui.window.get(bid).find('.jsxc_fade').slideDown();
+ win.removeClass('jsxc_min');
+
+ // If the area is hidden, the scrolldown function doesn't work. So we
+ // call it here.
+ jsxc.gui.window.scrollDown(bid);
+
+ if (jsxc.restoreCompleted) {
+ win.find('.jsxc_textinput').focus();
+ }
+
+ win.trigger('show.window.jsxc');
+ },
+
+ /**
+ * Minimize text area and save
+ *
+ * @param {String} bid
+ */
+ hide: function(bid) {
+ jsxc.storage.updateUserItem('window', bid, 'minimize', true);
+
+ jsxc.gui.window._hide(bid);
+ },
+
+ /**
+ * Minimize text area
+ *
+ * @param {String} bid
+ */
+ _hide: function(bid) {
+ jsxc.gui.window.get(bid).addClass('jsxc_min').find(' .jsxc_fade').slideUp();
+
+ jsxc.gui.window.get(bid).trigger('hidden.window.jsxc');
+ },
+
+ /**
+ * Highlight window
+ *
+ * @param {type} bid
+ */
+ highlight: function(bid) {
+ var el = jsxc.gui.window.get(bid).find(' .jsxc_bar');
+
+ if (!el.is(':animated')) {
+ el.effect('highlight', {
+ color: 'orange'
+ }, 2000);
+ }
+ },
+
+ /**
+ * Scroll chat area to the bottom
+ *
+ * @param {String} bid bar jid
+ */
+ scrollDown: function(bid) {
+ var chat = jsxc.gui.window.get(bid).find('.jsxc_textarea');
+
+ // check if chat exist
+ if (chat.length === 0) {
+ return;
+ }
+
+ chat.slimScroll({
+ scrollTo: (chat.get(0).scrollHeight + 'px')
+ });
+ },
+
+ /**
+ * Write Message to chat area and save
+ *
+ * @param {String} bid bar jid
+ * @param {String} direction 'in' message is received or 'out' message is
+ * send
+ * @param {String} msg Message to display
+ * @param {boolean} encrypted Was this message encrypted? Default: false
+ * @param {boolean} forwarded Was this message forwarded? Default: false
+ * @param {integer} stamp Timestamp
+ * @param {object} sender Information about sender
+ * @property {string} sender.jid Sender Jid
+ * @property {string} sender.name Sender name or nickname
+ */
+ postMessage: function(bid, direction, msg, encrypted, forwarded, stamp, sender) {
+ var data = jsxc.storage.getUserItem('buddy', bid);
+ var html_msg = msg;
+
+ // remove html tags and reencode html tags
+ msg = jsxc.removeHTML(msg);
+ msg = jsxc.escapeHTML(msg);
+
+ // exceptions:
+
+ if (direction === 'out' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED && forwarded !== true) {
+ direction = 'sys';
+ msg = $.t('your_message_wasnt_send_please_end_your_private_conversation');
+ }
+
+ if (direction === 'in' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED) {
+ direction = 'sys';
+ msg = $.t('unencrypted_message_received') + ' ' + msg;
+ }
+
+ if (direction === 'out' && data.sub === 'from') {
+ direction = 'sys';
+ msg = $.t('your_message_wasnt_send_because_you_have_no_valid_subscription');
+ }
+
+ encrypted = encrypted || data.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED;
+ var post = jsxc.storage.saveMessage(bid, direction, msg, encrypted, forwarded, stamp, sender);
+
+ if (direction === 'in') {
+ $(document).trigger('postmessagein.jsxc', [ bid, html_msg ]);
+ }
+
+ if (direction === 'out' && jsxc.master && forwarded !== true) {
+ jsxc.xmpp.sendMessage(bid, html_msg, post.uid);
+ }
+
+ jsxc.gui.window._postMessage(bid, post);
+
+ if (direction === 'out' && msg === '?') {
+ jsxc.gui.window.postMessage(bid, 'sys', '42');
+ }
+ },
+
+ /**
+ * Write Message to chat area
+ *
+ * @param {String} bid bar jid
+ * @param {Object} post Post object with direction, msg, uid, received
+ * @param {Bool} restore If true no highlights are used and so unread flag
+ * set
+ */
+ _postMessage: function(bid, post, restore) {
+ var win = jsxc.gui.window.get(bid);
+ var msg = post.msg;
+ var direction = post.direction;
+ var uid = post.uid;
+
+ if (win.find('.jsxc_textinput').is(':not(:focus)') && jsxc.restoreCompleted && direction === 'in' && !restore) {
+ jsxc.gui.window.highlight(bid);
+ }
+
+ msg = msg.replace(jsxc.CONST.REGEX.URL, function(url) {
+
+ var href = (url.match(/^https?:\/\//i)) ? url : 'http://' + url;
+
+ return '&lt;a href="' + href + '" target="_blank">' + url + '&lt;/a>';
+ });
+
+ msg = msg.replace(new RegExp('(xmpp:)?(' + jsxc.CONST.REGEX.JID.source + ')(\\?[^\\s]+\\b)?', 'i'), function(match, protocol, jid, action) {
+ if (protocol === 'xmpp:') {
+ if (typeof action === 'string') {
+ jid += action;
+ }
+
+ return '&lt;a href="xmpp:' + jid + '">' + jid + '&lt;/a>';
+ }
+
+ return '&lt;a href="mailto:' + jid + '" target="_blank">' + jid + '&lt;/a>';
+ });
+
+ $.each(jsxc.gui.emotions, function(i, val) {
+ msg = msg.replace(val[2], function(match, p1) {
+
+ // escape value for alt and title, this prevents double
+ // replacement
+ var esc = '', i;
+ for (i = 0; i &lt; p1.length; i++) {
+ esc += '&#' + p1.charCodeAt(i) + ';';
+ }
+
+ return '&lt;div title="' + esc + '" class="jsxc_emoticon jsxc_' + val[1] + '"/>';
+ });
+ });
+
+ var msgDiv = $("&lt;div>"), msgTsDiv = $("&lt;div>");
+ msgDiv.addClass('jsxc_chatmessage jsxc_' + direction);
+ msgDiv.attr('id', uid);
+ msgDiv.html('&lt;div>' + msg + '&lt;/div>');
+ msgTsDiv.addClass('jsxc_timestamp');
+ msgTsDiv.text(jsxc.getFormattedTime(post.stamp));
+
+ if (post.received || false) {
+ msgDiv.addClass('jsxc_received');
+ }
+
+ if (post.forwarded) {
+ msgDiv.addClass('jsxc_forwarded');
+ }
+
+ if (post.encrypted) {
+ msgDiv.addClass('jsxc_encrypted');
+ }
+
+ if (direction === 'sys') {
+ jsxc.gui.window.get(bid).find('.jsxc_textarea').append('&lt;div style="clear:both"/>');
+ } else if (typeof post.stamp !== 'undefined') {
+ msgDiv.append(msgTsDiv);
+ }
+
+ win.find('.jsxc_textarea').append(msgDiv);
+
+ if (typeof post.sender === 'object' && post.sender !== null) {
+ var title = '';
+ var avatarDiv = $('&lt;div>');
+ avatarDiv.addClass('jsxc_avatar').prependTo(msgDiv);
+
+ if (typeof post.sender.jid === 'string') {
+ msgDiv.attr('data-bid', jsxc.jidToBid(post.sender.jid));
+
+ var data = jsxc.storage.getUserItem('buddy', jsxc.jidToBid(post.sender.jid)) || {};
+ jsxc.gui.updateAvatar(msgDiv, jsxc.jidToBid(post.sender.jid), data.avatar);
+
+ title = jsxc.jidToBid(post.sender.jid);
+ }
+
+ if (typeof post.sender.name === 'string') {
+ msgDiv.attr('data-name', post.sender.name);
+
+ if (typeof post.sender.jid !== 'string') {
+ jsxc.gui.avatarPlaceholder(avatarDiv, post.sender.name);
+ }
+
+ if (title !== '') {
+ title = '\n' + title;
+ }
+
+ title = post.sender.name + title;
+
+ msgTsDiv.text(msgTsDiv.text() + ' ' + post.sender.name);
+ }
+
+ avatarDiv.attr('title', jsxc.escapeHTML(title));
+ }
+
+ jsxc.gui.detectUriScheme(win);
+ jsxc.gui.detectEmail(win);
+
+ jsxc.gui.window.scrollDown(bid);
+
+ // if window has no focus set unread flag
+ if (!win.find('.jsxc_textinput').is(':focus') && jsxc.restoreCompleted && !restore) {
+ jsxc.gui.unreadMsg(bid);
+ }
+ },
+
+ /**
+ * Set text into input area
+ *
+ * @param {type} bid
+ * @param {type} text
+ * @returns {undefined}
+ */
+ setText: function(bid, text) {
+ jsxc.gui.window.get(bid).find('.jsxc_textinput').val(text);
+ },
+
+ /**
+ * Load old log into chat area
+ *
+ * @param {type} bid
+ * @returns {undefined}
+ */
+ restoreChat: function(bid) {
+ var chat = jsxc.storage.getUserItem('chat', bid);
+
+ while (chat !== null && chat.length > 0) {
+ var c = chat.pop();
+ jsxc.gui.window._postMessage(bid, c, true);
+ }
+ },
+
+ /**
+ * Clear chat history
+ *
+ * @param {type} bid
+ * @returns {undefined}
+ */
+ clear: function(bid) {
+ jsxc.storage.setUserItem('chat', bid, []);
+ jsxc.gui.window.get(bid).find('.jsxc_textarea').empty();
+ }
+};
+
+/**
+ * Hold all HTML templates.
+ *
+ * @namespace jsxc.gui.template
+ */
+jsxc.gui.template = {
+ /**
+ * Return requested template and replace all placeholder
+ *
+ * @memberOf jsxc.gui.template;
+ * @param {type} name template name
+ * @param {type} bid
+ * @param {type} msg
+ * @returns {String} HTML Template
+ */
+ get: function(name, bid, msg) {
+
+ // common placeholder
+ var ph = {
+ my_priv_fingerprint: jsxc.storage.getUserItem('priv_fingerprint') ? jsxc.storage.getUserItem('priv_fingerprint').replace(/(.{8})/g, '$1 ') : $.t('not_available'),
+ my_jid: jsxc.storage.getItem('jid') || '',
+ my_node: Strophe.getNodeFromJid(jsxc.storage.getItem('jid') || '') || '',
+ root: jsxc.options.root,
+ app_name: jsxc.options.app_name
+ };
+
+ // placeholder depending on bid
+ if (bid) {
+ var data = jsxc.storage.getUserItem('buddy', bid);
+
+ $.extend(ph, {
+ bid_priv_fingerprint: (data && data.fingerprint) ? data.fingerprint.replace(/(.{8})/g, '$1 ') : $.t('not_available'),
+ bid_jid: bid,
+ bid_name: (data && data.name) ? data.name : bid
+ });
+ }
+
+ // placeholder depending on msg
+ if (msg) {
+ $.extend(ph, {
+ msg: msg
+ });
+ }
+
+ var ret = jsxc.gui.template[name];
+
+ if (typeof (ret) === 'string') {
+ ret = $('&lt;div>').append($(ret).i18n()).html();
+
+ ret = ret.replace(/\{\{([a-zA-Z0-9_\-]+)\}\}/g, function(s, key) {
+ return (typeof ph[key] === 'string') ? ph[key] : s;
+ });
+
+ return ret;
+ }
+
+ jsxc.debug('Template not available: ' + name);
+ return name;
+ },
+ authenticationDialog: '&lt;h3>Verification&lt;/h3>\
+ &lt;p data-i18n="Authenticating_a_buddy_helps_">&lt;/p>\
+ &lt;div>\
+ &lt;p data-i18n="[html]How_do_you_want_to_authenticate_your_buddy" style="margin:0px;">&lt;/p>\
+ &lt;select size="1">\
+ &lt;option data-i18n="Select_method">&lt;/option>\
+ &lt;option data-i18n="Manual">&lt;/option>\
+ &lt;option data-i18n="Question">&lt;/option>\
+ &lt;option data-i18n="Secret">&lt;/option>\
+ &lt;/select>\
+ &lt;/div>\
+ &lt;div style="display:none">\
+ &lt;p data-i18n="To_verify_the_fingerprint_" class=".jsxc_explanation">&lt;/p>\
+ &lt;p>&lt;strong data-i18n="Your_fingerprint">&lt;/strong>&lt;br />\
+ &lt;span style="text-transform:uppercase">{{my_priv_fingerprint}}&lt;/span>&lt;/p>\
+ &lt;p>&lt;strong data-i18n="Buddy_fingerprint">&lt;/strong>&lt;br />\
+ &lt;span style="text-transform:uppercase">{{bid_priv_fingerprint}}&lt;/span>&lt;/p>&lt;br />\
+ &lt;p class="jsxc_right">&lt;a href="#" data-i18n="Close" class="jsxc_close button">&lt;/a> &lt;a href="#" data-i18n="Compared" class="button creation">&lt;/a>&lt;/p>\
+ &lt;/div>\
+ &lt;div style="display:none">\
+ &lt;p data-i18n="To_authenticate_using_a_question_" class=".jsxc_explanation">&lt;/p>\
+ &lt;p>&lt;label for="jsxc_quest" data-i18n="Question">&lt;/label>&lt;input type="text" name="quest" id="jsxc_quest" />&lt;/p>\
+ &lt;p>&lt;label for="jsxc_secret2" data-i18n="Secret">&lt;/label>&lt;input type="text" name="secret2" id="jsxc_secret2" />&lt;/p>\
+ &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_close" data-i18n="Close">&lt;/a> &lt;a href="#" class="button creation" data-i18n="Ask">&lt;/a>&lt;/p>\
+ &lt;/div>\
+ &lt;div style="display:none">\
+ &lt;p class=".jsxc_explanation" data-i18n="To_authenticate_pick_a_secret_">&lt;/p>\
+ &lt;p>&lt;label for="jsxc_secret" data-i18n="Secret">&lt;/label>&lt;input type="text" name="secret" id="jsxc_secret" />&lt;/p>\
+ &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_close" data-i18n="Close">&lt;/a> &lt;a href="#" class="button creation" data-i18n="Compare">&lt;/a>&lt;/p>\
+ &lt;/div>',
+ fingerprintsDialog: '&lt;div>\
+ &lt;p class="jsxc_maxWidth" data-i18n="A_fingerprint_">&lt;/p>\
+ &lt;p>&lt;strong data-i18n="Your_fingerprint">&lt;/strong>&lt;br />\
+ &lt;span style="text-transform:uppercase">{{my_priv_fingerprint}}&lt;/span>&lt;/p>\
+ &lt;p>&lt;strong data-i18n="Buddy_fingerprint">&lt;/strong>&lt;br />\
+ &lt;span style="text-transform:uppercase">{{bid_priv_fingerprint}}&lt;/span>&lt;/p>&lt;br />\
+ &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_close" data-i18n="Close">&lt;/a>&lt;/p>\
+ &lt;/div>',
+ chatWindow: '&lt;li class="jsxc_min jsxc_windowItem">\
+ &lt;div class="jsxc_window">\
+ &lt;div class="jsxc_bar">\
+ &lt;div class="jsxc_avatar">☺&lt;/div>\
+ &lt;div class="jsxc_tools">\
+ &lt;div class="jsxc_settings">\
+ &lt;ul>\
+ &lt;li class="jsxc_fingerprints jsxc_otr jsxc_disabled" data-i18n="Fingerprints">&lt;/li>\
+ &lt;li class="jsxc_verification" data-i18n="Authentication">&lt;/li>\
+ &lt;li class="jsxc_transfer jsxc_otr jsxc_disabled" data-i18n="start_private">&lt;/li>\
+ &lt;li class="jsxc_clear" data-i18n="clear_history">&lt;/li>\
+ &lt;/ul>\
+ &lt;/div>\
+ &lt;div class="jsxc_transfer jsxc_otr jsxc_disabled"/>\
+ &lt;div class="jsxc_close">×&lt;/div>\
+ &lt;/div>\
+ &lt;div class="jsxc_name"/>\
+ &lt;div class="jsxc_cycle"/>\
+ &lt;/div>\
+ &lt;div class="jsxc_fade">\
+ &lt;div class="jsxc_gradient"/>\
+ &lt;div class="jsxc_textarea"/>\
+ &lt;div class="jsxc_emoticons">&lt;ul/>&lt;/div>\
+ &lt;input type="text" class="jsxc_textinput" data-i18n="[placeholder]Message"/>\
+ &lt;/div>\
+ &lt;/div>\
+ &lt;/li>',
+ roster: '&lt;div id="jsxc_roster">\
+ &lt;ul id="jsxc_buddylist">&lt;/ul>\
+ &lt;div class="jsxc_bottom jsxc_presence" data-bid="own">\
+ &lt;div id="jsxc_avatar">\
+ &lt;div class="jsxc_avatar">☺&lt;/div>\
+ &lt;/div>\
+ &lt;div id="jsxc_menu">\
+ &lt;span>&lt;/span>\
+ &lt;ul>\
+ &lt;li class="jsxc_settings" data-i18n="Settings">&lt;/li>\
+ &lt;li class="jsxc_muteNotification" data-i18n="Mute">&lt;/li>\
+ &lt;li class="jsxc_addBuddy" data-i18n="Add_buddy">&lt;/li>\
+ &lt;li class="jsxc_hideOffline" data-i18n="Hide_offline">&lt;/li>\
+ &lt;li class="jsxc_onlineHelp" data-i18n="Online_help">&lt;/li>\
+ &lt;li class="jsxc_about" data-i18n="About">&lt;/li>\
+ &lt;/ul>\
+ &lt;/div>\
+ &lt;div id="jsxc_notice">\
+ &lt;span>&lt;/span>\
+ &lt;ul>&lt;/ul>\
+ &lt;/div>\
+ &lt;div id="jsxc_presence">\
+ &lt;span data-i18n="Online">&lt;/span>\
+ &lt;ul>\
+ &lt;li data-pres="online" class="jsxc_online" data-i18n="Online">&lt;/li>\
+ &lt;li data-pres="chat" class="jsxc_chat" data-i18n="Chatty">&lt;/li>\
+ &lt;li data-pres="away" class="jsxc_away" data-i18n="Away">&lt;/li>\
+ &lt;li data-pres="xa" class="jsxc_xa" data-i18n="Extended_away">&lt;/li>\
+ &lt;li data-pres="dnd" class="jsxc_dnd" data-i18n="dnd">&lt;/li>\
+ &lt;li data-pres="offline" class="jsxc_offline" data-i18n="Offline">&lt;/li>\
+ &lt;/ul>\
+ &lt;/div>\
+ &lt;/div>\
+ &lt;div id="jsxc_toggleRoster">&lt;/div>\
+ &lt;/div>',
+ windowList: '&lt;div id="jsxc_windowList">\
+ &lt;ul>&lt;/ul>\
+ &lt;/div>\
+ &lt;div id="jsxc_windowListSB">\
+ &lt;div class="jsxc_scrollLeft jsxc_disabled">&lt;&lt;/div>\
+ &lt;div class="jsxc_scrollRight jsxc_disabled">&gt;&lt;/div>\
+ &lt;/div>',
+ rosterBuddy: '&lt;li>\
+ &lt;div class="jsxc_avatar">☺&lt;/div>\
+ &lt;div class="jsxc_control">&lt;/div>\
+ &lt;div class="jsxc_name"/>\
+ &lt;div class="jsxc_options jsxc_right">\
+ &lt;div class="jsxc_rename" data-i18n="[title]rename_buddy">✎&lt;/div>\
+ &lt;div class="jsxc_delete" data-i18n="[title]delete_buddy">✘&lt;/div>\
+ &lt;/div>\
+ &lt;div class="jsxc_options jsxc_left">\
+ &lt;div class="jsxc_chaticon" data-i18n="[title]send_message"/>\
+ &lt;div class="jsxc_vcardicon" data-i18n="[title]get_info">i&lt;/div>\
+ &lt;/div>\
+ &lt;/li>',
+ loginBox: '&lt;h3 data-i18n="Login">&lt;/h3>\
+ &lt;form>\
+ &lt;p>&lt;label for="jsxc_username" data-i18n="Username">&lt;/label>\
+ &lt;input type="text" name="username" id="jsxc_username" required="required" value="{{my_node}}"/>&lt;/p>\
+ &lt;p>&lt;label for="jsxc_password" data-i18n="Password">&lt;/label>\
+ &lt;input type="password" name="password" required="required" id="jsxc_password" />&lt;/p>\
+ &lt;div class="bottom_submit_section">\
+ &lt;input type="reset" class="button jsxc_close" name="clear" data-i18n="[value]Cancel"/>\
+ &lt;input type="submit" class="button creation" name="commit" data-i18n="[value]Connect"/>\
+ &lt;/div>\
+ &lt;/form>',
+ contactDialog: '&lt;h3 data-i18n="Add_buddy">&lt;/h3>\
+ &lt;p class=".jsxc_explanation" data-i18n="Type_in_the_full_username_">&lt;/p>\
+ &lt;form>\
+ &lt;p>&lt;label for="jsxc_username" data-i18n="Username">&lt;/label>\
+ &lt;input type="text" name="username" id="jsxc_username" list="jsxc_userlist" pattern="^[^\\x22&\'\\/:&lt;>@\\s]+(@[.\\-_\\w]+)?" required="required" />&lt;/p>\
+ &lt;datalist id="jsxc_userlist">&lt;/datalist>\
+ &lt;p>&lt;label for="jsxc_alias" data-i18n="Alias">&lt;/label>\
+ &lt;input type="text" name="alias" id="jsxc_alias" />&lt;/p>\
+ &lt;p class="jsxc_right">\
+ &lt;input class="button" type="submit" data-i18n="[value]Add" />\
+ &lt;/p>\
+ &lt;form>',
+ approveDialog: '&lt;h3 data-i18n="Subscription_request">&lt;/h3>\
+ &lt;p>&lt;span data-i18n="You_have_a_request_from">&lt;/span>&lt;b class="jsxc_their_jid">&lt;/b>.&lt;/p>\
+ &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_deny" data-i18n="Deny">&lt;/a> &lt;a href="#" class="button creation jsxc_approve" data-i18n="Approve">&lt;/a>&lt;/p>',
+ removeDialog: '&lt;h3 data-i18n="Remove_buddy">&lt;/h3>\
+ &lt;p class="jsxc_maxWidth" data-i18n="[html]You_are_about_to_remove_">&lt;/p>\
+ &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_cancel jsxc_close" data-i18n="Cancel">&lt;/a> &lt;a href="#" class="button creation" data-i18n="Remove">&lt;/a>&lt;/p>',
+ waitAlert: '&lt;h3>{{msg}}&lt;/h3>\
+ &lt;p data-i18n="Please_wait">&lt;/p>\
+ &lt;p class="jsxc_center">&lt;img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" />&lt;/p>',
+ alert: '&lt;h3 data-i18n="Alert">&lt;/h3>\
+ &lt;p>{{msg}}&lt;/p>\
+ &lt;p class="jsxc_right">&lt;a href="#" data-i18n="Ok" class="button jsxc_close jsxc_cancel">&lt;/a>&lt;/p>',
+ authFailDialog: '&lt;h3 data-i18n="Login_failed">&lt;/h3>\
+ &lt;p data-i18n="Sorry_we_cant_authentikate_">&lt;/p>\
+ &lt;p class="jsxc_right">\
+ &lt;a class="button jsxc_cancel" data-i18n="Continue_without_chat">&lt;/a>\
+ &lt;a class="button creation" data-i18n="Retry">&lt;/a>\
+ &lt;/p>',
+ confirmDialog: '&lt;p>{{msg}}&lt;/p>\
+ &lt;p class="jsxc_right">\
+ &lt;a class="button jsxc_cancel jsxc_close" data-i18n="Dismiss">&lt;/a>\
+ &lt;a class="button creation" data-i18n="Confirm">&lt;/a>\
+ &lt;/p>',
+ pleaseAccept: '&lt;p data-i18n="Please_accept_">&lt;/p>',
+ aboutDialog: '&lt;h3>JavaScript XMPP Chat&lt;/h3>\
+ &lt;p>&lt;b>Version: &lt;/b>' + jsxc.version + '&lt;br />\
+ &lt;a href="http://jsxc.org/" target="_blank">www.jsxc.org&lt;/a>&lt;/p>\
+ &lt;p>&lt;i>Released under the MIT license&lt;/i>&lt;/p>\
+ &lt;p>Real-time chat app for {{app_name}} and more.&lt;br />\
+ Requires an external &lt;a href="https://xmpp.org/xmpp-software/servers/" target="_blank">XMPP server&lt;/a>.&lt;/p>\
+ &lt;p>&lt;b>Credits: &lt;/b> &lt;a href="http://www.beepzoid.com/old-phones/" target="_blank">David English (Ringtone)&lt;/a>,\
+ &lt;a href="https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and" target="_blank">CameronMusic (Ping)&lt;/a>&lt;/p>\
+ &lt;p class="jsxc_libraries">&lt;b>Libraries: &lt;/b>&lt; $ dep.libraries $ >&lt;/p>\
+ &lt;p class="jsxc_right">&lt;a class="button jsxc_debuglog" href="#">Show debug log&lt;/a>&lt;/p>',
+ vCard: '&lt;h3>&lt;span data-i18n="Info_about">&lt;/span> &lt;span>{{bid_name}}&lt;/span>&lt;/h3>\
+ &lt;ul class="jsxc_vCard">&lt;/ul>\
+ &lt;p>&lt;img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" /> &lt;span data-i18n="Please_wait">&lt;/span>...&lt;/p>',
+ settings: '&lt;h3 data-i18n="User_settings">&lt;/h3>\
+ &lt;p>&lt;/p>\
+ &lt;form>\
+ &lt;fieldset class="jsxc_fieldsetXmpp jsxc_fieldset">\
+ &lt;legend data-i18n="Login_options">&lt;/legend>\
+ &lt;label for="xmpp-url" data-i18n="BOSH_url">&lt;/label>&lt;input type="text" id="xmpp-url" readonly="readonly"/>&lt;br />\
+ &lt;label for="xmpp-username" data-i18n="Username">&lt;/label>&lt;input type="text" id="xmpp-username"/>&lt;br />\
+ &lt;label for="xmpp-domain" data-i18n="Domain">&lt;/label>&lt;input type="text" id="xmpp-domain"/>&lt;br />\
+ &lt;label for="xmpp-resource" data-i18n="Resource">&lt;/label>&lt;input type="text" id="xmpp-resource"/>&lt;br />\
+ &lt;label for="xmpp-onlogin" data-i18n="On_login">&lt;/label>&lt;input type="checkbox" id="xmpp-onlogin" />&lt;br />\
+ &lt;input type="submit" data-i18n="[value]Save"/>\
+ &lt;/fieldset>\
+ &lt;/form>\
+ &lt;p>&lt;/p>\
+ &lt;form>\
+ &lt;fieldset class="jsxc_fieldsetPriority jsxc_fieldset">\
+ &lt;legend data-i18n="Priority">&lt;/legend>\
+ &lt;label for="priority-online" data-i18n="Online">&lt;/label>&lt;input type="number" value="0" id="priority-online" min="-128" max="127" step="1" required="required"/>&lt;br />\
+ &lt;label for="priority-chat" data-i18n="Chatty">&lt;/label>&lt;input type="number" value="0" id="priority-chat" min="-128" max="127" step="1" required="required"/>&lt;br />\
+ &lt;label for="priority-away" data-i18n="Away">&lt;/label>&lt;input type="number" value="0" id="priority-away" min="-128" max="127" step="1" required="required"/>&lt;br />\
+ &lt;label for="priority-xa" data-i18n="Extended_away">&lt;/label>&lt;input type="number" value="0" id="priority-xa" min="-128" max="127" step="1" required="required"/>&lt;br />\
+ &lt;label for="priority-dnd" data-i18n="dnd">&lt;/label>&lt;input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/>&lt;br />\
+ &lt;input type="submit" data-i18n="[value]Save"/>\
+ &lt;/fieldset>\
+ &lt;/form>\
+ &lt;p>&lt;/p>\
+ &lt;form data-onsubmit="xmpp.carbons.refresh">\
+ &lt;fieldset class="jsxc_fieldsetCarbons jsxc_fieldset">\
+ &lt;legend data-i18n="Carbon_copy">&lt;/legend>\
+ &lt;label for="carbons-enable" data-i18n="Enable">&lt;/label>&lt;input type="checkbox" id="carbons-enable" />&lt;br />\
+ &lt;input type="submit" data-i18n="[value]Save"/>\
+ &lt;/fieldset>\
+ &lt;/form>'
+};
+</code></pre>
+ </article>
+ </section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/jsxc.lib.js.html b/doc/jsxc.lib.js.html
index 9f6d9571..9af6e5a6 100644
--- a/doc/jsxc.lib.js.html
+++ b/doc/jsxc.lib.js.html
@@ -25,6236 +25,775 @@
<section>
<article>
- <pre class="prettyprint source"><code>var jsxc;
+ <pre class="prettyprint source"><code>/**
+ * JavaScript Xmpp Chat namespace
+ *
+ * @namespace jsxc
+ */
+jsxc = {
+ /** Version of jsxc */
+ version: '&lt; $ app.version $ >',
-(function($) {
- "use strict";
+ /** True if i'm the master */
+ master: false,
- /**
- * JavaScript Xmpp Chat namespace
- *
- * @namespace jsxc
- */
- jsxc = {
- /** Version of jsxc */
- version: '&lt; $ app.version $ >',
-
- /** True if i'm the master */
- master: false,
-
- /** True if the role allocation is finished */
- role_allocation: false,
-
- /** Timeout for keepalive */
- to: null,
-
- /** Timeout after normal keepalive starts */
- toBusy: null,
-
- /** Timeout for notification */
- toNotification: null,
-
- /** Timeout delay for notification */
- toNotificationDelay: 500,
-
- /** Interval for keep-alive */
- keepalive: null,
-
- /** True if last activity was 10 min ago */
- restore: false,
-
- /** True if restore is complete */
- restoreCompleted: false,
-
- /** True if login through box */
- triggeredFromBox: false,
-
- /** True if logout through element click */
- triggeredFromElement: false,
-
- /** True if logout through logout click */
- triggeredFromLogout: false,
-
- /** last values which we wrote into localstorage (IE workaround) */
- ls: [],
-
- /**
- * storage event is even fired if I write something into storage (IE
- * workaround) 0: conform, 1: not conform, 2: not shure
- */
- storageNotConform: null,
-
- /** Timeout for storageNotConform test */
- toSNC: null,
-
- /** My bar id */
- bid: null,
-
- /** Some constants */
- CONST: {
- NOTIFICATION_DEFAULT: 'default',
- NOTIFICATION_GRANTED: 'granted',
- NOTIFICATION_DENIED: 'denied',
- STATUS: [ 'offline', 'dnd', 'xa', 'away', 'chat', 'online' ],
- SOUNDS: {
- MSG: 'incomingMessage.wav',
- CALL: 'Rotary-Phone6.mp3',
- NOTICE: 'Ping1.mp3'
- },
- REGEX: {
- JID: new RegExp('\\b[^"&\'\\/:&lt;>@\\s]+@[\\w-_.]+\\b', 'ig'),
- URL: new RegExp(/((?:https?:\/\/|www\.|([\w\-]+\.[a-zA-Z]{2,3})(?=\b))(?:(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\)([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|])?)|(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|]))?)/gi)
- },
- NS: {
- CARBONS: 'urn:xmpp:carbons:2',
- FORWARD: 'urn:xmpp:forward:0'
- }
- },
-
- /**
- * Parse a unix timestamp and return a formatted time string
- *
- * @memberOf jsxc
- * @param {Object} unixtime
- * @returns time of day and/or date
- */
- getFormattedTime: function(unixtime) {
- var msgDate = new Date(parseInt(unixtime));
- var date = ('0' + msgDate.getDate()).slice(-2);
- var month = ('0' + (msgDate.getMonth() + 1)).slice(-2);
- var year = msgDate.getFullYear();
- var hours = ('0' + msgDate.getHours()).slice(-2);
- var minutes = ('0' + msgDate.getMinutes()).slice(-2);
- var dateNow = new Date(), time = hours + ':' + minutes;
-
- // compare dates only
- dateNow.setHours(0, 0, 0, 0);
- msgDate.setHours(0, 0, 0, 0);
-
- if (dateNow.getTime() !== msgDate.getTime()) {
- return date + '.' + month + '.' + year + ' ' + time;
- }
- return time;
- },
-
- /**
- * Write debug message to console and to log.
- *
- * @memberOf jsxc
- * @param {String} msg Debug message
- * @param {Object} data
- * @param {String} Could be warn|error|null
- */
- debug: function(msg, data, level) {
- if (level) {
- msg = '[' + level + '] ' + msg;
- }
+ /** True if the role allocation is finished */
+ role_allocation: false,
- if (data) {
- if (jsxc.storage.getItem('debug') === true) {
- console.log(msg, data);
- }
-
- // try to convert data to string
- var d;
- try {
- // clone html snippet
- d = $("&lt;span>").prepend($(data).clone()).html();
- } catch (err) {
- try {
- d = JSON.stringify(data);
- } catch (err2) {
- d = 'see js console';
- }
- }
+ /** Timeout for keepalive */
+ to: null,
- jsxc.log = jsxc.log + msg + ': ' + d + '\n';
- } else {
- console.log(msg);
- jsxc.log = jsxc.log + msg + '\n';
- }
- },
+ /** Timeout after normal keepalive starts */
+ toBusy: null,
- /**
- * Write warn message.
- *
- * @memberOf jsxc
- * @param {String} msg Warn message
- * @param {Object} data
- */
- warn: function(msg, data) {
- jsxc.debug(msg, data, 'WARN');
- },
+ /** Timeout for notification */
+ toNotification: null,
- /**
- * Write error message.
- *
- * @memberOf jsxc
- * @param {String} msg Error message
- * @param {Object} data
- */
- error: function(msg, data) {
- jsxc.debug(msg, data, 'ERROR');
- },
+ /** Timeout delay for notification */
+ toNotificationDelay: 500,
- /** debug log */
- log: '',
+ /** Interval for keep-alive */
+ keepalive: null,
- /**
- * Starts the action
- *
- * @memberOf jsxc
- * @param {object} options
- */
- init: function(options) {
+ /** True if last activity was 10 min ago */
+ restore: false,
- if (options) {
- // override default options
- $.extend(true, jsxc.options, options);
- }
+ /** True if restore is complete */
+ restoreCompleted: false,
- /**
- * Getter method for options. Saved options will override default one.
- *
- * @param {string} key option key
- * @returns default or saved option value
- */
- jsxc.options.get = function(key) {
- var local = jsxc.storage.getUserItem('options') || {};
+ /** True if login through box */
+ triggeredFromBox: false,
- return local[key] || jsxc.options[key];
- };
+ /** True if logout through element click */
+ triggeredFromElement: false,
- /**
- * Setter method for options. Will write into localstorage.
- *
- * @param {string} key option key
- * @param {object} value option value
- */
- jsxc.options.set = function(key, value) {
- jsxc.storage.updateItem('options', key, value, true);
- };
+ /** True if logout through logout click */
+ triggeredFromLogout: false,
- jsxc.storageNotConform = jsxc.storage.getItem('storageNotConform');
- if (jsxc.storageNotConform === null) {
- jsxc.storageNotConform = 2;
- }
+ /** last values which we wrote into localstorage (IE workaround) */
+ ls: [],
- // detect language
- var lang;
- if (jsxc.storage.getItem('lang') !== null) {
- lang = jsxc.storage.getItem('lang');
- } else if (jsxc.options.autoLang && navigator.language) {
- lang = navigator.language.substr(0, 2);
- } else {
- lang = jsxc.options.defaultLang;
- }
+ /**
+ * storage event is even fired if I write something into storage (IE
+ * workaround) 0: conform, 1: not conform, 2: not shure
+ */
+ storageNotConform: null,
+
+ /** Timeout for storageNotConform test */
+ toSNC: null,
+
+ /** My bar id */
+ bid: null,
+
+ /** Some constants */
+ CONST: {
+ NOTIFICATION_DEFAULT: 'default',
+ NOTIFICATION_GRANTED: 'granted',
+ NOTIFICATION_DENIED: 'denied',
+ STATUS: [ 'offline', 'dnd', 'xa', 'away', 'chat', 'online' ],
+ SOUNDS: {
+ MSG: 'incomingMessage.wav',
+ CALL: 'Rotary-Phone6.mp3',
+ NOTICE: 'Ping1.mp3'
+ },
+ REGEX: {
+ JID: new RegExp('\\b[^"&\'\\/:&lt;>@\\s]+@[\\w-_.]+\\b', 'ig'),
+ URL: new RegExp(/((?:https?:\/\/|www\.|([\w\-]+\.[a-zA-Z]{2,3})(?=\b))(?:(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*\)([\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|])?)|(?:[\-A-Za-z0-9+&@#\/%?=~_|!:,.;]*[\-A-Za-z0-9+&@#\/%=~_|]))?)/gi)
+ },
+ NS: {
+ CARBONS: 'urn:xmpp:carbons:2',
+ FORWARD: 'urn:xmpp:forward:0'
+ }
+ },
- // set language
- jsxc.l = jsxc.l10n.en;
- $.extend(jsxc.l, jsxc.l10n[lang]);
+ /**
+ * Parse a unix timestamp and return a formatted time string
+ *
+ * @memberOf jsxc
+ * @param {Object} unixtime
+ * @returns time of day and/or date
+ */
+ getFormattedTime: function(unixtime) {
+ var msgDate = new Date(parseInt(unixtime));
+ var date = ('0' + msgDate.getDate()).slice(-2);
+ var month = ('0' + (msgDate.getMonth() + 1)).slice(-2);
+ var year = msgDate.getFullYear();
+ var hours = ('0' + msgDate.getHours()).slice(-2);
+ var minutes = ('0' + msgDate.getMinutes()).slice(-2);
+ var dateNow = new Date(), time = hours + ':' + minutes;
+
+ // compare dates only
+ dateNow.setHours(0, 0, 0, 0);
+ msgDate.setHours(0, 0, 0, 0);
+
+ if (dateNow.getTime() !== msgDate.getTime()) {
+ return date + '.' + month + '.' + year + ' ' + time;
+ }
+ return time;
+ },
- // Check localStorage
- if (typeof (localStorage) === 'undefined') {
- jsxc.debug("Browser doesn't support localStorage.");
- return;
- }
+ /**
+ * Write debug message to console and to log.
+ *
+ * @memberOf jsxc
+ * @param {String} msg Debug message
+ * @param {Object} data
+ * @param {String} Could be warn|error|null
+ */
+ debug: function(msg, data, level) {
+ if (level) {
+ msg = '[' + level + '] ' + msg;
+ }
+ if (data) {
if (jsxc.storage.getItem('debug') === true) {
- jsxc.options.otr.debug = true;
- }
-
- // Register event listener for the storage event
- window.addEventListener('storage', jsxc.storage.onStorage, false);
-
- var lastActivity = jsxc.storage.getItem('lastActivity') || 0;
-
- if ((new Date()).getTime() - lastActivity &lt; jsxc.options.loginTimeout) {
- jsxc.restore = true;
- }
-
- // Check if we have to establish a new connection
- if (!jsxc.storage.getItem('rid') || !jsxc.storage.getItem('sid') || !jsxc.restore) {
-
- // Looking for a login form
- if (!jsxc.options.loginForm.form || !(jsxc.el_exists(jsxc.options.loginForm.form) && jsxc.el_exists(jsxc.options.loginForm.jid) && jsxc.el_exists(jsxc.options.loginForm.pass))) {
-
- if (jsxc.options.displayRosterMinimized()) {
- // Show minimized roster
- jsxc.storage.setUserItem('roster', 'hidden');
- jsxc.gui.roster.init();
- jsxc.gui.roster.noConnection();
- }
-
- return;
- }
-
- if (typeof jsxc.options.formFound === 'function') {
- jsxc.options.formFound.call();
- }
-
- // create jquery object
- var form = jsxc.options.loginForm.form = $(jsxc.options.loginForm.form);
- var events = form.data('events') || {
- submit: []
- };
- var submits = [];
-
- // save attached submit events and remove them. Will be reattached
- // in jsxc.submitLoginForm
- $.each(events.submit, function(index, val) {
- submits.push(val.handler);
- });
-
- form.data('submits', submits);
- form.off('submit');
-
- // Add jsxc login action to form
- form.submit(function() {
-
- var settings = jsxc.prepareLogin();
-
- if (settings !== false && (settings.xmpp.onlogin === "true" || settings.xmpp.onlogin === true)) {
- jsxc.options.loginForm.triggered = true;
-
- jsxc.xmpp.login();
-
- // Trigger submit in jsxc.xmpp.connected()
- return false;
- }
-
- return true;
- });
-
- } else {
-
- // Restore old connection
-
- jsxc.bid = jsxc.jidToBid(jsxc.storage.getItem('jid'));
-
- jsxc.gui.init();
-
- // Looking for logout element
- if (jsxc.options.logoutElement !== null && jsxc.options.logoutElement.length > 0) {
- jsxc.options.logoutElement.one('click', function() {
- jsxc.options.logoutElement = $(this);
- jsxc.triggeredFromLogout = true;
- return jsxc.xmpp.logout();
- });
- }
-
- if (typeof (jsxc.storage.getItem('alive')) === 'undefined' || !jsxc.restore) {
- jsxc.onMaster();
- } else {
- jsxc.checkMaster();
- }
- }
- },
-
- /**
- * Load settings and prepare jid.
- *
- * @memberOf jsxc
- * @returns Loaded settings
- */
- prepareLogin: function() {
- var username = $(jsxc.options.loginForm.jid).val();
- var password = $(jsxc.options.loginForm.pass).val();
-
- if (typeof jsxc.options.loadSettings !== 'function') {
- jsxc.error('No loadSettings function given. Abort.');
- return;
- }
-
- jsxc.gui.showWaitAlert(jsxc.l.Logging_in);
-
- var settings = jsxc.options.loadSettings.call(this, username, password);
-
- if (settings === false || settings === null || typeof settings === 'undefined') {
- jsxc.warn('No settings provided');
-
- return false;
- }
-
- if (typeof settings.xmpp.username === 'string') {
- username = settings.xmpp.username;
- }
-
- var resource = (settings.xmpp.resource) ? '/' + settings.xmpp.resource : '';
- var domain = settings.xmpp.domain;
- var jid;
-
- if (username.match(/@(.*)$/)) {
- jid = (username.match(/\/(.*)$/)) ? username : username + resource;
- } else {
- jid = username + '@' + domain + resource;
- }
-
- if (typeof jsxc.options.loginForm.preJid === 'function') {
- jid = jsxc.options.loginForm.preJid(jid);
- }
-
- jsxc.bid = jsxc.jidToBid(jid);
-
- settings.xmpp.username = jid.split('@')[0];
- settings.xmpp.domain = jid.split('@')[1].split('/')[0];
- settings.xmpp.resource = jid.split('@')[1].split('/')[1] || "";
-
- $.each(settings, function(key, val) {
- jsxc.options.set(key, val);
- });
-
- jsxc.options.xmpp.jid = jid;
- jsxc.options.xmpp.password = password;
-
- return settings;
- },
-
- /**
- * Called if the script is a slave
- */
- onSlave: function() {
- jsxc.debug('I am the slave.');
-
- jsxc.role_allocation = true;
-
- jsxc.restoreRoster();
- jsxc.restoreWindows();
- jsxc.restoreCompleted = true;
-
- $(document).trigger('restoreCompleted.jsxc');
- },
-
- /**
- * Called if the script is the master
- */
- onMaster: function() {
- jsxc.debug('I am master.');
-
- jsxc.master = true;
-
- // Init local storage
- jsxc.storage.setItem('alive', 0);
- jsxc.storage.setItem('alive_busy', 0);
- if (!jsxc.storage.getUserItem('windowlist')) {
- jsxc.storage.setUserItem('windowlist', []);
- }
-
- // Sending keepalive signal
- jsxc.startKeepAlive();
-
- if (jsxc.options.get('otr').enable) {
- // create or load DSA key and call _onMaster
- jsxc.otr.createDSA();
- } else {
- jsxc._onMaster();
- }
- },
-
- /**
- * Second half of the onMaster routine
- */
- _onMaster: function() {
-
- // create otr objects, if we lost the master
- if (jsxc.role_allocation) {
- $.each(jsxc.storage.getUserItem('windowlist'), function(index, val) {
- jsxc.otr.create(val);
- });
- }
-
- jsxc.role_allocation = true;
-
- if (jsxc.restore && !jsxc.restoreCompleted) {
- jsxc.restoreRoster();
- jsxc.restoreWindows();
- jsxc.restoreCompleted = true;
-
- $(document).trigger('restoreCompleted.jsxc');
- }
-
- // Prepare notifications
- if (jsxc.restore) {
- var noti = jsxc.storage.getUserItem('notification') || 2;
- if (jsxc.options.notification && noti > 0 && jsxc.notification.hasSupport()) {
- if (jsxc.notification.hasPermission()) {
- jsxc.notification.init();
- } else {
- jsxc.notification.prepareRequest();
- }
- } else {
- // No support => disable
- jsxc.options.notification = false;
- }
- }
-
- $(document).on('connectionReady.jsxc', function() {
- jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.storage.getItem('jid'), 'own');
- });
-
- jsxc.xmpp.login();
- },
-
- /**
- * Checks if there is a master
- */
- checkMaster: function() {
- jsxc.debug('check master');
-
- jsxc.to = window.setTimeout(jsxc.onMaster, 1000);
- jsxc.storage.ink('alive');
- },
-
- /**
- * Start sending keep-alive signal
- */
- startKeepAlive: function() {
- jsxc.keepalive = window.setInterval(jsxc.keepAlive, jsxc.options.timeout - 1000);
- },
-
- /**
- * Sends the keep-alive signal to signal that the master is still there.
- */
- keepAlive: function() {
- jsxc.storage.ink('alive');
-
- if (jsxc.role_allocation) {
- jsxc.storage.setItem('lastActivity', (new Date()).getTime());
- }
- },
-
- /**
- * Send one keep-alive signal with higher timeout, and than resume with
- * normal signal
- */
- keepBusyAlive: function() {
- if (jsxc.toBusy) {
- window.clearTimeout(jsxc.toBusy);
- }
-
- if (jsxc.keepalive) {
- window.clearInterval(jsxc.keepalive);
- }
-
- jsxc.storage.ink('alive_busy');
- jsxc.toBusy = window.setTimeout(jsxc.startKeepAlive, jsxc.options.busyTimeout - 1000);
- },
-
- /**
- * Generates a random integer number between 0 and max
- *
- * @param {Integer} max
- * @return {Integer} random integer between 0 and max
- */
- random: function(max) {
- return Math.floor(Math.random() * max);
- },
-
- /**
- * Checks if there is a element with the given selector
- *
- * @param {String} selector jQuery selector
- * @return {Boolean}
- */
- el_exists: function(selector) {
- return $(selector).length > 0;
- },
-
- /**
- * Creates a CSS compatible string from a JID
- *
- * @param {type} jid Valid Jabber ID
- * @returns {String} css Compatible string
- */
- jidToCid: function(jid) {
- jsxc.warn('jsxc.jidToCid is deprecated!');
-
- var cid = Strophe.getBareJidFromJid(jid).replace('@', '-').replace(/\./g, '-').toLowerCase();
-
- return cid;
- },
-
- /**
- * Create comparable bar jid.
- *
- * @memberOf jsxc
- * @param jid
- * @returns comparable bar jid
- */
- jidToBid: function(jid) {
- return Strophe.getBareJidFromJid(jid).toLowerCase();
- },
-
- /**
- * Restore roster
- */
- restoreRoster: function() {
- var buddies = jsxc.storage.getUserItem('buddylist');
-
- if (!buddies || buddies.length === 0) {
- jsxc.debug('No saved buddylist.');
-
- jsxc.gui.roster.empty();
-
- return;
- }
-
- $.each(buddies, function(index, value) {
- jsxc.gui.roster.add(value);
- });
-
- $(document).trigger('cloaded.roster.jsxc');
- },
-
- /**
- * Restore all windows
- */
- restoreWindows: function() {
- var windows = jsxc.storage.getUserItem('windowlist');
-
- if (windows === null) {
- return;
- }
-
- $.each(windows, function(index, bid) {
- var window = jsxc.storage.getUserItem('window', bid);
-
- if (!window) {
- jsxc.debug('Associated window-element is missing: ' + bid);
- return true;
- }
-
- jsxc.gui.window.init(bid);
-
- if (!window.minimize) {
- jsxc.gui.window.show(bid);
- } else {
- jsxc.gui.window.hide(bid);
- }
-
- jsxc.gui.window.setText(bid, window.text);
- });
- },
-
- /**
- * This method submits the specified login form.
- */
- submitLoginForm: function() {
- var form = jsxc.options.loginForm.form.off('submit');
-
- // Attach original events
- var submits = form.data('submits') || [];
- $.each(submits, function(index, val) {
- form.submit(val);
- });
-
- if (form.find('#submit').length > 0) {
- form.find('#submit').click();
- } else {
- form.submit();
- }
- },
-
- /**
- * Escapes some characters to HTML character
- */
- escapeHTML: function(text) {
- text = text.replace(/&amp;/g, '&').replace(/&lt;/g, '&lt;').replace(/&gt;/g, '>');
- return text.replace(/&/g, '&amp;').replace(/&lt;/g, '&lt;').replace(/>/g, '&gt;');
- },
-
- /**
- * Removes all html tags.
- *
- * @memberOf jsxc
- * @param text
- * @returns stripped text
- */
- removeHTML: function(text) {
- return $('&lt;span>').html(text).text();
- },
-
- /**
- * Executes only one of the given events
- *
- * @param {string} obj.key event name
- * @param {function} obj.value function to execute
- * @returns {string} namespace of all events
- */
- switchEvents: function(obj) {
- var ns = Math.random().toString(36).substr(2, 12);
- var self = this;
-
- $.each(obj, function(key, val) {
- $(document).one(key + '.' + ns, function() {
- $(document).off('.' + ns);
-
- val.apply(self, arguments);
- });
- });
-
- return ns;
- },
-
- /**
- * Checks if tab is hidden.
- *
- * @returns {boolean} True if tab is hidden
- */
- isHidden: function() {
- var hidden = false;
-
- if (typeof document.hidden !== 'undefined') {
- hidden = document.hidden;
- } else if (typeof document.webkitHidden !== 'undefined') {
- hidden = document.webkitHidden;
- } else if (typeof document.mozHidden !== 'undefined') {
- hidden = document.mozHidden;
- } else if (typeof document.msHidden !== 'undefined') {
- hidden = document.msHidden;
- }
-
- // handle multiple tabs
- if (hidden && jsxc.master) {
- jsxc.storage.ink('hidden', 0);
- } else if (!hidden && !jsxc.master) {
- jsxc.storage.ink('hidden');
+ console.log(msg, data);
}
- return hidden;
- },
-
- /**
- * Replace %%tokens%% with correct translation.
- *
- * @param {String} text Given text
- * @returns {String} Translated string
- */
- translate: function(text) {
- return text.replace(/%%([a-zA-Z0-9_-}{ .!,?/'@]+)%%/g, function(s, key) {
- var k = key.replace(/ /gi, '_').replace(/[.!,?/'@]/g, '');
-
- if (!jsxc.l[k]) {
- jsxc.warn('No translation for: ' + k);
+ // try to convert data to string
+ var d;
+ try {
+ // clone html snippet
+ d = $("&lt;span>").prepend($(data).clone()).html();
+ } catch (err) {
+ try {
+ d = JSON.stringify(data);
+ } catch (err2) {
+ d = 'see js console';
}
-
- return jsxc.l[k] || key.replace(/_/g, ' ');
- });
- },
-
- /**
- * Executes the given function in jsxc namespace.
- *
- * @memberOf jsxc
- * @param {string} fnName Function name
- * @param {array} fnParams Function parameters
- * @returns Function return value
- */
- exec: function(fnName, fnParams) {
- var fnList = fnName.split('.');
- var fn = jsxc[fnList[0]];
- var i;
- for (i = 1; i &lt; fnList.length; i++) {
- fn = fn[fnList[i]];
}
- if (typeof fn === 'function') {
- return fn.apply(null, fnParams);
- }
+ jsxc.log = jsxc.log + msg + ': ' + d + '\n';
+ } else {
+ console.log(msg);
+ jsxc.log = jsxc.log + msg + '\n';
}
- };
+ },
/**
- * Set some options for the chat.
+ * Write warn message.
*
- * @namespace jsxc.options
+ * @memberOf jsxc
+ * @param {String} msg Warn message
+ * @param {Object} data
*/
- jsxc.options = {
-
- /** name of container application (e.g. owncloud or SOGo) */
- app_name: 'web applications',
-
- /** Timeout for the keepalive signal */
- timeout: 3000,
-
- /** Timeout for the keepalive signal if the master is busy */
- busyTimeout: 15000,
-
- /** OTR options */
- otr: {
- enable: true,
- ERROR_START_AKE: false,
- debug: false,
- SEND_WHITESPACE_TAG: true,
- WHITESPACE_START_AKE: true
- },
-
- /** xmpp options */
- xmpp: {
- url: null,
- jid: null,
- domain: null,
- password: null,
- overwrite: false,
- onlogin: true
- },
-
- /** default xmpp priorities */
- priority: {
- online: 0,
- chat: 0,
- away: 0,
- xa: 0,
- dnd: 0
- },
-
- /** If all 3 properties are set, the login form is used */
- loginForm: {
- /** jquery object from form */
- form: null,
-
- /** jquery object from input element which contains the jid */
- jid: null,
-
- /** jquery object from input element which contains the password */
- pass: null,
-
- /** manipulate JID from input element */
- preJid: function(jid) {
- return jid;
- },
-
- /**
- * Action after connected: submit [String] Submit form, false [boolean]
- * Do nothing, continue [String] Start chat
- */
- onConnected: 'submit',
-
- /**
- * Action after auth fail: submit [String] Submit form, false [boolean]
- * Do nothing, ask [String] Show auth fail dialog
- */
- onAuthFail: 'submit'
- },
-
- /** jquery object from logout element */
- logoutElement: null,
-
- /** How many messages should be logged? */
- numberOfMsg: 10,
-
- /** Default language */
- defaultLang: 'en',
-
- /** auto language detection */
- autoLang: true,
-
- /** Place for roster */
- rosterAppend: 'body',
-
- /** Should we use the HTML5 notification API? */
- notification: true,
-
- /** duration for notification */
- popupDuration: 6000,
-
- /** Absolute path root of JSXC installation */
- root: '',
-
- /** Timeout for restore in ms */
- loginTimeout: 1000 * 60 * 10,
-
- /**
- * This function decides wether the roster will be displayed or not if no
- * connection is found.
- */
- displayRosterMinimized: function() {
- return false;
- },
-
- /** Set to true if you want to hide offline buddies. */
- hideOffline: false,
-
- /** Mute notification sound? */
- muteNotification: false,
-
- /**
- * If no avatar is found, this function is called.
- *
- * @param jid Jid of that user.
- * @this {jQuery} Elements to update with probable .jsxc_avatar elements
- */
- defaultAvatar: function() {
-
- },
-
- /**
- * Returns permanent saved settings and overwrite default jsxc.options.
- *
- * @memberOf jsxc.options
- * @param username String username
- * @param password String password
- * @returns {object} at least xmpp.url
- */
- loadSettings: function() {
-
- },
-
- /**
- * Call this function to save user settings permanent.
- *
- * @memberOf jsxc.options
- * @param data Holds all data as key/value
- * @returns {boolean} false if function failes
- */
- saveSettinsPermanent: function() {
-
- },
-
- carbons: {
- /** Enable carbon copies? */
- enable: false
- }
- };
+ warn: function(msg, data) {
+ jsxc.debug(msg, data, 'WARN');
+ },
/**
- * Handle functions for chat window's and buddylist
+ * Write error message.
*
- * @namespace jsxc.gui
+ * @memberOf jsxc
+ * @param {String} msg Error message
+ * @param {Object} data
*/
- jsxc.gui = {
- /** Smilie token to file mapping */
- emotions: [ [ 'O:-) O:)', 'angel' ], [ '>:-( >:( &gt;:-( &gt;:(', 'angry' ], [ ':-) :)', 'smile' ], [ ':-D :D', 'grin' ], [ ':-( :(', 'sad' ], [ ';-) ;)', 'wink' ], [ ':-P :P', 'tonguesmile' ], [ '=-O', 'surprised' ], [ ':kiss: :-*', 'kiss' ], [ '8-) :cool:', 'sunglassess' ], [ ':\'-( :\'( :&amp;apos;-(', 'crysad' ], [ ':-/', 'doubt' ], [ ':-X :X', 'zip' ], [ ':yes:', 'thumbsup' ], [ ':no:', 'thumbsdown' ], [ ':beer:', 'beer' ], [ ':devil:', 'devil' ], [ ':kiss: :kissing:', 'kissing' ], [ '@->-- :rose: @-&gt;--', 'rose' ], [ ':music:', 'music' ], [ ':love:', 'love' ], [ ':zzz:', 'tired' ] ],
-
- /**
- * Different uri query actions as defined in XEP-0147.
- *
- * @namespace jsxc.gui.queryActions
- */
- queryActions: {
- /** xmpp:JID?message[;body=TEXT] */
- message: function(jid, params) {
- var win = jsxc.gui.window.open(jsxc.jidToBid(jid));
-
- if (params && typeof params.body === 'string') {
- win.find('.jsxc_textinput').val(params.body);
- }
- },
-
- /** xmpp:JID?remove */
- remove: function(jid) {
- jsxc.gui.showRemoveDialog(jsxc.jidToBid(jid));
- },
+ error: function(msg, data) {
+ jsxc.debug(msg, data, 'ERROR');
+ },
- /** xmpp:JID?subscribe[;name=NAME] */
- subscribe: function(jid, params) {
- jsxc.gui.showContactDialog(jid);
+ /** debug log */
+ log: '',
- if (params && typeof params.name) {
- $('#jsxc_alias').val(params.name);
- }
- },
+ /**
+ * Starts the action
+ *
+ * @memberOf jsxc
+ * @param {object} options
+ */
+ init: function(options) {
- /** xmpp:JID?vcard */
- vcard: function(jid) {
- jsxc.gui.showVcard(jid);
- }
- },
+ if (options) {
+ // override default options
+ $.extend(true, jsxc.options, options);
+ }
/**
- * Creates application skeleton.
+ * Getter method for options. Saved options will override default one.
*
- * @memberOf jsxc.gui
+ * @param {string} key option key
+ * @returns default or saved option value
*/
- init: function() {
- //Prevent duplicate windowList
- if ($('#jsxc_windowList').length > 0) {
- return;
- }
-
- $('body').append($(jsxc.gui.template.get('windowList')));
-
- $(window).resize(jsxc.gui.updateWindowListSB);
- $('#jsxc_windowList').resize(jsxc.gui.updateWindowListSB);
-
- $('#jsxc_windowListSB .jsxc_scrollLeft').click(function() {
- jsxc.gui.scrollWindowListBy(-200);
- });
- $('#jsxc_windowListSB .jsxc_scrollRight').click(function() {
- jsxc.gui.scrollWindowListBy(200);
- });
- $('#jsxc_windowList').on('wheel', function(ev) {
- if ($('#jsxc_windowList').data('isOver')) {
- jsxc.gui.scrollWindowListBy((ev.originalEvent.wheelDelta > 0) ? 200 : -200);
- }
- });
-
- jsxc.gui.tooltip('#jsxc_windowList');
-
- if (!jsxc.el_exists('#jsxc_roster')) {
- jsxc.gui.roster.init();
- }
+ jsxc.options.get = function(key) {
+ var local = jsxc.storage.getUserItem('options') || {};
- // prepare regexp for emotions
- $.each(jsxc.gui.emotions, function(i, val) {
- // escape characters
- var reg = val[0].replace(/(\/|\||\*|\.|\+|\?|\^|\$|\(|\)|\[|\]|\{|\})/g, '\\$1');
- reg = '(' + reg.split(' ').join('|') + ')';
- jsxc.gui.emotions[i][2] = new RegExp(reg, 'g');
- });
-
- // We need this often, so we creates some template jquery objects
- jsxc.gui.windowTemplate = $(jsxc.gui.template.get('chatWindow'));
- jsxc.gui.buddyTemplate = $(jsxc.gui.template.get('rosterBuddy'));
- },
+ return local[key] || jsxc.options[key];
+ };
/**
- * Init tooltip plugin for given jQuery selector.
+ * Setter method for options. Will write into localstorage.
*
- * @param {String} selector jQuery selector
- * @memberOf jsxc.gui
+ * @param {string} key option key
+ * @param {object} value option value
*/
- tooltip: function(selector) {
- $(selector).tooltip({
- show: {
- delay: 600
- },
- content: function() {
- return $(this).attr('title').replace(/\n/g, '&lt;br />');
- }
- });
- },
+ jsxc.options.set = function(key, value) {
+ jsxc.storage.updateItem('options', key, value, true);
+ };
- /**
- * Updates Information in roster and chatbar
- *
- * @param {String} bid bar jid
- */
- update: function(bid) {
- var data = jsxc.storage.getUserItem('buddy', bid);
+ jsxc.storageNotConform = jsxc.storage.getItem('storageNotConform');
+ if (jsxc.storageNotConform === null) {
+ jsxc.storageNotConform = 2;
+ }
- if (!data) {
- jsxc.debug('No data for ' + bid);
- return;
- }
+ // detect language
+ var lang;
+ if (jsxc.storage.getItem('lang') !== null) {
+ lang = jsxc.storage.getItem('lang');
+ } else if (jsxc.options.autoLang && navigator.language) {
+ lang = navigator.language.substr(0, 2);
+ } else {
+ lang = jsxc.options.defaultLang;
+ }
- var ri = jsxc.gui.roster.getItem(bid); // roster item from user
- var we = jsxc.gui.window.get(bid); // window element from user
- var ue = ri.add(we); // both
- var spot = $('.jsxc_spot[data-bid="' + bid + '"]');
-
- // Attach data to corresponding roster item
- ri.data(data);
-
- // Add online status
- ue.add(spot).removeClass('jsxc_' + jsxc.CONST.STATUS.join(' jsxc_')).addClass('jsxc_' + jsxc.CONST.STATUS[data.status]);
-
- // Change name and add title
- ue.find('.jsxc_name').add(spot).text(data.name).attr('title', jsxc.l.is + ' ' + jsxc.CONST.STATUS[data.status]);
-
- // Update gui according to encryption state
- switch (data.msgstate) {
- case 0:
- we.find('.jsxc_transfer').removeClass('jsxc_enc jsxc_fin').attr('title', jsxc.l.your_connection_is_unencrypted);
- we.find('.jsxc_settings .jsxc_verification').addClass('jsxc_disabled');
- we.find('.jsxc_settings .jsxc_transfer').text(jsxc.l.start_private);
- break;
- case 1:
- we.find('.jsxc_transfer').addClass('jsxc_enc').attr('title', jsxc.l.your_connection_is_encrypted);
- we.find('.jsxc_settings .jsxc_verification').removeClass('jsxc_disabled');
- we.find('.jsxc_settings .jsxc_transfer').text(jsxc.l.close_private);
- break;
- case 2:
- we.find('.jsxc_settings .jsxc_verification').addClass('jsxc_disabled');
- we.find('.jsxc_transfer').removeClass('jsxc_enc').addClass('jsxc_fin').attr('title', jsxc.l.your_buddy_closed_the_private_connection);
- we.find('.jsxc_settings .jsxc_transfer').text(jsxc.l.close_private);
- break;
- }
+ // initialize i18n translator
+ $.i18n.init({
+ lng: lang,
+ fallbackLng: 'en',
+ resStore: I18next,
+ // use localStorage and set expiration to a day
+ useLocalStorage: true,
+ localStorageExpirationTime: 60 * 60 * 24 * 1000,
+ });
+
+ // Check localStorage
+ if (typeof (localStorage) === 'undefined') {
+ jsxc.debug("Browser doesn't support localStorage.");
+ return;
+ }
- // update gui according to verification state
- if (data.trust) {
- we.find('.jsxc_transfer').addClass('jsxc_trust').attr('title', jsxc.l.your_buddy_is_verificated);
- } else {
- we.find('.jsxc_transfer').removeClass('jsxc_trust');
- }
+ if (jsxc.storage.getItem('debug') === true) {
+ jsxc.options.otr.debug = true;
+ }
- // update gui according to subscription state
- if (data.sub && data.sub !== 'both') {
- ue.addClass('jsxc_oneway');
- } else {
- ue.removeClass('jsxc_oneway');
- }
+ // Register event listener for the storage event
+ window.addEventListener('storage', jsxc.storage.onStorage, false);
- var info = '&lt;b>' + Strophe.getBareJidFromJid(data.jid) + '&lt;/b>\n';
- info += jsxc.translate('%%Subscription%%: %%' + data.sub + '%%\n');
- info += jsxc.translate('%%Status%%: %%' + jsxc.CONST.STATUS[data.status] + '%%');
+ var lastActivity = jsxc.storage.getItem('lastActivity') || 0;
- ri.find('.jsxc_name').attr('title', info);
+ if ((new Date()).getTime() - lastActivity &lt; jsxc.options.loginTimeout) {
+ jsxc.restore = true;
+ }
- if (data.avatar && data.avatar.length > 0) {
- jsxc.gui.updateAvatar(ue, data.jid, data.avatar);
- } else {
- jsxc.options.defaultAvatar.call(ue, data.jid);
- }
- },
+ $(document).on('connectionReady.jsxc', function() {
+ // Looking for logout element
+ if (jsxc.options.logoutElement !== null && jsxc.options.logoutElement.length > 0) {
+ var logout = function() {
+ jsxc.options.logoutElement = $(this);
+ jsxc.triggeredFromLogout = true;
+ return jsxc.xmpp.logout();
+ };
- /**
- * Update avatar on all given elements.
- *
- * @memberOf jsxc.gui
- * @param {jQuery} el Elements with subelement .jsxc_avatar
- * @param {string} jid Jid
- * @param {string} aid Avatar id (sha1 hash of image)
- */
- updateAvatar: function(el, jid, aid) {
+ jsxc.options.logoutElement.off('click', null, logout).one('click', logout);
+ }
+ });
- if (typeof aid === 'undefined') {
- if (typeof jsxc.options.defaultAvatar === 'function') {
- jsxc.options.defaultAvatar.call(el, jid);
- }
- return;
- }
+ // Check if we have to establish a new connection
+ if (!jsxc.storage.getItem('rid') || !jsxc.storage.getItem('sid') || !jsxc.restore) {
- var avatarSrc = jsxc.storage.getUserItem('avatar', aid);
+ // Looking for a login form
+ if (!jsxc.options.loginForm.form || !(jsxc.el_exists(jsxc.options.loginForm.form) && jsxc.el_exists(jsxc.options.loginForm.jid) && jsxc.el_exists(jsxc.options.loginForm.pass))) {
- var setAvatar = function(src) {
- if (src === 0 || src === '0') {
- jsxc.options.defaultAvatar.call(el, jid);
- return;
+ if (jsxc.options.displayRosterMinimized()) {
+ // Show minimized roster
+ jsxc.storage.setUserItem('roster', 'hidden');
+ jsxc.gui.roster.init();
+ jsxc.gui.roster.noConnection();
}
- el.find('.jsxc_avatar').removeAttr('style');
-
- el.find('.jsxc_avatar').css({
- 'background-image': 'url(' + src + ')',
- 'text-indent': '999px'
- });
- };
-
- if (avatarSrc !== null) {
- setAvatar(avatarSrc);
- } else {
- jsxc.xmpp.conn.vcard.get(function(stanza) {
- jsxc.debug('vCard', stanza);
-
- var vCard = $(stanza).find("vCard > PHOTO");
- var src;
-
- if (vCard.length === 0) {
- jsxc.debug('No photo provided');
- src = '0';
- } else if (vCard.find('EXTVAL').length > 0) {
- src = vCard.find('EXTVAL').text();
- } else {
- var img = vCard.find('BINVAL').text();
- var type = vCard.find('TYPE').text();
- src = 'data:' + type + ';base64,' + img;
- }
-
- // concat chunks
- src = src.replace(/[\t\r\n\f]/gi, '');
-
- jsxc.storage.setUserItem('avatar', aid, src);
- setAvatar(src);
- }, Strophe.getBareJidFromJid(jid), function(msg) {
- jsxc.warn('Could not load vcard.', msg);
-
- jsxc.storage.setUserItem('avatar', aid, 0);
- setAvatar(0);
- });
- }
- },
-
- /**
- * Updates scrollbar handlers.
- *
- * @memberOf jsxc.gui
- */
- updateWindowListSB: function() {
-
- if ($('#jsxc_windowList>ul').width() > $('#jsxc_windowList').width()) {
- $('#jsxc_windowListSB > div').removeClass('jsxc_disabled');
- } else {
- $('#jsxc_windowListSB > div').addClass('jsxc_disabled');
- $('#jsxc_windowList>ul').css('right', '0px');
- }
- },
-
- /**
- * Scroll window list by offset.
- *
- * @memberOf jsxc.gui
- * @param offset
- */
- scrollWindowListBy: function(offset) {
-
- var scrollWidth = $('#jsxc_windowList>ul').width();
- var width = $('#jsxc_windowList').width();
- var el = $('#jsxc_windowList>ul');
- var right = parseInt(el.css('right')) - offset;
- var padding = $("#jsxc_windowListSB").width();
-
- if (scrollWidth &lt; width) {
return;
}
- if (right > 0) {
- right = 0;
- }
-
- if (right &lt; width - scrollWidth - padding) {
- right = width - scrollWidth - padding;
+ if (typeof jsxc.options.formFound === 'function') {
+ jsxc.options.formFound.call();
}
- el.css('right', right + 'px');
- },
-
- /**
- * Returns the window element
- *
- * @param {String} bid
- * @returns {jquery} jQuery object of the window element
- */
- getWindow: function(bid) {
- jsxc.warn('jsxc.gui.getWindow is deprecated!');
-
- return jsxc.gui.window.get(bid);
- },
-
- /**
- * Toggle list with timeout, like menu or settings
- *
- * @memberof jsxc.gui
- */
- toggleList: function() {
- var self = $(this);
-
- self.disableSelection();
-
- var ul = self.find('ul');
- var slideUp = null;
-
- slideUp = function() {
- ul.slideUp({
- complete: function() {
- self.removeClass('jsxc_opened');
- }
- });
-
- $('body').off('click', null, slideUp);
+ // create jquery object
+ var form = jsxc.options.loginForm.form = $(jsxc.options.loginForm.form);
+ var events = form.data('events') || {
+ submit: []
};
+ var submits = [];
- $(this).click(function() {
-
- if (ul.is(":hidden")) {
- // hide other lists
- $('body').click();
- $('body').one('click', slideUp);
- } else {
- $('body').off('click', null, slideUp);
- }
-
- ul.slideToggle();
-
- window.clearTimeout(ul.data('timer'));
-
- self.toggleClass('jsxc_opened');
-
- return false;
- }).mouseleave(function() {
- ul.data('timer', window.setTimeout(slideUp, 2000));
- }).mouseenter(function() {
- window.clearTimeout(ul.data('timer'));
- });
- },
-
- /**
- * Creates and show loginbox
- */
- showLoginBox: function() {
- // Set focus to password field
- $(document).on("complete.dialog.jsxc", function() {
- $('#jsxc_password').focus();
+ // save attached submit events and remove them. Will be reattached
+ // in jsxc.submitLoginForm
+ $.each(events.submit, function(index, val) {
+ submits.push(val.handler);
});
- jsxc.gui.dialog.open(jsxc.gui.template.get('loginBox'));
-
- $('#jsxc_dialog').find('form').submit(function() {
+ form.data('submits', submits);
+ form.off('submit');
- $(this).find('input[type=submit]').prop('disabled', true);
-
- jsxc.options.loginForm.form = $(this);
- jsxc.options.loginForm.jid = $(this).find('#jsxc_username');
- jsxc.options.loginForm.pass = $(this).find('#jsxc_password');
+ // Add jsxc login action to form
+ form.submit(function() {
var settings = jsxc.prepareLogin();
- jsxc.triggeredFromBox = true;
- jsxc.options.loginForm.triggered = false;
+ if (settings !== false && (settings.xmpp.onlogin === "true" || settings.xmpp.onlogin === true)) {
+ jsxc.options.loginForm.triggered = true;
- if (settings === false) {
- jsxc.gui.showAuthFail();
- } else {
jsxc.xmpp.login();
- }
-
- return false;
- });
- },
-
- /**
- * Creates and show the fingerprint dialog
- *
- * @param {String} bid
- */
- showFingerprints: function(bid) {
- jsxc.gui.dialog.open(jsxc.gui.template.get('fingerprintsDialog', bid));
- },
-
- /**
- * Creates and show the verification dialog
- *
- * @param {String} bid
- */
- showVerification: function(bid) {
-
- // Check if there is a open dialog
- if ($('#jsxc_dialog').length > 0) {
- setTimeout(function() {
- jsxc.gui.showVerification(bid);
- }, 3000);
- return;
- }
-
- // verification only possible if the connection is encrypted
- if (jsxc.storage.getUserItem('buddy', bid).msgstate !== OTR.CONST.MSGSTATE_ENCRYPTED) {
- jsxc.warn('Connection not encrypted');
- return;
- }
-
- jsxc.gui.dialog.open(jsxc.gui.template.get('authenticationDialog', bid));
-
- // Add handler
-
- $('#jsxc_dialog > div:gt(0)').hide();
- $('#jsxc_dialog select').change(function() {
- $('#jsxc_dialog > div:gt(0)').hide();
- $('#jsxc_dialog > div:eq(' + $(this).prop('selectedIndex') + ')').slideDown({
- complete: function() {
- jsxc.gui.dialog.resize();
- }
- });
- });
-
- // Manual
- $('#jsxc_dialog > div:eq(1) a.creation').click(function() {
- if (jsxc.master) {
- jsxc.otr.objects[bid].trust = true;
- }
-
- jsxc.storage.updateUserItem('buddy', bid, 'trust', true);
-
- jsxc.gui.dialog.close();
-
- jsxc.storage.updateUserItem('buddy', bid, 'trust', true);
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.conversation_is_now_verified);
- jsxc.gui.update(bid);
- });
-
- // Question
- $('#jsxc_dialog > div:eq(2) a.creation').click(function() {
- var div = $('#jsxc_dialog > div:eq(2)');
- var sec = div.find('#jsxc_secret2').val();
- var quest = div.find('#jsxc_quest').val();
-
- if (sec === '' || quest === '') {
- // Add information for the user which form is missing
- div.find('input[value=""]').addClass('jsxc_invalid').keyup(function() {
- if ($(this).val().match(/.*/)) {
- $(this).removeClass('jsxc_invalid');
- }
- });
- return;
- }
-
- if (jsxc.master) {
- jsxc.otr.sendSmpReq(bid, sec, quest);
- } else {
- jsxc.storage.setUserItem('smp_' + bid, {
- sec: sec,
- quest: quest
- });
- }
-
- jsxc.gui.dialog.close();
-
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.authentication_query_sent);
- });
-
- // Secret
- $('#jsxc_dialog > div:eq(3) .creation').click(function() {
- var div = $('#jsxc_dialog > div:eq(3)');
- var sec = div.find('#jsxc_secret').val();
-
- if (sec === '') {
- // Add information for the user which form is missing
- div.find('#jsxc_secret').addClass('jsxc_invalid').keyup(function() {
- if ($(this).val().match(/.*/)) {
- $(this).removeClass('jsxc_invalid');
- }
- });
- return;
- }
-
- if (jsxc.master) {
- jsxc.otr.sendSmpReq(bid, sec);
- } else {
- jsxc.storage.setUserItem('smp_' + bid, {
- sec: sec,
- quest: null
- });
- }
-
- jsxc.gui.dialog.close();
-
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.authentication_query_sent);
- });
- },
-
- /**
- * Create and show approve dialog
- *
- * @param {type} from valid jid
- */
- showApproveDialog: function(from) {
- jsxc.gui.dialog.open(jsxc.gui.template.get('approveDialog'), {
- 'noClose': true
- });
-
- $('#jsxc_dialog .jsxc_their_jid').text(Strophe.getBareJidFromJid(from));
-
- $('#jsxc_dialog .jsxc_deny').click(function(ev) {
- ev.stopPropagation();
-
- jsxc.xmpp.resFriendReq(from, false);
-
- jsxc.gui.dialog.close();
- });
-
- $('#jsxc_dialog .jsxc_approve').click(function(ev) {
- ev.stopPropagation();
-
- var data = jsxc.storage.getUserItem('buddy', jsxc.jidToBid(from));
-
- jsxc.xmpp.resFriendReq(from, true);
-
- // If friendship is not mutual show contact dialog
- if (!data || data.sub === 'from') {
- $(document).one('close.dialog.jsxc', function() {
- jsxc.gui.showContactDialog(from);
- });
- }
-
- jsxc.gui.dialog.close();
- });
- },
-
- /**
- * Create and show dialog to add a buddy
- *
- * @param {string} [username] jabber id
- */
- showContactDialog: function(username) {
- jsxc.gui.dialog.open(jsxc.gui.template.get('contactDialog'));
-
- // If we got a friendship request, we would display the username in our
- // response
- if (username) {
- $('#jsxc_username').val(username);
- }
- $('#jsxc_dialog form').submit(function() {
- var username = $('#jsxc_username').val();
- var alias = $('#jsxc_alias').val();
-
- if (!username.match(/@(.*)$/)) {
- username += '@' + Strophe.getDomainFromJid(jsxc.storage.getItem('jid'));
- }
-
- // Check if the username is valid
- if (!username || !username.match(jsxc.CONST.REGEX.JID)) {
- // Add notification
- $('#jsxc_username').addClass('jsxc_invalid').keyup(function() {
- if ($(this).val().match(jsxc.CONST.REGEX.JID)) {
- $(this).removeClass('jsxc_invalid');
- }
- });
+ // Trigger submit in jsxc.xmpp.connected()
return false;
}
- jsxc.xmpp.addBuddy(username, alias);
-
- jsxc.gui.dialog.close();
-
- return false;
- });
- },
-
- /**
- * Create and show dialog to remove a buddy
- *
- * @param {type} bid
- * @returns {undefined}
- */
- showRemoveDialog: function(bid) {
-
- jsxc.gui.dialog.open(jsxc.gui.template.get('removeDialog', bid));
-
- var data = jsxc.storage.getUserItem('buddy', bid);
-
- $('#jsxc_dialog .creation').click(function(ev) {
- ev.stopPropagation();
-
- if (jsxc.master) {
- jsxc.xmpp.removeBuddy(data.jid);
- } else {
- // inform master
- jsxc.storage.setUserItem('deletebuddy', bid, {
- jid: data.jid
- });
- }
-
- jsxc.gui.dialog.close();
- });
- },
-
- /**
- * Create and show a wait dialog
- *
- * @param {type} msg message to display to the user
- * @returns {undefined}
- */
- showWaitAlert: function(msg) {
- jsxc.gui.dialog.open(jsxc.gui.template.get('waitAlert', null, msg), {
- 'noClose': true
- });
- },
-
- /**
- * Create and show a wait dialog
- *
- * @param {type} msg message to display to the user
- * @returns {undefined}
- */
- showAlert: function(msg) {
- jsxc.gui.dialog.open(jsxc.gui.template.get('alert', null, msg));
- },
-
- /**
- * Create and show a auth fail dialog
- *
- * @returns {undefined}
- */
- showAuthFail: function() {
- jsxc.gui.dialog.open(jsxc.gui.template.get('authFailDialog'));
-
- if (jsxc.options.loginForm.triggered !== false) {
- $('#jsxc_dialog .jsxc_cancel').hide();
- }
-
- $('#jsxc_dialog .creation').click(function() {
- jsxc.gui.dialog.close();
- });
-
- $('#jsxc_dialog .jsxc_cancel').click(function() {
- jsxc.submitLoginForm();
- });
- },
-
- /**
- * Create and show a confirm dialog
- *
- * @param {String} msg Message
- * @param {function} confirm
- * @param {function} dismiss
- * @returns {undefined}
- */
- showConfirmDialog: function(msg, confirm, dismiss) {
- jsxc.gui.dialog.open(jsxc.gui.template.get('confirmDialog', null, msg), {
- noClose: true
- });
-
- if (confirm) {
- $('#jsxc_dialog .creation').click(confirm);
- }
-
- if (dismiss) {
- $('#jsxc_dialog .jsxc_cancel').click(dismiss);
- }
- },
-
- /**
- * Show about dialog.
- *
- * @memberOf jsxc.gui
- */
- showAboutDialog: function() {
- jsxc.gui.dialog.open(jsxc.gui.template.get('aboutDialog'));
-
- $('#jsxc_dialog .jsxc_debuglog').click(function() {
- jsxc.gui.showDebugLog();
- });
- },
-
- /**
- * Show debug log.
- *
- * @memberOf jsxc.gui
- */
- showDebugLog: function() {
- var userInfo = '&lt;h3>User information&lt;/h3>';
-
- if (navigator) {
- var key;
- for (key in navigator) {
- if (navigator.hasOwnProperty(key) && typeof navigator[key] === 'string') {
- userInfo += '&lt;b>' + key + ':&lt;/b> ' + navigator[key] + '&lt;br />';
- }
- }
- }
-
- if (window.screen) {
- userInfo += '&lt;b>Height:&lt;/b> ' + window.screen.height + '&lt;br />';
- userInfo += '&lt;b>Width:&lt;/b> ' + window.screen.width + '&lt;br />';
- }
-
- userInfo += '&lt;b>jsxc version:&lt;/b> ' + jsxc.version + '&lt;br />';
-
- jsxc.gui.dialog.open('&lt;div class="jsxc_log">' + userInfo + '&lt;h3>Log&lt;/h3>&lt;pre>' + jsxc.escapeHTML(jsxc.log) + '&lt;/pre>&lt;/div>');
- },
-
- /**
- * Show vCard of user with the given bar jid.
- *
- * @memberOf jsxc.gui
- * @param {String} jid
- */
- showVcard: function(jid) {
- var bid = jsxc.jidToBid(jid);
- jsxc.gui.dialog.open(jsxc.gui.template.get('vCard', bid));
-
- var data = jsxc.storage.getUserItem('buddy', bid);
-
- if (data) {
- // Display resources and corresponding information
- var i, j, res, identities, identity = null, cap, client;
- for (i = 0; i &lt; data.res.length; i++) {
- res = data.res[i];
-
- identities = [];
- cap = jsxc.xmpp.getCapabilitiesByJid(bid + '/' + res);
-
- if (cap !== null && cap.identities !== null) {
- identities = cap.identities;
- }
-
- client = '';
- for (j = 0; j &lt; identities.length; j++) {
- identity = identities[j];
- if (identity.category === 'client') {
- if (client !== '') {
- client += ',\n';
- }
-
- client += identity.name + ' (' + identity.type + ')';
- }
- }
-
- var status = jsxc.storage.getUserItem('res', bid)[res];
-
- $('#jsxc_dialog ul.jsxc_vCard').append('&lt;li class="jsxc_sep">&lt;strong>' + jsxc.translate('%%Resource%%') + ':&lt;/strong> ' + res + '&lt;/li>');
- $('#jsxc_dialog ul.jsxc_vCard').append('&lt;li>&lt;strong>' + jsxc.translate('%%Client%%') + ':&lt;/strong> ' + client + '&lt;/li>');
- $('#jsxc_dialog ul.jsxc_vCard').append('&lt;li>' + jsxc.translate('&lt;strong>%%Status%%:&lt;/strong> %%' + jsxc.CONST.STATUS[status] + '%%') + '&lt;/li>');
- }
- }
-
- var printProp = function(el, depth) {
- var content = '';
-
- el.each(function() {
- var item = $(this);
- var children = $(this).children();
-
- content += '&lt;li>';
-
- var prop = jsxc.translate('%%' + item[0].tagName + '%%');
-
- if (prop !== ' ') {
- content += '&lt;strong>' + prop + ':&lt;/strong> ';
- }
-
- if (item[0].tagName === 'PHOTO') {
-
- } else if (children.length > 0) {
- content += '&lt;ul>';
- content += printProp(children, depth + 1);
- content += '&lt;/ul>';
- } else if (item.text() !== '') {
- content += jsxc.escapeHTML(item.text());
- }
-
- content += '&lt;/li>';
-
- if (depth === 0 && $('#jsxc_dialog ul.jsxc_vCard').length > 0) {
- if ($('#jsxc_dialog ul.jsxc_vCard li.jsxc_sep:first').length > 0) {
- $('#jsxc_dialog ul.jsxc_vCard li.jsxc_sep:first').before(content);
- } else {
- $('#jsxc_dialog ul.jsxc_vCard').append(content);
- }
- content = '';
- }
- });
-
- if (depth > 0) {
- return content;
- }
- };
-
- var failedToLoad = function() {
- if ($('#jsxc_dialog ul.jsxc_vCard').length === 0) {
- return;
- }
-
- $('#jsxc_dialog p').remove();
-
- var content = '&lt;p>';
- content += jsxc.translate('%%Sorry, your buddy doesn\'t provide any information.%%');
- content += '&lt;/p>';
-
- $('#jsxc_dialog').append(content);
- };
-
- jsxc.xmpp.loadVcard(bid, function(stanza) {
-
- if ($('#jsxc_dialog ul.jsxc_vCard').length === 0) {
- return;
- }
-
- $('#jsxc_dialog p').remove();
-
- var photo = $(stanza).find("vCard > PHOTO");
-
- if (photo.length > 0) {
- var img = photo.find('BINVAL').text();
- var type = photo.find('TYPE').text();
- var src = 'data:' + type + ';base64,' + img;
-
- if (photo.find('EXTVAL').length > 0) {
- src = photo.find('EXTVAL').text();
- }
-
- // concat chunks
- src = src.replace(/[\t\r\n\f]/gi, '');
-
- var img_el = $('&lt;img class="jsxc_vCard" alt="avatar" />');
- img_el.attr('src', src);
-
- $('#jsxc_dialog h3').before(img_el);
- }
-
- if ($(stanza).find('vCard').length === 0 || ($(stanza).find('vcard > *').length === 1 && photo.length === 1)) {
- failedToLoad();
- return;
- }
-
- printProp($(stanza).find('vcard > *'), 0);
-
- }, failedToLoad);
- },
-
- showSettings: function() {
- jsxc.gui.dialog.open(jsxc.gui.template.get('settings'));
-
- if (jsxc.options.get('xmpp').overwrite === 'false' || jsxc.options.get('xmpp').overwrite === false) {
- $('.jsxc_fieldsetXmpp').hide();
- }
-
- $('#jsxc_dialog form').each(function() {
- var self = $(this);
-
- self.find('input[type!="submit"]').each(function() {
- var id = this.id.split("-");
- var prop = id[0];
- var key = id[1];
- var type = this.type;
-
- var data = jsxc.options.get(prop);
-
- if (data && typeof data[key] !== 'undefined') {
- if (type === 'checkbox') {
- if (data[key] !== 'false' && data[key] !== false) {
- this.checked = 'checked';
- }
- } else {
- $(this).val(data[key]);
- }
- }
- });
- });
-
- $('#jsxc_dialog form').submit(function() {
-
- var self = $(this);
- var data = {};
-
- self.find('input[type!="submit"]').each(function() {
- var id = this.id.split("-");
- var prop = id[0];
- var key = id[1];
- var val;
- var type = this.type;
-
- if (type === 'checkbox') {
- val = this.checked;
- } else {
- val = $(this).val();
- }
-
- if (!data[prop]) {
- data[prop] = {};
- }
-
- data[prop][key] = val;
- });
-
- $.each(data, function(key, val) {
- jsxc.options.set(key, val);
- });
-
- var err = jsxc.options.saveSettinsPermanent.call(this, data);
-
- if (typeof self.attr('data-onsubmit') === 'string') {
- jsxc.exec(self.attr('data-onsubmit'), [ err ]);
- }
-
- setTimeout(function() {
- self.find('input[type="submit"]').effect('highlight', {
- color: (err) ? 'green' : 'red'
- }, 4000);
- }, 200);
-
- return false;
- });
- },
-
- /**
- * Show prompt for notification permission.
- *
- * @memberOf jsxc.gui
- */
- showRequestNotification: function() {
- jsxc.gui.showConfirmDialog(jsxc.translate("%%Should we notify you_%%"), function() {
- jsxc.gui.dialog.open(jsxc.gui.template.get('pleaseAccept'), {
- noClose: true
- });
-
- jsxc.notification.requestPermission();
- }, function() {
- $(document).trigger('notificationfailure.jsxc');
- });
- },
-
- showUnknownSender: function(bid) {
- jsxc.gui.showConfirmDialog(jsxc.translate('%%You_received_a_message_from_an_unknown_sender%% (' + bid + '). %%Do_you_want_to_display_them%%'), function() {
- jsxc.gui.dialog.close();
-
- jsxc.storage.saveBuddy(bid, {
- jid: bid,
- name: bid,
- status: 0,
- sub: 'none',
- res: []
- });
-
- jsxc.gui.window.open(bid);
-
- }, function() {
- // reset state
- jsxc.storage.removeUserItem('chat', bid);
+ return true;
});
- },
-
- /**
- * Change own presence to pres.
- *
- * @memberOf jsxc.gui
- * @param pres {CONST.STATUS} New presence state
- * @param external {boolean} True if triggered from other tab.
- */
- changePresence: function(pres, external) {
-
- if (external !== true) {
- jsxc.storage.setUserItem('presence', pres);
- }
-
- if (jsxc.master) {
- jsxc.xmpp.sendPres();
- }
-
- $('#jsxc_presence > span').text($('#jsxc_presence > ul .jsxc_' + pres).text());
-
- jsxc.gui.updatePresence('own', pres);
- },
- /**
- * Update all presence objects for given user.
- *
- * @memberOf jsxc.gui
- * @param bid bar jid of user.
- * @param {CONST.STATUS} pres New presence state.
- */
- updatePresence: function(bid, pres) {
-
- if (bid === 'own') {
- if (pres === 'dnd') {
- $('#jsxc_menu .jsxc_muteNotification').addClass('jsxc_disabled');
- jsxc.notification.muteSound(true);
- } else {
- $('#jsxc_menu .jsxc_muteNotification').removeClass('jsxc_disabled');
-
- if (!jsxc.options.get('muteNotification')) {
- jsxc.notification.unmuteSound(true);
- }
- }
- }
+ } else {
- $('.jsxc_presence[data-bid="' + bid + '"]').removeClass('jsxc_' + jsxc.CONST.STATUS.join(' jsxc_')).addClass('jsxc_' + pres);
- },
-
- /**
- * Switch read state to UNread.
- *
- * @memberOf jsxc.gui
- * @param bid
- */
- unreadMsg: function(bid) {
- var win = jsxc.gui.window.get(bid);
+ // Restore old connection
- jsxc.gui.roster.getItem(bid).add(win).addClass('jsxc_unreadMsg');
- jsxc.storage.updateUserItem('window', bid, 'unread', true);
- },
+ jsxc.bid = jsxc.jidToBid(jsxc.storage.getItem('jid'));
- /**
- * Switch read state to read.
- *
- * @memberOf jsxc.gui
- * @param bid
- */
- readMsg: function(bid) {
- var win = jsxc.gui.window.get(bid);
+ jsxc.gui.init();
- if (win.hasClass('jsxc_unreadMsg')) {
- jsxc.gui.roster.getItem(bid).add(win).removeClass('jsxc_unreadMsg');
- jsxc.storage.updateUserItem('window', bid, 'unread', false);
+ if (typeof (jsxc.storage.getItem('alive')) === 'undefined' || !jsxc.restore) {
+ jsxc.onMaster();
+ } else {
+ jsxc.checkMaster();
}
- },
-
- /**
- * This function searches for URI scheme according to XEP-0147.
- *
- * @memberOf jsxc.gui
- * @param container In which element should we search?
- */
- detectUriScheme: function(container) {
- container = (container) ? $(container) : $('body');
-
- container.find("a[href^='xmpp:']").each(function() {
-
- var element = $(this);
- var href = element.attr('href').replace(/^xmpp:/, '');
- var jid = href.split('?')[0];
- var action, params = {};
-
- if (href.indexOf('?') &lt; 0) {
- action = 'message';
- } else {
- var pairs = href.substring(href.indexOf('?') + 1).split(';');
- action = pairs[0];
-
- var i, key, value;
- for (i = 1; i &lt; pairs.length; i++) {
- key = pairs[i].split('=')[0];
- value = (pairs[i].indexOf('=') > 0) ? pairs[i].substring(pairs[i].indexOf('=') + 1) : null;
-
- params[decodeURIComponent(key)] = decodeURIComponent(value);
- }
- }
-
- if (typeof jsxc.gui.queryActions[action] === 'function') {
- element.addClass('jsxc_uriScheme jsxc_uriScheme_' + action);
-
- element.off('click').click(function(ev) {
- ev.stopPropagation();
-
- jsxc.gui.queryActions[action].call(jsxc, jid, params);
-
- return false;
- });
- }
- });
- },
-
- detectEmail: function(container) {
- container = (container) ? $(container) : $('body');
-
- container.find('a[href^="mailto:"]').each(function() {
- var spot = $("&lt;span>X&lt;/span>").addClass("jsxc_spot");
- var href = $(this).attr("href").replace(/^ *mailto:/, "").trim();
-
- if (href !== '' && href !== Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))) {
- var bid = jsxc.jidToBid(href);
- var self = $(this);
- var s = self.prev();
-
- if (!s.hasClass('jsxc_spot')) {
- s = spot.clone().attr('data-bid', bid);
-
- self.before(s);
- }
-
- s.off('click');
-
- if (jsxc.storage.getUserItem('buddy', bid)) {
- jsxc.gui.update(bid);
- s.click(function() {
- jsxc.gui.window.open(bid);
-
- return false;
- });
- } else {
- s.click(function() {
- jsxc.gui.showContactDialog(href);
-
- return false;
- });
- }
- }
- });
}
- };
+ },
/**
- * Handle functions related to the gui of the roster
+ * Load settings and prepare jid.
*
- * @namespace jsxc.gui.roster
+ * @memberOf jsxc
+ * @returns Loaded settings
*/
- jsxc.gui.roster = {
-
- /**
- * Init the roster skeleton
- *
- * @memberOf jsxc.gui.roster
- * @returns {undefined}
- */
- init: function() {
- $(jsxc.options.rosterAppend + ':first').append($(jsxc.gui.template.get('roster')));
-
- if (jsxc.options.get('hideOffline')) {
- $('#jsxc_menu .jsxc_hideOffline').text(jsxc.translate('%%Show offline%%'));
- $('#jsxc_buddylist').addClass('jsxc_hideOffline');
- }
-
- $('#jsxc_menu .jsxc_settings').click(function() {
- jsxc.gui.showSettings();
- });
-
- $('#jsxc_menu .jsxc_hideOffline').click(function() {
- var hideOffline = !jsxc.options.get('hideOffline');
-
- if (hideOffline) {
- $('#jsxc_buddylist').addClass('jsxc_hideOffline');
- } else {
- $('#jsxc_buddylist').removeClass('jsxc_hideOffline');
- }
-
- $(this).text(hideOffline ? jsxc.translate('%%Show offline%%') : jsxc.translate('%%Hide offline%%'));
-
- jsxc.options.set('hideOffline', hideOffline);
- });
-
- if (jsxc.options.get('muteNotification')) {
- jsxc.notification.muteSound();
- }
-
- $('#jsxc_menu .jsxc_muteNotification').click(function() {
-
- if (jsxc.storage.getUserItem('presence') === 'dnd') {
- return;
- }
-
- // invert current choice
- var mute = !jsxc.options.get('muteNotification');
-
- if (mute) {
- jsxc.notification.muteSound();
- } else {
- jsxc.notification.unmuteSound();
- }
- });
-
- $('#jsxc_roster .jsxc_addBuddy').click(function() {
- jsxc.gui.showContactDialog();
- });
-
- $('#jsxc_roster .jsxc_onlineHelp').click(function() {
- window.open("http://www.jsxc.org/manual.html", "onlineHelp");
- });
-
- $('#jsxc_roster .jsxc_about').click(function() {
- jsxc.gui.showAboutDialog();
- });
-
- $('#jsxc_toggleRoster').click(function() {
- jsxc.gui.roster.toggle();
- });
-
- $('#jsxc_presence > ul > li').click(function() {
- var self = $(this);
-
- jsxc.gui.changePresence(self.data('pres'));
- });
-
- $('#jsxc_buddylist').slimScroll({
- distance: '3px',
- height: ($('#jsxc_roster').height() - 31) + 'px',
- width: $('#jsxc_buddylist').width() + 'px',
- color: '#fff',
- opacity: '0.5'
- });
-
- $('#jsxc_roster > .jsxc_bottom > div').each(function() {
- jsxc.gui.toggleList.call($(this));
- });
-
- if (jsxc.storage.getUserItem('roster') === 'hidden') {
- $('#jsxc_roster').css('right', '-200px');
- $('#jsxc_windowList > ul').css('paddingRight', '10px');
- }
-
- var pres = jsxc.storage.getUserItem('presence') || 'online';
- $('#jsxc_presence > span').text($('#jsxc_presence > ul .jsxc_' + pres).text());
- jsxc.gui.updatePresence('own', pres);
-
- jsxc.gui.tooltip('#jsxc_roster');
-
- jsxc.notice.load();
-
- $(document).trigger('ready.roster.jsxc');
- },
-
- /**
- * Create roster item and add it to the roster
- *
- * @param {String} bid bar jid
- */
- add: function(bid) {
- var data = jsxc.storage.getUserItem('buddy', bid);
- var bud = jsxc.gui.buddyTemplate.clone().attr('data-bid', bid).attr('data-type', data.type || 'chat');
-
- jsxc.gui.roster.insert(bid, bud);
-
- bud.click(function() {
- jsxc.gui.window.open(bid);
- });
-
- bud.find('.jsxc_chaticon').click(function() {
- jsxc.gui.window.open(bid);
- });
-
- bud.find('.jsxc_rename').click(function() {
- jsxc.gui.roster.rename(bid);
- return false;
- });
-
- bud.find('.jsxc_delete').click(function() {
- jsxc.gui.showRemoveDialog(bid);
- return false;
- });
-
- var expandClick = function() {
- bud.trigger('extra.jsxc');
-
- bud.toggleClass('jsxc_expand');
-
- jsxc.gui.updateAvatar(bud, data.jid, data.avatar);
- return false;
- };
-
- bud.find('.jsxc_control').click(expandClick);
- bud.dblclick(expandClick);
-
- bud.find('.jsxc_vcardicon').click(function() {
- jsxc.gui.showVcard(data.jid);
- return false;
- });
-
- jsxc.gui.update(bid);
-
- // update scrollbar
- $('#jsxc_buddylist').slimScroll({
- scrollTo: '0px'
- });
-
- $(document).trigger('add.roster.jsxc', [ bid, data, bud ]);
- },
-
- getItem: function(bid) {
- return $("#jsxc_buddylist > li[data-bid='" + bid + "']");
- },
-
- /**
- * Insert roster item. First order: online > away > offline. Second order:
- * alphabetical of the name
- *
- * @param {type} bid
- * @param {jquery} li roster item which should be insert
- * @returns {undefined}
- */
- insert: function(bid, li) {
+ prepareLogin: function() {
+ var username = $(jsxc.options.loginForm.jid).val();
+ var password = $(jsxc.options.loginForm.pass).val();
- var data = jsxc.storage.getUserItem('buddy', bid);
- var listElements = $('#jsxc_buddylist > li');
- var insert = false;
-
- // Insert buddy with no mutual friendship to the end
- var status = (data.sub === 'both') ? data.status : -1;
-
- listElements.each(function() {
-
- var thisStatus = ($(this).data('sub') === 'both') ? $(this).data('status') : -1;
-
- if (($(this).data('name').toLowerCase() > data.name.toLowerCase() && thisStatus === status) || thisStatus &lt; status) {
-
- $(this).before(li);
- insert = true;
-
- return false;
- }
- });
-
- if (!insert) {
- li.appendTo('#jsxc_buddylist');
- }
- },
-
- /**
- * Initiate reorder of roster item
- *
- * @param {type} bid
- * @returns {undefined}
- */
- reorder: function(bid) {
- jsxc.gui.roster.insert(bid, jsxc.gui.roster.remove(bid));
- },
-
- /**
- * Removes buddy from roster
- *
- * @param {String} bid bar jid
- * @return {JQueryObject} Roster list element
- */
- remove: function(bid) {
- return jsxc.gui.roster.getItem(bid).detach();
- },
-
- /**
- * Removes buddy from roster and clean up
- *
- * @param {String} bid bar compatible jid
- */
- purge: function(bid) {
- if (jsxc.master) {
- jsxc.storage.removeUserItem('buddy', bid);
- jsxc.storage.removeUserItem('otr', bid);
- jsxc.storage.removeUserItem('otr_version_' + bid);
- jsxc.storage.removeUserItem('chat', bid);
- jsxc.storage.removeUserItem('window', bid);
- jsxc.storage.removeUserElement('buddylist', bid);
- jsxc.storage.removeUserElement('windowlist', bid);
- }
-
- jsxc.gui.window._close(bid);
- jsxc.gui.roster.remove(bid);
- },
-
- /**
- * Create input element for rename action
- *
- * @param {type} bid
- * @returns {undefined}
- */
- rename: function(bid) {
- var name = jsxc.gui.roster.getItem(bid).find('.jsxc_name');
- var options = jsxc.gui.roster.getItem(bid).find('.jsxc_options, .jsxc_control');
- var input = $('&lt;input type="text" name="name"/>');
-
- options.hide();
- name = name.replaceWith(input);
-
- input.val(name.text());
- input.keypress(function(ev) {
- if (ev.which !== 13) {
- return;
- }
+ if (typeof jsxc.options.loadSettings !== 'function') {
+ jsxc.error('No loadSettings function given. Abort.');
+ return;
+ }
- options.show();
- input.replaceWith(name);
- jsxc.gui.roster._rename(bid, $(this).val());
+ jsxc.gui.showWaitAlert($.t('Logging_in'));
- $('html').off('click');
- });
+ var settings = jsxc.options.loadSettings.call(this, username, password);
- // Disable html click event, if click on input
- input.click(function() {
- return false;
- });
+ if (settings === false || settings === null || typeof settings === 'undefined') {
+ jsxc.warn('No settings provided');
- $('html').one('click', function() {
- options.show();
- input.replaceWith(name);
- jsxc.gui.roster._rename(bid, input.val());
- });
- },
+ return false;
+ }
- /**
- * Rename buddy
- *
- * @param {type} bid
- * @param {type} newname new name of buddy
- * @returns {undefined}
- */
- _rename: function(bid, newname) {
- if (jsxc.master) {
- var d = jsxc.storage.getUserItem('buddy', bid);
- var iq = $iq({
- type: 'set'
- }).c('query', {
- xmlns: 'jabber:iq:roster'
- }).c('item', {
- jid: Strophe.getBareJidFromJid(d.jid),
- name: newname
- });
- jsxc.xmpp.conn.sendIQ(iq);
- }
+ if (typeof settings.xmpp.username === 'string') {
+ username = settings.xmpp.username;
+ }
- jsxc.storage.updateUserItem('buddy', bid, 'name', newname);
- jsxc.gui.update(bid);
- },
+ var resource = (settings.xmpp.resource) ? '/' + settings.xmpp.resource : '';
+ var domain = settings.xmpp.domain;
+ var jid;
- /**
- * Toogle complete roster
- *
- * @param {Integer} d Duration in ms
- */
- toggle: function(d) {
- var duration = d || 500;
+ if (username.match(/@(.*)$/)) {
+ jid = (username.match(/\/(.*)$/)) ? username : username + resource;
+ } else {
+ jid = username + '@' + domain + resource;
+ }
- var roster = $('#jsxc_roster');
- var wl = $('#jsxc_windowList');
+ if (typeof jsxc.options.loginForm.preJid === 'function') {
+ jid = jsxc.options.loginForm.preJid(jid);
+ }
- var roster_width = roster.innerWidth();
- var roster_right = parseFloat($('#jsxc_roster').css('right'));
- var state = (roster_right &lt; 0) ? 'shown' : 'hidden';
+ jsxc.bid = jsxc.jidToBid(jid);
- jsxc.storage.setUserItem('roster', state);
+ settings.xmpp.username = jid.split('@')[0];
+ settings.xmpp.domain = jid.split('@')[1].split('/')[0];
+ settings.xmpp.resource = jid.split('@')[1].split('/')[1] || "";
- roster.animate({
- right: ((roster_width + roster_right) * -1) + 'px'
- }, duration);
- wl.animate({
- right: (10 - roster_right) + 'px'
- }, duration);
+ $.each(settings, function(key, val) {
+ jsxc.options.set(key, val);
+ });
- $(document).trigger('toggle.roster.jsxc', [ state, duration ]);
- },
+ jsxc.options.xmpp.jid = jid;
+ jsxc.options.xmpp.password = password;
- /**
- * Shows a text with link to a login box that no connection exists.
- */
- noConnection: function() {
- $('#jsxc_roster').addClass('jsxc_noConnection');
+ return settings;
+ },
- $('#jsxc_roster').append($('&lt;p>' + jsxc.l.no_connection + '&lt;/p>').append(' &lt;a>' + jsxc.l.relogin + '&lt;/a>').click(function() {
- jsxc.gui.showLoginBox();
- }));
- },
+ /**
+ * Called if the script is a slave
+ */
+ onSlave: function() {
+ jsxc.debug('I am the slave.');
- /**
- * Shows a text with link to add a new buddy.
- *
- * @memberOf jsxc.gui.roster
- */
- empty: function() {
- var text = $('&lt;p>' + jsxc.l.Your_roster_is_empty_add_a + '&lt;/p>');
- var link = $('&lt;a>' + jsxc.l.new_buddy + '&lt;/a>');
+ jsxc.role_allocation = true;
- link.click(function() {
- jsxc.gui.showContactDialog();
- });
- text.append(link);
- text.append('.');
+ jsxc.restoreRoster();
+ jsxc.restoreWindows();
+ jsxc.restoreCompleted = true;
- $('#jsxc_roster').prepend(text);
- }
- };
+ $(document).trigger('restoreCompleted.jsxc');
+ },
/**
- * Wrapper for dialog
- *
- * @namespace jsxc.gui.dialog
+ * Called if the script is the master
*/
- jsxc.gui.dialog = {
- /**
- * Open a Dialog.
- *
- * @memberOf jsxc.gui.dialog
- * @param {String} data Data of the dialog
- * @param {Object} [o] Options for the dialog
- * @param {Boolean} [o.noClose] If true, hide all default close options
- * @returns {jQuery} Dialog object
- */
- open: function(data, o) {
-
- var opt = o || {};
-
- // default options
- var options = {};
- options = {
- onComplete: function() {
- $('#jsxc_dialog .jsxc_close').click(function(ev) {
- ev.preventDefault();
-
- jsxc.gui.dialog.close();
- });
-
- // workaround for old colorbox version (used by firstrunwizard)
- if (options.closeButton === false) {
- $('#cboxClose').hide();
- }
-
- $.colorbox.resize();
-
- $(document).trigger('complete.dialog.jsxc');
- },
- onClosed: function() {
- $(document).trigger('close.dialog.jsxc');
- },
- onCleanup: function() {
- $(document).trigger('cleanup.dialog.jsxc');
- },
- opacity: 0.5
- };
-
- if (opt.noClose) {
- options.overlayClose = false;
- options.escKey = false;
- options.closeButton = false;
- delete opt.noClose;
- }
-
- $.extend(options, opt);
-
- options.html = '&lt;div id="jsxc_dialog">' + data + '&lt;/div>';
+ onMaster: function() {
+ jsxc.debug('I am master.');
- $.colorbox(options);
+ jsxc.master = true;
- return $('#jsxc_dialog');
- },
+ // Init local storage
+ jsxc.storage.setItem('alive', 0);
+ jsxc.storage.setItem('alive_busy', 0);
+ if (!jsxc.storage.getUserItem('windowlist')) {
+ jsxc.storage.setUserItem('windowlist', []);
+ }
- /**
- * Close current dialog.
- */
- close: function() {
- jsxc.debug('close dialog');
- $.colorbox.close();
- },
+ // Sending keepalive signal
+ jsxc.startKeepAlive();
- /**
- * Resizes current dialog.
- *
- * @param {Object} options e.g. width and height
- */
- resize: function(options) {
- $.colorbox.resize(options);
+ if (jsxc.options.get('otr').enable) {
+ // create or load DSA key and call _onMaster
+ jsxc.otr.createDSA();
+ } else {
+ jsxc._onMaster();
}
- };
+ },
/**
- * Handle functions related to the gui of the window
- *
- * @namespace jsxc.gui.window
+ * Second half of the onMaster routine
*/
- jsxc.gui.window = {
- /**
- * Init a window skeleton
- *
- * @memberOf jsxc.gui.window
- * @param {String} bid
- * @returns {jQuery} Window object
- */
- init: function(bid) {
- if (jsxc.gui.window.get(bid).length > 0) {
- return jsxc.gui.window.get(bid);
- }
-
- var win = jsxc.gui.windowTemplate.clone().attr('data-bid', bid).hide().appendTo('#jsxc_windowList > ul').show('slow');
- var data = jsxc.storage.getUserItem('buddy', bid);
-
- // Attach jid to window
- win.data('jid', data.jid);
-
- // Add handler
-
- jsxc.gui.toggleList.call(win.find('.jsxc_settings'));
-
- win.find('.jsxc_verification').click(function() {
- jsxc.gui.showVerification(bid);
- });
-
- win.find('.jsxc_fingerprints').click(function() {
- jsxc.gui.showFingerprints(bid);
- });
-
- win.find('.jsxc_transfer').click(function() {
- jsxc.otr.toggleTransfer(bid);
- });
-
- win.find('.jsxc_bar').click(function() {
- jsxc.gui.window.toggle(bid);
- });
-
- win.find('.jsxc_close').click(function() {
- jsxc.gui.window.close(bid);
- });
-
- win.find('.jsxc_clear').click(function() {
- jsxc.gui.window.clear(bid);
- });
-
- win.find('.jsxc_tools').click(function() {
- return false;
- });
-
- win.find('.jsxc_textinput').keyup(function(ev) {
- var body = $(this).val();
-
- if (ev.which === 13) {
- body = '';
- }
-
- jsxc.storage.updateUserItem('window', bid, 'text', body);
-
- if (ev.which === 27) {
- jsxc.gui.window.close(bid);
- }
- }).keypress(function(ev) {
- if (ev.which !== 13 || !$(this).val()) {
- return;
- }
-
- jsxc.gui.window.postMessage(bid, 'out', $(this).val());
-
- $(this).val('');
- }).focus(function() {
- // remove unread flag
- jsxc.gui.readMsg(bid);
- }).mouseenter(function() {
- $('#jsxc_windowList').data('isOver', true);
- }).mouseleave(function() {
- $('#jsxc_windowList').data('isOver', false);
- });
-
- win.find('.jsxc_textarea').click(function() {
- win.find('.jsxc_textinput').focus();
- });
-
- win.find('.jsxc_textarea').slimScroll({
- height: '234px',
- distance: '3px'
- });
-
- win.find('.jsxc_fade').hide();
-
- win.find('.jsxc_name').disableSelection();
-
- win.find('.slimScrollDiv').resizable({
- handles: 'w, nw, n',
- minHeight: 234,
- minWidth: 250,
- resize: function(event, ui) {
- win.width(ui.size.width);
- win.find('.jsxc_textarea').slimScroll({
- height: ui.size.height
- });
- win.find('.jsxc_emoticons').css('top', (ui.size.height + 6) + 'px');
- }
- });
-
- if ($.inArray(bid, jsxc.storage.getUserItem('windowlist')) &lt; 0) {
-
- // add window to windowlist
- var wl = jsxc.storage.getUserItem('windowlist');
- wl.push(bid);
- jsxc.storage.setUserItem('windowlist', wl);
-
- // init window element in storage
- jsxc.storage.setUserItem('window', bid, {
- minimize: true,
- text: '',
- unread: false
- });
- } else {
-
- if (jsxc.storage.getUserItem('window', bid).unread) {
- jsxc.gui.unreadMsg(bid);
- }
- }
+ _onMaster: function() {
- $.each(jsxc.gui.emotions, function(i, val) {
- var ins = val[0].split(' ')[0];
- var li = $('&lt;li>&lt;div title="' + ins + '" class="jsxc_' + val[1] + '"/>&lt;/li>');
- li.click(function() {
- win.find('input').val(win.find('input').val() + ins);
- win.find('input').focus();
- });
- win.find('.jsxc_emoticons ul').append(li);
+ // create otr objects, if we lost the master
+ if (jsxc.role_allocation) {
+ $.each(jsxc.storage.getUserItem('windowlist'), function(index, val) {
+ jsxc.otr.create(val);
});
+ }
- jsxc.gui.toggleList.call(win.find('.jsxc_emoticons'));
-
- jsxc.gui.window.restoreChat(bid);
-
- jsxc.gui.update(bid);
-
- jsxc.gui.updateWindowListSB();
-
- // create related otr object
- if (jsxc.master && !jsxc.otr.objects[bid]) {
- jsxc.otr.create(bid);
- } else {
- jsxc.otr.enable(bid);
- }
-
- $(document).trigger('init.window.jsxc', [ win ]);
-
- return win;
- },
-
- /**
- * Returns the window element
- *
- * @param {String} bid
- * @returns {jquery} jQuery object of the window element
- */
- get: function(id) {
- return $("li.jsxc_windowItem[data-bid='" + jsxc.jidToBid(id) + "']");
- },
-
- /**
- * Open a window, related to the bid. If the window doesn't exist, it will
- * be created.
- *
- * @param {String} bid
- * @returns {jQuery} Window object
- */
- open: function(bid) {
- var win = jsxc.gui.window.init(bid);
- jsxc.gui.window.show(bid);
- jsxc.gui.window.highlight(bid);
-
- var padding = $("#jsxc_windowListSB").width();
- var innerWidth = $('#jsxc_windowList>ul').width();
- var outerWidth = $('#jsxc_windowList').width() - padding;
-
- if (innerWidth > outerWidth) {
- var offset = parseInt($('#jsxc_windowList>ul').css('right'));
- var width = win.outerWidth(true);
+ jsxc.role_allocation = true;
- var right = innerWidth - win.position().left - width + offset;
- var left = outerWidth - (innerWidth - win.position().left) - offset;
+ if (jsxc.restore && !jsxc.restoreCompleted) {
+ jsxc.restoreRoster();
+ jsxc.restoreWindows();
+ jsxc.restoreCompleted = true;
- if (left &lt; 0) {
- jsxc.gui.scrollWindowListBy(left * -1);
- }
+ $(document).trigger('restoreCompleted.jsxc');
+ }
- if (right &lt; 0) {
- jsxc.gui.scrollWindowListBy(right);
+ // Prepare notifications
+ if (jsxc.restore) {
+ var noti = jsxc.storage.getUserItem('notification');
+ noti = (typeof noti === 'number')? noti : 2;
+ if (jsxc.options.notification && noti > 0 && jsxc.notification.hasSupport()) {
+ if (jsxc.notification.hasPermission()) {
+ jsxc.notification.init();
+ } else {
+ jsxc.notification.prepareRequest();
}
- }
-
- return win;
- },
-
- /**
- * Close chatwindow and clean up
- *
- * @param {String} bid bar jid
- */
- close: function(bid) {
-
- if (jsxc.gui.window.get(bid).length === 0) {
- jsxc.warn('Want to close a window, that is not open.');
- return;
- }
-
- jsxc.storage.removeUserElement('windowlist', bid);
- jsxc.storage.removeUserItem('window', bid);
-
- if (jsxc.storage.getUserItem('buddylist').indexOf(bid) &lt; 0) {
- // delete data from unknown sender
-
- jsxc.storage.removeUserItem('buddy', bid);
- jsxc.storage.removeUserItem('chat', bid);
- }
-
- jsxc.gui.window._close(bid);
- },
-
- /**
- * Close chatwindow
- *
- * @param {String} bid
- */
- _close: function(bid) {
- jsxc.gui.window.get(bid).hide('slow', function() {
- $(this).remove();
-
- jsxc.gui.updateWindowListSB();
- });
- },
-
- /**
- * Toggle between minimize and maximize of the text area
- *
- * @param {String} bid bar jid
- */
- toggle: function(bid) {
-
- var win = jsxc.gui.window.get(bid);
-
- if (win.parents("#jsxc_windowList").length === 0) {
- return;
- }
-
- if (win.find('.jsxc_fade').is(':hidden')) {
- jsxc.gui.window.show(bid);
} else {
- jsxc.gui.window.hide(bid);
- }
-
- jsxc.gui.updateWindowListSB();
- },
-
- /**
- * Maximize text area and save
- *
- * @param {String} bid
- */
- show: function(bid) {
-
- jsxc.storage.updateUserItem('window', bid, 'minimize', false);
-
- jsxc.gui.window._show(bid);
- },
-
- /**
- * Maximize text area
- *
- * @param {String} bid
- * @returns {undefined}
- */
- _show: function(bid) {
- var win = jsxc.gui.window.get(bid);
- jsxc.gui.window.get(bid).find('.jsxc_fade').slideDown();
- win.removeClass('jsxc_min');
-
- // If the area is hidden, the scrolldown function doesn't work. So we
- // call it here.
- jsxc.gui.window.scrollDown(bid);
-
- if (jsxc.restoreCompleted) {
- win.find('.jsxc_textinput').focus();
+ // No support => disable
+ jsxc.options.notification = false;
}
+ }
- win.trigger('show.window.jsxc');
- },
-
- /**
- * Minimize text area and save
- *
- * @param {String} bid
- */
- hide: function(bid) {
- jsxc.storage.updateUserItem('window', bid, 'minimize', true);
-
- jsxc.gui.window._hide(bid);
- },
-
- /**
- * Minimize text area
- *
- * @param {String} bid
- */
- _hide: function(bid) {
- jsxc.gui.window.get(bid).addClass('jsxc_min').find(' .jsxc_fade').slideUp();
-
- jsxc.gui.window.get(bid).trigger('hidden.window.jsxc');
- },
-
- /**
- * Highlight window
- *
- * @param {type} bid
- */
- highlight: function(bid) {
- var el = jsxc.gui.window.get(bid).find(' .jsxc_bar');
-
- if (!el.is(':animated')) {
- el.effect('highlight', {
- color: 'orange'
- }, 2000);
- }
- },
-
- /**
- * Scroll chat area to the bottom
- *
- * @param {String} bid bar jid
- */
- scrollDown: function(bid) {
- var chat = jsxc.gui.window.get(bid).find('.jsxc_textarea');
-
- // check if chat exist
- if (chat.length === 0) {
- return;
- }
-
- chat.slimScroll({
- scrollTo: (chat.get(0).scrollHeight + 'px')
- });
- },
-
- /**
- * Write Message to chat area and save
- *
- * @param {String} bid bar jid
- * @param {String} direction 'in' message is received or 'out' message is
- * send
- * @param {String} msg Message to display
- * @param {boolean} encrypted Was this message encrypted? Default: false
- * @param {boolean} forwarded Was this message forwarded? Default: false
- * @param {integer} stamp Timestamp
- */
- postMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
- var data = jsxc.storage.getUserItem('buddy', bid);
- var html_msg = msg;
-
- // remove html tags and reencode html tags
- msg = jsxc.removeHTML(msg);
- msg = jsxc.escapeHTML(msg);
-
- // exceptions:
-
- if (direction === 'out' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED && forwarded !== true) {
- direction = 'sys';
- msg = jsxc.l.your_message_wasnt_send_please_end_your_private_conversation;
- }
-
- if (direction === 'in' && data.msgstate === OTR.CONST.MSGSTATE_FINISHED) {
- direction = 'sys';
- msg = jsxc.l.unencrypted_message_received + ' ' + msg;
- }
-
- if (direction === 'out' && data.sub === 'from') {
- direction = 'sys';
- msg = jsxc.l.your_message_wasnt_send_because_you_have_no_valid_subscription;
- }
-
- encrypted = encrypted || data.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED;
- var post = jsxc.storage.saveMessage(bid, direction, msg, encrypted, forwarded, stamp);
-
- if (direction === 'in') {
- $(document).trigger('postmessagein.jsxc', [ bid, html_msg ]);
- }
-
- if (direction === 'out' && jsxc.master && forwarded !== true) {
- jsxc.xmpp.sendMessage(bid, html_msg, post.uid);
- }
-
- jsxc.gui.window._postMessage(bid, post);
-
- if (direction === 'out' && msg === '?') {
- jsxc.gui.window.postMessage(bid, 'sys', '42');
- }
- },
-
- /**
- * Write Message to chat area
- *
- * @param {String} bid bar jid
- * @param {Object} post Post object with direction, msg, uid, received
- * @param {Bool} restore If true no highlights are used and so unread flag
- * set
- */
- _postMessage: function(bid, post, restore) {
- var win = jsxc.gui.window.get(bid);
- var msg = post.msg;
- var direction = post.direction;
- var uid = post.uid;
-
- if (win.find('.jsxc_textinput').is(':not(:focus)') && jsxc.restoreCompleted && direction === 'in' && !restore) {
- jsxc.gui.window.highlight(bid);
- }
-
- msg = msg.replace(jsxc.CONST.REGEX.URL, function(url) {
-
- var href = (url.match(/^https?:\/\//i)) ? url : 'http://' + url;
-
- return '&lt;a href="' + href + '" target="_blank">' + url + '&lt;/a>';
- });
-
- msg = msg.replace(new RegExp('(xmpp:)?(' + jsxc.CONST.REGEX.JID.source + ')(\\?[^\\s]+\\b)?', 'i'), function(match, protocol, jid, action) {
- if (protocol === 'xmpp:') {
- if (typeof action === 'string') {
- jid += action;
- }
-
- return '&lt;a href="xmpp:' + jid + '">' + jid + '&lt;/a>';
- }
-
- return '&lt;a href="mailto:' + jid + '" target="_blank">' + jid + '&lt;/a>';
- });
-
- $.each(jsxc.gui.emotions, function(i, val) {
- msg = msg.replace(val[2], function(match, p1) {
-
- // escape value for alt and title, this prevents double
- // replacement
- var esc = '', i;
- for (i = 0; i &lt; p1.length; i++) {
- esc += '&#' + p1.charCodeAt(i) + ';';
- }
-
- return '&lt;div title="' + esc + '" class="jsxc_emoticon jsxc_' + val[1] + '"/>';
- });
- });
-
- var msgDiv = $("&lt;div>"), msgTsDiv = $("&lt;div>");
- msgDiv.addClass('jsxc_chatmessage jsxc_' + direction);
- msgDiv.attr('id', uid);
- msgDiv.html('&lt;div>' + msg + '&lt;/div>');
- msgTsDiv.addClass('jsxc_timestamp');
- msgTsDiv.html(jsxc.getFormattedTime(post.stamp));
-
- if (post.received || false) {
- msgDiv.addClass('jsxc_received');
- }
-
- if (post.forwarded) {
- msgDiv.addClass('jsxc_forwarded');
- }
-
- if (post.encrypted) {
- msgDiv.addClass('jsxc_encrypted');
- }
-
- if (direction === 'sys') {
- jsxc.gui.window.get(bid).find('.jsxc_textarea').append('&lt;div style="clear:both"/>');
- } else if (typeof post.stamp !== 'undefined') {
- msgDiv.append(msgTsDiv);
- }
-
- win.find('.jsxc_textarea').append(msgDiv);
-
- jsxc.gui.detectUriScheme(win);
- jsxc.gui.detectEmail(win);
-
- jsxc.gui.window.scrollDown(bid);
-
- // if window has no focus set unread flag
- if (!win.find('.jsxc_textinput').is(':focus') && jsxc.restoreCompleted && !restore) {
- jsxc.gui.unreadMsg(bid);
- }
- },
-
- /**
- * Set text into input area
- *
- * @param {type} bid
- * @param {type} text
- * @returns {undefined}
- */
- setText: function(bid, text) {
- jsxc.gui.window.get(bid).find('.jsxc_textinput').val(text);
- },
-
- /**
- * Load old log into chat area
- *
- * @param {type} bid
- * @returns {undefined}
- */
- restoreChat: function(bid) {
- var chat = jsxc.storage.getUserItem('chat', bid);
-
- while (chat !== null && chat.length > 0) {
- var c = chat.pop();
- jsxc.gui.window._postMessage(bid, c, true);
- }
- },
+ $(document).on('connectionReady.jsxc', function() {
+ jsxc.gui.updateAvatar($('#jsxc_avatar'), jsxc.jidToBid(jsxc.storage.getItem('jid')), 'own');
+ });
- /**
- * Clear chat history
- *
- * @param {type} bid
- * @returns {undefined}
- */
- clear: function(bid) {
- jsxc.storage.setUserItem('chat', bid, []);
- jsxc.gui.window.get(bid).find('.jsxc_textarea').empty();
- }
- };
+ jsxc.xmpp.login();
+ },
/**
- * Hold all HTML templates.
- *
- * @namespace jsxc.gui.template
+ * Checks if there is a master
*/
- jsxc.gui.template = {
- /**
- * Return requested template and replace all placeholder
- *
- * @memberOf jsxc.gui.template;
- * @param {type} name template name
- * @param {type} bid
- * @param {type} msg
- * @returns {String} HTML Template
- */
- get: function(name, bid, msg) {
-
- // common placeholder
- var ph = {
- my_priv_fingerprint: jsxc.storage.getUserItem('priv_fingerprint') ? jsxc.storage.getUserItem('priv_fingerprint').replace(/(.{8})/g, '$1 ') : jsxc.l.not_available,
- my_jid: jsxc.storage.getItem('jid') || '',
- my_node: Strophe.getNodeFromJid(jsxc.storage.getItem('jid') || '') || '',
- root: jsxc.options.root,
- app_name: jsxc.options.app_name
- };
-
- // placeholder depending on bid
- if (bid) {
- var data = jsxc.storage.getUserItem('buddy', bid);
-
- $.extend(ph, {
- bid_priv_fingerprint: (data && data.fingerprint) ? data.fingerprint.replace(/(.{8})/g, '$1 ') : jsxc.l.not_available,
- bid_jid: bid,
- bid_name: (data && data.name) ? data.name : bid
- });
- }
-
- // placeholder depending on msg
- if (msg) {
- $.extend(ph, {
- msg: msg
- });
- }
+ checkMaster: function() {
+ jsxc.debug('check master');
- var ret = jsxc.gui.template[name];
-
- if (typeof (ret) === 'string') {
- ret = jsxc.translate(ret);
-
- ret = ret.replace(/\{\{([a-zA-Z0-9_\-]+)\}\}/g, function(s, key) {
- return (typeof ph[key] === 'string') ? ph[key] : s;
- });
-
- return ret;
- }
-
- jsxc.debug('Template not available: ' + name);
- return name;
- },
- authenticationDialog: '&lt;h3>Verification&lt;/h3>\
- &lt;p>%%Authenticating_a_buddy_helps_%%&lt;/p>\
- &lt;div>\
- &lt;p style="margin:0px;">%%How_do_you_want_to_authenticate_your_buddy%%&lt;/p>\
- &lt;select size="1">\
- &lt;option>%%Select_method%%&lt;/option>\
- &lt;option>%%Manual%%&lt;/option>\
- &lt;option>%%Question%%&lt;/option>\
- &lt;option>%%Secret%%&lt;/option>\
- &lt;/select>\
- &lt;/div>\
- &lt;div style="display:none">\
- &lt;p class=".jsxc_explanation">%%To_verify_the_fingerprint_%%&lt;/p>\
- &lt;p>&lt;strong>%%Your_fingerprint%%&lt;/strong>&lt;br />\
- &lt;span style="text-transform:uppercase">{{my_priv_fingerprint}}&lt;/span>&lt;/p>\
- &lt;p>&lt;strong>%%Buddy_fingerprint%%&lt;/strong>&lt;br />\
- &lt;span style="text-transform:uppercase">{{bid_priv_fingerprint}}&lt;/span>&lt;/p>&lt;br />\
- &lt;p class="jsxc_right">&lt;a href="#" class="jsxc_close button">%%Close%%&lt;/a> &lt;a href="#" class="button creation">%%Compared%%&lt;/a>&lt;/p>\
- &lt;/div>\
- &lt;div style="display:none">\
- &lt;p class=".jsxc_explanation">%%To_authenticate_using_a_question_%%&lt;/p>\
- &lt;p>&lt;label for="jsxc_quest">%%Question%%:&lt;/label>&lt;input type="text" name="quest" id="jsxc_quest" />&lt;/p>\
- &lt;p>&lt;label for="jsxc_secret2">%%Secret%%:&lt;/label>&lt;input type="text" name="secret2" id="jsxc_secret2" />&lt;/p>\
- &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_close">%%Close%%&lt;/a> &lt;a href="#" class="button creation">%%Ask%%&lt;/a>&lt;/p>\
- &lt;/div>\
- &lt;div style="display:none">\
- &lt;p class=".jsxc_explanation">%%To_authenticate_pick_a_secret_%%&lt;/p>\
- &lt;p>&lt;label for="jsxc_secret">%%Secret%%:&lt;/label>&lt;input type="text" name="secret" id="jsxc_secret" />&lt;/p>\
- &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_close">%%Close%%&lt;/a> &lt;a href="#" class="button creation">%%Compare%%&lt;/a>&lt;/p>\
- &lt;/div>',
- fingerprintsDialog: '&lt;div>\
- &lt;p class="jsxc_maxWidth">%%A_fingerprint_%%&lt;/p>\
- &lt;p>&lt;strong>%%Your_fingerprint%%&lt;/strong>&lt;br />\
- &lt;span style="text-transform:uppercase">{{my_priv_fingerprint}}&lt;/span>&lt;/p>\
- &lt;p>&lt;strong>%%Buddy_fingerprint%%&lt;/strong>&lt;br />\
- &lt;span style="text-transform:uppercase">{{bid_priv_fingerprint}}&lt;/span>&lt;/p>&lt;br />\
- &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_close">%%Close%%&lt;/a>&lt;/p>\
- &lt;/div>',
- chatWindow: '&lt;li class="jsxc_min jsxc_windowItem">\
- &lt;div class="jsxc_window">\
- &lt;div class="jsxc_bar">\
- &lt;div class="jsxc_avatar">☺&lt;/div>\
- &lt;div class="jsxc_tools">\
- &lt;div class="jsxc_settings">\
- &lt;ul>\
- &lt;li class="jsxc_fingerprints jsxc_otr jsxc_disabled">%%Fingerprints%%&lt;/li>\
- &lt;li class="jsxc_verification">%%Authentication%%&lt;/li>\
- &lt;li class="jsxc_transfer jsxc_otr jsxc_disabled">%%start_private%%&lt;/li>\
- &lt;li class="jsxc_clear">%%clear_history%%&lt;/li>\
- &lt;/ul>\
- &lt;/div>\
- &lt;div class="jsxc_transfer jsxc_otr jsxc_disabled"/>\
- &lt;div class="jsxc_close">×&lt;/div>\
- &lt;/div>\
- &lt;div class="jsxc_name"/>\
- &lt;div class="jsxc_cycle"/>\
- &lt;/div>\
- &lt;div class="jsxc_fade">\
- &lt;div class="jsxc_gradient"/>\
- &lt;div class="jsxc_textarea"/>\
- &lt;div class="jsxc_emoticons">&lt;ul/>&lt;/div>\
- &lt;input type="text" class="jsxc_textinput" placeholder="...%%Message%%" />\
- &lt;/div>\
- &lt;/div>\
- &lt;/li>',
- roster: '&lt;div id="jsxc_roster">\
- &lt;ul id="jsxc_buddylist">&lt;/ul>\
- &lt;div class="jsxc_bottom jsxc_presence" data-bid="own">\
- &lt;div id="jsxc_avatar">\
- &lt;div class="jsxc_avatar">☺&lt;/div>\
- &lt;/div>\
- &lt;div id="jsxc_menu">\
- &lt;span>&lt;/span>\
- &lt;ul>\
- &lt;li class="jsxc_settings">%%Settings%%&lt;/li>\
- &lt;li class="jsxc_muteNotification">%%Mute%%&lt;/li>\
- &lt;li class="jsxc_addBuddy">%%Add_buddy%%&lt;/li>\
- &lt;li class="jsxc_hideOffline">%%Hide offline%%&lt;/li>\
- &lt;li class="jsxc_onlineHelp">%%Online help%%&lt;/li>\
- &lt;li class="jsxc_about">%%About%%&lt;/li>\
- &lt;/ul>\
- &lt;/div>\
- &lt;div id="jsxc_notice">\
- &lt;span>&lt;/span>\
- &lt;ul>&lt;/ul>\
- &lt;/div>\
- &lt;div id="jsxc_presence">\
- &lt;span>%%Online%%&lt;/span>\
- &lt;ul>\
- &lt;li data-pres="online" class="jsxc_online">%%Online%%&lt;/li>\
- &lt;li data-pres="chat" class="jsxc_chat">%%Chatty%%&lt;/li>\
- &lt;li data-pres="away" class="jsxc_away">%%Away%%&lt;/li>\
- &lt;li data-pres="xa" class="jsxc_xa">%%Extended away%%&lt;/li>\
- &lt;li data-pres="dnd" class="jsxc_dnd">%%dnd%%&lt;/li>\
- &lt;!-- &lt;li data-pres="offline" class="jsxc_offline">%%Offline%%&lt;/li> -->\
- &lt;/ul>\
- &lt;/div>\
- &lt;/div>\
- &lt;div id="jsxc_toggleRoster">&lt;/div>\
- &lt;/div>',
- windowList: '&lt;div id="jsxc_windowList">\
- &lt;ul>&lt;/ul>\
- &lt;/div>\
- &lt;div id="jsxc_windowListSB">\
- &lt;div class="jsxc_scrollLeft jsxc_disabled">&lt;&lt;/div>\
- &lt;div class="jsxc_scrollRight jsxc_disabled">&gt;&lt;/div>\
- &lt;/div>',
- rosterBuddy: '&lt;li>\
- &lt;div class="jsxc_avatar">☺&lt;/div>\
- &lt;div class="jsxc_control">&lt;/div>\
- &lt;div class="jsxc_name"/>\
- &lt;div class="jsxc_options jsxc_right">\
- &lt;div class="jsxc_rename" title="%%rename_buddy%%">✎&lt;/div>\
- &lt;div class="jsxc_delete" title="%%delete_buddy%%">✘&lt;/div>\
- &lt;/div>\
- &lt;div class="jsxc_options jsxc_left">\
- &lt;div class="jsxc_chaticon" title="%%send_message%%"/>\
- &lt;div class="jsxc_vcardicon" title="%%get_info%%">i&lt;/div>\
- &lt;/div>\
- &lt;/li>',
- loginBox: '&lt;h3>%%Login%%&lt;/h3>\
- &lt;form>\
- &lt;p>&lt;label for="jsxc_username">%%Username%%:&lt;/label>\
- &lt;input type="text" name="username" id="jsxc_username" required="required" value="{{my_node}}"/>&lt;/p>\
- &lt;p>&lt;label for="jsxc_password">%%Password%%:&lt;/label>\
- &lt;input type="password" name="password" required="required" id="jsxc_password" />&lt;/p>\
- &lt;div class="bottom_submit_section">\
- &lt;input type="reset" class="button jsxc_close" name="clear" value="%%Cancel%%"/>\
- &lt;input type="submit" class="button creation" name="commit" value="%%Connect%%"/>\
- &lt;/div>\
- &lt;/form>',
- contactDialog: '&lt;h3>%%Add_buddy%%&lt;/h3>\
- &lt;p class=".jsxc_explanation">%%Type_in_the_full_username_%%&lt;/p>\
- &lt;form>\
- &lt;p>&lt;label for="jsxc_username">* %%Username%%:&lt;/label>\
- &lt;input type="text" name="username" id="jsxc_username" pattern="^[^\\x22&\'\\/:&lt;>@\\s]+(@[.\\-_\\w]+)?" required="required" />&lt;/p>\
- &lt;p>&lt;label for="jsxc_alias">%%Alias%%:&lt;/label>\
- &lt;input type="text" name="alias" id="jsxc_alias" />&lt;/p>\
- &lt;p class="jsxc_right">\
- &lt;input class="button" type="submit" value="%%Add%%" />\
- &lt;/p>\
- &lt;form>',
- approveDialog: '&lt;h3>%%Subscription_request%%&lt;/h3>\
- &lt;p>%%You_have_a_request_from%% &lt;b class="jsxc_their_jid">&lt;/b>.&lt;/p>\
- &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_deny">%%Deny%%&lt;/a> &lt;a href="#" class="button creation jsxc_approve">%%Approve%%&lt;/a>&lt;/p>',
- removeDialog: '&lt;h3>%%Remove buddy%%&lt;/h3>\
- &lt;p class="jsxc_maxWidth">%%You_are_about_to_remove_%%&lt;/p>\
- &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_cancel jsxc_close">%%Cancel%%&lt;/a> &lt;a href="#" class="button creation">%%Remove%%&lt;/a>&lt;/p>',
- waitAlert: '&lt;h3>{{msg}}&lt;/h3>\
- &lt;p>%%Please_wait%%&lt;/p>\
- &lt;p class="jsxc_center">&lt;img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" />&lt;/p>',
- alert: '&lt;h3>%%Alert%%&lt;/h3>\
- &lt;p>{{msg}}&lt;/p>\
- &lt;p class="jsxc_right">&lt;a href="#" class="button jsxc_close jsxc_cancel">%%Ok%%&lt;/a>&lt;/p>',
- authFailDialog: '&lt;h3>%%Login_failed%%&lt;/h3>\
- &lt;p>%%Sorry_we_cant_authentikate_%%&lt;/p>\
- &lt;p class="jsxc_right">\
- &lt;a class="button jsxc_cancel">%%Continue_without_chat%%&lt;/a>\
- &lt;a class="button creation">%%Retry%%&lt;/a>\
- &lt;/p>',
- confirmDialog: '&lt;p>{{msg}}&lt;/p>\
- &lt;p class="jsxc_right">\
- &lt;a class="button jsxc_cancel jsxc_close">%%Dismiss%%&lt;/a>\
- &lt;a class="button creation">%%Confirm%%&lt;/a>\
- &lt;/p>',
- pleaseAccept: '&lt;p>%%Please_accept_%%&lt;/p>',
- aboutDialog: '&lt;h3>JavaScript XMPP Chat&lt;/h3>\
- &lt;p>&lt;b>Version: &lt;/b>' + jsxc.version + '&lt;br />\
- &lt;a href="http://jsxc.org/" target="_blank">www.jsxc.org&lt;/a>&lt;br />\
- &lt;br />\
- &lt;i>Released under the MIT license&lt;/i>&lt;br />\
- &lt;br />\
- Real-time chat app for {{app_name}} and more.&lt;br />\
- Requires an external &lt;a href="https://xmpp.org/xmpp-software/servers/" target="_blank">XMPP server&lt;/a>.&lt;br />\
- &lt;br />\
- &lt;b>Credits: &lt;/b> &lt;a href="http://www.beepzoid.com/old-phones/" target="_blank">David English (Ringtone)&lt;/a>,\
- &lt;a href="https://soundcloud.com/freefilmandgamemusic/ping-1?in=freefilmandgamemusic/sets/free-notification-sounds-and" target="_blank">CameronMusic (Ping)&lt;/a>&lt;/p>\
- &lt;p class="jsxc_right">&lt;a class="button jsxc_debuglog" href="#">Show debug log&lt;/a>&lt;/p>',
- vCard: '&lt;h3>%%Info_about%% {{bid_name}}&lt;/h3>\
- &lt;ul class="jsxc_vCard">&lt;/ul>\
- &lt;p>&lt;img src="{{root}}/img/loading.gif" alt="wait" width="32px" height="32px" /> %%Please_wait%%...&lt;/p>',
- settings: '&lt;h3>%%User_settings%%&lt;/h3>\
- &lt;p>&lt;/p>\
- &lt;form>\
- &lt;fieldset class="jsxc_fieldsetXmpp jsxc_fieldset">\
- &lt;legend>%%Login options%%&lt;/legend>\
- &lt;label for="xmpp-url">%%BOSH url%%&lt;/label>&lt;input type="text" id="xmpp-url" readonly="readonly"/>&lt;br />\
- &lt;label for="xmpp-username">%%Username%%&lt;/label>&lt;input type="text" id="xmpp-username"/>&lt;br />\
- &lt;label for="xmpp-domain">%%Domain%%&lt;/label>&lt;input type="text" id="xmpp-domain"/>&lt;br />\
- &lt;label for="xmpp-resource">%%Resource%%&lt;/label>&lt;input type="text" id="xmpp-resource"/>&lt;br />\
- &lt;label for="xmpp-onlogin">%%On login%%&lt;/label>&lt;input type="checkbox" id="xmpp-onlogin" />&lt;br />\
- &lt;input type="submit" value="%%Save%%"/>\
- &lt;/fieldset>\
- &lt;/form>\
- &lt;p>&lt;/p>\
- &lt;form>\
- &lt;fieldset class="jsxc_fieldsetPriority jsxc_fieldset">\
- &lt;legend>%%Priority%%&lt;/legend>\
- &lt;label for="priority-online">%%Online%%&lt;/label>&lt;input type="number" value="0" id="priority-online" min="-128" max="127" step="1" required="required"/>&lt;br />\
- &lt;label for="priority-chat">%%Chatty%%&lt;/label>&lt;input type="number" value="0" id="priority-chat" min="-128" max="127" step="1" required="required"/>&lt;br />\
- &lt;label for="priority-away">%%Away%%&lt;/label>&lt;input type="number" value="0" id="priority-away" min="-128" max="127" step="1" required="required"/>&lt;br />\
- &lt;label for="priority-xa">%%Extended_away%%&lt;/label>&lt;input type="number" value="0" id="priority-xa" min="-128" max="127" step="1" required="required"/>&lt;br />\
- &lt;label for="priority-dnd">%%dnd%%&lt;/label>&lt;input type="number" value="0" id="priority-dnd" min="-128" max="127" step="1" required="required"/>&lt;br />\
- &lt;input type="submit" value="%%Save%%"/>\
- &lt;/fieldset>\
- &lt;/form>\
- &lt;p>&lt;/p>\
- &lt;form data-onsubmit="xmpp.carbons.refresh">\
- &lt;fieldset class="jsxc_fieldsetCarbons jsxc_fieldset">\
- &lt;legend>%%Carbon copy%%&lt;/legend>\
- &lt;label for="carbons-enable">%%Enable%%&lt;/label>&lt;input type="checkbox" id="carbons-enable" />&lt;br />\
- &lt;input type="submit" value="%%Save%%"/>\
- &lt;/fieldset>\
- &lt;/form>'
- };
+ jsxc.to = window.setTimeout(jsxc.onMaster, 1000);
+ jsxc.storage.ink('alive');
+ },
/**
- * Handle XMPP stuff.
- *
- * @namespace jsxc.xmpp
+ * Start sending keep-alive signal
*/
- jsxc.xmpp = {
- conn: null, // connection
-
- /**
- * Create new connection or attach to old
- *
- * @name login
- * @memberOf jsxc.xmpp
- */
- /**
- * Create new connection with given parameters.
- *
- * @name login^2
- * @param {string} jid
- * @param {string} password
- * @memberOf jsxc.xmpp
- */
- /**
- * Attach connection with given parameters.
- *
- * @name login^3
- * @param {string} jid
- * @param {string} sid
- * @param {string} rid
- * @memberOf jsxc.xmpp
- */
- login: function() {
-
- if (jsxc.xmpp.conn && jsxc.xmpp.conn.connected) {
- return;
- }
-
- var jid = null, password = null, sid = null, rid = null;
-
- switch (arguments.length) {
- case 2:
- jid = arguments[0];
- password = arguments[1];
- break;
- case 3:
- jid = arguments[0];
- sid = arguments[1];
- rid = arguments[2];
- break;
- default:
- jid = jsxc.storage.getItem('jid');
- sid = jsxc.storage.getItem('sid');
- rid = jsxc.storage.getItem('rid');
- }
-
- var url = jsxc.options.get('xmpp').url;
-
- // Register eventlistener
- $(document).on('connected.jsxc', jsxc.xmpp.connected);
- $(document).on('attached.jsxc', jsxc.xmpp.attached);
- $(document).on('disconnected.jsxc', jsxc.xmpp.disconnected);
- $(document).on('ridChange', jsxc.xmpp.onRidChange);
- $(document).on('connfail.jsxc', jsxc.xmpp.onConnfail);
- $(document).on('authfail.jsxc', jsxc.xmpp.onAuthFail);
-
- Strophe.addNamespace('RECEIPTS', 'urn:xmpp:receipts');
-
- // Create new connection (no login)
- jsxc.xmpp.conn = new Strophe.Connection(url);
-
- // Override default function to preserve unique id
- var stropheGetUniqueId = jsxc.xmpp.conn.getUniqueId;
- jsxc.xmpp.conn.getUniqueId = function(suffix) {
- var uid = stropheGetUniqueId.call(jsxc.xmpp.conn, suffix);
- jsxc.storage.setItem('_uniqueId', jsxc.xmpp.conn._uniqueId);
-
- return uid;
- };
-
- if (jsxc.storage.getItem('debug') === true) {
- jsxc.xmpp.conn.xmlInput = function(data) {
- console.log('&lt;', data);
- };
- jsxc.xmpp.conn.xmlOutput = function(data) {
- console.log('>', data);
- };
- }
+ startKeepAlive: function() {
+ jsxc.keepalive = window.setInterval(jsxc.keepAlive, jsxc.options.timeout - 1000);
+ },
- var callback = function(status, condition) {
-
- jsxc.debug(Object.getOwnPropertyNames(Strophe.Status)[status] + ': ' + condition);
-
- switch (status) {
- case Strophe.Status.CONNECTED:
- jsxc.bid = jsxc.jidToBid(jsxc.xmpp.conn.jid.toLowerCase());
- $(document).trigger('connected.jsxc');
- break;
- case Strophe.Status.ATTACHED:
- $(document).trigger('attached.jsxc');
- break;
- case Strophe.Status.DISCONNECTED:
- $(document).trigger('disconnected.jsxc');
- break;
- case Strophe.Status.CONNFAIL:
- $(document).trigger('connfail.jsxc');
- break;
- case Strophe.Status.AUTHFAIL:
- $(document).trigger('authfail.jsxc');
- break;
- }
- };
-
- if (jsxc.xmpp.conn.caps) {
- jsxc.xmpp.conn.caps.node = 'http://jsxc.org/';
- }
-
- if (jsxc.restore && sid && rid) {
- jsxc.debug('Try to attach');
- jsxc.debug('SID: ' + sid);
- jsxc.xmpp.conn.attach(jid, sid, rid, callback);
- } else {
- jsxc.debug('New connection');
-
- if (jsxc.xmpp.conn.caps) {
- // Add system handler, because user handler isn't called before
- // we are authenticated
- jsxc.xmpp.conn._addSysHandler(function(stanza) {
- var from = jsxc.xmpp.conn.domain, c = stanza.querySelector('c'), ver = c.getAttribute('ver'), node = c.getAttribute('node');
-
- var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
-
- jsxc.xmpp.conn.caps._jidVerIndex[from] = ver;
- _jidNodeIndex[from] = node;
-
- localStorage.setItem('strophe.caps._jidVerIndex', JSON.stringify(jsxc.xmpp.conn.caps._jidVerIndex));
- localStorage.setItem('strophe.caps._jidNodeIndex', JSON.stringify(_jidNodeIndex));
- }, Strophe.NS.CAPS);
- }
-
- jsxc.xmpp.conn.connect(jid || jsxc.options.xmpp.jid, password || jsxc.options.xmpp.password, callback);
- }
- },
-
- /**
- * Logs user out of his xmpp session and does some clean up.
- *
- * @returns {Boolean}
- */
- logout: function() {
-
- // instruct all tabs
- jsxc.storage.removeItem('sid');
-
- // clean up
- jsxc.storage.removeUserItem('buddylist');
- jsxc.storage.removeUserItem('windowlist');
- jsxc.storage.removeItem('_uniqueId');
-
- if (!jsxc.master) {
- $('#jsxc_roster').remove();
- $('#jsxc_windowlist').remove();
- return true;
- }
-
- if (jsxc.xmpp.conn === null) {
- return true;
- }
-
- // Hide dropdown menu
- $('body').click();
-
- jsxc.triggeredFromElement = true;
-
- // restore all otr objects
- $.each(jsxc.storage.getUserItem('otrlist') || {}, function(i, val) {
- jsxc.otr.create(val);
- });
-
- var numOtr = Object.keys(jsxc.otr.objects || {}).length + 1;
- var disReady = function() {
- if (--numOtr &lt;= 0) {
- jsxc.xmpp.conn.flush();
-
- setTimeout(function() {
- jsxc.xmpp.conn.disconnect();
- }, 600);
- }
- };
-
- // end all private conversations
- $.each(jsxc.otr.objects || {}, function(key, obj) {
- if (obj.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED) {
- obj.endOtr.call(obj, function() {
- obj.init.call(obj);
- jsxc.otr.backup(key);
-
- disReady();
- });
- } else {
- disReady();
- }
- });
-
- disReady();
-
- // Trigger real logout in jsxc.xmpp.disconnected()
- return false;
- },
-
- /**
- * Triggered if connection is established
- *
- * @private
- */
- connected: function() {
-
- jsxc.xmpp.conn.pause();
-
- var nomJid = Strophe.getBareJidFromJid(jsxc.xmpp.conn.jid).toLowerCase() + '/' + Strophe.getResourceFromJid(jsxc.xmpp.conn.jid);
-
- // Save sid and jid
- jsxc.storage.setItem('sid', jsxc.xmpp.conn._proto.sid);
- jsxc.storage.setItem('jid', nomJid);
+ /**
+ * Sends the keep-alive signal to signal that the master is still there.
+ */
+ keepAlive: function() {
+ jsxc.storage.ink('alive');
+ if (jsxc.role_allocation) {
jsxc.storage.setItem('lastActivity', (new Date()).getTime());
+ }
+ },
- // make shure roster will be reloaded
- jsxc.storage.removeUserItem('buddylist');
-
- jsxc.storage.removeUserItem('windowlist');
- jsxc.storage.removeUserItem('own');
- jsxc.storage.removeUserItem('avatar', 'own');
- jsxc.storage.removeUserItem('otrlist');
-
- if (jsxc.options.loginForm.triggered) {
- switch (jsxc.options.loginForm.onConnected || 'submit') {
- case 'submit':
- jsxc.submitLoginForm();
- /* falls through */
- case false:
- jsxc.xmpp.connectionReady();
- return;
- }
- }
-
- // start chat
-
- jsxc.gui.init();
- $('#jsxc_roster').removeClass('jsxc_noConnection');
- jsxc.onMaster();
- jsxc.xmpp.conn.resume();
- jsxc.gui.dialog.close();
- $(document).trigger('attached.jsxc');
- },
-
- /**
- * Triggered if connection is attached
- *
- * @private
- */
- attached: function() {
-
- jsxc.xmpp.conn.addHandler(jsxc.xmpp.onRosterChanged, 'jabber:iq:roster', 'iq', 'set');
- jsxc.xmpp.conn.addHandler(jsxc.xmpp.onMessage, null, 'message', 'chat');
- jsxc.xmpp.conn.addHandler(jsxc.xmpp.onReceived, null, 'message');
- jsxc.xmpp.conn.addHandler(jsxc.xmpp.onPresence, null, 'presence');
-
- var caps = jsxc.xmpp.conn.caps;
- var domain = jsxc.xmpp.conn.domain;
-
- if (caps && jsxc.options.get('carbons').enable) {
- var conditionalEnable = function() {
- if (jsxc.xmpp.conn.caps.hasFeatureByJid(domain, jsxc.CONST.NS.CARBONS)) {
- jsxc.xmpp.carbons.enable();
- }
- };
-
- if (typeof caps._knownCapabilities[caps._jidVerIndex[domain]] === 'undefined') {
- var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
-
- $(document).on('caps.strophe', function onCaps(ev, from) {
-
- if (from !== domain) {
- return;
- }
-
- conditionalEnable();
-
- $(document).off('caps.strophe', onCaps);
- });
-
- caps._requestCapabilities(jsxc.xmpp.conn.domain, _jidNodeIndex[domain], caps._jidVerIndex[domain]);
- } else {
- // We know server caps
- conditionalEnable();
- }
- }
-
- // Only load roaster if necessary
- if (!jsxc.restore || !jsxc.storage.getUserItem('buddylist')) {
- // in order to not overide existing presence information, we send
- // pres first after roster is ready
- $(document).one('cloaded.roster.jsxc', jsxc.xmpp.sendPres);
-
- $('#jsxc_roster > p:first').remove();
-
- var iq = $iq({
- type: 'get'
- }).c('query', {
- xmlns: 'jabber:iq:roster'
- });
-
- jsxc.xmpp.conn.sendIQ(iq, jsxc.xmpp.onRoster);
- } else {
- jsxc.xmpp.sendPres();
- }
-
- jsxc.xmpp.connectionReady();
- },
-
- /**
- * Triggered if the connection is ready
- */
- connectionReady: function() {
-
- // Load saved unique id
- jsxc.xmpp.conn._uniqueId = jsxc.storage.getItem('_uniqueId') || new Date().getTime();
-
- $(document).trigger('connectionReady.jsxc');
- },
-
- /**
- * Sends presence stanza to server.
- */
- sendPres: function() {
- // disco stuff
- if (jsxc.xmpp.conn.disco) {
- jsxc.xmpp.conn.disco.addIdentity('client', 'web', 'JSXC');
- jsxc.xmpp.conn.disco.addFeature(Strophe.NS.DISCO_INFO);
- jsxc.xmpp.conn.disco.addFeature(Strophe.NS.RECEIPTS);
- }
-
- // create presence stanza
- var pres = $pres();
-
- if (jsxc.xmpp.conn.caps) {
- // attach caps
- pres.c('c', jsxc.xmpp.conn.caps.generateCapsAttrs()).up();
- }
-
- var presState = jsxc.storage.getUserItem('presence') || 'online';
- if (presState !== 'online') {
- pres.c('show').t(presState).up();
- }
-
- var priority = jsxc.options.get('priority');
- if (priority && typeof priority[presState] !== 'undefined' && parseInt(priority[presState]) !== 0) {
- pres.c('priority').t(priority[presState]).up();
- }
-
- jsxc.debug('Send presence', pres.toString());
- jsxc.xmpp.conn.send(pres);
- },
-
- /**
- * Triggered if lost connection
- *
- * @private
- */
- disconnected: function() {
- jsxc.debug('disconnected');
-
- jsxc.storage.removeItem('sid');
- jsxc.storage.removeItem('rid');
- jsxc.storage.removeItem('lastActivity');
- jsxc.storage.removeItem('hidden');
- jsxc.storage.removeUserItem('avatar', 'own');
- jsxc.storage.removeUserItem('otrlist');
-
- $(document).off('connected.jsxc', jsxc.xmpp.connected);
- $(document).off('attached.jsxc', jsxc.xmpp.attached);
- $(document).off('disconnected.jsxc', jsxc.xmpp.disconnected);
- $(document).off('ridChange', jsxc.xmpp.onRidChange);
- $(document).off('connfail.jsxc', jsxc.xmpp.onConnfail);
- $(document).off('authfail.jsxc', jsxc.xmpp.onAuthFail);
-
- jsxc.xmpp.conn = null;
-
- $('#jsxc_windowList').remove();
-
- if (jsxc.triggeredFromElement) {
- $('#jsxc_roster').remove();
-
- if (jsxc.triggeredFromLogout) {
- window.location = jsxc.options.logoutElement.attr('href');
- }
- } else {
- jsxc.gui.roster.noConnection();
- }
+ /**
+ * Send one keep-alive signal with higher timeout, and than resume with
+ * normal signal
+ */
+ keepBusyAlive: function() {
+ if (jsxc.toBusy) {
+ window.clearTimeout(jsxc.toBusy);
+ }
+ if (jsxc.keepalive) {
window.clearInterval(jsxc.keepalive);
- },
-
- /**
- * Triggered on connection fault
- *
- * @param {String} condition information why we lost the connection
- * @private
- */
- onConnfail: function(ev, condition) {
- jsxc.debug('XMPP connection failed: ' + condition);
-
- if (jsxc.options.loginForm.triggered) {
- jsxc.submitLoginForm();
- }
- },
-
- /**
- * Triggered on auth fail.
- *
- * @private
- */
- onAuthFail: function() {
- if (jsxc.options.loginForm.triggered) {
- switch (jsxc.options.loginForm.onAuthFail || 'ask') {
- case 'ask':
- jsxc.gui.showAuthFail();
- break;
- case 'submit':
- jsxc.submitLoginForm();
- break;
- }
- }
- },
-
- /**
- * Triggered on initial roster load
- *
- * @param {dom} iq
- * @private
- */
- onRoster: function(iq) {
- /*
- * &lt;iq from='' type='get' id=''> &lt;query xmlns='jabber:iq:roster'> &lt;item
- * jid='' name='' subscription='' /> ... &lt;/query> &lt;/iq>
- */
-
- jsxc.debug('Load roster', iq);
-
- var buddies = [];
-
- $(iq).find('item').each(function() {
- var jid = $(this).attr('jid');
- var name = $(this).attr('name') || jid;
- var bid = jsxc.jidToBid(jid);
- var sub = $(this).attr('subscription');
-
- buddies.push(bid);
-
- jsxc.storage.removeUserItem('res', bid);
-
- jsxc.storage.saveBuddy(bid, {
- jid: jid,
- name: name,
- status: 0,
- sub: sub,
- res: []
- });
-
- jsxc.gui.roster.add(bid);
- });
-
- if (buddies.length === 0) {
- jsxc.gui.roster.empty();
- }
-
- jsxc.storage.setUserItem('buddylist', buddies);
-
- jsxc.debug('Roster loaded');
- $(document).trigger('cloaded.roster.jsxc');
- },
-
- /**
- * Triggerd on roster changes
- *
- * @param {dom} iq
- * @returns {Boolean} True to preserve handler
- * @private
- */
- onRosterChanged: function(iq) {
- /*
- * &lt;iq from='' type='set' id=''> &lt;query xmlns='jabber:iq:roster'> &lt;item
- * jid='' name='' subscription='' /> &lt;/query> &lt;/iq>
- */
-
- jsxc.debug('onRosterChanged', iq);
-
- $(iq).find('item').each(function() {
- var jid = $(this).attr('jid');
- var name = $(this).attr('name') || jid;
- var bid = jsxc.jidToBid(jid);
- var sub = $(this).attr('subscription');
- // var ask = $(this).attr('ask');
-
- if (sub === 'remove') {
- jsxc.gui.roster.purge(bid);
- } else {
- var bl = jsxc.storage.getUserItem('buddylist');
-
- if (bl.indexOf(bid) &lt; 0) {
- bl.push(bid); // (INFO) push returns the new length
- jsxc.storage.setUserItem('buddylist', bl);
- }
-
- var temp = jsxc.storage.saveBuddy(bid, {
- jid: jid,
- name: name,
- sub: sub
- });
-
- if (temp === 'updated') {
-
- jsxc.gui.update(bid);
- jsxc.gui.roster.reorder(bid);
- } else {
- jsxc.gui.roster.add(bid);
- }
- }
-
- // Remove pending friendship request from notice list
- if (sub === 'from' || sub === 'both') {
- var notices = jsxc.storage.getUserItem('notices');
- var noticeKey = null, notice;
-
- for (noticeKey in notices) {
- notice = notices[noticeKey];
-
- if (notice.fnName === 'gui.showApproveDialog' && notice.fnParams[0] === jid) {
- jsxc.debug('Remove notice with key ' + noticeKey);
-
- jsxc.notice.remove(noticeKey);
- }
- }
- }
- });
-
- if (!jsxc.storage.getUserItem('buddylist') || jsxc.storage.getUserItem('buddylist').length === 0) {
- jsxc.gui.roster.empty();
- } else {
- $('#jsxc_roster > p:first').remove();
- }
-
- // preserve handler
- return true;
- },
-
- /**
- * Triggered on incoming presence stanzas
- *
- * @param {dom} presence
- * @private
- */
- onPresence: function(presence) {
- /*
- * &lt;presence xmlns='jabber:client' type='unavailable' from='' to=''/>
- *
- * &lt;presence xmlns='jabber:client' from='' to=''> &lt;priority>5&lt;/priority>
- * &lt;c xmlns='http://jabber.org/protocol/caps'
- * node='http://psi-im.org/caps' ver='caps-b75d8d2b25' ext='ca cs
- * ep-notify-2 html'/> &lt;/presence>
- *
- * &lt;presence xmlns='jabber:client' from='' to=''> &lt;show>chat&lt;/show>
- * &lt;status>&lt;/status> &lt;priority>5&lt;/priority> &lt;c
- * xmlns='http://jabber.org/protocol/caps'
- * node='http://psi-im.org/caps' ver='caps-b75d8d2b25' ext='ca cs
- * ep-notify-2 html'/> &lt;/presence>
- */
- jsxc.debug('onPresence', presence);
-
- var ptype = $(presence).attr('type');
- var from = $(presence).attr('from');
- var jid = Strophe.getBareJidFromJid(from).toLowerCase();
- var r = Strophe.getResourceFromJid(from);
- var bid = jsxc.jidToBid(jid);
- var data = jsxc.storage.getUserItem('buddy', bid);
- var res = jsxc.storage.getUserItem('res', bid) || {};
- var status = null;
- var xVCard = $(presence).find('x[xmlns="vcard-temp:x:update"]');
-
- if (jid === Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))) {
- return true;
- }
-
- if (ptype === 'error') {
- jsxc.error('[XMPP] ' + $(presence).attr('code'));
- return true;
- }
-
- // incoming friendship request
- if (ptype === 'subscribe') {
- jsxc.storage.setUserItem('friendReq', {
- jid: jid,
- approve: -1
- });
- jsxc.notice.add('%%Friendship request%%', '%%from%% ' + jid, 'gui.showApproveDialog', [ jid ]);
-
- return true;
- } else if (ptype === 'unavailable' || ptype === 'unsubscribed') {
- status = jsxc.CONST.STATUS.indexOf('offline');
- } else {
- var show = $(presence).find('show').text();
- if (show === '') {
- status = jsxc.CONST.STATUS.indexOf('online');
- } else {
- status = jsxc.CONST.STATUS.indexOf(show);
- }
- }
-
- if (status === 0) {
- delete res[r];
- } else {
- res[r] = status;
- }
-
- var maxVal = [];
- var max = 0, prop = null;
- for (prop in res) {
- if (res.hasOwnProperty(prop)) {
- if (max &lt;= res[prop]) {
- if (max !== res[prop]) {
- maxVal = [];
- max = res[prop];
- }
- maxVal.push(prop);
- }
- }
- }
-
- if (data.status === 0 && max > 0) {
- // buddy has come online
- jsxc.notification.notify(data.name, jsxc.translate('%%has come online%%.'));
- }
-
- data.status = max;
- data.res = maxVal;
- data.jid = jid;
-
- // Looking for avatar
- if (xVCard.length > 0) {
- var photo = xVCard.find('photo');
-
- if (photo.length > 0 && photo.text() !== data.avatar) {
- jsxc.storage.removeUserItem('avatar', data.avatar);
- data.avatar = photo.text();
- }
- }
-
- // Reset jid
- if (jsxc.gui.window.get(bid).length > 0) {
- jsxc.gui.window.get(bid).data('jid', jid);
- }
-
- jsxc.storage.setUserItem('buddy', bid, data);
- jsxc.storage.setUserItem('res', bid, res);
-
- jsxc.debug('Presence (' + from + '): ' + status);
-
- jsxc.gui.update(bid);
- jsxc.gui.roster.reorder(bid);
-
- $(document).trigger('presence.jsxc', [ from, status, presence ]);
-
- // preserve handler
- return true;
- },
-
- /**
- * Triggered on incoming message stanzas
- *
- * @param {dom} presence
- * @returns {Boolean}
- * @private
- */
- onMessage: function(stanza) {
-
- var forwarded = $(stanza).find('forwarded[xmlns="' + jsxc.CONST.NS.FORWARD + '"]');
- var message, carbon;
-
- if (forwarded.length > 0) {
- message = forwarded.find('> message');
- forwarded = true;
- carbon = $(stanza).find('> [xmlns="' + jsxc.CONST.NS.CARBONS + '"]');
-
- if (carbon.length === 0) {
- carbon = false;
- }
-
- jsxc.debug('Incoming forwarded message', message);
- } else {
- message = stanza;
- forwarded = false;
- carbon = false;
-
- jsxc.debug('Incoming message', message);
- }
-
- var body = $(message).find('body:first').text();
-
- if (!body || (body.match(/\?OTR/i) && forwarded)) {
- return true;
- }
-
- var type = $(message).attr('type');
- var from = $(message).attr('from');
- var mid = $(message).attr('id');
- var bid;
-
- var delay = $(message).find('delay[xmlns="urn:xmpp:delay"]');
-
- var stamp = (delay.length > 0) ? new Date(delay.attr('stamp')) : new Date();
- stamp = stamp.getTime();
-
- if (carbon) {
- var direction = (carbon.prop("tagName") === 'sent') ? 'out' : 'in';
- bid = jsxc.jidToBid((direction === 'out') ? $(message).attr('to') : from);
-
- jsxc.gui.window.postMessage(bid, direction, body, false, forwarded, stamp);
-
- return true;
-
- } else if (forwarded) {
- // Someone forwarded a message to us
-
- body = from + jsxc.translate(' %%to%% ') + $(stanza).attr('to') + '"' + body + '"';
-
- from = $(stanza).attr('from');
- }
-
- var jid = Strophe.getBareJidFromJid(from);
- bid = jsxc.jidToBid(jid);
- var data = jsxc.storage.getUserItem('buddy', bid);
- var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
-
- if (data === null) {
- // jid not in roster
-
- var chat = jsxc.storage.getUserItem('chat', bid) || [];
-
- if (chat.length === 0) {
- jsxc.notice.add('%%Unknown sender%%', '%%You received a message from an unknown sender%% (' + bid + ').', 'gui.showUnknownSender', [ bid ]);
- }
-
- var msg = jsxc.removeHTML(body);
- msg = jsxc.escapeHTML(msg);
-
- jsxc.storage.saveMessage(bid, 'in', msg, false, forwarded, stamp);
-
- return true;
- }
-
- var win = jsxc.gui.window.init(bid);
-
- // If we now the full jid, we use it
- if (type === 'chat') {
- win.data('jid', from);
- jsxc.storage.updateUserItem('buddy', bid, {
- jid: from
- });
- }
-
- $(document).trigger('message.jsxc', [ from, body ]);
-
- // create related otr object
- if (jsxc.master && !jsxc.otr.objects[bid]) {
- jsxc.otr.create(bid);
- }
-
- if (!forwarded && mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
- // Send received according to XEP-0184
- jsxc.xmpp.conn.send($msg({
- to: from
- }).c('received', {
- xmlns: 'urn:xmpp:receipts',
- id: mid
- }));
- }
-
- if (jsxc.otr.objects.hasOwnProperty(bid)) {
- jsxc.otr.objects[bid].receiveMsg(body, {
- stamp: stamp,
- forwarded: forwarded
- });
- } else {
- jsxc.gui.window.postMessage(bid, 'in', body, false, forwarded, stamp);
- }
-
- // preserve handler
- return true;
- },
-
- /**
- * Triggerd if the rid changed
- *
- * @param {event} ev
- * @param {obejct} data
- * @private
- */
- onRidChange: function(ev, data) {
- jsxc.storage.setItem('rid', data.rid);
- },
-
- /**
- * response to friendship request
- *
- * @param {string} from jid from original friendship req
- * @param {boolean} approve
- */
- resFriendReq: function(from, approve) {
- if (jsxc.master) {
- jsxc.xmpp.conn.send($pres({
- to: from,
- type: (approve) ? 'subscribed' : 'unsubscribed'
- }));
-
- jsxc.storage.removeUserItem('friendReq');
- jsxc.gui.dialog.close();
-
- } else {
- jsxc.storage.updateUserItem('friendReq', 'approve', approve);
- }
- },
-
- /**
- * Add buddy to my friends
- *
- * @param {string} username jid
- * @param {string} alias
- */
- addBuddy: function(username, alias) {
- var bid = jsxc.jidToBid(username);
-
- if (jsxc.master) {
- // add buddy to roster (trigger onRosterChanged)
- var iq = $iq({
- type: 'set'
- }).c('query', {
- xmlns: 'jabber:iq:roster'
- }).c('item', {
- jid: username,
- name: alias || ''
- });
- jsxc.xmpp.conn.sendIQ(iq);
-
- // send subscription request to buddy (trigger onRosterChanged)
- jsxc.xmpp.conn.send($pres({
- to: username,
- type: 'subscribe'
- }));
-
- jsxc.storage.removeUserItem('add_' + bid);
- } else {
- jsxc.storage.setUserItem('add_' + bid, {
- username: username,
- alias: alias || null
- });
- }
- },
-
- /**
- * Remove buddy from my friends
- *
- * @param {type} jid
- */
- removeBuddy: function(jid) {
- var bid = jsxc.jidToBid(jid);
-
- // Shortcut to remove buddy from roster and cancle all subscriptions
- var iq = $iq({
- type: 'set'
- }).c('query', {
- xmlns: 'jabber:iq:roster'
- }).c('item', {
- jid: Strophe.getBareJidFromJid(jid),
- subscription: 'remove'
- });
- jsxc.xmpp.conn.sendIQ(iq);
-
- jsxc.gui.roster.purge(bid);
- },
-
- onReceived: function(message) {
- var from = $(message).attr('from');
- var jid = Strophe.getBareJidFromJid(from);
- var bid = jsxc.jidToBid(jid);
- var received = $(message).find("received[xmlns='urn:xmpp:receipts']");
-
- if (received.length) {
- var receivedId = received.attr('id').replace(/:/, '-');
- var chat = jsxc.storage.getUserItem('chat', bid);
- var i;
-
- for (i = chat.length - 1; i >= 0; i--) {
- if (chat[i].uid === receivedId) {
- chat[i].received = true;
-
- $('#' + receivedId).addClass('jsxc_received');
-
- jsxc.storage.setUserItem('chat', bid, chat);
- break;
- }
- }
- }
-
- return true;
- },
-
- /**
- * Public function to send message.
- *
- * @memberOf jsxc.xmpp
- * @param bid css jid of user
- * @param msg message
- * @param uid unique id
- */
- sendMessage: function(bid, msg, uid) {
- if (jsxc.otr.objects.hasOwnProperty(bid)) {
- jsxc.otr.objects[bid].sendMsg(msg, uid);
- } else {
- jsxc.xmpp._sendMessage(jsxc.gui.window.get(bid).data('jid'), msg, uid);
- }
- },
-
- /**
- * Create message stanza and send it.
- *
- * @memberOf jsxc.xmpp
- * @param jid Jabber id
- * @param msg Message
- * @param uid unique id
- * @private
- */
- _sendMessage: function(jid, msg, uid) {
- var data = jsxc.storage.getUserItem('buddy', jsxc.jidToBid(jid)) || {};
- var isBar = (Strophe.getBareJidFromJid(jid) === jid);
- var type = data.type || 'chat';
-
- var xmlMsg = $msg({
- to: jid,
- type: type,
- id: uid
- }).c('body').t(msg);
-
- if (jsxc.xmpp.carbons.enabled && msg.match(/^\?OTR/)) {
- xmlMsg.up().c("private", {
- xmlns: jsxc.CONST.NS.CARBONS
- });
- }
-
- if (type === 'chat' && (isBar || jsxc.xmpp.conn.caps.hasFeatureByJid(jid, Strophe.NS.RECEIPTS))) {
- // Add request according to XEP-0184
- xmlMsg.up().c('request', {
- xmlns: 'urn:xmpp:receipts'
- });
- }
-
- jsxc.xmpp.conn.send(xmlMsg);
- },
-
- /**
- * This function loads a vcard.
- *
- * @memberOf jsxc.xmpp
- * @param bid
- * @param cb
- * @param error_cb
- */
- loadVcard: function(bid, cb, error_cb) {
- if (jsxc.master) {
- jsxc.xmpp.conn.vcard.get(cb, bid, error_cb);
- } else {
- jsxc.storage.setUserItem('vcard', bid, 'request:' + (new Date()).getTime());
-
- $(document).one('loaded.vcard.jsxc', function(ev, result) {
- if (result && result.state === 'success') {
- cb($(result.data).get(0));
- } else {
- error_cb();
- }
- });
- }
- },
-
- /**
- * Retrieves capabilities.
- *
- * @memberOf jsxc.xmpp
- * @param jid
- * @returns List of known capabilities
- */
- getCapabilitiesByJid: function(jid) {
- if (jsxc.xmpp.conn) {
- return jsxc.xmpp.conn.caps.getCapabilitiesByJid(jid);
- }
-
- var jidVerIndex = JSON.parse(localStorage.getItem('strophe.caps._jidVerIndex')) || {};
- var knownCapabilities = JSON.parse(localStorage.getItem('strophe.caps._knownCapabilities')) || {};
-
- if (jidVerIndex[jid]) {
- return knownCapabilities[jidVerIndex[jid]];
- }
-
- return null;
}
- };
+
+ jsxc.storage.ink('alive_busy');
+ jsxc.toBusy = window.setTimeout(jsxc.startKeepAlive, jsxc.options.busyTimeout - 1000);
+ },
/**
- * Handle carbons (XEP-0280);
+ * Generates a random integer number between 0 and max
*
- * @namespace jsxc.xmpp.carbons
+ * @param {Integer} max
+ * @return {Integer} random integer between 0 and max
*/
- jsxc.xmpp.carbons = {
- enabled: false,
-
- /**
- * Enable carbons.
- *
- * @memberOf jsxc.xmpp.carbons
- * @param cb callback
- */
- enable: function(cb) {
- var iq = $iq({
- type: 'set'
- }).c('enable', {
- xmlns: jsxc.CONST.NS.CARBONS
- });
-
- jsxc.xmpp.conn.sendIQ(iq, function() {
- jsxc.xmpp.carbons.enabled = true;
-
- jsxc.debug('Carbons enabled');
-
- if (cb) {
- cb.call(this);
- }
- }, function(stanza) {
- jsxc.warn('Could not enable carbons', stanza);
- });
- },
-
- /**
- * Disable carbons.
- *
- * @memberOf jsxc.xmpp.carbons
- * @param cb callback
- */
- disable: function(cb) {
- var iq = $iq({
- type: 'set'
- }).c('disable', {
- xmlns: jsxc.CONST.NS.CARBONS
- });
-
- jsxc.xmpp.conn.sendIQ(iq, function() {
- jsxc.xmpp.carbons.enabled = false;
-
- jsxc.debug('Carbons disabled');
-
- if (cb) {
- cb.call(this);
- }
- }, function(stanza) {
- jsxc.warn('Could not disable carbons', stanza);
- });
- },
-
- /**
- * Enable/Disable carbons depending on options key.
- *
- * @memberOf jsxc.xmpp.carbons
- * @param err error message
- */
- refresh: function(err) {
- if (err === false) {
- return;
- }
-
- if (jsxc.options.get('carbons').enable) {
- return jsxc.xmpp.carbons.enable();
- }
-
- return jsxc.xmpp.carbons.disable();
- }
- };
+ random: function(max) {
+ return Math.floor(Math.random() * max);
+ },
/**
- * Handle long-live data
+ * Checks if there is a element with the given selector
*
- * @namespace jsxc.storage
+ * @param {String} selector jQuery selector
+ * @return {Boolean}
*/
- jsxc.storage = {
- /**
- * Prefix for localstorage
- *
- * @privat
- */
- PREFIX: 'jsxc',
-
- SEP: ':',
-
- /**
- * @param {type} uk Should we generate a user prefix?
- * @returns {String} prefix
- * @memberOf jsxc.storage
- */
- getPrefix: function(uk) {
- var self = jsxc.storage;
-
- return self.PREFIX + self.SEP + ((uk && jsxc.bid) ? jsxc.bid + self.SEP : '');
- },
-
- /**
- * Save item to storage
- *
- * @function
- * @param {String} key variablename
- * @param {Object} value value
- * @param {String} uk Userkey? Should we add the bid as prefix?
- */
- setItem: function(key, value, uk) {
-
- // Workaround for non-conform browser
- if (jsxc.storageNotConform > 0 && key !== 'rid' && key !== 'lastActivity') {
- if (jsxc.storageNotConform > 1 && jsxc.toSNC === null) {
- jsxc.toSNC = window.setTimeout(function() {
- jsxc.storageNotConform = 0;
- jsxc.storage.setItem('storageNotConform', 0);
- }, 1000);
- }
-
- jsxc.ls.push(JSON.stringify({
- key: key,
- value: value
- }));
- }
-
- if (typeof (value) === 'object') {
- value = JSON.stringify(value);
- }
-
- localStorage.setItem(jsxc.storage.getPrefix(uk) + key, value);
- },
-
- setUserItem: function(type, key, value) {
- var self = jsxc.storage;
-
- if (arguments.length === 2) {
- value = key;
- key = type;
- type = '';
- } else if (arguments.length === 3) {
- key = type + self.SEP + key;
- }
+ el_exists: function(selector) {
+ return $(selector).length > 0;
+ },
- return jsxc.storage.setItem(key, value, true);
- },
-
- /**
- * Load item from storage
- *
- * @function
- * @param {String} key variablename
- * @param {String} uk Userkey? Should we add the bid as prefix?
- */
- getItem: function(key, uk) {
- key = jsxc.storage.getPrefix(uk) + key;
-
- var value = localStorage.getItem(key);
- try {
- return JSON.parse(value);
- } catch (e) {
- return value;
- }
- },
-
- /**
- * Get a user item from storage.
- *
- * @param key
- * @returns user item
- */
- getUserItem: function(type, key) {
- var self = jsxc.storage;
+ /**
+ * Creates a CSS compatible string from a JID
+ *
+ * @param {type} jid Valid Jabber ID
+ * @returns {String} css Compatible string
+ */
+ jidToCid: function(jid) {
+ jsxc.warn('jsxc.jidToCid is deprecated!');
- if (arguments.length === 1) {
- key = type;
- } else if (arguments.length === 2) {
- key = type + self.SEP + key;
- }
+ var cid = Strophe.getBareJidFromJid(jid).replace('@', '-').replace(/\./g, '-').toLowerCase();
- return jsxc.storage.getItem(key, true);
- },
+ return cid;
+ },
- /**
- * Remove item from storage
- *
- * @function
- * @param {String} key variablename
- * @param {String} uk Userkey? Should we add the bid as prefix?
- */
- removeItem: function(key, uk) {
-
- // Workaround for non-conform browser
- if (jsxc.storageNotConform && key !== 'rid' && key !== 'lastActivity') {
- jsxc.ls.push(JSON.stringify({
- key: jsxc.storage.prefix + key,
- value: ''
- }));
- }
+ /**
+ * Create comparable bar jid.
+ *
+ * @memberOf jsxc
+ * @param jid
+ * @returns comparable bar jid
+ */
+ jidToBid: function(jid) {
+ return Strophe.getBareJidFromJid(jid).toLowerCase();
+ },
- localStorage.removeItem(jsxc.storage.getPrefix(uk) + key);
- },
+ /**
+ * Restore roster
+ */
+ restoreRoster: function() {
+ var buddies = jsxc.storage.getUserItem('buddylist');
- /**
- * Remove user item from storage.
- *
- * @param key
- */
- removeUserItem: function(type, key) {
- var self = jsxc.storage;
+ if (!buddies || buddies.length === 0) {
+ jsxc.debug('No saved buddylist.');
- if (arguments.length === 1) {
- key = type;
- } else if (arguments.length === 2) {
- key = type + self.SEP + key;
- }
+ jsxc.gui.roster.empty();
- jsxc.storage.removeItem(key, true);
- },
+ return;
+ }
- /**
- * Updates value of a variable in a saved object.
- *
- * @function
- * @param {String} key variablename
- * @param {String|object} variable variablename in object or object with
- * variable/key pairs
- * @param {Object} [value] value
- * @param {String} uk Userkey? Should we add the bid as prefix?
- */
- updateItem: function(key, variable, value, uk) {
+ $.each(buddies, function(index, value) {
+ jsxc.gui.roster.add(value);
+ });
- var data = jsxc.storage.getItem(key, uk) || {};
+ $(document).trigger('cloaded.roster.jsxc');
+ },
- if (typeof (variable) === 'object') {
+ /**
+ * Restore all windows
+ */
+ restoreWindows: function() {
+ var windows = jsxc.storage.getUserItem('windowlist');
- $.each(variable, function(key, val) {
- if (typeof (data[key]) === 'undefined') {
- jsxc.debug('Variable ' + key + ' doesn\'t exist in ' + variable + '. It was created.');
- }
+ if (windows === null) {
+ return;
+ }
- data[key] = val;
- });
- } else {
- if (typeof (data[variable]) === 'undefined') {
- jsxc.debug('Variable ' + variable + ' doesn\'t exist. It was created.');
- }
+ $.each(windows, function(index, bid) {
+ var window = jsxc.storage.getUserItem('window', bid);
- data[variable] = value;
+ if (!window) {
+ jsxc.debug('Associated window-element is missing: ' + bid);
+ return true;
}
- jsxc.storage.setItem(key, data, uk);
- },
-
- /**
- * Updates value of a variable in a saved user object.
- *
- * @param {String} key variablename
- * @param {String|object} variable variablename in object or object with
- * variable/key pairs
- * @param {Object} [value] value
- */
- updateUserItem: function(type, key, variable, value) {
- var self = jsxc.storage;
+ jsxc.gui.window.init(bid);
- if (arguments.length === 4 || (arguments.length === 3 && typeof variable === 'object')) {
- key = type + self.SEP + key;
+ if (!window.minimize) {
+ jsxc.gui.window.show(bid);
} else {
- value = variable;
- variable = key;
- key = type;
- }
-
- return jsxc.storage.updateItem(key, variable, value, true);
- },
-
- /**
- * Inkrements value
- *
- * @function
- * @param {String} key variablename
- * @param {String} uk Userkey? Should we add the bid as prefix?
- */
- ink: function(key, uk) {
-
- jsxc.storage.setItem(key, Number(jsxc.storage.getItem(key, uk)) + 1, uk);
- },
-
- /**
- * Remove element from array or object
- *
- * @param {string} key name of array or object
- * @param {string} name name of element in array or object
- * @param {String} uk Userkey? Should we add the bid as prefix?
- * @returns {undefined}
- */
- removeElement: function(key, name, uk) {
- var item = jsxc.storage.getItem(key, uk);
-
- if ($.isArray(item)) {
- item = $.grep(item, function(e) {
- return e !== name;
- });
- } else if (typeof (item) === 'object') {
- delete item[name];
- }
-
- jsxc.storage.setItem(key, item, uk);
- },
-
- removeUserElement: function(type, key, name) {
- var self = jsxc.storage;
-
- if (arguments.length === 2) {
- name = key;
- key = type;
- } else if (arguments.length === 3) {
- key = type + self.SEP + key;
- }
-
- return jsxc.storage.removeElement(key, name, true);
- },
-
- /**
- * Triggered if changes are recognized
- *
- * @function
- * @param {event} e Storageevent
- * @param {String} e.key Keyname which triggered event
- * @param {Object} e.oldValue Old Value for key
- * @param {Object} e.newValue New Value for key
- * @param {String} e.url
- */
- onStorage: function(e) {
-
- // skip
- if (e.key === jsxc.storage.PREFIX + jsxc.storage.SEP + 'rid' || e.key === jsxc.storage.PREFIX + jsxc.storage.SEP + 'lastActivity') {
- return;
- }
-
- var re = new RegExp('^' + jsxc.storage.PREFIX + jsxc.storage.SEP + '(?:[^' + jsxc.storage.SEP + ']+@[^' + jsxc.storage.SEP + ']+' + jsxc.storage.SEP + ')?(.*)', 'i');
- var key = e.key.replace(re, '$1');
-
- // Workaround for non-conform browser: Triggered event on every page
- // (own)
- if (jsxc.storageNotConform > 0 && jsxc.ls.length > 0) {
-
- var val = e.newValue;
- try {
- val = JSON.parse(val);
- } catch (err) {
- }
-
- var index = $.inArray(JSON.stringify({
- key: key,
- value: val
- }), jsxc.ls);
-
- if (index >= 0) {
-
- // confirm that the storage event is not fired regularly
- if (jsxc.storageNotConform > 1) {
- window.clearTimeout(jsxc.toSNC);
- jsxc.storageNotConform = 1;
- jsxc.storage.setItem('storageNotConform', 1);
- }
-
- jsxc.ls.splice(index, 1);
- return;
- }
- }
-
- // Workaround for non-conform browser
- if (e.oldValue === e.newValue) {
- return;
- }
-
- var n, o;
- var bid = key.replace(new RegExp('[^' + jsxc.storage.SEP + ']+' + jsxc.storage.SEP + '(.*)', 'i'), '$1');
-
- // react if someone ask, if there is a master
- if (jsxc.master && key === 'alive') {
- jsxc.debug('Master request.');
-
- jsxc.storage.ink('alive');
- return;
- }
-
- // master alive
- if (!jsxc.master && (key === 'alive' || key === 'alive_busy') && !jsxc.triggeredFromElement) {
-
- // reset timeout
- window.clearTimeout(jsxc.to);
- jsxc.to = window.setTimeout(jsxc.checkMaster, ((key === 'alive') ? jsxc.options.timeout : jsxc.options.busyTimeout) + jsxc.random(60));
-
- // only call the first time
- if (!jsxc.role_allocation) {
- jsxc.onSlave();
- }
-
- return;
- }
-
- if (key.match(/^notices/)) {
- jsxc.notice.load();
- }
-
- if (key.match(/^presence/)) {
- jsxc.gui.changePresence(e.newValue, true);
- }
-
- if (key.match(/^options/) && e.newValue) {
- n = JSON.parse(e.newValue);
-
- if (typeof n.muteNotification !== 'undefined' && n.muteNotification) {
- jsxc.notification.muteSound(true);
- } else {
- jsxc.notification.unmuteSound(true);
- }
- }
-
- if (key.match(/^hidden/)) {
- if (jsxc.master) {
- clearTimeout(jsxc.toNotification);
- } else {
- jsxc.isHidden();
- }
- }
-
- if (key.match(new RegExp('^chat' + jsxc.storage.SEP))) {
-
- var posts = JSON.parse(e.newValue);
- var data, el;
-
- while (posts.length > 0) {
- data = posts.pop();
- el = $('#' + data.uid);
-
- if (el.length === 0) {
- if (jsxc.master && data.direction === 'out') {
- jsxc.xmpp.sendMessage(bid, data.msg, data.uid);
- }
-
- jsxc.gui.window._postMessage(bid, data);
- } else if (data.received) {
- el.addClass('jsxc_received');
- }
- }
- return;
- }
-
- if (key.match(new RegExp('^window' + jsxc.storage.SEP))) {
-
- if (!e.newValue) {
- jsxc.gui.window._close(bid);
- return;
- }
-
- if (!e.oldValue) {
- jsxc.gui.window.open(bid);
- return;
- }
-
- n = JSON.parse(e.newValue);
-
- if (n.minimize) {
- jsxc.gui.window._hide(bid);
- } else {
- jsxc.gui.window._show(bid);
- }
-
- jsxc.gui.window.setText(bid, n.text);
-
- return;
- }
-
- if (key.match(new RegExp('^smp' + jsxc.storage.SEP))) {
-
- if (!e.newValue) {
-
- jsxc.gui.dialog.close();
-
- if (jsxc.master) {
- jsxc.otr.objects[bid].sm.abort();
- }
-
- return;
- }
-
- n = JSON.parse(e.newValue);
-
- if (typeof (n.data) !== 'undefined') {
-
- jsxc.otr.onSmpQuestion(bid, n.data);
-
- } else if (jsxc.master && n.sec) {
- jsxc.gui.dialog.close();
-
- jsxc.otr.sendSmpReq(bid, n.sec, n.quest);
- }
- }
-
- if (!jsxc.master && key.match(new RegExp('^buddy' + jsxc.storage.SEP))) {
-
- if (!e.newValue) {
- jsxc.gui.roster.purge(bid);
- return;
- }
- if (!e.oldValue) {
- jsxc.gui.roster.add(bid);
- return;
- }
-
- n = JSON.parse(e.newValue);
- o = JSON.parse(e.oldValue);
-
- jsxc.gui.update(bid);
-
- if (o.status !== n.status || o.sub !== n.sub) {
- jsxc.gui.roster.reorder(bid);
- }
- }
-
- if (jsxc.master && key.match(new RegExp('^deletebuddy' + jsxc.storage.SEP)) && e.newValue) {
- n = JSON.parse(e.newValue);
-
- jsxc.xmpp.removeBuddy(n.jid);
- jsxc.storage.removeUserItem(key);
- }
-
- if (jsxc.master && key.match(new RegExp('^buddy' + jsxc.storage.SEP))) {
-
- n = JSON.parse(e.newValue);
- o = JSON.parse(e.oldValue);
-
- if (o.transferReq !== n.transferReq) {
- jsxc.storage.updateUserItem('buddy', bid, 'transferReq', -1);
-
- if (n.transferReq === 0) {
- jsxc.otr.goPlain(bid);
- }
- if (n.transferReq === 1) {
- jsxc.otr.goEncrypt(bid);
- }
- }
-
- if (o.name !== n.name) {
- jsxc.gui.roster._rename(bid, n.name);
- }
- }
-
- // logout
- if (key === 'sid') {
- if (!e.newValue) {
- // if (jsxc.master && jsxc.xmpp.conn) {
- // jsxc.xmpp.conn.disconnect();
- // jsxc.triggeredFromElement = true;
- // }
- jsxc.xmpp.logout();
-
- }
- return;
- }
-
- if (key === 'friendReq') {
- n = JSON.parse(e.newValue);
-
- if (jsxc.master && n.approve >= 0) {
- jsxc.xmpp.resFriendReq(n.jid, n.approve);
- }
- }
-
- if (jsxc.master && key.match(new RegExp('^add' + jsxc.storage.SEP))) {
- n = JSON.parse(e.newValue);
-
- jsxc.xmpp.addBuddy(n.username, n.alias);
- }
-
- if (key === 'roster') {
- jsxc.gui.roster.toggle();
- }
-
- if (jsxc.master && key.match(new RegExp('^vcard' + jsxc.storage.SEP)) && e.newValue !== null && e.newValue.match(/^request:/)) {
-
- jsxc.xmpp.loadVcard(bid, function(stanza) {
- jsxc.storage.setUserItem('vcard', bid, {
- state: 'success',
- data: $('&lt;div>').append(stanza).html()
- });
- }, function() {
- jsxc.storage.setUserItem('vcard', bid, {
- state: 'error'
- });
- });
- }
-
- if (!jsxc.master && key.match(new RegExp('^vcard' + jsxc.storage.SEP)) && e.newValue !== null && !e.newValue.match(/^request:/)) {
- n = JSON.parse(e.newValue);
-
- if (typeof n.state !== 'undefined') {
- $(document).trigger('loaded.vcard.jsxc', n);
- }
-
- jsxc.storage.removeUserItem('vcard', bid);
- }
- },
-
- /**
- * Save message to storage.
- *
- * @memberOf jsxc.storage
- * @param bid
- * @param direction
- * @param msg
- * @param encrypted
- * @param forwarded
- * @return post
- */
- saveMessage: function(bid, direction, msg, encrypted, forwarded, stamp) {
- var chat = jsxc.storage.getUserItem('chat', bid) || [];
-
- var uid = new Date().getTime() + ':msg';
-
- if (chat.length > jsxc.options.get('numberOfMsg')) {
- chat.pop();
+ jsxc.gui.window.hide(bid);
}
- var post = {
- direction: direction,
- msg: msg,
- uid: uid.replace(/:/, '-'),
- received: false,
- encrypted: encrypted || false,
- forwarded: forwarded || false,
- stamp: stamp || new Date().getTime()
- };
-
- chat.unshift(post);
- jsxc.storage.setUserItem('chat', bid, chat);
-
- return post;
- },
-
- /**
- * Save or update buddy data.
- *
- * @memberOf jsxc.storage
- * @param bid
- * @param data
- * @returns {String} Updated or created
- */
- saveBuddy: function(bid, data) {
-
- if (jsxc.storage.getUserItem('buddy', bid)) {
- jsxc.storage.updateUserItem('buddy', bid, data);
-
- return 'updated';
- }
+ jsxc.gui.window.setText(bid, window.text);
+ });
+ },
- jsxc.storage.setUserItem('buddy', bid, $.extend({
- jid: '',
- name: '',
- status: 0,
- sub: 'none',
- msgstate: 0,
- transferReq: -1,
- trust: false,
- fingerprint: null,
- res: [],
- type: 'chat'
- }, data));
-
- return 'created';
+ /**
+ * This method submits the specified login form.
+ */
+ submitLoginForm: function() {
+ var form = jsxc.options.loginForm.form.off('submit');
+
+ // Attach original events
+ var submits = form.data('submits') || [];
+ $.each(submits, function(index, val) {
+ form.submit(val);
+ });
+
+ if (form.find('#submit').length > 0) {
+ form.find('#submit').click();
+ } else {
+ form.submit();
}
- };
+ },
/**
- * @namespace jsxc.otr
+ * Escapes some characters to HTML character
*/
- jsxc.otr = {
- /** list of otr objects */
- objects: {},
-
- dsaFallback: null,
- /**
- * Handler for otr receive event
- *
- * @memberOf jsxc.otr
- * @param {Object} d
- * @param {string} d.bid
- * @param {string} d.msg received message
- * @param {boolean} d.encrypted True, if msg was encrypted.
- * @param {boolean} d.forwarded
- * @param {string} d.stamp timestamp
- */
- receiveMessage: function(d) {
- var bid = d.bid;
-
- if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT) {
- jsxc.otr.backup(bid);
- }
-
- if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !d.encrypted) {
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Received an unencrypted message.%% [') + d.msg + ']', d.encrypted, d.forwarded, d.stamp);
- } else {
- jsxc.gui.window.postMessage(bid, 'in', d.msg, d.encrypted, d.forwarded, d.stamp);
- }
- },
-
- /**
- * Handler for otr send event
- *
- * @param {string} jid
- * @param {string} msg message to be send
- */
- sendMessage: function(jid, msg, uid) {
- if (jsxc.otr.objects[jsxc.jidToBid(jid)].msgstate !== 0) {
- jsxc.otr.backup(jsxc.jidToBid(jid));
- }
-
- jsxc.xmpp._sendMessage(jid, msg, uid);
- },
-
- /**
- * Create new otr instance
- *
- * @param {type} bid
- * @returns {undefined}
- */
- create: function(bid) {
-
- if (jsxc.otr.objects.hasOwnProperty(bid)) {
- return;
- }
-
- if (!jsxc.options.otr.priv) {
- return;
- }
-
- // save list of otr objects
- var ol = jsxc.storage.getUserItem('otrlist') || [];
- if (ol.indexOf(bid) &lt; 0) {
- ol.push(bid);
- jsxc.storage.setUserItem('otrlist', ol);
- }
-
- jsxc.otr.objects[bid] = new OTR(jsxc.options.otr);
-
- if (jsxc.options.otr.SEND_WHITESPACE_TAG) {
- jsxc.otr.objects[bid].SEND_WHITESPACE_TAG = true;
- }
-
- if (jsxc.options.otr.WHITESPACE_START_AKE) {
- jsxc.otr.objects[bid].WHITESPACE_START_AKE = true;
- }
-
- jsxc.otr.objects[bid].on('status', function(status) {
- var data = jsxc.storage.getUserItem('buddy', bid);
-
- if (data === null) {
- return;
- }
-
- switch (status) {
- case OTR.CONST.STATUS_SEND_QUERY:
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.trying_to_start_private_conversation);
- break;
- case OTR.CONST.STATUS_AKE_SUCCESS:
- data.fingerprint = jsxc.otr.objects[bid].their_priv_pk.fingerprint();
- data.msgstate = OTR.CONST.MSGSTATE_ENCRYPTED;
-
- var msg = (jsxc.otr.objects[bid].trust ? jsxc.l.Verified : jsxc.l.Unverified) + ' ' + jsxc.l.private_conversation_started;
- jsxc.gui.window.postMessage(bid, 'sys', msg);
- break;
- case OTR.CONST.STATUS_END_OTR:
- data.fingerprint = null;
-
- if (jsxc.otr.objects[bid].msgstate === OTR.CONST.MSGSTATE_PLAINTEXT) {
- // we abort the private conversation
-
- data.msgstate = OTR.CONST.MSGSTATE_PLAINTEXT;
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.private_conversation_aborted);
-
- } else {
- // the buddy abort the private conversation
-
- data.msgstate = OTR.CONST.MSGSTATE_FINISHED;
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.your_buddy_closed_the_private_conversation_you_should_do_the_same);
- }
- break;
- case OTR.CONST.STATUS_SMP_HANDLE:
- jsxc.keepBusyAlive();
- break;
- }
-
- jsxc.storage.setUserItem('buddy', bid, data);
-
- // for encryption and verification state
- jsxc.gui.update(bid);
- });
-
- jsxc.otr.objects[bid].on('smp', function(type, data) {
- switch (type) {
- case 'question': // verification request received
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.Authentication_request_received);
-
- if ($('#jsxc_dialog').length > 0) {
- jsxc.otr.objects[bid].sm.abort();
- break;
- }
-
- jsxc.otr.onSmpQuestion(bid, data);
- jsxc.storage.setUserItem('smp_' + bid, {
- data: data || null
- });
-
- break;
- case 'trust': // verification completed
- jsxc.otr.objects[bid].trust = data;
- jsxc.storage.updateUserItem('buddy', bid, 'trust', data);
- jsxc.otr.backup(bid);
- jsxc.gui.update(bid);
-
- if (data) {
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.conversation_is_now_verified);
- } else {
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.authentication_failed);
- }
- jsxc.storage.removeUserItem('smp_' + bid);
- jsxc.gui.dialog.close();
- break;
- case 'abort':
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.l.Authentication_aborted);
- break;
- default:
- jsxc.debug('[OTR] sm callback: Unknown type: ' + type);
- }
- });
-
- // Receive message
- jsxc.otr.objects[bid].on('ui', function(msg, encrypted, meta) {
- jsxc.otr.receiveMessage({
- bid: bid,
- msg: msg,
- encrypted: encrypted === true,
- stamp: meta.stamp,
- forwarded: meta.forwarded
- });
- });
-
- // Send message
- jsxc.otr.objects[bid].on('io', function(msg, uid) {
- var jid = jsxc.gui.window.get(bid).data('jid') || jsxc.otr.objects[bid].jid;
-
- jsxc.otr.objects[bid].jid = jid;
-
- jsxc.otr.sendMessage(jid, msg, uid);
- });
-
- jsxc.otr.objects[bid].on('error', function(err) {
- // Handle this case in jsxc.otr.receiveMessage
- if (err !== 'Received an unencrypted message.') {
- jsxc.gui.window.postMessage(bid, 'sys', '[OTR] ' + jsxc.translate('%%' + err + '%%'));
- }
-
- jsxc.error('[OTR] ' + err);
- });
-
- jsxc.otr.restore(bid);
- },
-
- /**
- * show verification dialog with related part (secret or question)
- *
- * @param {type} bid
- * @param {string} [data]
- * @returns {undefined}
- */
- onSmpQuestion: function(bid, data) {
- jsxc.gui.showVerification(bid);
-
- $('#jsxc_dialog select').prop('selectedIndex', (data ? 2 : 3)).change();
- $('#jsxc_dialog > div:eq(0)').hide();
-
- if (data) {
- $('#jsxc_dialog > div:eq(2)').find('#jsxc_quest').val(data).prop('disabled', true);
- $('#jsxc_dialog > div:eq(2)').find('.creation').text('Answer');
- $('#jsxc_dialog > div:eq(2)').find('.jsxc_explanation').text(jsxc.l.your_buddy_is_attempting_to_determine_ + ' ' + jsxc.l.to_authenticate_to_your_buddy + jsxc.l.enter_the_answer_and_click_answer);
- } else {
- $('#jsxc_dialog > div:eq(3)').find('.jsxc_explanation').text(jsxc.l.your_buddy_is_attempting_to_determine_ + ' ' + jsxc.l.to_authenticate_to_your_buddy + jsxc.l.enter_the_secret);
- }
-
- $('#jsxc_dialog .jsxc_close').click(function() {
- jsxc.storage.removeUserItem('smp_' + bid);
-
- if (jsxc.master) {
- jsxc.otr.objects[bid].sm.abort();
- }
- });
- },
-
- /**
- * Send verification request to buddy
- *
- * @param {string} bid
- * @param {string} sec secret
- * @param {string} [quest] question
- * @returns {undefined}
- */
- sendSmpReq: function(bid, sec, quest) {
- jsxc.keepBusyAlive();
-
- jsxc.otr.objects[bid].smpSecret(sec, quest || '');
- },
-
- /**
- * Toggle encryption state
- *
- * @param {type} bid
- * @returns {undefined}
- */
- toggleTransfer: function(bid) {
- if (jsxc.storage.getUserItem('buddy', bid).msgstate === 0) {
- jsxc.otr.goEncrypt(bid);
- } else {
- jsxc.otr.goPlain(bid);
- }
- },
-
- /**
- * Send request to encrypt the session
- *
- * @param {type} bid
- * @returns {undefined}
- */
- goEncrypt: function(bid) {
- if (jsxc.master) {
- jsxc.otr.objects[bid].sendQueryMsg();
- } else {
- jsxc.storage.updateUserItem('buddy', bid, 'transferReq', 1);
- }
- },
-
- /**
- * Abort encryptet session
- *
- * @param {type} bid
- * @param cb callback
- * @returns {undefined}
- */
- goPlain: function(bid, cb) {
- if (jsxc.master) {
- jsxc.otr.objects[bid].endOtr.call(jsxc.otr.objects[bid], cb);
- jsxc.otr.objects[bid].init.call(jsxc.otr.objects[bid]);
-
- jsxc.otr.backup(bid);
- } else {
- jsxc.storage.updateUserItem('buddy', bid, 'transferReq', 0);
- }
- },
-
- /**
- * Backups otr session
- *
- * @param {string} bid
- */
- backup: function(bid) {
- var o = jsxc.otr.objects[bid]; // otr object
- var r = {}; // return value
-
- if (o === null) {
- return;
- }
-
- // all variables which should be saved
- var savekey = [ 'jid', 'our_instance_tag', 'msgstate', 'authstate', 'fragment', 'their_y', 'their_old_y', 'their_keyid', 'their_instance_tag', 'our_dh', 'our_old_dh', 'our_keyid', 'sessKeys', 'storedMgs', 'oldMacKeys', 'trust', 'transmittedRS', 'ssid', 'receivedPlaintext', 'authstate', 'send_interval' ];
-
- var i;
- for (i = 0; i &lt; savekey.length; i++) {
- r[savekey[i]] = JSON.stringify(o[savekey[i]]);
- }
-
- if (o.their_priv_pk !== null) {
- r.their_priv_pk = JSON.stringify(o.their_priv_pk.packPublic());
- }
-
- if (o.ake.otr_version && o.ake.otr_version !== '') {
- r.otr_version = JSON.stringify(o.ake.otr_version);
- }
-
- jsxc.storage.setUserItem('otr', bid, r);
- },
-
- /**
- * Restore old otr session
- *
- * @param {string} bid
- */
- restore: function(bid) {
- var o = jsxc.otr.objects[bid];
- var d = jsxc.storage.getUserItem('otr', bid);
-
- if (o !== null || d !== null) {
- var key;
- for (key in d) {
- if (d.hasOwnProperty(key)) {
- var val = JSON.parse(d[key]);
- if (key === 'their_priv_pk' && val !== null) {
- val = DSA.parsePublic(val);
- }
- if (key === 'otr_version' && val !== null) {
- o.ake.otr_version = val;
- } else {
- o[key] = val;
- }
- }
- }
-
- jsxc.otr.objects[bid] = o;
-
- if (o.msgstate === 1 && o.their_priv_pk !== null) {
- o._smInit.call(jsxc.otr.objects[bid]);
- }
- }
-
- jsxc.otr.enable(bid);
- },
-
- /**
- * Create or load DSA key
- *
- * @returns {unresolved}
- */
- createDSA: function() {
- if (jsxc.options.otr.priv) {
- return;
- }
-
- if (jsxc.storage.getUserItem('key') === null) {
- var msg = jsxc.l.Creating_your_private_key_;
- var worker = null;
-
- if (Worker) {
- // try to create web-worker
-
- try {
- worker = new Worker(jsxc.options.root + '/lib/otr/build/dsa-webworker.js');
- } catch (err) {
- jsxc.warn('Couldn\'t create web-worker.', err);
- }
- }
-
- jsxc.otr.dsaFallback = (worker === null);
-
- if (!jsxc.otr.dsaFallback) {
- // create DSA key in background
-
- jsxc._onMaster();
-
- worker.onmessage = function(e) {
- var type = e.data.type;
- var val = e.data.val;
-
- if (type === 'debug') {
- jsxc.debug(val);
- } else if (type === 'data') {
- jsxc.otr.DSAready(DSA.parsePrivate(val));
- }
- };
-
- // start worker
- worker.postMessage({
- imports: [ jsxc.options.root + '/lib/otr/vendor/salsa20.js', jsxc.options.root + '/lib/otr/vendor/bigint.js', jsxc.options.root + '/lib/otr/vendor/crypto.js', jsxc.options.root + '/lib/otr/vendor/eventemitter.js', jsxc.options.root + '/lib/otr/lib/const.js', jsxc.options.root + '/lib/otr/lib/helpers.js', jsxc.options.root + '/lib/otr/lib/dsa.js' ],
- seed: BigInt.getSeed(),
- debug: true
- });
-
- } else {
- // fallback
-
- jsxc.gui.dialog.open(jsxc.gui.template.get('waitAlert', null, msg), {
- noClose: true
- });
-
- jsxc.debug('DSA key creation started.');
-
- // wait until the wait alert is opened
- setTimeout(function() {
- var dsa = new DSA();
- jsxc.otr.DSAready(dsa);
- }, 500);
- }
- } else {
- jsxc.debug('DSA key loaded');
- jsxc.options.otr.priv = DSA.parsePrivate(jsxc.storage.getUserItem('key'));
-
- jsxc.otr._createDSA();
- }
- },
-
- /**
- * Ending of createDSA().
- */
- _createDSA: function() {
-
- jsxc.storage.setUserItem('priv_fingerprint', jsxc.options.otr.priv.fingerprint());
-
- if (jsxc.otr.dsaFallback !== false) {
- jsxc._onMaster();
- }
- },
-
- /**
- * Ending of DSA key generation.
- *
- * @param {DSA} dsa DSA object
- */
- DSAready: function(dsa) {
- jsxc.storage.setUserItem('key', dsa.packPrivate());
- jsxc.options.otr.priv = dsa;
-
- // close wait alert
- if (jsxc.otr.dsaFallback) {
- jsxc.gui.dialog.close();
- } else {
- $.each(jsxc.storage.getUserItem('windowlist'), function(index, val) {
- jsxc.otr.create(val);
- });
- }
-
- jsxc.otr._createDSA();
- },
-
- enable: function(bid) {
- jsxc.gui.window.get(bid).find('.jsxc_otr').removeClass('jsxc_disabled');
- }
- };
+ escapeHTML: function(text) {
+ text = text.replace(/&amp;/g, '&').replace(/&lt;/g, '&lt;').replace(/&gt;/g, '>');
+ return text.replace(/&/g, '&amp;').replace(/&lt;/g, '&lt;').replace(/>/g, '&gt;');
+ },
/**
- * This namespace handles the Notification API.
+ * Removes all html tags.
*
- * @namespace jsxc.notification
+ * @memberOf jsxc
+ * @param text
+ * @returns stripped text
*/
- jsxc.notification = {
-
- /** Current audio file. */
- audio: null,
-
- /**
- * Register notification on incoming messages.
- *
- * @memberOf jsxc.notification
- */
- init: function() {
- $(document).on('postmessagein.jsxc', function(event, bid, msg) {
- msg = (msg.match(/^\?OTR/)) ? jsxc.translate('%%Encrypted message%%') : msg;
- var data = jsxc.storage.getUserItem('buddy', bid);
+ removeHTML: function(text) {
+ return $('&lt;span>').html(text).text();
+ },
- jsxc.notification.notify(jsxc.translate('%%New message from%% ') + data.name, msg, undefined, undefined, jsxc.CONST.SOUNDS.MSG);
- });
-
- $(document).on('callincoming.jingle', function() {
- jsxc.notification.playSound(jsxc.CONST.SOUNDS.CALL, true, true);
- });
-
- $(document).on('accept.call.jsxc reject.call.jsxc', function() {
- jsxc.notification.stopSound();
- });
- },
-
- /**
- * Shows a pop up notification and optional play sound.
- *
- * @param title Title
- * @param msg Message
- * @param d Duration
- * @param force Should message also shown, if tab is visible?
- * @param soundFile Playing given sound file
- * @param loop Loop sound file?
- */
- notify: function(title, msg, d, force, soundFile, loop) {
- if (!jsxc.options.notification || !jsxc.notification.hasPermission()) {
- return; // notifications disabled
- }
-
- if (!jsxc.isHidden() && !force) {
- return; // Tab is visible
- }
-
- jsxc.toNotification = setTimeout(function() {
-
- if (typeof soundFile === 'string') {
- jsxc.notification.playSound(soundFile, loop, force);
- }
-
- var popup = new Notification(jsxc.translate(title), {
- body: jsxc.translate(msg),
- icon: jsxc.options.root + '/img/XMPP_logo.png'
- });
-
- var duration = d || jsxc.options.popupDuration;
-
- if (duration > 0) {
- setTimeout(function() {
- popup.close();
- }, duration);
- }
- }, jsxc.toNotificationDelay);
- },
-
- /**
- * Checks if browser has support for notifications and add on chrome to
- * the default api.
- *
- * @returns {Boolean} True if the browser has support.
- */
- hasSupport: function() {
- if (window.webkitNotifications) {
- // prepare chrome
-
- window.Notification = function(title, opt) {
- var popup = window.webkitNotifications.createNotification(null, title, opt.body);
- popup.show();
-
- popup.close = function() {
- popup.cancel();
- };
-
- return popup;
- };
-
- var permission;
- switch (window.webkitNotifications.checkPermission()) {
- case 0:
- permission = jsxc.CONST.NOTIFICATION_GRANTED;
- break;
- case 2:
- permission = jsxc.CONST.NOTIFICATION_DENIED;
- break;
- default: // 1
- permission = jsxc.CONST.NOTIFICATION_DEFAULT;
- }
- window.Notification.permission = permission;
-
- window.Notification.requestPermission = function(func) {
- window.webkitNotifications.requestPermission(func);
- };
-
- return true;
- } else if (window.Notification) {
- return true;
- } else {
- return false;
- }
- },
-
- /**
- * Ask user on first incoming message if we should inform him about new
- * messages.
- */
- prepareRequest: function() {
-
- $(document).one('postmessagein.jsxc', function() {
- jsxc.switchEvents({
- 'notificationready.jsxc': function() {
- jsxc.gui.dialog.close();
- jsxc.notification.init();
- jsxc.storage.setUserItem('notification', true);
- },
- 'notificationfailure.jsxc': function() {
- jsxc.gui.dialog.close();
- jsxc.options.notification = false;
- jsxc.storage.setUserItem('notification', false);
- }
- });
-
- setTimeout(function() {
- jsxc.notice.add('%%Notifications%%?', '%%Should_we_notify_you_%%', 'gui.showRequestNotification');
- }, 1000);
- });
- },
+ /**
+ * Executes only one of the given events
+ *
+ * @param {string} obj.key event name
+ * @param {function} obj.value function to execute
+ * @returns {string} namespace of all events
+ */
+ switchEvents: function(obj) {
+ var ns = Math.random().toString(36).substr(2, 12);
+ var self = this;
- /**
- * Request notification permission.
- */
- requestPermission: function() {
- window.Notification.requestPermission(function(status) {
- if (window.Notification.permission !== status) {
- window.Notification.permission = status;
- }
+ $.each(obj, function(key, val) {
+ $(document).one(key + '.' + ns, function() {
+ $(document).off('.' + ns);
- if (jsxc.notification.hasPermission()) {
- $(document).trigger('notificationready.jsxc');
- } else {
- $(document).trigger('notificationfailure.jsxc');
- }
+ val.apply(self, arguments);
});
- },
+ });
- /**
- * Check permission.
- *
- * @returns {Boolean} True if we have the permission
- */
- hasPermission: function() {
- return window.Notification.permission === jsxc.CONST.NOTIFICATION_GRANTED;
- },
-
- /**
- * Plays the given file.
- *
- * @memberOf jsxc.notification
- * @param {string} soundFile File relative to the sound directory
- * @param {boolean} loop True for loop
- * @param {boolean} force Play even if a tab is visible. Default: false.
- */
- playSound: function(soundFile, loop, force) {
- if (!jsxc.master) {
- // only master plays sound
- return;
- }
-
- if (jsxc.options.get('muteNotification') || jsxc.storage.getUserItem('presence') === 'dnd') {
- // sound mute or own presence is dnd
- return;
- }
-
- if (!jsxc.isHidden() && !force) {
- // tab is visible
- return;
- }
+ return ns;
+ },
- // stop current audio file
- jsxc.notification.stopSound();
-
- var audio = new Audio(jsxc.options.root + '/sound/' + soundFile);
- audio.loop = loop || false;
- audio.play();
-
- jsxc.notification.audio = audio;
- },
-
- /**
- * Stop/remove current sound.
- *
- * @memberOf jsxc.notification
- */
- stopSound: function() {
- var audio = jsxc.notification.audio;
+ /**
+ * Checks if tab is hidden.
+ *
+ * @returns {boolean} True if tab is hidden
+ */
+ isHidden: function() {
+ var hidden = false;
+
+ if (typeof document.hidden !== 'undefined') {
+ hidden = document.hidden;
+ } else if (typeof document.webkitHidden !== 'undefined') {
+ hidden = document.webkitHidden;
+ } else if (typeof document.mozHidden !== 'undefined') {
+ hidden = document.mozHidden;
+ } else if (typeof document.msHidden !== 'undefined') {
+ hidden = document.msHidden;
+ }
- if (typeof audio !== 'undefined' && audio !== null) {
- audio.pause();
- jsxc.notification.audio = null;
- }
- },
+ // handle multiple tabs
+ if (hidden && jsxc.master) {
+ jsxc.storage.ink('hidden', 0);
+ } else if (!hidden && !jsxc.master) {
+ jsxc.storage.ink('hidden');
+ }
- /**
- * Mute sound.
- *
- * @memberOf jsxc.notification
- * @param {boolean} external True if triggered from external tab. Default:
- * false.
- */
- muteSound: function(external) {
- $('#jsxc_menu .jsxc_muteNotification').text(jsxc.translate('%%Unmute%%'));
+ return hidden;
+ },
- if (external !== true) {
- jsxc.options.set('muteNotification', true);
- }
- },
+ /**
+ * Checks if tab has focus.
+ *
+ * @returns {boolean} True if tabs has focus
+ */
+ hasFocus: function() {
+ var focus = true;
- /**
- * Unmute sound.
- *
- * @memberOf jsxc.notification
- * @param {boolean} external True if triggered from external tab. Default:
- * false.
- */
- unmuteSound: function(external) {
- $('#jsxc_menu .jsxc_muteNotification').text(jsxc.translate('%%Mute%%'));
+ if (typeof document.hasFocus === 'function') {
+ focus = document.hasFocus();
+ }
- if (external !== true) {
- jsxc.options.set('muteNotification', false);
- }
+ if (!focus && jsxc.master) {
+ jsxc.storage.ink('focus', 0);
+ } else if (focus && !jsxc.master) {
+ jsxc.storage.ink('focus');
}
- };
+
+ return focus;
+ },
/**
- * This namespace handle the notice system.
+ * Executes the given function in jsxc namespace.
*
- * @namspace jsxc.notice
* @memberOf jsxc
+ * @param {string} fnName Function name
+ * @param {array} fnParams Function parameters
+ * @returns Function return value
*/
- jsxc.notice = {
- /** Number of notices. */
- _num: 0,
-
- /**
- * Loads the saved notices.
- *
- * @memberOf jsxc.notice
- */
- load: function() {
- // reset list
- $('#jsxc_notice ul li').remove();
- $('#jsxc_notice > span').text('');
- jsxc.notice._num = 0;
-
- var saved = jsxc.storage.getUserItem('notices') || [];
- var key = null;
-
- for (key in saved) {
- if (saved.hasOwnProperty(key)) {
- var val = saved[key];
-
- jsxc.notice.add(val.msg, val.description, val.fnName, val.fnParams, key);
- }
- }
- },
-
- /**
- * Add a new notice to the stack;
- *
- * @memberOf jsxc.notice
- * @param msg Header message
- * @param description Notice description
- * @param fnName Function name to be called if you open the notice
- * @param fnParams Array of params for function
- * @param id Notice id
- */
- add: function(msg, description, fnName, fnParams, id) {
- var nid = id || Date.now();
- var list = $('#jsxc_notice ul');
- var notice = $('&lt;li/>');
-
- notice.click(function() {
- jsxc.notice.remove(nid);
-
- jsxc.exec(fnName, fnParams);
-
- return false;
- });
-
- notice.text(jsxc.translate(msg));
- notice.attr('title', jsxc.translate(description) || '');
- notice.attr('data-nid', nid);
- list.append(notice);
-
- $('#jsxc_notice > span').text(++jsxc.notice._num);
-
- if (!id) {
- var saved = jsxc.storage.getUserItem('notices') || {};
- saved[nid] = {
- msg: msg,
- description: description,
- fnName: fnName,
- fnParams: fnParams
- };
- jsxc.storage.setUserItem('notices', saved);
-
- jsxc.notification.notify(msg, description || '', null, true, jsxc.CONST.SOUNDS.NOTICE);
- }
- },
-
- /**
- * Removes notice from stack
- *
- * @memberOf jsxc.notice
- * @param nid The notice id
- */
- remove: function(nid) {
- var el = $('#jsxc_notice li[data-nid=' + nid + ']');
-
- el.remove();
- $('#jsxc_notice > span').text(--jsxc.notice._num || '');
-
- var s = jsxc.storage.getUserItem('notices');
- delete s[nid];
- jsxc.storage.setUserItem('notices', s);
+ exec: function(fnName, fnParams) {
+ var fnList = fnName.split('.');
+ var fn = jsxc[fnList[0]];
+ var i;
+ for (i = 1; i &lt; fnList.length; i++) {
+ fn = fn[fnList[i]];
}
- };
+ if (typeof fn === 'function') {
+ return fn.apply(null, fnParams);
+ }
+ },
+
/**
- * Contains all available translations
+ * Hash string into 32-bit signed integer.
*
- * @namespace jsxc.l10n
* @memberOf jsxc
+ * @param {string} str input string
+ * @returns {integer} 32-bit signed integer
*/
- jsxc.l10n = {
- en: {
- Logging_in: 'Logging in…',
- your_connection_is_unencrypted: 'Your connection is unencrypted.',
- your_connection_is_encrypted: 'Your connection is encrypted.',
- your_buddy_closed_the_private_connection: 'Your buddy closed the private connection.',
- start_private: 'Start private',
- close_private: 'Close private',
- your_buddy_is_verificated: 'Your buddy is verified.',
- you_have_only_a_subscription_in_one_way: 'You only have a one-way subscription.',
- authentication_query_sent: 'Authentication query sent.',
- your_message_wasnt_send_please_end_your_private_conversation: 'Your message was not sent. Please end your private conversation.',
- unencrypted_message_received: 'Unencrypted message received:',
- your_message_wasnt_send_because_you_have_no_valid_subscription: 'Your message was not sent because you have no valid subscription.',
- not_available: 'Not available',
- no_connection: 'No connection!',
- relogin: 'relogin',
- trying_to_start_private_conversation: 'Trying to start private conversation!',
- Verified: 'Verified',
- Unverified: 'Unverified',
- private_conversation_started: 'Private conversation started.',
- private_conversation_aborted: 'Private conversation aborted!',
- your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Your buddy closed the private conversation! You should do the same.',
- conversation_is_now_verified: 'Conversation is now verified.',
- authentication_failed: 'Authentication failed.',
- your_buddy_is_attempting_to_determine_: 'You buddy is attempting to determine if he or she is really talking to you.',
- to_authenticate_to_your_buddy: 'To authenticate to your buddy, ',
- enter_the_answer_and_click_answer: 'enter the answer and click Answer.',
- enter_the_secret: 'enter the secret.',
- Creating_your_private_key_: 'Creating your private key; this may take a while.',
- Authenticating_a_buddy_helps_: 'Authenticating a buddy helps ensure that the person you are talking to is really the one he or she claims to be.',
- How_do_you_want_to_authenticate_your_buddy: 'How do you want to authenticate {{bid_name}} (&lt;b>{{bid_jid}}&lt;/b>)?',
- Select_method: 'Select method...',
- Manual: 'Manual',
- Question: 'Question',
- Secret: 'Secret',
- To_verify_the_fingerprint_: 'To verify the fingerprint, contact your buddy via some other trustworthy channel, such as the telephone.',
- Your_fingerprint: 'Your fingerprint',
- Buddy_fingerprint: 'Buddy fingerprint',
- Close: 'Close',
- Compared: 'Compared',
- To_authenticate_using_a_question_: 'To authenticate using a question, pick a question whose answer is known only you and your buddy.',
- Ask: 'Ask',
- To_authenticate_pick_a_secret_: 'To authenticate, pick a secret known only to you and your buddy.',
- Compare: 'Compare',
- Fingerprints: 'Fingerprints',
- Authentication: 'Authentication',
- Message: 'Message',
- Add_buddy: 'Add buddy',
- rename_buddy: 'rename buddy',
- delete_buddy: 'delete buddy',
- Login: 'Login',
- Username: 'Username',
- Password: 'Password',
- Cancel: 'Cancel',
- Connect: 'Connect',
- Type_in_the_full_username_: 'Type in the full username and an optional alias.',
- Alias: 'Alias',
- Add: 'Add',
- Subscription_request: 'Subscription request',
- You_have_a_request_from: 'You have a request from',
- Deny: 'Deny',
- Approve: 'Approve',
- Remove_buddy: 'Remove buddy',
- You_are_about_to_remove_: 'You are about to remove {{bid_name}} (&lt;b>{{bid_jid}}&lt;/b>) from your buddy list. All related chats will be closed.',
- Continue_without_chat: 'Continue without chat',
- Please_wait: 'Please wait',
- Login_failed: 'Chat login failed',
- Sorry_we_cant_authentikate_: 'Authentication failed with the chat server. Maybe the password is wrong?',
- Retry: 'Back',
- clear_history: 'Clear history',
- New_message_from: 'New message from',
- Should_we_notify_you_: 'Should we notify you about new messages in the future?',
- Please_accept_: 'Please click the "Allow" button at the top.',
- Hide_offline: 'Hide offline contacts',
- Show_offline: 'Show offline contacts',
- About: 'About',
- dnd: 'Do Not Disturb',
- Mute: 'Mute',
- Unmute: 'Unmute',
- Subscription: 'Subscription',
- both: 'both',
- Status: 'Status',
- online: 'online',
- chat: 'chat',
- away: 'away',
- xa: 'extended away',
- offline: 'offline',
- none: 'none',
- Unknown_instance_tag: 'Unknown instance tag.',
- Not_one_of_our_latest_keys: 'Not one of our latest keys.',
- Received_an_unreadable_encrypted_message: 'Received an unreadable encrypted message.',
- Online: 'Online',
- Chatty: 'Chatty',
- Away: 'Away',
- Extended_away: 'Extended away',
- Offline: 'Offline',
- Friendship_request: 'Friendship request',
- Confirm: 'Confirm',
- Dismiss: 'Dismiss',
- Remove: 'Remove',
- Online_help: 'Online help',
- FN: 'Full name',
- N: ' ',
- FAMILY: 'Family name',
- GIVEN: 'Given name',
- NICKNAME: 'Nickname',
- URL: 'URL',
- ADR: 'Address',
- STREET: 'Street Address',
- EXTADD: 'Extended Address',
- LOCALITY: 'Locality',
- REGION: 'Region',
- PCODE: 'Postal Code',
- CTRY: 'Country',
- TEL: 'Telephone',
- NUMBER: 'Number',
- EMAIL: 'Email',
- USERID: ' ',
- ORG: 'Organization',
- ORGNAME: 'Name',
- ORGUNIT: 'Unit',
- TITLE: 'Job title',
- ROLE: 'Role',
- BDAY: 'Birthday',
- DESC: 'Description',
- PHOTO: ' ',
- send_message: 'Send message',
- get_info: 'Show information',
- Settings: 'Settings',
- Priority: 'Priority',
- Save: 'Save',
- User_settings: 'User settings',
- A_fingerprint_: 'A fingerprint is used to make sure that the person you are talking to is who he or she is saying.',
- Your_roster_is_empty_add_a: 'Your roster is empty, add a ',
- new_buddy: 'new buddy',
- is: 'is',
- Login_options: 'Login options',
- BOSH_url: 'BOSH URL',
- Domain: 'Domain',
- Resource: 'Resource',
- On_login: 'On login',
- Received_an_unencrypted_message: 'Received an unencrypted message',
- Sorry_your_buddy_doesnt_provide_any_information: 'Sorry, your buddy does not provide any information.',
- Info_about: 'Info about',
- Authentication_aborted: 'Authentication aborted.',
- Authentication_request_received: 'Authentication request received.',
- Do_you_want_to_display_them: 'Do you want to display them?',
- Log_in_without_chat: 'Log in without chat',
- has_come_online: 'has come online',
- Unknown_sender: 'Unknown sender',
- You_received_a_message_from_an_unknown_sender: 'You received a message from an unknown sender'
- },
- de: {
- Logging_in: 'Login läuft…',
- your_connection_is_unencrypted: 'Deine Verbindung ist UNverschlüsselt.',
- your_connection_is_encrypted: 'Deine Verbindung ist verschlüsselt.',
- your_buddy_closed_the_private_connection: 'Dein Freund hat die private Verbindung getrennt.',
- start_private: 'Privat starten',
- close_private: 'Privat abbrechen',
- your_buddy_is_verificated: 'Dein Freund ist verifiziert.',
- you_have_only_a_subscription_in_one_way: 'Die Freundschaft ist nur einseitig.',
- authentication_query_sent: 'Authentifizierungsanfrage gesendet.',
- your_message_wasnt_send_please_end_your_private_conversation: 'Deine Nachricht wurde nicht gesendet. Bitte beende die private Konversation.',
- unencrypted_message_received: 'Unverschlüsselte Nachricht erhalten.',
- your_message_wasnt_send_because_you_have_no_valid_subscription: 'Deine Nachricht wurde nicht gesandt, da die Freundschaft einseitig ist.',
- not_available: 'Nicht verfügbar.',
- no_connection: 'Keine Verbindung.',
- relogin: 'Neu anmelden.',
- trying_to_start_private_conversation: 'Versuche private Konversation zu starten.',
- Verified: 'Verifiziert',
- Unverified: 'Unverifiziert',
- private_conversation_started: 'Private Konversation gestartet.',
- private_conversation_aborted: 'Private Konversation abgebrochen.',
- your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Dein Freund hat die private Konversation beendet. Das solltest du auch tun!',
- conversation_is_now_verified: 'Konversation ist jetzt verifiziert',
- authentication_failed: 'Authentifizierung fehlgeschlagen.',
- your_buddy_is_attempting_to_determine_: 'Dein Freund versucht herauszufinden ob er wirklich mit dir redet.',
- to_authenticate_to_your_buddy: 'Um dich gegenüber deinem Freund zu verifizieren ',
- enter_the_answer_and_click_answer: 'gib die Antwort ein und klick auf Antworten.',
- enter_the_secret: 'gib das Geheimnis ein.',
- Creating_your_private_key_: 'Wir werden jetzt deinen privaten Schlüssel generieren. Das kann einige Zeit in Anspruch nehmen.',
- Authenticating_a_buddy_helps_: 'Einen Freund zu authentifizieren hilft sicher zustellen, dass die Person mit der du sprichst auch die ist die sie sagt.',
- How_do_you_want_to_authenticate_your_buddy: 'Wie willst du {{bid_name}} (&lt;b>{{bid_jid}}&lt;/b>) authentifizieren?',
- Select_method: 'Wähle...',
- Manual: 'Manual',
- Question: 'Frage',
- Secret: 'Geheimnis',
- To_verify_the_fingerprint_: 'Um den Fingerprint zu verifizieren kontaktiere dein Freund über einen anderen Kommunikationsweg. Zum Beispiel per Telefonanruf.',
- Your_fingerprint: 'Dein Fingerprint',
- Buddy_fingerprint: 'Sein/Ihr Fingerprint',
- Close: 'Schließen',
- Compared: 'Verglichen',
- To_authenticate_using_a_question_: 'Um die Authentifizierung per Frage durchzuführen, wähle eine Frage bei welcher nur dein Freund die Antwort weiß.',
- Ask: 'Frage',
- To_authenticate_pick_a_secret_: 'Um deinen Freund zu authentifizieren, wähle ein Geheimnis welches nur deinem Freund und dir bekannt ist.',
- Compare: 'Vergleiche',
- Fingerprints: 'Fingerprints',
- Authentication: 'Authentifizierung',
- Message: 'Nachricht',
- Add_buddy: 'Freund hinzufügen',
- rename_buddy: 'Freund umbenennen',
- delete_buddy: 'Freund löschen',
- Login: 'Anmeldung',
- Username: 'Benutzername',
- Password: 'Passwort',
- Cancel: 'Abbrechen',
- Connect: 'Verbinden',
- Type_in_the_full_username_: 'Gib bitte den vollen Benutzernamen und optional ein Alias an.',
- Alias: 'Alias',
- Add: 'Hinzufügen',
- Subscription_request: 'Freundschaftsanfrage',
- You_have_a_request_from: 'Du hast eine Anfrage von',
- Deny: 'Ablehnen',
- Approve: 'Bestätigen',
- Remove_buddy: 'Freund entfernen',
- You_are_about_to_remove_: 'Du bist gerade dabei {{bid_name}} (&lt;b>{{bid_jid}}&lt;/b>) von deiner Kontaktliste zu entfernen. Alle Chats werden geschlossen.',
- Continue_without_chat: 'Weiter ohne Chat',
- Please_wait: 'Bitte warten',
- Login_failed: 'Chat-Anmeldung fehlgeschlagen',
- Sorry_we_cant_authentikate_: 'Der Chatserver hat die Anmeldung abgelehnt. Falsches Passwort?',
- Retry: 'Zurück',
- clear_history: 'Lösche Verlauf',
- New_message_from: 'Neue Nachricht von',
- Should_we_notify_you_: 'Sollen wir dich in Zukunft über eingehende Nachrichten informieren, auch wenn dieser Tab nicht im Vordergrund ist?',
- Please_accept_: 'Bitte klick auf den "Zulassen" Button oben.',
- Menu: 'Menü',
- Hide_offline: 'Offline ausblenden',
- Show_offline: 'Offline einblenden',
- About: 'Über',
- dnd: 'Beschäftigt',
- Mute: 'Ton aus',
- Unmute: 'Ton an',
- Subscription: 'Bezug',
- both: 'beidseitig',
- Status: 'Status',
- online: 'online',
- chat: 'chat',
- away: 'abwesend',
- xa: 'länger abwesend',
- offline: 'offline',
- none: 'keine',
- Unknown_instance_tag: 'Unbekannter instance tag.',
- Not_one_of_our_latest_keys: 'Nicht einer unserer letzten Schlüssel.',
- Received_an_unreadable_encrypted_message: 'Eine unlesbare verschlüsselte Nachricht erhalten.',
- Online: 'Online',
- Chatty: 'Gesprächig',
- Away: 'Abwesend',
- Extended_away: 'Länger abwesend',
- Offline: 'Offline',
- Friendship_request: 'Freundschaftsanfrage',
- Confirm: 'Bestätigen',
- Dismiss: 'Ablehnen',
- Remove: 'Löschen',
- Online_help: 'Online Hilfe',
- FN: 'Name',
- N: ' ',
- FAMILY: 'Familienname',
- GIVEN: 'Vorname',
- NICKNAME: 'Spitzname',
- URL: 'URL',
- ADR: 'Adresse',
- STREET: 'Straße',
- EXTADD: 'Zusätzliche Adresse',
- LOCALITY: 'Ortschaft',
- REGION: 'Region',
- PCODE: 'Postleitzahl',
- CTRY: 'Land',
- TEL: 'Telefon',
- NUMBER: 'Nummer',
- EMAIL: 'E-Mail',
- USERID: ' ',
- ORG: 'Organisation',
- ORGNAME: 'Name',
- ORGUNIT: 'Abteilung',
- TITLE: 'Titel',
- ROLE: 'Rolle',
- BDAY: 'Geburtstag',
- DESC: 'Beschreibung',
- PHOTO: ' ',
- send_message: 'Sende Nachricht',
- get_info: 'Benutzerinformationen',
- Settings: 'Einstellungen',
- Priority: 'Priorität',
- Save: 'Speichern',
- User_settings: 'Benutzereinstellungen',
- A_fingerprint_: 'Ein Fingerabdruck wird dazu benutzt deinen Gesprächspartner zu identifizieren.',
- Your_roster_is_empty_add_a: 'Deine Freundesliste ist leer, füge einen neuen Freund ',
- new_buddy: 'hinzu',
- is: 'ist',
- Login_options: 'Anmeldeoptionen',
- BOSH_url: 'BOSH url',
- Domain: 'Domain',
- Resource: 'Ressource',
- On_login: 'Beim Anmelden',
- Received_an_unencrypted_message: 'Unverschlüsselte Nachricht empfangen',
- Sorry_your_buddy_doesnt_provide_any_information: 'Dein Freund stellt leider keine Informationen bereit.',
- Info_about: 'Info über',
- Authentication_aborted: 'Authentifizierung abgebrochen.',
- Authentication_request_received: 'Authentifizierunganfrage empfangen.',
- Log_in_without_chat: 'Anmelden ohne Chat',
- Do_you_want_to_display_them: 'Möchtest du sie sehen?',
- has_come_online: 'ist online gekommen',
- Unknown_sender: 'Unbekannter Sender',
- You_received_a_message_from_an_unknown_sender: 'Du hast eine Nachricht von einem unbekannten Sender erhalten'
- },
- es: {
- Logging_in: 'Por favor, espere...',
- your_connection_is_unencrypted: 'Su conexión no está cifrada.',
- your_connection_is_encrypted: 'Su conexión está cifrada.',
- your_buddy_closed_the_private_connection: 'Su amigo ha cerrado la conexión privada.',
- start_private: 'Iniciar privado',
- close_private: 'Cerrar privado',
- your_buddy_is_verificated: 'Tu amigo está verificado.',
- you_have_only_a_subscription_in_one_way: 'Sólo tienes una suscripción de un modo.',
- authentication_query_sent: 'Consulta de verificación enviada.',
- your_message_wasnt_send_please_end_your_private_conversation: 'Su mensaje no fue enviado. Por favor, termine su conversación privada.',
- unencrypted_message_received: 'Mensaje no cifrado recibido:',
- your_message_wasnt_send_because_you_have_no_valid_subscription: 'Su mensaje no se ha enviado, porque usted no tiene suscripción válida.',
- not_available: 'No disponible',
- no_connection: 'Sin conexión!',
- relogin: 'iniciar sesión nuevamente',
- trying_to_start_private_conversation: 'Intentando iniciar una conversación privada!',
- Verified: 'Verificado',
- Unverified: 'No verificado',
- private_conversation_started: 'se inició una conversación privada.',
- private_conversation_aborted: 'Conversación privada abortada!',
- your_buddy_closed_the_private_conversation_you_should_do_the_same: 'Su amigo cerró la conversación privada! Usted debería hacer lo mismo.',
- conversation_is_now_verified: 'La conversación es ahora verificada.',
- authentication_failed: 'Fallo la verificación.',
- your_buddy_is_attempting_to_determine_: 'Tu amigo está tratando de determinar si él o ella está realmente hablando con usted.',
- to_authenticate_to_your_buddy: 'Para autenticar a su amigo, ',
- enter_the_answer_and_click_answer: 'introduce la respuesta y haga clic en Contestar.',
- enter_the_secret: 'especifique el secreto.',
- Creating_your_private_key_: 'Ahora vamos a crear su clave privada. Esto puede tomar algún tiempo.',
- Authenticating_a_buddy_helps_: 'Autenticación de un amigo ayuda a garantizar que la persona que está hablando es quien él o ella está diciendo.',
- How_do_you_want_to_authenticate_your_buddy: '¿Cómo desea autenticar {{bid_name}} (&lt;b>{{bid_jid}}&lt;/b>)?',
- Select_method: 'Escoja un método...',
- Manual: 'Manual',
- Question: 'Pregunta',
- Secret: 'Secreto',
- To_verify_the_fingerprint_: 'Para verificar la firma digital, póngase en contacto con su amigo a través de algún otro canal autenticado, como el teléfono.',
- Your_fingerprint: 'Tu firma digital',
- Buddy_fingerprint: 'firma digital de tu amigo',
- Close: 'Cerrar',
- Compared: 'Comparado',
- To_authenticate_using_a_question_: 'Para autenticar mediante una pregunta, elegir una pregunta cuya respuesta se conoce sólo usted y su amigo.',
- Ask: 'Preguntar',
- To_authenticate_pick_a_secret_: 'Para autenticar, elija un secreto conocido sólo por usted y su amigo.',
- Compare: 'Comparar',
- Fingerprints: 'Firmas digitales',
- Authentication: 'Autenticación',
- Message: 'Mensaje',
- Add_buddy: 'Añadir amigo',
- rename_buddy: 'renombrar amigo',
- delete_buddy: 'eliminar amigo',
- Login: 'Iniciar Sesión',
- Username: 'Usuario',
- Password: 'Contraseña',
- Cancel: 'Cancelar',
- Connect: 'Conectar',
- Type_in_the_full_username_: 'Escriba el usuario completo y un alias opcional.',
- Alias: 'Alias',
- Add: 'Añadir',
- Subscription_request: 'Solicitud de suscripción',
- You_have_a_request_from: 'Tienes una petición de',
- Deny: 'Rechazar',
- Approve: 'Aprobar',
- Remove_buddy: 'Eliminar amigo',
- You_are_about_to_remove_: 'Vas a eliminar a {{bid_name}} (&lt;b>{{bid_jid}}&lt;/b>) de tu lista de amigos. Todas las conversaciones relacionadas serán cerradas.',
- Continue_without_chat: 'Continuar',
- Please_wait: 'Espere por favor',
- Login_failed: 'Fallo el inicio de sesión',
- Sorry_we_cant_authentikate_: 'Lo sentimos, no podemos autentificarlo en nuestro servidor de chat. ¿Tal vez la contraseña es incorrecta?',
- Retry: 'Reintentar',
- clear_history: 'Borrar el historial',
- New_message_from: 'Nuevo mensaje de',
- Should_we_notify_you_: '¿Debemos notificarle sobre nuevos mensajes en el futuro?',
- Please_accept_: 'Por favor, haga clic en el botón "Permitir" en la parte superior.',
- dnd: 'No Molestar',
- Mute: 'Desactivar sonido',
- Unmute: 'Activar sonido',
- Subscription: 'Suscripción',
- both: 'ambos',
- Status: 'Estado',
- online: 'en línea',
- chat: 'chat',
- away: 'ausente',
- xa: 'mas ausente',
- offline: 'desconectado',
- none: 'nadie',
- Unknown_instance_tag: 'Etiqueta de instancia desconocida.',
- Not_one_of_our_latest_keys: 'No de nuestra ultima tecla.',
- Received_an_unreadable_encrypted_message: 'Se recibió un mensaje cifrado ilegible.',
- Online: 'En linea',
- Chatty: 'Hablador',
- Away: 'Ausente',
- Extended_away: 'Mas ausente',
- Offline: 'Desconectado',
- Friendship_request: 'Solicitud de amistad',
- Confirm: 'Confirmar',
- Dismiss: 'Rechazar',
- Remove: 'Eliminar',
- Online_help: 'Ayuda en línea',
- FN: 'Nombre completo ',
- N: ' ',
- FAMILY: 'Apellido',
- GIVEN: 'Nombre',
- NICKNAME: 'Apodar',
- URL: 'URL',
- ADR: 'Dirección',
- STREET: 'Calle',
- EXTADD: 'Extendido dirección',
- LOCALITY: 'Población',
- REGION: 'Región',
- PCODE: 'Código postal',
- CTRY: 'País',
- TEL: 'Teléfono',
- NUMBER: 'Número',
- EMAIL: 'Emilio',
- USERID: ' ',
- ORG: 'Organización',
- ORGNAME: 'Nombre',
- ORGUNIT: 'Departamento',
- TITLE: 'Título',
- ROLE: 'Rol',
- BDAY: 'Cumpleaños',
- DESC: 'Descripción',
- PHOTO: ' ',
- send_message: 'mandar un texto',
- get_info: 'obtener información',
- Settings: 'Ajustes',
- Priority: 'Prioridad',
- Save: 'Guardar',
- User_settings: 'Configuración de usuario',
- A_fingerprint_: 'La huella digital se utiliza para que puedas estar seguro que la persona con la que estas hablando es quien realmente dice ser',
- Your_roster_is_empty_add_a: 'Tu lista de amigos esta vacia',
- new_buddy: 'Nuevo amigo',
- is: 'es',
- Login_options: 'Opciones de login',
- BOSH_url: 'BOSH url',
- Domain: 'Dominio',
- Resource: 'Recurso',
- On_login: 'Iniciar sesión',
- Received_an_unencrypted_message: 'Recibe un mensaje no cifrado'
+ hashStr: function(str) {
+ var hash = 0, i;
+
+ if (str.length === 0) {
+ return hash;
+ }
+
+ for (i = 0; i &lt; str.length; i++) {
+ hash = ((hash &lt;&lt; 5) - hash) + str.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
}
- };
-}(jQuery));
+
+ return hash;
+ }
+};
</code></pre>
</article>
</section>
@@ -6265,13 +804,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:12 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.lib.muc.js.html b/doc/jsxc.lib.muc.js.html
new file mode 100644
index 00000000..ffc9fd23
--- /dev/null
+++ b/doc/jsxc.lib.muc.js.html
@@ -0,0 +1,1166 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Source: jsxc.lib.muc.js</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Source: jsxc.lib.muc.js</h1>
+
+
+
+
+
+ <section>
+ <article>
+ <pre class="prettyprint source"><code>jsxc.gui.template.joinChat = '&lt;h3 data-i18n="Join_chat">&lt;/h3>\
+ &lt;p class=".jsxc_explanation" data-i18n="muc_explanation">&lt;/p>\
+ &lt;p>&lt;label for="jsxc_server" data-i18n="Server">&lt;/label>\
+ &lt;input type="text" name="server" id="jsxc_server" required="required" readonly="readonly" />&lt;/p>\
+ &lt;p>&lt;label for="jsxc_room" data-i18n="Room">&lt;/label>\
+ &lt;input type="text" name="room" id="jsxc_room" autocomplete="off" list="jsxc_roomlist" required="required" pattern="^[^\\x22&\'\\/:&lt;>@\\s]+" />&lt;/p>\
+ &lt;p class="jsxc_inputinfo jsxc_waiting jsxc_room" data-i18n="Rooms_are_loaded">&lt;/p>\
+ &lt;datalist id="jsxc_roomlist">\
+ &lt;p>&lt;label for="jsxc_roomlist_select">&lt;/label>&lt;select id="jsxc_roomlist_select">&lt;option>&lt;/option>&lt;option>workaround&lt;/option>&lt;/select>&lt;/p>\
+ &lt;/datalist>\
+ &lt;p>&lt;label for="jsxc_nickname" data-i18n="Nickname">&lt;/label>\
+ &lt;input type="text" name="nickname" id="jsxc_nickname" />&lt;/p>\
+ &lt;p>&lt;label for="jsxc_password" data-i18n="Password">&lt;/label>\
+ &lt;input type="text" name="password" id="jsxc_password" />&lt;/p>\
+ &lt;div class="jsxc_msg">&lt;/div>\
+ &lt;p class="jsxc_right">\
+ &lt;span class="jsxc_warning">&lt;/span> &lt;a href="#" class="button jsxc_close" data-i18n="Close">&lt;/a> &lt;a href="#" class="button jsxc_continue" data-i18n="Continue"> &lt;a href="#" class="button jsxc_join" data-i18n="Join">&lt;/a>\
+ &lt;/p>';
+
+/**
+ * Implements Multi-User Chat (XEP-0045).
+ *
+ * @namespace jsxc.muc
+ */
+jsxc.muc = {
+ /** strophe connection */
+ conn: null,
+
+ /** some constants */
+ CONST: {
+ AFFILIATION: {
+ ADMIN: 'admin',
+ MEMBER: 'member',
+ OUTCAST: 'outcast',
+ OWNER: 'owner',
+ NONE: 'none'
+ },
+ ROLE: {
+ MODERATOR: 'moderator',
+ PARTICIPANT: 'participant',
+ VISITOR: 'visitor',
+ NONE: 'none'
+ },
+ ROOMSTATE: {
+ INIT: 0,
+ ENTERED: 1,
+ EXITED: 2,
+ AWAIT_DESTRUCTION: 3,
+ DESTROYED: 4
+ }
+ },
+
+ /**
+ * Initialize muc plugin.
+ *
+ * @private
+ * @memberof jsxc.muc
+ * @param {object} o Options
+ */
+ init: function(o) {
+ var self = jsxc.muc;
+ self.conn = jsxc.xmpp.conn;
+
+ var options = o || jsxc.options.get('muc');
+
+ if (!options || typeof options.server !== 'string') {
+ jsxc.debug('Discover muc service');
+
+ // prosody does not response, if we send query before initial presence was send
+ setTimeout(function() {
+ self.conn.disco.items(Strophe.getDomainFromJid(self.conn.jid), null, function(items) {
+ $(items).find('item').each(function() {
+ var jid = $(this).attr('jid');
+ var discovered = false;
+
+ self.conn.disco.info(jid, null, function(info) {
+ var mucFeature = $(info).find('feature[var="' + Strophe.NS.MUC + '"]');
+ var mucIdentity = $(info).find('identity[category="conference"][type="text"]');
+
+ if (mucFeature.length > 0 && mucIdentity.length > 0) {
+ jsxc.debug('muc service found', jid);
+
+ jsxc.options.set('muc', {
+ server: jid,
+ name: $(info).find('identity').attr('name')
+ });
+
+ discovered = true;
+
+ self.init();
+ }
+ });
+
+ return !discovered;
+ });
+ });
+ }, 1000);
+
+ return;
+ }
+
+ if (jsxc.gui.roster.ready) {
+ self.initMenu();
+ } else {
+ $(document).one('ready.roster.jsxc', jsxc.muc.initMenu);
+ }
+
+ $(document).on('presence.jsxc', jsxc.muc.onPresence);
+ $(document).on('error.presence.jsxc', jsxc.muc.onPresenceError);
+
+ self.conn.addHandler(self.onGroupchatMessage, null, 'message', 'groupchat');
+ self.conn.addHandler(self.onErrorMessage, null, 'message', 'error');
+ self.conn.muc.roomNames = jsxc.storage.getUserItem('roomNames') || [];
+ },
+
+ /**
+ * Add entry to menu.
+ *
+ * @memberOf jsxc.muc
+ */
+ initMenu: function() {
+ var li = $('&lt;li>').attr('class', 'jsxc_joinChat').text($.t('Join_chat'));
+
+ li.click(jsxc.muc.showJoinChat);
+
+ $('#jsxc_menu ul').append(li);
+ },
+
+ /**
+ * Open join dialog.
+ *
+ * @memberOf jsxc.muc
+ */
+ showJoinChat: function() {
+ var self = jsxc.muc;
+ var dialog = jsxc.gui.dialog.open(jsxc.gui.template.get('joinChat'));
+
+ // hide second step button
+ dialog.find('.jsxc_join').hide();
+
+ // display conference server
+ dialog.find('#jsxc_server').val(jsxc.options.get('muc').server);
+
+ // handle error response
+ var error_handler = function(event, condition, room) {
+ var msg;
+
+ switch (condition) {
+ case 'not-authorized':
+ // password-protected room
+ msg = $.t('A_password_is_required');
+ break;
+ case 'registration-required':
+ // members-only room
+ msg = $.t('You_are_not_on_the_member_list');
+ break;
+ case 'forbidden':
+ // banned users
+ msg = $.t('You_are_banned_from_this_room');
+ break;
+ case 'conflict':
+ // nickname conflict
+ msg = $.t('Your_desired_nickname_');
+ break;
+ case 'service-unavailable':
+ // max users
+ msg = $.t('The_maximum_number_');
+ break;
+ case 'item-not-found':
+ // locked or non-existing room
+ msg = $.t('This_room_is_locked_');
+ break;
+ case 'not-allowed':
+ // room creation is restricted
+ msg = $.t('You_are_not_allowed_to_create_');
+ break;
+ default:
+ jsxc.warn('Unknown muc error condition: ' + condition);
+ msg = $.t('Error') + ': ' + condition;
+ }
+
+ // clean up strophe.muc rooms
+ var roomIndex = self.conn.muc.roomNames.indexOf(room);
+
+ if (roomIndex > -1) {
+ self.conn.muc.roomNames.splice(roomIndex, 1);
+ delete self.conn.muc.rooms[room];
+ }
+
+ dialog.find('.jsxc_warning').text(msg);
+ };
+
+ $(document).on('error.muc.jsxc', error_handler);
+
+ $(document).on('close.dialog.jsxc', function() {
+ $(document).off('error.muc.jsxc', error_handler);
+ });
+
+ // load room list
+ self.conn.muc.listRooms(jsxc.options.get('muc').server, function(stanza) {
+ // workaround: chrome does not display dropdown arrow for dynamically filled datalists
+ $('#jsxc_roomlist option:last').remove();
+
+ $(stanza).find('item').each(function() {
+ var r = $('&lt;option>');
+ var rjid = $(this).attr('jid').toLowerCase();
+ var rnode = Strophe.getNodeFromJid(rjid);
+ var rname = $(this).attr('name') || rnode;
+
+ r.text(rname);
+ r.attr('data-jid', rjid);
+ r.attr('value', rnode);
+
+ $('#jsxc_roomlist select').append(r);
+ });
+
+ var set = $(stanza).find('set[xmlns="http://jabber.org/protocol/rsm"]');
+
+ if (set.length > 0) {
+ var count = set.find('count').text() || '?';
+
+ dialog.find('.jsxc_inputinfo').removeClass('jsxc_waiting').text($.t('Could_load_only', {
+ count: count
+ }));
+ } else {
+ dialog.find('.jsxc_inputinfo').hide();
+ }
+ }, function() {
+ jsxc.warn('Could not load rooms');
+
+ // room autocompletion is a comfort feature, so it is not necessary to inform the user
+ dialog.find('.jsxc_inputinfo').hide();
+ });
+
+ dialog.find('#jsxc_nickname').attr('placeholder', Strophe.getNodeFromJid(self.conn.jid));
+
+ dialog.find('.jsxc_continue').click(function(ev) {
+ ev.preventDefault();
+
+ var room = ($('#jsxc_room').val()) ? jsxc.jidToBid($('#jsxc_room').val()) : null;
+ var nickname = $('#jsxc_nickname').val() || Strophe.getNodeFromJid(self.conn.jid);
+ var password = $('#jsxc_password').val() || null;
+
+ if (!room || !room.match(/^[^"&\'\/:&lt;>@\s]+$/i)) {
+ $('#jsxc_room').addClass('jsxc_invalid').keyup(function() {
+ if ($(this).val()) {
+ $(this).removeClass('jsxc_invalid');
+ }
+ });
+ return false;
+ }
+
+ if (!room.match(/@(.*)$/)) {
+ room += '@' + jsxc.options.get('muc').server;
+ }
+
+ if (jsxc.xmpp.conn.muc.roomNames.indexOf(room) &lt; 0) {
+ // not already joined
+
+ var discoReceived = function(roomName, subject) {
+ // we received the room information
+
+ jsxc.gui.dialog.resize();
+
+ dialog.find('.jsxc_continue').hide();
+
+ dialog.find('.jsxc_join').show().effect('highlight', {
+ color: 'green'
+ }, 4000);
+
+ dialog.find('.jsxc_join').click(function(ev) {
+ ev.preventDefault();
+
+ self.join(room, nickname, password, roomName, subject);
+
+ return false;
+ });
+ };
+
+ dialog.find('.jsxc_msg').append($('&lt;p>').text($.t('Loading_room_information')).addClass('jsxc_waiting'));
+ jsxc.gui.dialog.resize();
+
+ self.conn.disco.info(room, null, function(stanza) {
+ dialog.find('.jsxc_msg').html('&lt;p>' + $.t('This_room_is') + '&lt;/p>');
+
+ var table = $('&lt;table>');
+
+ $(stanza).find('feature').each(function() {
+ var feature = $(this).attr('var');
+
+ if (feature !== '' && i18n.exists(feature)) {
+ var tr = $('&lt;tr>');
+ $('&lt;td>').text($.t(feature + '.keyword')).appendTo(tr);
+ $('&lt;td>').text($.t(feature + '.description')).appendTo(tr);
+ tr.appendTo(table);
+ }
+ });
+
+ dialog.find('.jsxc_msg').append(table);
+
+ var roomName = $(stanza).find('identity').attr('name');
+ var subject = $(stanza).find('field[var="muc#roominfo_subject"]').attr('label');
+
+ //@TODO display subject, number of occupants, etc.
+
+ discoReceived(roomName, subject);
+ }, function() {
+ dialog.find('.jsxc_msg').empty();
+ $('&lt;p>').text($.t('Room_not_found_')).appendTo(dialog.find('.jsxc_msg'));
+
+ discoReceived();
+ });
+ } else {
+ dialog.find('.jsxc_warning').text($.t('You_already_joined_this_room'));
+ }
+
+ return false;
+ });
+
+ dialog.find('input').keydown(function(ev) {
+
+ if (ev.which !== 13) {
+ // reset messages and room information
+
+ dialog.find('.jsxc_warning').empty();
+
+ if (dialog.find('.jsxc_continue').is(":hidden")) {
+ dialog.find('.jsxc_continue').show();
+ dialog.find('.jsxc_join').hide().off('click');
+ dialog.find('.jsxc_msg').empty();
+ jsxc.gui.dialog.resize();
+ }
+
+ return;
+ }
+
+ if (!dialog.find('.jsxc_continue').is(":hidden")) {
+ dialog.find('.jsxc_continue').click();
+ } else {
+ dialog.find('.jsxc_join').click();
+ }
+ });
+ },
+
+ /**
+ * Join the given room.
+ *
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ * @param {string} nickname Desired nickname
+ * @param {string} [password] Password
+ * @param {string} [roomName] Room alias
+ * @param {string} [subject] Current subject
+ */
+ join: function(room, nickname, password, roomName, subject) {
+ var self = jsxc.muc;
+
+ jsxc.storage.setUserItem('buddy', room, {
+ jid: room,
+ name: roomName || room,
+ sub: 'both',
+ type: 'groupchat',
+ state: self.CONST.ROOMSTATE.INIT,
+ subject: subject
+ });
+
+ jsxc.xmpp.conn.muc.join(room, nickname, null, null, null, password);
+ },
+
+ /**
+ * Leave given room.
+ *
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ */
+ leave: function(room) {
+ var self = jsxc.muc;
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+ var data = jsxc.storage.getUserItem('buddy', room) || {};
+
+ if (data.state === self.CONST.ROOMSTATE.ENTERED) {
+ self.conn.muc.leave(room, own[room], function() {
+ self.onExited(room);
+ });
+ } else {
+ self.onExited(room);
+ }
+ },
+
+ /**
+ * Clean up after we exited a room.
+ *
+ * @private
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ */
+ onExited: function(room) {
+ var self = jsxc.muc;
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+
+ jsxc.storage.setUserItem('roomNames', self.conn.muc.roomNames);
+
+ delete own[room];
+ jsxc.storage.setUserItem('ownNicknames', own);
+ jsxc.storage.removeUserItem('member', room);
+ jsxc.storage.removeUserItem('chat', room);
+
+ jsxc.gui.window.close(room);
+ jsxc.gui.roster.purge(room);
+ },
+
+ /**
+ * Destroy the given room.
+ *
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ * @param {function} handler_cb Function to handle the successful destruction
+ * @param {function} error_cb Function to handle an error
+ */
+ destroy: function(room, handler_cb, error_cb) {
+ var self = jsxc.muc;
+
+ jsxc.storage.updateUserItem('buddy', room, 'state', self.CONST.ROOMSTATE.AWAIT_DESTRUCTION);
+ jsxc.gui.window.postMessage(room, 'sys', $.t('This_room_will_be_closed'));
+
+ var iq = $iq({
+ to: room,
+ type: "set"
+ }).c("query", {
+ xmlns: Strophe.NS.MUC_OWNER
+ }).c("destroy");
+
+ jsxc.muc.conn.sendIQ(iq.tree(), handler_cb, error_cb);
+ },
+
+ /**
+ * Close the given room.
+ *
+ * @memberOf jsxc.muc
+ * @param room Room jid
+ */
+ close: function(room) {
+ var self = jsxc.muc;
+ var roomdata = jsxc.storage.getUserItem('buddy', room) || {};
+
+ self.emptyMembers(room);
+
+ var roomIndex = self.conn.muc.roomNames.indexOf(room);
+
+ if (roomIndex > -1) {
+ self.conn.muc.roomNames.splice(roomIndex, 1);
+ delete self.conn.muc.rooms[room];
+ }
+
+ jsxc.storage.setUserItem('roomNames', self.conn.muc.roomNames);
+
+ if (roomdata.state === self.CONST.ROOMSTATE.AWAIT_DESTRUCTION) {
+ self.onExited(room);
+ }
+
+ roomdata.state = self.CONST.ROOMSTATE.DESTROYED;
+
+ jsxc.storage.setUserItem('buddy', room, roomdata);
+ },
+
+ /**
+ * Init group chat window.
+ *
+ * @private
+ * @memberOf jsxc.muc
+ * @param event Event
+ * @param {jQuery} win Window object
+ */
+ initWindow: function(event, win) {
+ var self = jsxc.muc;
+ var data = win.data();
+ var bid = jsxc.jidToBid(data.jid);
+ var roomdata = jsxc.storage.getUserItem('buddy', bid);
+
+ if (!jsxc.xmpp.conn) {
+ $(document).one('connectionReady.jsxc', function() {
+ self.initWindow(null, win);
+ });
+ return;
+ }
+
+ if (self.conn.muc.roomNames.indexOf(data.jid) &lt; 0) {
+ return;
+ }
+
+ win.addClass('jsxc_groupchat');
+
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+ var ownNickname = own[bid];
+ var mlIcon = $('&lt;div class="jsxc_members">&lt;/div>');
+
+ win.find('.jsxc_tools > .jsxc_transfer').after(mlIcon);
+
+ var ml = $('&lt;div class="jsxc_memberlist">&lt;ul>&lt;/ul>&lt;/div>');
+ win.find('.jsxc_fade').prepend(ml);
+
+ ml.on('wheel', function(ev) {
+ jsxc.muc.scrollMemberListBy(bid, (ev.originalEvent.wheelDelta > 0) ? 50 : -50);
+ });
+
+ // toggle member list
+ var toggleMl = function(ev) {
+ if (ev) {
+ ev.preventDefault();
+ }
+
+ var slimOptions = {};
+ var ul = ml.find('ul:first');
+ var slimHeight = null;
+
+ ml.toggleClass('jsxc_expand');
+
+ if (ml.hasClass('jsxc_expand')) {
+ $('body').click();
+ $('body').one('click', toggleMl);
+
+ ul.mouseleave(function() {
+ ul.data('timer', window.setTimeout(toggleMl, 2000));
+ }).mouseenter(function() {
+ window.clearTimeout(ul.data('timer'));
+ }).css('left', '0px');
+
+ var maxHeight = win.find(".jsxc_textarea").height() * 0.8;
+ var innerHeight = ml.find('ul').height() + 3;
+ slimHeight = (innerHeight > maxHeight) ? maxHeight : innerHeight;
+
+ slimOptions = {
+ distance: '3px',
+ height: slimHeight + 'px',
+ width: '100%',
+ color: '#fff',
+ opacity: '0.5'
+ };
+
+ ml.css('height', slimHeight + 'px');
+ } else {
+ slimOptions = {
+ destroy: true
+ };
+
+ ul.attr('style', '');
+ ml.css('height', '');
+
+ window.clearTimeout(ul.data('timer'));
+ $('body').off('click', null, toggleMl);
+ ul.off('mouseleave mouseenter');
+ }
+
+ ul.slimscroll(slimOptions);
+
+ return false;
+ };
+
+ mlIcon.click(toggleMl);
+
+ win.on('resize', function() {
+ // update member list position
+ jsxc.muc.scrollMemberListBy(bid, 0);
+ });
+
+ // update emoticon button
+ setTimeout(function() {
+ var top = win.find('.jsxc_emoticons').position().top + win.find('.slimScrollDiv').position().top;
+ win.find('.jsxc_emoticons').css('top', top + 'px');
+ }, 400);
+
+ var destroy = $('&lt;li>');
+ destroy.text($.t('Destroy'));
+ destroy.addClass('jsxc_destroy');
+ destroy.hide();
+ destroy.click(function() {
+ self.destroy(bid);
+ });
+
+ win.find('.jsxc_settings ul').append(destroy);
+
+ if (roomdata.state > self.CONST.ROOMSTATE.INIT) {
+ var member = jsxc.storage.getUserItem('member', bid) || {};
+
+ $.each(member, function(nickname, val) {
+ self.insertMember(bid, nickname, val);
+
+ if (nickname === ownNickname && val.affiliation === self.CONST.AFFILIATION.OWNER) {
+ destroy.show();
+ }
+ });
+ }
+
+ var leave = $('&lt;li>');
+ leave.text($.t('Leave'));
+ leave.addClass('jsxc_leave');
+ leave.click(function() {
+ self.leave(bid);
+ });
+
+ win.find('.jsxc_settings ul').append(leave);
+ },
+
+ /**
+ * Triggered on incoming presence stanzas.
+ *
+ * @private
+ * @memberOf jsxc.muc
+ * @param event
+ * @param {string} from Jid
+ * @param {integer} status Online status between 0 and 5
+ * @param {string} presence Presence stanza
+ */
+ onPresence: function(event, from, status, presence) {
+ var self = jsxc.muc;
+ var room = jsxc.jidToBid(from);
+ var xdata = $(presence).find('x[xmlns^="' + Strophe.NS.MUC + '"]');
+
+ if (self.conn.muc.roomNames.indexOf(room) &lt; 0 || xdata.length === 0) {
+ return true;
+ }
+
+ var res = Strophe.getResourceFromJid(from) || '';
+ var nickname = Strophe.unescapeNode(res);
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+ var member = jsxc.storage.getUserItem('member', room) || {};
+ var codes = [];
+
+ xdata.find('status').each(function() {
+ var code = $(this).attr('code');
+
+ jsxc.debug('[muc][code]', code);
+
+ codes.push(code);
+ });
+
+ if (jsxc.gui.roster.getItem(room).length === 0) {
+ // successfully joined
+
+ jsxc.storage.setUserItem('roomNames', jsxc.xmpp.conn.muc.roomNames);
+
+ // clean up
+ jsxc.storage.removeUserItem('chat', room);
+ member = {};
+
+ var bl = jsxc.storage.getUserItem('buddylist');
+ bl.push(room);
+ jsxc.storage.setUserItem('buddylist', bl);
+
+ jsxc.gui.roster.add(room);
+
+ jsxc.gui.window.open(room);
+ jsxc.gui.dialog.close();
+ }
+
+ var jid = xdata.find('item').attr('jid') || null;
+
+ if (status === 0) {
+ if (xdata.find('destroy').length > 0) {
+ // room has been destroyed
+ member = {};
+
+ jsxc.gui.window.postMessage(room, 'sys', $.t('This_room_has_been_closed'));
+
+ self.close(room);
+ } else {
+ delete member[nickname];
+
+ self.removeMember(room, nickname);
+
+ var newNickname = xdata.find('item').attr('nick');
+
+ if (codes.indexOf('303') > -1 && newNickname) {
+ // user changed his nickname
+
+ newNickname = Strophe.unescapeNode(newNickname);
+
+ // prevent to display enter message
+ member[newNickname] = {};
+
+ jsxc.gui.window.postMessage(room, 'sys', $.t('is_now_known_as', {
+ oldNickname: nickname,
+ newNickname: newNickname,
+ escapeInterpolation: true
+ }));
+ } else if (codes.length === 0 || (codes.length === 1 && codes.indexOf('110') > -1)) {
+ // normal user exit
+ jsxc.gui.window.postMessage(room, 'sys', $.t('left_the_building', {
+ nickname: nickname,
+ escapeInterpolation: true
+ }));
+ }
+ }
+ } else {
+ // new member joined
+
+ if (!member[nickname] && own[room]) {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('entered_the_room', {
+ nickname: nickname,
+ escapeInterpolation: true
+ }));
+ }
+
+ member[nickname] = {
+ jid: jid,
+ status: status,
+ roomJid: from,
+ affiliation: xdata.find('item').attr('affiliation'),
+ role: xdata.find('item').attr('role')
+ };
+
+ self.insertMember(room, nickname, member[nickname]);
+ }
+
+ jsxc.storage.setUserItem('member', room, member);
+
+ $.each(codes, function(index, code) {
+ // call code functions and trigger event
+
+ if (typeof self.onStatus[code] === 'function') {
+ self.onStatus[code].call(this, room, nickname, member[nickname] || {}, xdata);
+ }
+
+ $(document).trigger('status.muc.jsxc', [code, room, nickname, member[nickname] || {}, presence]);
+ });
+
+ return true;
+ },
+
+ /**
+ * Handle group chat presence errors.
+ *
+ * @memberOf jsxc.muc
+ * @param event
+ * @param {string} from Jid
+ * @param {string} presence Presence stanza
+ * @returns {Boolean} Returns true on success
+ */
+ onPresenceError: function(event, from, presence) {
+ var self = jsxc.muc;
+ var xdata = $(presence).find('x[xmlns="' + Strophe.NS.MUC + '"]');
+ var room = jsxc.jidToBid(from);
+
+ if (xdata.length === 0 || self.conn.muc.roomNames.indexOf(room) &lt; 0) {
+ return true;
+ }
+
+ var error = $(presence).find('error');
+ var condition = error.children()[0].tagName;
+
+ jsxc.debug('[muc][error]', condition);
+
+ $(document).trigger('error.muc.jsxc', [condition, room]);
+
+ return true;
+ },
+
+ /**
+ * Handle status codes. Every function gets room jid, nickname, member data and xdata.
+ *
+ * @memberOf jsxc.muc
+ */
+ onStatus: {
+ /** Inform user that presence refers to itself */
+ 110: function(room, nickname, data) {
+ var self = jsxc.muc;
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+
+ own[room] = nickname;
+ jsxc.storage.setUserItem('ownNicknames', own);
+
+ if (data.affiliation === self.CONST.AFFILIATION.OWNER) {
+ jsxc.gui.window.get(room).find('.jsxc_destroy').show();
+ }
+
+ var roomdata = jsxc.storage.getUserItem('buddy', room);
+
+ if (roomdata.state === self.CONST.ROOMSTATE.INIT) {
+ roomdata.state = self.CONST.ROOMSTATE.ENTERED;
+
+ jsxc.storage.setUserItem('buddy', room, roomdata);
+ }
+ },
+ /** Inform occupants that room logging is now enabled */
+ 170: function(room) {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('Room_logging_is_enabled'));
+ },
+ /** Inform user that a new room has been created */
+ 201: function(room) {
+ var self = jsxc.muc;
+ //@TODO let user choose between instant and reserved room
+
+ self.conn.muc.createInstantRoom(room);
+ },
+ /** Inform user that he or she has been banned */
+ 301: function(room, nickname, data, xdata) {
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+
+ if (own[room] === nickname) {
+ jsxc.muc.close(room);
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_banned'));
+
+ jsxc.muc.postReason(room, xdata);
+ } else {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_info_banned', {
+ nickname: nickname,
+ escapeInterpolation: true
+ }));
+ }
+ },
+ /** Inform user that he or she has been kicked */
+ 307: function(room, nickname, data, xdata) {
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+
+ if (own[room] === nickname) {
+ jsxc.muc.close(room);
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_kicked'));
+
+ jsxc.muc.postReason(room, xdata);
+ } else {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_info_kicked', {
+ nickname: nickname,
+ escapeInterpolation: true
+ }));
+ }
+ },
+ /** Inform user that he or she is beeing removed from the room because of an affiliation change */
+ 321: function(room, nickname) {
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+
+ if (own[room] === nickname) {
+ jsxc.muc.close(room);
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_affiliation'));
+ } else {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_info_affiliation', {
+ nickname: nickname,
+ escapeInterpolation: true
+ }));
+ }
+ },
+ /**
+ * Inform user that he or she is beeing removed from the room because the room has been
+ * changed to members-only and the user is not a member
+ */
+ 322: function(room, nickname) {
+ var own = jsxc.storage.getUserItem('ownNicknames') || {};
+
+ if (own[room] === nickname) {
+ jsxc.muc.close(room);
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_membersonly'));
+ } else {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_info_membersonly', {
+ nickname: nickname,
+ escapeInterpolation: true
+ }));
+ }
+ },
+ /**
+ * Inform user that he or she is beeing removed from the room because the MUC service
+ * is being shut down
+ */
+ 332: function(room) {
+ jsxc.muc.close(room);
+ jsxc.gui.window.postMessage(room, 'sys', $.t('muc_removed_shutdown'));
+ }
+ },
+
+ /**
+ * Extract reason from xdata and if available post it to room.
+ *
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ * @param {jQuery} xdata Xdata
+ */
+ postReason: function(room, xdata) {
+ var actor = {
+ name: xdata.find('actor').attr('nick'),
+ jid: xdata.find('actor').attr('jid')
+ };
+ var reason = xdata.find('reason').text();
+
+ if (reason !== '') {
+ reason = $.t('Reason') + ': ' + reason;
+
+ if (typeof actor.name === 'string' || typeof actor.jid === 'string') {
+ jsxc.gui.window.postMessage(room, 'in', reason, false, false, null, actor);
+ } else {
+ jsxc.gui.window.postMessage(room, 'sys', reason);
+ }
+ }
+ },
+
+ /**
+ * Insert member to room member list.
+ *
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ * @param {string} nickname Nickname
+ * @param {string} memberdata Member data
+ */
+ insertMember: function(room, nickname, memberdata) {
+ var self = jsxc.muc;
+ var win = jsxc.gui.window.get(room);
+ var jid = memberdata.jid;
+ var m = win.find('.jsxc_memberlist li[data-nickname="' + nickname + '"]');
+
+ if (m.length === 0) {
+ var title = jsxc.escapeHTML(nickname);
+
+ m = $('&lt;li>&lt;div class="jsxc_avatar">&lt;/div>&lt;div class="jsxc_name"/>&lt;/li>');
+ m.attr('data-nickname', nickname);
+
+ win.find('.jsxc_memberlist ul').append(m);
+
+ if (typeof jid === 'string') {
+ m.find('.jsxc_name').text(jsxc.jidToBid(jid));
+ m.attr('data-bid', jsxc.jidToBid(jid));
+ title = title + '\n' + jsxc.jidToBid(jid);
+
+ var data = jsxc.storage.getUserItem('buddy', jsxc.jidToBid(jid));
+
+ if (data !== null && typeof data === 'object') {
+ jsxc.gui.updateAvatar(m, jsxc.jidToBid(jid), data.avatar);
+ } else if (jsxc.jidToBid(jid) === jsxc.jidToBid(self.conn.jid)) {
+ jsxc.gui.updateAvatar(m, jsxc.jidToBid(jid), 'own');
+ }
+ } else {
+ m.find('.jsxc_name').text(nickname);
+
+ jsxc.gui.avatarPlaceholder(m.find('.jsxc_avatar'), nickname);
+ }
+
+ m.attr('title', title);
+ }
+ },
+
+ /**
+ * Remove member from room member list.
+ *
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ * @param {string} nickname Nickname
+ */
+ removeMember: function(room, nickname) {
+ var win = jsxc.gui.window.get(room);
+ var m = win.find('.jsxc_memberlist li[data-nickname="' + nickname + '"]');
+
+ if (m.length > 0) {
+ m.remove();
+ }
+ },
+
+ /**
+ * Scroll or update member list position.
+ *
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ * @param {integer} offset =0: update position; >0: Scroll to left; &lt;0: Scroll to right
+ */
+ scrollMemberListBy: function(room, offset) {
+ var win = jsxc.gui.window.get(room);
+
+ if (win.find('.jsxc_memberlist').hasClass('jsxc_expand')) {
+ return;
+ }
+
+ var el = win.find('.jsxc_memberlist ul:first');
+ var scrollWidth = el.width();
+ var width = win.find('.jsxc_memberlist').width();
+ var left = parseInt(el.css('left'));
+
+ left = (isNaN(left)) ? 0 - offset : left - offset;
+
+ if (scrollWidth &lt; width || left > 0) {
+ left = 0;
+ } else if (left &lt; width - scrollWidth) {
+ left = width - scrollWidth;
+ }
+
+ el.css('left', left + 'px');
+ },
+
+ /**
+ * Empty member list.
+ *
+ * @memberOf jsxc.muc
+ * @param {string} room Room jid
+ */
+ emptyMembers: function(room) {
+ var win = jsxc.gui.window.get(room);
+
+ win.find('.jsxc_memberlist').empty();
+
+ jsxc.storage.setUserItem('member', room, {});
+ },
+
+ /**
+ * Handle incoming group chat message.
+ *
+ * @private
+ * @memberOf jsxc.muc
+ * @param {string} message Message stanza
+ * @returns {boolean} True on success
+ */
+ onGroupchatMessage: function(message) {
+ var id = $(message).attr('id');
+
+ if (jsxc.el_exists($('#' + id))) {
+ // ignore own incoming messages
+ return true;
+ }
+
+ var from = $(message).attr('from');
+ var body = $(message).find('body:first').text();
+ var room = jsxc.jidToBid(from);
+ var nickname = Strophe.unescapeNode(Strophe.getResourceFromJid(from));
+
+ if (body !== '') {
+ var delay = $(message).find('delay[xmlns="urn:xmpp:delay"]');
+ var stamp = (delay.length > 0) ? new Date(delay.attr('stamp')) : new Date();
+ stamp = stamp.getTime();
+
+ var member = jsxc.storage.getUserItem('member', room) || {};
+
+ var sender = {};
+ sender.name = nickname;
+
+ if (member[nickname] && typeof member[nickname].jid === 'string') {
+ sender.jid = member[nickname].jid;
+ }
+
+ jsxc.gui.window.postMessage(room, 'in', body, false, false, stamp, sender);
+ }
+
+ var subject = $(message).find('subject');
+
+ if (subject.length > 0) {
+ var roomdata = jsxc.storage.getUserItem('buddy', room);
+
+ roomdata.subject = subject.text();
+
+ jsxc.storage.setUserItem('buddy', room, roomdata);
+
+ jsxc.gui.window.postMessage(room, 'sys', $.t('changed_subject_to', {
+ nickname: nickname,
+ subject: subject.text()
+ }));
+ }
+
+ return true;
+ },
+
+ /**
+ * Handle group chat error message.
+ *
+ * @private
+ * @memberOf jsxc.muc
+ * @param {string} message Message stanza
+ */
+ onErrorMessage: function(message) {
+ var room = jsxc.jidToBid($(message).attr('from'));
+
+ if (jsxc.gui.window.get(room).length === 0) {
+ return true;
+ }
+
+ if ($(message).find('item-not-found').length > 0) {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('message_not_send_item-not-found'));
+ } else if ($(message).find('forbidden').length > 0) {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('message_not_send_forbidden'));
+ } else if ($(message).find('not-acceptable').length > 0) {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('message_not_send_not-acceptable'));
+ } else {
+ jsxc.gui.window.postMessage(room, 'sys', $.t('message_not_send'));
+ }
+
+ jsxc.debug('[muc] error message for ' + room, $(message).find('error')[0]);
+
+ return true;
+ },
+
+ /**
+ * Prepare group chat roster item.
+ *
+ * @private
+ * @memberOf jsxc.muc
+ * @param event
+ * @param {string} room Room jid
+ * @param {object} data Room data
+ * @param {jQuery} bud Roster item
+ */
+ onAddRoster: function(event, room, data, bud) {
+ var self = jsxc.muc;
+
+ if (data.type !== 'groupchat') {
+ return;
+ }
+
+ bud.find('.jsxc_delete').off('click').click(function() {
+ self.leave(room);
+ return false;
+ });
+ }
+};
+
+$(document).on('init.window.jsxc', jsxc.muc.initWindow);
+$(document).on('add.roster.jsxc', jsxc.muc.onAddRoster);
+
+$(document).one('attached.jsxc', function() {
+ jsxc.muc.init();
+});
+
+$(document).one('connected.jsxc', function() {
+ jsxc.storage.removeUserItem('roomNames');
+ jsxc.storage.removeUserItem('ownNicknames');
+});
+</code></pre>
+ </article>
+ </section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/jsxc.lib.notice.js.html b/doc/jsxc.lib.notice.js.html
new file mode 100644
index 00000000..db363f9f
--- /dev/null
+++ b/doc/jsxc.lib.notice.js.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Source: jsxc.lib.notice.js</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Source: jsxc.lib.notice.js</h1>
+
+
+
+
+
+ <section>
+ <article>
+ <pre class="prettyprint source"><code>/**
+ * This namespace handle the notice system.
+ *
+ * @namspace jsxc.notice
+ * @memberOf jsxc
+ */
+jsxc.notice = {
+ /** Number of notices. */
+ _num: 0,
+
+ /**
+ * Loads the saved notices.
+ *
+ * @memberOf jsxc.notice
+ */
+ load: function() {
+ // reset list
+ $('#jsxc_notice ul li').remove();
+ $('#jsxc_notice > span').text('');
+ jsxc.notice._num = 0;
+
+ var saved = jsxc.storage.getUserItem('notices') || [];
+ var key = null;
+
+ for (key in saved) {
+ if (saved.hasOwnProperty(key)) {
+ var val = saved[key];
+
+ jsxc.notice.add(val.msg, val.description, val.fnName, val.fnParams, key);
+ }
+ }
+ },
+
+ /**
+ * Add a new notice to the stack;
+ *
+ * @memberOf jsxc.notice
+ * @param msg Header message
+ * @param description Notice description
+ * @param fnName Function name to be called if you open the notice
+ * @param fnParams Array of params for function
+ * @param id Notice id
+ */
+ add: function(msg, description, fnName, fnParams, id) {
+ var nid = id || Date.now();
+ var list = $('#jsxc_notice ul');
+ var notice = $('&lt;li/>');
+
+ notice.click(function() {
+ jsxc.notice.remove(nid);
+
+ jsxc.exec(fnName, fnParams);
+
+ return false;
+ });
+
+ notice.text(msg);
+ notice.attr('title', description || '');
+ notice.attr('data-nid', nid);
+ list.append(notice);
+
+ $('#jsxc_notice > span').text(++jsxc.notice._num);
+
+ if (!id) {
+ var saved = jsxc.storage.getUserItem('notices') || {};
+ saved[nid] = {
+ msg: msg,
+ description: description,
+ fnName: fnName,
+ fnParams: fnParams
+ };
+ jsxc.storage.setUserItem('notices', saved);
+
+ jsxc.notification.notify(msg, description || '', null, true, jsxc.CONST.SOUNDS.NOTICE);
+ }
+ },
+
+ /**
+ * Removes notice from stack
+ *
+ * @memberOf jsxc.notice
+ * @param nid The notice id
+ */
+ remove: function(nid) {
+ var el = $('#jsxc_notice li[data-nid=' + nid + ']');
+
+ el.remove();
+ $('#jsxc_notice > span').text(--jsxc.notice._num || '');
+
+ var s = jsxc.storage.getUserItem('notices');
+ delete s[nid];
+ jsxc.storage.setUserItem('notices', s);
+ },
+
+ /**
+ * Check if there is already a notice for the given function name.
+ *
+ * @memberOf jsxc.notice
+ * @param {string} fnName Function name
+ * @returns {boolean} True if there is >0 functions with the given name
+ */
+ has: function(fnName) {
+ var saved = jsxc.storage.getUserItem('notices') || [];
+ var has = false;
+
+ $.each(saved, function(index, val){
+ if (val.fnName === fnName) {
+ has = true;
+
+ return false;
+ }
+ });
+
+ return has;
+ }
+};
+</code></pre>
+ </article>
+ </section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/jsxc.lib.notification.js.html b/doc/jsxc.lib.notification.js.html
new file mode 100644
index 00000000..55e6b3b3
--- /dev/null
+++ b/doc/jsxc.lib.notification.js.html
@@ -0,0 +1,322 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Source: jsxc.lib.notification.js</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Source: jsxc.lib.notification.js</h1>
+
+
+
+
+
+ <section>
+ <article>
+ <pre class="prettyprint source"><code>/**
+ * This namespace handles the Notification API.
+ *
+ * @namespace jsxc.notification
+ */
+jsxc.notification = {
+
+ /** Current audio file. */
+ audio: null,
+
+ /**
+ * Register notification on incoming messages.
+ *
+ * @memberOf jsxc.notification
+ */
+ init: function() {
+ $(document).on('postmessagein.jsxc', function(event, bid, msg) {
+ msg = (msg.match(/^\?OTR/)) ? $.t('Encrypted_message') : msg;
+ var data = jsxc.storage.getUserItem('buddy', bid);
+
+ jsxc.notification.notify({
+ title: $.t('New_message_from') + ' ' + data.name,
+ msg: msg,
+ soundFile: jsxc.CONST.SOUNDS.MSG,
+ source: bid
+ });
+ });
+
+ $(document).on('callincoming.jingle', function() {
+ jsxc.notification.playSound(jsxc.CONST.SOUNDS.CALL, true, true);
+ });
+
+ $(document).on('accept.call.jsxc reject.call.jsxc', function() {
+ jsxc.notification.stopSound();
+ });
+ },
+
+ /**
+ * Shows a pop up notification and optional play sound.
+ *
+ * @param title Title
+ * @param msg Message
+ * @param d Duration
+ * @param force Should message also shown, if tab is visible?
+ * @param soundFile Playing given sound file
+ * @param loop Loop sound file?
+ * @param source Bid which triggered this notification
+ */
+ notify: function(title, msg, d, force, soundFile, loop, source) {
+ if (!jsxc.options.notification || !jsxc.notification.hasPermission()) {
+ return; // notifications disabled
+ }
+
+ var o;
+
+ if (title !== null && typeof title === 'object') {
+ o = title;
+ } else {
+ o = {
+ title: title,
+ msg: msg,
+ duration: d,
+ force: force,
+ soundFile: soundFile,
+ loop: loop,
+ source: source
+ };
+ }
+
+ if (jsxc.hasFocus() && !o.force) {
+ return; // Tab is visible
+ }
+
+ var icon = o.icon || jsxc.options.root + '/img/XMPP_logo.png';
+
+ if (typeof o.source === 'string') {
+ var data = jsxc.storage.getUserItem('buddy', o.source);
+ var src = jsxc.storage.getUserItem('avatar', data.avatar);
+
+ if (typeof src === 'string' && src !== '0') {
+ icon = src;
+ }
+ }
+
+ jsxc.toNotification = setTimeout(function() {
+
+ if (typeof o.soundFile === 'string') {
+ jsxc.notification.playSound(o.soundFile, o.loop, o.force);
+ }
+
+ var popup = new Notification($.t(o.title), {
+ body: $.t(o.msg),
+ icon: icon
+ });
+
+ var duration = o.duration || jsxc.options.popupDuration;
+
+ if (duration > 0) {
+ setTimeout(function() {
+ popup.close();
+ }, duration);
+ }
+ }, jsxc.toNotificationDelay);
+ },
+
+ /**
+ * Checks if browser has support for notifications and add on chrome to the
+ * default api.
+ *
+ * @returns {Boolean} True if the browser has support.
+ */
+ hasSupport: function() {
+ if (window.webkitNotifications) {
+ // prepare chrome
+
+ window.Notification = function(title, opt) {
+ var popup = window.webkitNotifications.createNotification(null, title, opt.body);
+ popup.show();
+
+ popup.close = function() {
+ popup.cancel();
+ };
+
+ return popup;
+ };
+
+ var permission;
+ switch (window.webkitNotifications.checkPermission()) {
+ case 0:
+ permission = jsxc.CONST.NOTIFICATION_GRANTED;
+ break;
+ case 2:
+ permission = jsxc.CONST.NOTIFICATION_DENIED;
+ break;
+ default: // 1
+ permission = jsxc.CONST.NOTIFICATION_DEFAULT;
+ }
+ window.Notification.permission = permission;
+
+ window.Notification.requestPermission = function(func) {
+ window.webkitNotifications.requestPermission(func);
+ };
+
+ return true;
+ } else if (window.Notification) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ /**
+ * Ask user on first incoming message if we should inform him about new
+ * messages.
+ */
+ prepareRequest: function() {
+
+ if (jsxc.notice.has('gui.showRequestNotification')) {
+ return;
+ }
+
+ $(document).one('postmessagein.jsxc', function() {
+ setTimeout(function() {
+ jsxc.notice.add($.t('Notifications') + '?', $.t('Should_we_notify_you_'), 'gui.showRequestNotification');
+ }, 1000);
+ });
+ },
+
+ /**
+ * Request notification permission.
+ */
+ requestPermission: function() {
+ window.Notification.requestPermission(function(status) {
+ if (window.Notification.permission !== status) {
+ window.Notification.permission = status;
+ }
+
+ if (jsxc.notification.hasPermission()) {
+ $(document).trigger('notificationready.jsxc');
+ } else {
+ $(document).trigger('notificationfailure.jsxc');
+ }
+ });
+ },
+
+ /**
+ * Check permission.
+ *
+ * @returns {Boolean} True if we have the permission
+ */
+ hasPermission: function() {
+ return window.Notification.permission === jsxc.CONST.NOTIFICATION_GRANTED;
+ },
+
+ /**
+ * Plays the given file.
+ *
+ * @memberOf jsxc.notification
+ * @param {string} soundFile File relative to the sound directory
+ * @param {boolean} loop True for loop
+ * @param {boolean} force Play even if a tab is visible. Default: false.
+ */
+ playSound: function(soundFile, loop, force) {
+ if (!jsxc.master) {
+ // only master plays sound
+ return;
+ }
+
+ if (jsxc.options.get('muteNotification') || jsxc.storage.getUserItem('presence') === 'dnd') {
+ // sound mute or own presence is dnd
+ return;
+ }
+
+ if (jsxc.hasFocus() && !force) {
+ // tab is visible
+ return;
+ }
+
+ // stop current audio file
+ jsxc.notification.stopSound();
+
+ var audio = new Audio(jsxc.options.root + '/sound/' + soundFile);
+ audio.loop = loop || false;
+ audio.play();
+
+ jsxc.notification.audio = audio;
+ },
+
+ /**
+ * Stop/remove current sound.
+ *
+ * @memberOf jsxc.notification
+ */
+ stopSound: function() {
+ var audio = jsxc.notification.audio;
+
+ if (typeof audio !== 'undefined' && audio !== null) {
+ audio.pause();
+ jsxc.notification.audio = null;
+ }
+ },
+
+ /**
+ * Mute sound.
+ *
+ * @memberOf jsxc.notification
+ * @param {boolean} external True if triggered from external tab. Default:
+ * false.
+ */
+ muteSound: function(external) {
+ $('#jsxc_menu .jsxc_muteNotification').text($.t('Unmute'));
+
+ if (external !== true) {
+ jsxc.options.set('muteNotification', true);
+ }
+ },
+
+ /**
+ * Unmute sound.
+ *
+ * @memberOf jsxc.notification
+ * @param {boolean} external True if triggered from external tab. Default:
+ * false.
+ */
+ unmuteSound: function(external) {
+ $('#jsxc_menu .jsxc_muteNotification').text($.t('Mute'));
+
+ if (external !== true) {
+ jsxc.options.set('muteNotification', false);
+ }
+ }
+};
+</code></pre>
+ </article>
+ </section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/jsxc.lib.options.js.html b/doc/jsxc.lib.options.js.html
new file mode 100644
index 00000000..4c446766
--- /dev/null
+++ b/doc/jsxc.lib.options.js.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Source: jsxc.lib.options.js</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Source: jsxc.lib.options.js</h1>
+
+
+
+
+
+ <section>
+ <article>
+ <pre class="prettyprint source"><code>/**
+ * Set some options for the chat.
+ *
+ * @namespace jsxc.options
+ */
+jsxc.options = {
+
+ /** name of container application (e.g. owncloud or SOGo) */
+ app_name: 'web applications',
+
+ /** Timeout for the keepalive signal */
+ timeout: 3000,
+
+ /** Timeout for the keepalive signal if the master is busy */
+ busyTimeout: 15000,
+
+ /** OTR options */
+ otr: {
+ enable: true,
+ ERROR_START_AKE: false,
+ debug: false,
+ SEND_WHITESPACE_TAG: true,
+ WHITESPACE_START_AKE: true
+ },
+
+ /** xmpp options */
+ xmpp: {
+ url: null,
+ jid: null,
+ domain: null,
+ password: null,
+ overwrite: false,
+ onlogin: true
+ },
+
+ /** default xmpp priorities */
+ priority: {
+ online: 0,
+ chat: 0,
+ away: 0,
+ xa: 0,
+ dnd: 0
+ },
+
+ /** If all 3 properties are set, the login form is used */
+ loginForm: {
+ /** jquery object from form */
+ form: null,
+
+ /** jquery object from input element which contains the jid */
+ jid: null,
+
+ /** jquery object from input element which contains the password */
+ pass: null,
+
+ /** manipulate JID from input element */
+ preJid: function(jid) {
+ return jid;
+ },
+
+ /**
+ * Action after connected: submit [String] Submit form, false [boolean] Do
+ * nothing, continue [String] Start chat
+ */
+ onConnected: 'submit',
+
+ /**
+ * Action after auth fail: submit [String] Submit form, false [boolean] Do
+ * nothing, ask [String] Show auth fail dialog
+ */
+ onAuthFail: 'submit'
+ },
+
+ /** jquery object from logout element */
+ logoutElement: null,
+
+ /** How many messages should be logged? */
+ numberOfMsg: 10,
+
+ /** Default language */
+ defaultLang: 'en',
+
+ /** auto language detection */
+ autoLang: true,
+
+ /** Place for roster */
+ rosterAppend: 'body',
+
+ /** Should we use the HTML5 notification API? */
+ notification: true,
+
+ /** duration for notification */
+ popupDuration: 6000,
+
+ /** Absolute path root of JSXC installation */
+ root: '',
+
+ /** Timeout for restore in ms */
+ loginTimeout: 1000 * 60 * 10,
+
+ /**
+ * This function decides wether the roster will be displayed or not if no
+ * connection is found.
+ */
+ displayRosterMinimized: function() {
+ return false;
+ },
+
+ /** Set to true if you want to hide offline buddies. */
+ hideOffline: false,
+
+ /** Mute notification sound? */
+ muteNotification: false,
+
+ /**
+ * If no avatar is found, this function is called.
+ *
+ * @param jid Jid of that user.
+ * @this {jQuery} Elements to update with probable .jsxc_avatar elements
+ */
+ defaultAvatar: function(jid) {
+ jsxc.gui.avatarPlaceholder($(this).find('.jsxc_avatar'), jid);
+ },
+
+ /**
+ * Returns permanent saved settings and overwrite default jsxc.options.
+ *
+ * @memberOf jsxc.options
+ * @param username String username
+ * @param password String password
+ * @returns {object} at least xmpp.url
+ */
+ loadSettings: function() {
+
+ },
+
+ /**
+ * Call this function to save user settings permanent.
+ *
+ * @memberOf jsxc.options
+ * @param data Holds all data as key/value
+ * @returns {boolean} false if function failes
+ */
+ saveSettinsPermanent: function() {
+
+ },
+
+ carbons: {
+ /** Enable carbon copies? */
+ enable: false
+ },
+
+ /**
+ * Processes user list.
+ *
+ * @callback getUsers-cb
+ * @param {object} list List of users, key: username, value: alias
+ */
+
+ /**
+ * Returns a list of usernames and aliases
+ *
+ * @function getUsers
+ * @memberOf jsxc.options
+ * @param {string} search Search token (start with)
+ * @param {getUsers-cb} cb Called with list of users
+ */
+ getUsers: null
+};</code></pre>
+ </article>
+ </section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/jsxc.lib.otr.js.html b/doc/jsxc.lib.otr.js.html
new file mode 100644
index 00000000..9a50a2dc
--- /dev/null
+++ b/doc/jsxc.lib.otr.js.html
@@ -0,0 +1,512 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Source: jsxc.lib.otr.js</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Source: jsxc.lib.otr.js</h1>
+
+
+
+
+
+ <section>
+ <article>
+ <pre class="prettyprint source"><code>
+/**
+ * @namespace jsxc.otr
+ */
+jsxc.otr = {
+ /** list of otr objects */
+ objects: {},
+
+ dsaFallback: null,
+ /**
+ * Handler for otr receive event
+ *
+ * @memberOf jsxc.otr
+ * @param {Object} d
+ * @param {string} d.bid
+ * @param {string} d.msg received message
+ * @param {boolean} d.encrypted True, if msg was encrypted.
+ * @param {boolean} d.forwarded
+ * @param {string} d.stamp timestamp
+ */
+ receiveMessage: function(d) {
+ var bid = d.bid;
+
+ if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT) {
+ jsxc.otr.backup(bid);
+ }
+
+ if (jsxc.otr.objects[bid].msgstate !== OTR.CONST.MSGSTATE_PLAINTEXT && !d.encrypted) {
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('Received_an_unencrypted_message') + '. [' + d.msg + ']', d.encrypted, d.forwarded, d.stamp);
+ } else {
+ jsxc.gui.window.postMessage(bid, 'in', d.msg, d.encrypted, d.forwarded, d.stamp);
+ }
+ },
+
+ /**
+ * Handler for otr send event
+ *
+ * @param {string} jid
+ * @param {string} msg message to be send
+ */
+ sendMessage: function(jid, msg, uid) {
+ if (jsxc.otr.objects[jsxc.jidToBid(jid)].msgstate !== 0) {
+ jsxc.otr.backup(jsxc.jidToBid(jid));
+ }
+
+ jsxc.xmpp._sendMessage(jid, msg, uid);
+ },
+
+ /**
+ * Create new otr instance
+ *
+ * @param {type} bid
+ * @returns {undefined}
+ */
+ create: function(bid) {
+
+ if (jsxc.otr.objects.hasOwnProperty(bid)) {
+ return;
+ }
+
+ if (!jsxc.options.otr.priv) {
+ return;
+ }
+
+ // save list of otr objects
+ var ol = jsxc.storage.getUserItem('otrlist') || [];
+ if (ol.indexOf(bid) &lt; 0) {
+ ol.push(bid);
+ jsxc.storage.setUserItem('otrlist', ol);
+ }
+
+ jsxc.otr.objects[bid] = new OTR(jsxc.options.otr);
+
+ if (jsxc.options.otr.SEND_WHITESPACE_TAG) {
+ jsxc.otr.objects[bid].SEND_WHITESPACE_TAG = true;
+ }
+
+ if (jsxc.options.otr.WHITESPACE_START_AKE) {
+ jsxc.otr.objects[bid].WHITESPACE_START_AKE = true;
+ }
+
+ jsxc.otr.objects[bid].on('status', function(status) {
+ var data = jsxc.storage.getUserItem('buddy', bid);
+
+ if (data === null) {
+ return;
+ }
+
+ switch (status) {
+ case OTR.CONST.STATUS_SEND_QUERY:
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('trying_to_start_private_conversation'));
+ break;
+ case OTR.CONST.STATUS_AKE_SUCCESS:
+ data.fingerprint = jsxc.otr.objects[bid].their_priv_pk.fingerprint();
+ data.msgstate = OTR.CONST.MSGSTATE_ENCRYPTED;
+
+ var msg = (jsxc.otr.objects[bid].trust ? $.t('Verified') : $.t('Unverified')) + ' ' + $.t('private_conversation_started');
+ jsxc.gui.window.postMessage(bid, 'sys', msg);
+ break;
+ case OTR.CONST.STATUS_END_OTR:
+ data.fingerprint = null;
+
+ if (jsxc.otr.objects[bid].msgstate === OTR.CONST.MSGSTATE_PLAINTEXT) {
+ // we abort the private conversation
+
+ data.msgstate = OTR.CONST.MSGSTATE_PLAINTEXT;
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('private_conversation_aborted'));
+
+ } else {
+ // the buddy abort the private conversation
+
+ data.msgstate = OTR.CONST.MSGSTATE_FINISHED;
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('your_buddy_closed_the_private_conversation_you_should_do_the_same'));
+ }
+ break;
+ case OTR.CONST.STATUS_SMP_HANDLE:
+ jsxc.keepBusyAlive();
+ break;
+ }
+
+ jsxc.storage.setUserItem('buddy', bid, data);
+
+ // for encryption and verification state
+ jsxc.gui.update(bid);
+ });
+
+ jsxc.otr.objects[bid].on('smp', function(type, data) {
+ switch (type) {
+ case 'question': // verification request received
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('Authentication_request_received'));
+
+ if ($('#jsxc_dialog').length > 0) {
+ jsxc.otr.objects[bid].sm.abort();
+ break;
+ }
+
+ jsxc.otr.onSmpQuestion(bid, data);
+ jsxc.storage.setUserItem('smp_' + bid, {
+ data: data || null
+ });
+
+ break;
+ case 'trust': // verification completed
+ jsxc.otr.objects[bid].trust = data;
+ jsxc.storage.updateUserItem('buddy', bid, 'trust', data);
+ jsxc.otr.backup(bid);
+ jsxc.gui.update(bid);
+
+ if (data) {
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('conversation_is_now_verified'));
+ } else {
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('authentication_failed'));
+ }
+ jsxc.storage.removeUserItem('smp_' + bid);
+ jsxc.gui.dialog.close();
+ break;
+ case 'abort':
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('Authentication_aborted'));
+ break;
+ default:
+ jsxc.debug('[OTR] sm callback: Unknown type: ' + type);
+ }
+ });
+
+ // Receive message
+ jsxc.otr.objects[bid].on('ui', function(msg, encrypted, meta) {
+ jsxc.otr.receiveMessage({
+ bid: bid,
+ msg: msg,
+ encrypted: encrypted === true,
+ stamp: meta.stamp,
+ forwarded: meta.forwarded
+ });
+ });
+
+ // Send message
+ jsxc.otr.objects[bid].on('io', function(msg, uid) {
+ var jid = jsxc.gui.window.get(bid).data('jid') || jsxc.otr.objects[bid].jid;
+
+ jsxc.otr.objects[bid].jid = jid;
+
+ jsxc.otr.sendMessage(jid, msg, uid);
+ });
+
+ jsxc.otr.objects[bid].on('error', function(err) {
+ // Handle this case in jsxc.otr.receiveMessage
+ if (err !== 'Received an unencrypted message.') {
+ jsxc.gui.window.postMessage(bid, 'sys', '[OTR] ' + $.t(err));
+ }
+
+ jsxc.error('[OTR] ' + err);
+ });
+
+ jsxc.otr.restore(bid);
+ },
+
+ /**
+ * show verification dialog with related part (secret or question)
+ *
+ * @param {type} bid
+ * @param {string} [data]
+ * @returns {undefined}
+ */
+ onSmpQuestion: function(bid, data) {
+ jsxc.gui.showVerification(bid);
+
+ $('#jsxc_dialog select').prop('selectedIndex', (data ? 2 : 3)).change();
+ $('#jsxc_dialog > div:eq(0)').hide();
+
+ if (data) {
+ $('#jsxc_dialog > div:eq(2)').find('#jsxc_quest').val(data).prop('disabled', true);
+ $('#jsxc_dialog > div:eq(2)').find('.creation').text('Answer');
+ $('#jsxc_dialog > div:eq(2)').find('.jsxc_explanation').text($.t('your_buddy_is_attempting_to_determine_') + ' ' + $.t('to_authenticate_to_your_buddy') + $.t('enter_the_answer_and_click_answer'));
+ } else {
+ $('#jsxc_dialog > div:eq(3)').find('.jsxc_explanation').text($.t('your_buddy_is_attempting_to_determine_') + ' ' + $.t('to_authenticate_to_your_buddy') + $.t('enter_the_secret'));
+ }
+
+ $('#jsxc_dialog .jsxc_close').click(function() {
+ jsxc.storage.removeUserItem('smp_' + bid);
+
+ if (jsxc.master) {
+ jsxc.otr.objects[bid].sm.abort();
+ }
+ });
+ },
+
+ /**
+ * Send verification request to buddy
+ *
+ * @param {string} bid
+ * @param {string} sec secret
+ * @param {string} [quest] question
+ * @returns {undefined}
+ */
+ sendSmpReq: function(bid, sec, quest) {
+ jsxc.keepBusyAlive();
+
+ jsxc.otr.objects[bid].smpSecret(sec, quest || '');
+ },
+
+ /**
+ * Toggle encryption state
+ *
+ * @param {type} bid
+ * @returns {undefined}
+ */
+ toggleTransfer: function(bid) {
+ if (jsxc.storage.getUserItem('buddy', bid).msgstate === 0) {
+ jsxc.otr.goEncrypt(bid);
+ } else {
+ jsxc.otr.goPlain(bid);
+ }
+ },
+
+ /**
+ * Send request to encrypt the session
+ *
+ * @param {type} bid
+ * @returns {undefined}
+ */
+ goEncrypt: function(bid) {
+ if (jsxc.master) {
+ jsxc.otr.objects[bid].sendQueryMsg();
+ } else {
+ jsxc.storage.updateUserItem('buddy', bid, 'transferReq', 1);
+ }
+ },
+
+ /**
+ * Abort encryptet session
+ *
+ * @param {type} bid
+ * @param cb callback
+ * @returns {undefined}
+ */
+ goPlain: function(bid, cb) {
+ if (jsxc.master) {
+ jsxc.otr.objects[bid].endOtr.call(jsxc.otr.objects[bid], cb);
+ jsxc.otr.objects[bid].init.call(jsxc.otr.objects[bid]);
+
+ jsxc.otr.backup(bid);
+ } else {
+ jsxc.storage.updateUserItem('buddy', bid, 'transferReq', 0);
+ }
+ },
+
+ /**
+ * Backups otr session
+ *
+ * @param {string} bid
+ */
+ backup: function(bid) {
+ var o = jsxc.otr.objects[bid]; // otr object
+ var r = {}; // return value
+
+ if (o === null) {
+ return;
+ }
+
+ // all variables which should be saved
+ var savekey = [ 'jid', 'our_instance_tag', 'msgstate', 'authstate', 'fragment', 'their_y', 'their_old_y', 'their_keyid', 'their_instance_tag', 'our_dh', 'our_old_dh', 'our_keyid', 'sessKeys', 'storedMgs', 'oldMacKeys', 'trust', 'transmittedRS', 'ssid', 'receivedPlaintext', 'authstate', 'send_interval' ];
+
+ var i;
+ for (i = 0; i &lt; savekey.length; i++) {
+ r[savekey[i]] = JSON.stringify(o[savekey[i]]);
+ }
+
+ if (o.their_priv_pk !== null) {
+ r.their_priv_pk = JSON.stringify(o.their_priv_pk.packPublic());
+ }
+
+ if (o.ake.otr_version && o.ake.otr_version !== '') {
+ r.otr_version = JSON.stringify(o.ake.otr_version);
+ }
+
+ jsxc.storage.setUserItem('otr', bid, r);
+ },
+
+ /**
+ * Restore old otr session
+ *
+ * @param {string} bid
+ */
+ restore: function(bid) {
+ var o = jsxc.otr.objects[bid];
+ var d = jsxc.storage.getUserItem('otr', bid);
+
+ if (o !== null || d !== null) {
+ var key;
+ for (key in d) {
+ if (d.hasOwnProperty(key)) {
+ var val = JSON.parse(d[key]);
+ if (key === 'their_priv_pk' && val !== null) {
+ val = DSA.parsePublic(val);
+ }
+ if (key === 'otr_version' && val !== null) {
+ o.ake.otr_version = val;
+ } else {
+ o[key] = val;
+ }
+ }
+ }
+
+ jsxc.otr.objects[bid] = o;
+
+ if (o.msgstate === 1 && o.their_priv_pk !== null) {
+ o._smInit.call(jsxc.otr.objects[bid]);
+ }
+ }
+
+ jsxc.otr.enable(bid);
+ },
+
+ /**
+ * Create or load DSA key
+ *
+ * @returns {unresolved}
+ */
+ createDSA: function() {
+ if (jsxc.options.otr.priv) {
+ return;
+ }
+
+ if (jsxc.storage.getUserItem('key') === null) {
+ var msg = $.t('Creating_your_private_key_');
+ var worker = null;
+
+ if (Worker) {
+ // try to create web-worker
+
+ try {
+ worker = new Worker(jsxc.options.root + '/lib/otr/build/dsa-webworker.js');
+ } catch (err) {
+ jsxc.warn('Couldn\'t create web-worker.', err);
+ }
+ }
+
+ jsxc.otr.dsaFallback = (worker === null);
+
+ if (!jsxc.otr.dsaFallback) {
+ // create DSA key in background
+
+ jsxc._onMaster();
+
+ worker.onmessage = function(e) {
+ var type = e.data.type;
+ var val = e.data.val;
+
+ if (type === 'debug') {
+ jsxc.debug(val);
+ } else if (type === 'data') {
+ jsxc.otr.DSAready(DSA.parsePrivate(val));
+ }
+ };
+
+ // start worker
+ worker.postMessage({
+ imports: [ jsxc.options.root + '/lib/otr/vendor/salsa20.js', jsxc.options.root + '/lib/otr/vendor/bigint.js', jsxc.options.root + '/lib/otr/vendor/crypto.js', jsxc.options.root + '/lib/otr/vendor/eventemitter.js', jsxc.options.root + '/lib/otr/lib/const.js', jsxc.options.root + '/lib/otr/lib/helpers.js', jsxc.options.root + '/lib/otr/lib/dsa.js' ],
+ seed: BigInt.getSeed(),
+ debug: true
+ });
+
+ } else {
+ // fallback
+
+ jsxc.gui.dialog.open(jsxc.gui.template.get('waitAlert', null, msg), {
+ noClose: true
+ });
+
+ jsxc.debug('DSA key creation started.');
+
+ // wait until the wait alert is opened
+ setTimeout(function() {
+ var dsa = new DSA();
+ jsxc.otr.DSAready(dsa);
+ }, 500);
+ }
+ } else {
+ jsxc.debug('DSA key loaded');
+ jsxc.options.otr.priv = DSA.parsePrivate(jsxc.storage.getUserItem('key'));
+
+ jsxc.otr._createDSA();
+ }
+ },
+
+ /**
+ * Ending of createDSA().
+ */
+ _createDSA: function() {
+
+ jsxc.storage.setUserItem('priv_fingerprint', jsxc.options.otr.priv.fingerprint());
+
+ if (jsxc.otr.dsaFallback !== false) {
+ jsxc._onMaster();
+ }
+ },
+
+ /**
+ * Ending of DSA key generation.
+ *
+ * @param {DSA} dsa DSA object
+ */
+ DSAready: function(dsa) {
+ jsxc.storage.setUserItem('key', dsa.packPrivate());
+ jsxc.options.otr.priv = dsa;
+
+ // close wait alert
+ if (jsxc.otr.dsaFallback) {
+ jsxc.gui.dialog.close();
+ } else {
+ $.each(jsxc.storage.getUserItem('windowlist'), function(index, val) {
+ jsxc.otr.create(val);
+ });
+ }
+
+ jsxc.otr._createDSA();
+ },
+
+ enable: function(bid) {
+ jsxc.gui.window.get(bid).find('.jsxc_otr').removeClass('jsxc_disabled');
+ }
+};
+</code></pre>
+ </article>
+ </section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/jsxc.lib.storage.js.html b/doc/jsxc.lib.storage.js.html
new file mode 100644
index 00000000..244cd80b
--- /dev/null
+++ b/doc/jsxc.lib.storage.js.html
@@ -0,0 +1,662 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Source: jsxc.lib.storage.js</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Source: jsxc.lib.storage.js</h1>
+
+
+
+
+
+ <section>
+ <article>
+ <pre class="prettyprint source"><code>
+
+ /**
+ * Handle long-live data
+ *
+ * @namespace jsxc.storage
+ */
+ jsxc.storage = {
+ /**
+ * Prefix for localstorage
+ *
+ * @privat
+ */
+ PREFIX: 'jsxc',
+
+ SEP: ':',
+
+ /**
+ * @param {type} uk Should we generate a user prefix?
+ * @returns {String} prefix
+ * @memberOf jsxc.storage
+ */
+ getPrefix: function(uk) {
+ var self = jsxc.storage;
+
+ return self.PREFIX + self.SEP + ((uk && jsxc.bid) ? jsxc.bid + self.SEP : '');
+ },
+
+ /**
+ * Save item to storage
+ *
+ * @function
+ * @param {String} key variablename
+ * @param {Object} value value
+ * @param {String} uk Userkey? Should we add the bid as prefix?
+ */
+ setItem: function(key, value, uk) {
+
+ // Workaround for non-conform browser
+ if (jsxc.storageNotConform > 0 && key !== 'rid' && key !== 'lastActivity') {
+ if (jsxc.storageNotConform > 1 && jsxc.toSNC === null) {
+ jsxc.toSNC = window.setTimeout(function() {
+ jsxc.storageNotConform = 0;
+ jsxc.storage.setItem('storageNotConform', 0);
+ }, 1000);
+ }
+
+ jsxc.ls.push(JSON.stringify({
+ key: key,
+ value: value
+ }));
+ }
+
+ if (typeof (value) === 'object') {
+ value = JSON.stringify(value);
+ }
+
+ localStorage.setItem(jsxc.storage.getPrefix(uk) + key, value);
+ },
+
+ setUserItem: function(type, key, value) {
+ var self = jsxc.storage;
+
+ if (arguments.length === 2) {
+ value = key;
+ key = type;
+ type = '';
+ } else if (arguments.length === 3) {
+ key = type + self.SEP + key;
+ }
+
+ return jsxc.storage.setItem(key, value, true);
+ },
+
+ /**
+ * Load item from storage
+ *
+ * @function
+ * @param {String} key variablename
+ * @param {String} uk Userkey? Should we add the bid as prefix?
+ */
+ getItem: function(key, uk) {
+ key = jsxc.storage.getPrefix(uk) + key;
+
+ var value = localStorage.getItem(key);
+ try {
+ return JSON.parse(value);
+ } catch (e) {
+ return value;
+ }
+ },
+
+ /**
+ * Get a user item from storage.
+ *
+ * @param key
+ * @returns user item
+ */
+ getUserItem: function(type, key) {
+ var self = jsxc.storage;
+
+ if (arguments.length === 1) {
+ key = type;
+ } else if (arguments.length === 2) {
+ key = type + self.SEP + key;
+ }
+
+ return jsxc.storage.getItem(key, true);
+ },
+
+ /**
+ * Remove item from storage
+ *
+ * @function
+ * @param {String} key variablename
+ * @param {String} uk Userkey? Should we add the bid as prefix?
+ */
+ removeItem: function(key, uk) {
+
+ // Workaround for non-conform browser
+ if (jsxc.storageNotConform && key !== 'rid' && key !== 'lastActivity') {
+ jsxc.ls.push(JSON.stringify({
+ key: jsxc.storage.prefix + key,
+ value: ''
+ }));
+ }
+
+ localStorage.removeItem(jsxc.storage.getPrefix(uk) + key);
+ },
+
+ /**
+ * Remove user item from storage.
+ *
+ * @param key
+ */
+ removeUserItem: function(type, key) {
+ var self = jsxc.storage;
+
+ if (arguments.length === 1) {
+ key = type;
+ } else if (arguments.length === 2) {
+ key = type + self.SEP + key;
+ }
+
+ jsxc.storage.removeItem(key, true);
+ },
+
+ /**
+ * Updates value of a variable in a saved object.
+ *
+ * @function
+ * @param {String} key variablename
+ * @param {String|object} variable variablename in object or object with
+ * variable/key pairs
+ * @param {Object} [value] value
+ * @param {String} uk Userkey? Should we add the bid as prefix?
+ */
+ updateItem: function(key, variable, value, uk) {
+
+ var data = jsxc.storage.getItem(key, uk) || {};
+
+ if (typeof (variable) === 'object') {
+
+ $.each(variable, function(key, val) {
+ if (typeof (data[key]) === 'undefined') {
+ jsxc.debug('Variable ' + key + ' doesn\'t exist in ' + variable + '. It was created.');
+ }
+
+ data[key] = val;
+ });
+ } else {
+ if (typeof (data[variable]) === 'undefined') {
+ jsxc.debug('Variable ' + variable + ' doesn\'t exist. It was created.');
+ }
+
+ data[variable] = value;
+ }
+
+ jsxc.storage.setItem(key, data, uk);
+ },
+
+ /**
+ * Updates value of a variable in a saved user object.
+ *
+ * @param {String} key variablename
+ * @param {String|object} variable variablename in object or object with
+ * variable/key pairs
+ * @param {Object} [value] value
+ */
+ updateUserItem: function(type, key, variable, value) {
+ var self = jsxc.storage;
+
+ if (arguments.length === 4 || (arguments.length === 3 && typeof variable === 'object')) {
+ key = type + self.SEP + key;
+ } else {
+ value = variable;
+ variable = key;
+ key = type;
+ }
+
+ return jsxc.storage.updateItem(key, variable, value, true);
+ },
+
+ /**
+ * Inkrements value
+ *
+ * @function
+ * @param {String} key variablename
+ * @param {String} uk Userkey? Should we add the bid as prefix?
+ */
+ ink: function(key, uk) {
+
+ jsxc.storage.setItem(key, Number(jsxc.storage.getItem(key, uk)) + 1, uk);
+ },
+
+ /**
+ * Remove element from array or object
+ *
+ * @param {string} key name of array or object
+ * @param {string} name name of element in array or object
+ * @param {String} uk Userkey? Should we add the bid as prefix?
+ * @returns {undefined}
+ */
+ removeElement: function(key, name, uk) {
+ var item = jsxc.storage.getItem(key, uk);
+
+ if ($.isArray(item)) {
+ item = $.grep(item, function(e) {
+ return e !== name;
+ });
+ } else if (typeof (item) === 'object') {
+ delete item[name];
+ }
+
+ jsxc.storage.setItem(key, item, uk);
+ },
+
+ removeUserElement: function(type, key, name) {
+ var self = jsxc.storage;
+
+ if (arguments.length === 2) {
+ name = key;
+ key = type;
+ } else if (arguments.length === 3) {
+ key = type + self.SEP + key;
+ }
+
+ return jsxc.storage.removeElement(key, name, true);
+ },
+
+ /**
+ * Triggered if changes are recognized
+ *
+ * @function
+ * @param {event} e Storageevent
+ * @param {String} e.key Keyname which triggered event
+ * @param {Object} e.oldValue Old Value for key
+ * @param {Object} e.newValue New Value for key
+ * @param {String} e.url
+ */
+ onStorage: function(e) {
+
+ // skip
+ if (e.key === jsxc.storage.PREFIX + jsxc.storage.SEP + 'rid' || e.key === jsxc.storage.PREFIX + jsxc.storage.SEP + 'lastActivity') {
+ return;
+ }
+
+ var re = new RegExp('^' + jsxc.storage.PREFIX + jsxc.storage.SEP + '(?:[^' + jsxc.storage.SEP + ']+@[^' + jsxc.storage.SEP + ']+' + jsxc.storage.SEP + ')?(.*)', 'i');
+ var key = e.key.replace(re, '$1');
+
+ // Workaround for non-conform browser: Triggered event on every page
+ // (own)
+ if (jsxc.storageNotConform > 0 && jsxc.ls.length > 0) {
+
+ var val = e.newValue;
+ try {
+ val = JSON.parse(val);
+ } catch (err) {
+ }
+
+ var index = $.inArray(JSON.stringify({
+ key: key,
+ value: val
+ }), jsxc.ls);
+
+ if (index >= 0) {
+
+ // confirm that the storage event is not fired regularly
+ if (jsxc.storageNotConform > 1) {
+ window.clearTimeout(jsxc.toSNC);
+ jsxc.storageNotConform = 1;
+ jsxc.storage.setItem('storageNotConform', 1);
+ }
+
+ jsxc.ls.splice(index, 1);
+ return;
+ }
+ }
+
+ // Workaround for non-conform browser
+ if (e.oldValue === e.newValue) {
+ return;
+ }
+
+ var n, o;
+ var bid = key.replace(new RegExp('[^' + jsxc.storage.SEP + ']+' + jsxc.storage.SEP + '(.*)', 'i'), '$1');
+
+ // react if someone ask, if there is a master
+ if (jsxc.master && key === 'alive') {
+ jsxc.debug('Master request.');
+
+ jsxc.storage.ink('alive');
+ return;
+ }
+
+ // master alive
+ if (!jsxc.master && (key === 'alive' || key === 'alive_busy') && !jsxc.triggeredFromElement) {
+
+ // reset timeout
+ window.clearTimeout(jsxc.to);
+ jsxc.to = window.setTimeout(jsxc.checkMaster, ((key === 'alive') ? jsxc.options.timeout : jsxc.options.busyTimeout) + jsxc.random(60));
+
+ // only call the first time
+ if (!jsxc.role_allocation) {
+ jsxc.onSlave();
+ }
+
+ return;
+ }
+
+ if (key.match(/^notices/)) {
+ jsxc.notice.load();
+ }
+
+ if (key.match(/^presence/)) {
+ jsxc.gui.changePresence(e.newValue, true);
+ }
+
+ if (key.match(/^options/) && e.newValue) {
+ n = JSON.parse(e.newValue);
+
+ if (typeof n.muteNotification !== 'undefined' && n.muteNotification) {
+ jsxc.notification.muteSound(true);
+ } else {
+ jsxc.notification.unmuteSound(true);
+ }
+ }
+
+ if (key.match(/^hidden/)) {
+ if (jsxc.master) {
+ clearTimeout(jsxc.toNotification);
+ } else {
+ jsxc.isHidden();
+ }
+ }
+
+ if (key.match(/^focus/)) {
+ if (jsxc.master) {
+ clearTimeout(jsxc.toNotification);
+ } else {
+ jsxc.hasFocus();
+ }
+ }
+
+ if (key.match(new RegExp('^chat' + jsxc.storage.SEP))) {
+
+ var posts = JSON.parse(e.newValue);
+ var data, el;
+
+ while (posts.length > 0) {
+ data = posts.pop();
+ el = $('#' + data.uid);
+
+ if (el.length === 0) {
+ if (jsxc.master && data.direction === 'out') {
+ jsxc.xmpp.sendMessage(bid, data.msg, data.uid);
+ }
+
+ jsxc.gui.window._postMessage(bid, data);
+ } else if (data.received) {
+ el.addClass('jsxc_received');
+ }
+ }
+ return;
+ }
+
+ if (key.match(new RegExp('^window' + jsxc.storage.SEP))) {
+
+ if (!e.newValue) {
+ jsxc.gui.window._close(bid);
+ return;
+ }
+
+ if (!e.oldValue) {
+ jsxc.gui.window.open(bid);
+ return;
+ }
+
+ n = JSON.parse(e.newValue);
+
+ if (n.minimize) {
+ jsxc.gui.window._hide(bid);
+ } else {
+ jsxc.gui.window._show(bid);
+ }
+
+ jsxc.gui.window.setText(bid, n.text);
+
+ return;
+ }
+
+ if (key.match(new RegExp('^smp' + jsxc.storage.SEP))) {
+
+ if (!e.newValue) {
+
+ jsxc.gui.dialog.close();
+
+ if (jsxc.master) {
+ jsxc.otr.objects[bid].sm.abort();
+ }
+
+ return;
+ }
+
+ n = JSON.parse(e.newValue);
+
+ if (typeof (n.data) !== 'undefined') {
+
+ jsxc.otr.onSmpQuestion(bid, n.data);
+
+ } else if (jsxc.master && n.sec) {
+ jsxc.gui.dialog.close();
+
+ jsxc.otr.sendSmpReq(bid, n.sec, n.quest);
+ }
+ }
+
+ if (!jsxc.master && key.match(new RegExp('^buddy' + jsxc.storage.SEP))) {
+
+ if (!e.newValue) {
+ jsxc.gui.roster.purge(bid);
+ return;
+ }
+ if (!e.oldValue) {
+ jsxc.gui.roster.add(bid);
+ return;
+ }
+
+ n = JSON.parse(e.newValue);
+ o = JSON.parse(e.oldValue);
+
+ jsxc.gui.update(bid);
+
+ if (o.status !== n.status || o.sub !== n.sub) {
+ jsxc.gui.roster.reorder(bid);
+ }
+ }
+
+ if (jsxc.master && key.match(new RegExp('^deletebuddy' + jsxc.storage.SEP)) && e.newValue) {
+ n = JSON.parse(e.newValue);
+
+ jsxc.xmpp.removeBuddy(n.jid);
+ jsxc.storage.removeUserItem(key);
+ }
+
+ if (jsxc.master && key.match(new RegExp('^buddy' + jsxc.storage.SEP))) {
+
+ n = JSON.parse(e.newValue);
+ o = JSON.parse(e.oldValue);
+
+ if (o.transferReq !== n.transferReq) {
+ jsxc.storage.updateUserItem('buddy', bid, 'transferReq', -1);
+
+ if (n.transferReq === 0) {
+ jsxc.otr.goPlain(bid);
+ }
+ if (n.transferReq === 1) {
+ jsxc.otr.goEncrypt(bid);
+ }
+ }
+
+ if (o.name !== n.name) {
+ jsxc.gui.roster._rename(bid, n.name);
+ }
+ }
+
+ // logout
+ if (key === 'sid') {
+ if (!e.newValue) {
+ // if (jsxc.master && jsxc.xmpp.conn) {
+ // jsxc.xmpp.conn.disconnect();
+ // jsxc.triggeredFromElement = true;
+ // }
+ jsxc.xmpp.logout();
+
+ }
+ return;
+ }
+
+ if (key === 'friendReq') {
+ n = JSON.parse(e.newValue);
+
+ if (jsxc.master && n.approve >= 0) {
+ jsxc.xmpp.resFriendReq(n.jid, n.approve);
+ }
+ }
+
+ if (jsxc.master && key.match(new RegExp('^add' + jsxc.storage.SEP))) {
+ n = JSON.parse(e.newValue);
+
+ jsxc.xmpp.addBuddy(n.username, n.alias);
+ }
+
+ if (key === 'roster') {
+ jsxc.gui.roster.toggle();
+ }
+
+ if (jsxc.master && key.match(new RegExp('^vcard' + jsxc.storage.SEP)) && e.newValue !== null && e.newValue.match(/^request:/)) {
+
+ jsxc.xmpp.loadVcard(bid, function(stanza) {
+ jsxc.storage.setUserItem('vcard', bid, {
+ state: 'success',
+ data: $('&lt;div>').append(stanza).html()
+ });
+ }, function() {
+ jsxc.storage.setUserItem('vcard', bid, {
+ state: 'error'
+ });
+ });
+ }
+
+ if (!jsxc.master && key.match(new RegExp('^vcard' + jsxc.storage.SEP)) && e.newValue !== null && !e.newValue.match(/^request:/)) {
+ n = JSON.parse(e.newValue);
+
+ if (typeof n.state !== 'undefined') {
+ $(document).trigger('loaded.vcard.jsxc', n);
+ }
+
+ jsxc.storage.removeUserItem('vcard', bid);
+ }
+ },
+
+ /**
+ * Save message to storage.
+ *
+ * @memberOf jsxc.storage
+ * @param bid
+ * @param direction
+ * @param msg
+ * @param encrypted
+ * @param forwarded
+ * @param sender
+ * @return post
+ */
+ saveMessage: function(bid, direction, msg, encrypted, forwarded, stamp, sender) {
+ var chat = jsxc.storage.getUserItem('chat', bid) || [];
+
+ var uid = new Date().getTime() + ':msg';
+
+ if (chat.length > jsxc.options.get('numberOfMsg')) {
+ chat.pop();
+ }
+
+ var post = {
+ direction: direction,
+ msg: msg,
+ uid: uid.replace(/:/, '-'),
+ received: false,
+ encrypted: encrypted || false,
+ forwarded: forwarded || false,
+ stamp: stamp || new Date().getTime(),
+ sender: sender
+ };
+
+ chat.unshift(post);
+ jsxc.storage.setUserItem('chat', bid, chat);
+
+ return post;
+ },
+
+ /**
+ * Save or update buddy data.
+ *
+ * @memberOf jsxc.storage
+ * @param bid
+ * @param data
+ * @returns {String} Updated or created
+ */
+ saveBuddy: function(bid, data) {
+
+ if (jsxc.storage.getUserItem('buddy', bid)) {
+ jsxc.storage.updateUserItem('buddy', bid, data);
+
+ return 'updated';
+ }
+
+ jsxc.storage.setUserItem('buddy', bid, $.extend({
+ jid: '',
+ name: '',
+ status: 0,
+ sub: 'none',
+ msgstate: 0,
+ transferReq: -1,
+ trust: false,
+ fingerprint: null,
+ res: [],
+ type: 'chat'
+ }, data));
+
+ return 'created';
+ }
+ };
+</code></pre>
+ </article>
+ </section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/jsxc.lib.webrtc.js.html b/doc/jsxc.lib.webrtc.js.html
index 5e334a6b..55bf8d61 100644
--- a/doc/jsxc.lib.webrtc.js.html
+++ b/doc/jsxc.lib.webrtc.js.html
@@ -25,17 +25,16 @@
<section>
<article>
- <pre class="prettyprint source"><code>/* global jsxc, Strophe, SDPUtil, getUserMediaWithConstraints, setupRTC, jQuery, MediaStreamTrack */
+ <pre class="prettyprint source"><code>/* global SDPUtil, getUserMediaWithConstraints, setupRTC, MediaStreamTrack, RTC, RTCPeerconnection */
+/* jshint -W020 */
-var RTC = null, RTCPeerconnection = null;
-
-jsxc.gui.template.incomingCall = '&lt;h3>%%Incoming_call%%&lt;/h3>\
- &lt;p>%%Do_you_want_to_accept_the_call_from%% {{bid_name}}?&lt;/p>\
+jsxc.gui.template.incomingCall = '&lt;h3 data-i18n="Incoming_call">&lt;/h3>\
+ &lt;p>&lt;span data-i18n="Do_you_want_to_accept_the_call_from">&lt;/span> {{bid_name}}?&lt;/p>\
&lt;p class="jsxc_right">\
- &lt;a href="#" class="button jsxc_reject">%%Reject%%&lt;/a> &lt;a href="#" class="button creation jsxc_accept">%%Accept%%&lt;/a>\
+ &lt;a href="#" class="button jsxc_reject" data-i18n="Reject">&lt;/a> &lt;a href="#" class="button creation jsxc_accept" data-i18n="Accept">&lt;/a>\
&lt;/p>';
-jsxc.gui.template.allowMediaAccess = '&lt;p>%%Please_allow_access_to_microphone_and_camera%%&lt;/p>';
+jsxc.gui.template.allowMediaAccess = '&lt;p data-i18n="Please_allow_access_to_microphone_and_camera">&lt;/p>';
jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
&lt;div class="jsxc_chatarea">\
@@ -56,22 +55,22 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
&lt;div class="jsxc_noRemoteVideo">\
&lt;div>\
&lt;div>&lt;/div>\
- &lt;p>%%No_video_signal%%&lt;/p>\
+ &lt;p data-i18n="No_video_signal">&lt;/p>\
&lt;div>&lt;/div>\
&lt;/div>\
&lt;/div>\
&lt;/div>\
&lt;div class="jsxc_controlbar">\
- &lt;button type="button" class="jsxc_hangUp">%%hang_up%%&lt;/button>\
+ &lt;button type="button" class="jsxc_hangUp" data-i18n="hang_up">&lt;/button>\
&lt;input type="range" class="jsxc_volume" min="0.0" max="1.0" step="0.05" value="0.5" />\
&lt;div class="jsxc_buttongroup">\
- &lt;button type="button" class="jsxc_snapshot">%%snapshot%%&lt;/button>&lt;button type="button" class="jsxc_snapshots">&#9660;&lt;/button>\
+ &lt;button type="button" class="jsxc_snapshot" data-i18n="snapshot">&lt;/button>&lt;button type="button" class="jsxc_snapshots">&#9660;&lt;/button>\
&lt;/div>\
- &lt;!-- &lt;button type="button" class="jsxc_mute_local">%%mute_my_audio%%&lt;/button>\
- &lt;button type="button" class="jsxc_pause_local">%%pause_my_video%%&lt;/button> --> \
- &lt;button type="button" class="jsxc_showchat">%%chat%%&lt;/button>\
- &lt;button type="button" class="jsxc_fullscreen">%%fullscreen%%&lt;/button>\
- &lt;button type="button" class="jsxc_info">%%Info%%&lt;/button>\
+ &lt;!-- &lt;button type="button" class="jsxc_mute_local" data-i18n="mute_my_audio">&lt;/button>\
+ &lt;button type="button" class="jsxc_pause_local" data-i18n="pause_my_video">&lt;/button> --> \
+ &lt;button type="button" class="jsxc_showchat" data-i18n="chat">&lt;/button>\
+ &lt;button type="button" class="jsxc_fullscreen" data-i18n="fullscreen">&lt;/button>\
+ &lt;button type="button" class="jsxc_info" data-i18n="Info">&lt;/button>\
&lt;/div>\
&lt;div class="jsxc_multi">\
&lt;div class="jsxc_snapshotbar">\
@@ -84,9 +83,6 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
&lt;/div>\
&lt;/div>';
-(function($) {
- "use strict";
-
/**
* WebRTC namespace for jsxc.
*
@@ -252,7 +248,7 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
return;
}
- var videoIcon = $('&lt;div class="jsxc_video jsxc_disabled" title="' + jsxc.l.Start_video_call + '">&lt;/div>');
+ var videoIcon = $('&lt;div class="jsxc_video jsxc_disabled" title="' + $.t("Start_video_call") + '">&lt;/div>');
videoIcon.click(function() {
self.startCall(data.jid);
@@ -277,6 +273,10 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
initWindow: function(event, win) {
var self = jsxc.webrtc;
+ if (win.hasClass('jsxc_groupchat')) {
+ return;
+ }
+
jsxc.debug('webrtc.initWindow');
if (!self.conn) {
@@ -316,28 +316,30 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
var targetRes = Strophe.getResourceFromJid(jid);
if (targetRes === null) {
- $.each(jsxc.storage.getUserItem('buddy', bid).res, function(index, val) {
+ $.each(jsxc.storage.getUserItem('buddy', bid).res || [], function(index, val) {
if (capableRes.indexOf(val) > -1) {
targetRes = val;
return false;
}
});
+
+ jid = jid + '/' + targetRes;
}
el.off('click');
if (capableRes.indexOf(targetRes) > -1) {
el.click(function() {
- self.startCall(jid + '/' + targetRes);
+ self.startCall(jid);
});
el.removeClass('jsxc_disabled');
- el.attr('title', jsxc.translate('%%Start video call%%'));
+ el.attr('title', $.t('Start_video_call'));
} else {
el.addClass('jsxc_disabled');
- el.attr('title', jsxc.translate('%%Video call not possible.%%'));
+ el.attr('title', $.t('Video_call_not_possible'));
}
},
@@ -482,7 +484,7 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
onMediaFailure: function(ev, err) {
this.setStatus('media failure');
- jsxc.gui.window.postMessage(jsxc.jidToBid(jsxc.webrtc.last_caller), 'sys', jsxc.translate('%%Media failure%%: ') + err.name);
+ jsxc.gui.window.postMessage(jsxc.jidToBid(jsxc.webrtc.last_caller), 'sys', $.t('Media_failure') + err.name);
jsxc.debug('media failure: ' + err.name);
},
@@ -501,10 +503,10 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
var sess = this.conn.jingle.sessions[sid];
var bid = jsxc.jidToBid(sess.peerjid);
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Incoming call.%%'));
+ jsxc.gui.window.postMessage(bid, 'sys', $.t('Incoming_call'));
// display notification
- jsxc.notification.notify(jsxc.translate('%%Incoming call%%'), jsxc.translate('%%from%% ' + bid));
+ jsxc.notification.notify($.t('Incoming_call'), $.t('from') + ' ' + bid);
// send signal to partner
sess.sendRinging();
@@ -587,7 +589,7 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
$(document).off('error.jingle');
jsxc.gui.dialog.close();
- jsxc.gui.window.postMessage(bid, 'sys', jsxc.translate('%%Call terminated%%' + (reason ? (': %%' + reason + '%%') : '') + '.'));
+ jsxc.gui.window.postMessage(bid, 'sys', ($.t('Call_terminated') + (reason ? (': ' + $.t(reason)) : '') + '.'));
},
/**
@@ -691,15 +693,15 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
}
var text = '&lt;p>';
- text += '&lt;b>' + jsxc.translate('%%Local IP%%: ') + '&lt;/b>' + sess.local_ip + '&lt;br />';
- text += '&lt;b>' + jsxc.translate('%%Remote IP%%: ') + '&lt;/b>' + sess.remote_ip + '&lt;br />';
- text += '&lt;b>' + jsxc.translate('%%Local Fingerprint%%: ') + '&lt;/b>' + sess.local_fp + '&lt;br />';
- text += '&lt;b>' + jsxc.translate('%%Remote Fingerprint%%: ') + '&lt;/b>' + sess.remote_fp;
+ text += '&lt;b>' + $.t('Local_IP') + ': &lt;/b>' + sess.local_ip + '&lt;br />';
+ text += '&lt;b>' + $.t('Remote_IP') + ': &lt;/b>' + sess.remote_ip + '&lt;br />';
+ text += '&lt;b>' + $.t('Local_Fingerprint') + ': &lt;/b>' + sess.local_fp + '&lt;br />';
+ text += '&lt;b>' + $.t('Remote_Fingerprint') + ': &lt;/b>' + sess.remote_fp;
text += '&lt;/p>';
$('#jsxc_dialog .jsxc_infobar').html(text);
} else if (iceCon === 'failed') {
- jsxc.gui.window.postMessage(jsxc.jidToBid(sess.peerjid), 'sys', jsxc.translate('%%ICE connection failure%%.'));
+ jsxc.gui.window.postMessage(jsxc.jidToBid(sess.peerjid), 'sys', $.t('ICE_connection_failure'));
$(document).off('cleanup.dialog.jsxc');
@@ -741,7 +743,7 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
'finish.mediaready.jsxc': function() {
self.setStatus('Initiate call');
- jsxc.gui.window.postMessage(jsxc.jidToBid(jid), 'sys', jsxc.translate('%%Call started.%%'));
+ jsxc.gui.window.postMessage(jsxc.jidToBid(jid), 'sys', $.t('Call_started'));
$(document).one('error.jingle', function(e, sid, error) {
if (error.source !== 'offer') {
@@ -1005,69 +1007,6 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
}
});
- $.extend(jsxc.l10n.en, {
- Please_allow_access_to_microphone_and_camera: 'Please click the "Allow" button at the top, to allow access to microphone and camera.',
- Incoming_call: 'Incoming call',
- from: 'from',
- Do_you_want_to_accept_the_call_from: 'Do you want to accept the call from',
- Reject: 'Reject',
- Accept: 'Accept',
- hang_up: 'hang up',
- snapshot: 'snapshot',
- mute_my_audio: 'mute my audio',
- pause_my_video: 'pause my video',
- fullscreen: 'fullscreen',
- Info: 'Info',
- Local_IP: 'Local IP',
- Remote_IP: 'Remote IP',
- Local_Fingerprint: 'Local fingerprint',
- Remote_Fingerprint: 'Remote fingerprint',
- Video_call_not_possible: 'Video call not possible. Your buddy does not support video calls.',
- Start_video_call: 'Start video call'
- });
-
- $.extend(jsxc.l10n.de, {
- Please_allow_access_to_microphone_and_camera: 'Bitte klick auf den "Zulassen" Button oben, um den Zugriff auf Kamera und Mikrofon zu erlauben.',
- Incoming_call: 'Eingehender Anruf',
- from: 'von',
- Do_you_want_to_accept_the_call_from: 'Möchtest Du den Anruf annehmen von',
- Reject: 'Ablehnen',
- Accept: 'Annehmen',
- hang_up: 'Auflegen',
- snapshot: 'Schnappschuss',
- mute_my_audio: 'Mein Ton aus',
- pause_my_video: 'Mein Video pausieren',
- fullscreen: 'Vollbild',
- Info: 'Info',
- Local_IP: 'Lokale IP',
- Remote_IP: 'Remote IP',
- Local_Fingerprint: 'Lokaler Fingerprint',
- Remote_Fingerprint: 'Remote Fingerprint',
- Video_call_not_possible: 'Videoanruf nicht verfügbar. Dein Gesprächspartner unterstützt keine Videotelefonie.',
- Start_video_call: 'Starte Videoanruf'
- });
-
- $.extend(jsxc.l10n.es, {
- Please_allow_access_to_microphone_and_camera: 'Por favor, permitir el acceso al micrófono y la cámara.',
- Incoming_call: 'Llamada entrante',
- from: 'de',
- Do_you_want_to_accept_the_call_from: 'Desea aceptar la llamada de',
- Reject: 'Rechazar',
- Accept: 'Aceptar',
- hang_up: 'colgar',
- snapshot: 'instantánea',
- mute_my_audio: 'silenciar mi audio',
- pause_my_video: 'pausar mi vídeo',
- fullscreen: 'pantalla completa',
- Info: 'Info',
- Local_IP: 'IP local',
- Remote_IP: 'IP remota',
- Local_Fingerprint: 'Firma digital local',
- Remote_Fingerprint: 'Firma digital remota',
- Video_call_not_possible: 'Llamada de vídeo no es posible',
- Start_video_call: 'Iniciar llamada de vídeo'
- });
-}(jQuery));
</code></pre>
</article>
</section>
@@ -1078,13 +1017,13 @@ jsxc.gui.template.videoWindow = '&lt;div class="jsxc_webrtc">\
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:12 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.lib.xmpp.js.html b/doc/jsxc.lib.xmpp.js.html
new file mode 100644
index 00000000..f39752ed
--- /dev/null
+++ b/doc/jsxc.lib.xmpp.js.html
@@ -0,0 +1,1161 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Source: jsxc.lib.xmpp.js</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Source: jsxc.lib.xmpp.js</h1>
+
+
+
+
+
+ <section>
+ <article>
+ <pre class="prettyprint source"><code>/**
+ * Handle XMPP stuff.
+ *
+ * @namespace jsxc.xmpp
+ */
+jsxc.xmpp = {
+ conn: null, // connection
+
+ /**
+ * Create new connection or attach to old
+ *
+ * @name login
+ * @memberOf jsxc.xmpp
+ */
+ /**
+ * Create new connection with given parameters.
+ *
+ * @name login^2
+ * @param {string} jid
+ * @param {string} password
+ * @memberOf jsxc.xmpp
+ */
+ /**
+ * Attach connection with given parameters.
+ *
+ * @name login^3
+ * @param {string} jid
+ * @param {string} sid
+ * @param {string} rid
+ * @memberOf jsxc.xmpp
+ */
+ login: function() {
+
+ if (jsxc.xmpp.conn && jsxc.xmpp.conn.connected) {
+ return;
+ }
+
+ var jid = null, password = null, sid = null, rid = null;
+
+ switch (arguments.length) {
+ case 2:
+ jid = arguments[0];
+ password = arguments[1];
+ break;
+ case 3:
+ jid = arguments[0];
+ sid = arguments[1];
+ rid = arguments[2];
+ break;
+ default:
+ sid = jsxc.storage.getItem('sid');
+ rid = jsxc.storage.getItem('rid');
+
+ if (sid !== null && rid !== null) {
+ jid = jsxc.storage.getItem('jid');
+ } else {
+ sid = null;
+ rid = null;
+ jid = jsxc.options.xmpp.jid;
+ }
+ }
+
+ var url = jsxc.options.get('xmpp').url;
+
+ // Register eventlistener
+ $(document).on('connected.jsxc', jsxc.xmpp.connected);
+ $(document).on('attached.jsxc', jsxc.xmpp.attached);
+ $(document).on('disconnected.jsxc', jsxc.xmpp.disconnected);
+ $(document).on('ridChange', jsxc.xmpp.onRidChange);
+ $(document).on('connfail.jsxc', jsxc.xmpp.onConnfail);
+ $(document).on('authfail.jsxc', jsxc.xmpp.onAuthFail);
+
+ Strophe.addNamespace('RECEIPTS', 'urn:xmpp:receipts');
+
+ // Create new connection (no login)
+ jsxc.xmpp.conn = new Strophe.Connection(url);
+
+ // Override default function to preserve unique id
+ var stropheGetUniqueId = jsxc.xmpp.conn.getUniqueId;
+ jsxc.xmpp.conn.getUniqueId = function(suffix) {
+ var uid = stropheGetUniqueId.call(jsxc.xmpp.conn, suffix);
+ jsxc.storage.setItem('_uniqueId', jsxc.xmpp.conn._uniqueId);
+
+ return uid;
+ };
+
+ if (jsxc.storage.getItem('debug') === true) {
+ jsxc.xmpp.conn.xmlInput = function(data) {
+ console.log('&lt;', data);
+ };
+ jsxc.xmpp.conn.xmlOutput = function(data) {
+ console.log('>', data);
+ };
+ }
+
+ var callback = function(status, condition) {
+
+ jsxc.debug(Object.getOwnPropertyNames(Strophe.Status)[status] + ': ' + condition);
+
+ switch (status) {
+ case Strophe.Status.CONNECTED:
+ jsxc.bid = jsxc.jidToBid(jsxc.xmpp.conn.jid.toLowerCase());
+ $(document).trigger('connected.jsxc');
+ break;
+ case Strophe.Status.ATTACHED:
+ $(document).trigger('attached.jsxc');
+ break;
+ case Strophe.Status.DISCONNECTED:
+ $(document).trigger('disconnected.jsxc');
+ break;
+ case Strophe.Status.CONNFAIL:
+ $(document).trigger('connfail.jsxc');
+ break;
+ case Strophe.Status.AUTHFAIL:
+ $(document).trigger('authfail.jsxc');
+ break;
+ }
+ };
+
+ if (jsxc.xmpp.conn.caps) {
+ jsxc.xmpp.conn.caps.node = 'http://jsxc.org/';
+ }
+
+ if (jsxc.restore && sid && rid) {
+ jsxc.debug('Try to attach');
+ jsxc.debug('SID: ' + sid);
+ jsxc.xmpp.conn.attach(jid, sid, rid, callback);
+ } else {
+ jsxc.debug('New connection');
+
+ if (jsxc.xmpp.conn.caps) {
+ // Add system handler, because user handler isn't called before
+ // we are authenticated
+ jsxc.xmpp.conn._addSysHandler(function(stanza) {
+ var from = jsxc.xmpp.conn.domain, c = stanza.querySelector('c'), ver = c.getAttribute('ver'), node = c.getAttribute('node');
+
+ var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
+
+ jsxc.xmpp.conn.caps._jidVerIndex[from] = ver;
+ _jidNodeIndex[from] = node;
+
+ localStorage.setItem('strophe.caps._jidVerIndex', JSON.stringify(jsxc.xmpp.conn.caps._jidVerIndex));
+ localStorage.setItem('strophe.caps._jidNodeIndex', JSON.stringify(_jidNodeIndex));
+ }, Strophe.NS.CAPS);
+ }
+
+ jsxc.xmpp.conn.connect(jid || jsxc.options.xmpp.jid, password || jsxc.options.xmpp.password, callback);
+ }
+ },
+
+ /**
+ * Logs user out of his xmpp session and does some clean up.
+ *
+ * @param {boolean} complete If set to false, roster will not be removed
+ * @returns {Boolean}
+ */
+ logout: function(complete) {
+
+ // instruct all tabs
+ jsxc.storage.removeItem('sid');
+
+ // clean up
+ jsxc.storage.removeUserItem('buddylist');
+ jsxc.storage.removeUserItem('windowlist');
+ jsxc.storage.removeItem('_uniqueId');
+
+ if (!jsxc.master) {
+ $('#jsxc_roster').remove();
+ $('#jsxc_windowlist').remove();
+ return true;
+ }
+
+ if (jsxc.xmpp.conn === null) {
+ return true;
+ }
+
+ // Hide dropdown menu
+ $('body').click();
+
+ jsxc.triggeredFromElement = (typeof complete === 'boolean')? complete : true;
+
+ // restore all otr objects
+ $.each(jsxc.storage.getUserItem('otrlist') || {}, function(i, val) {
+ jsxc.otr.create(val);
+ });
+
+ var numOtr = Object.keys(jsxc.otr.objects || {}).length + 1;
+ var disReady = function() {
+ if (--numOtr &lt;= 0) {
+ jsxc.xmpp.conn.flush();
+
+ setTimeout(function() {
+ jsxc.xmpp.conn.disconnect();
+ }, 600);
+ }
+ };
+
+ // end all private conversations
+ $.each(jsxc.otr.objects || {}, function(key, obj) {
+ if (obj.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED) {
+ obj.endOtr.call(obj, function() {
+ obj.init.call(obj);
+ jsxc.otr.backup(key);
+
+ disReady();
+ });
+ } else {
+ disReady();
+ }
+ });
+
+ disReady();
+
+ // Trigger real logout in jsxc.xmpp.disconnected()
+ return false;
+ },
+
+ /**
+ * Triggered if connection is established
+ *
+ * @private
+ */
+ connected: function() {
+
+ jsxc.xmpp.conn.pause();
+
+ var nomJid = Strophe.getBareJidFromJid(jsxc.xmpp.conn.jid).toLowerCase() + '/' + Strophe.getResourceFromJid(jsxc.xmpp.conn.jid);
+
+ // Save sid and jid
+ jsxc.storage.setItem('sid', jsxc.xmpp.conn._proto.sid);
+ jsxc.storage.setItem('jid', nomJid);
+
+ jsxc.storage.setItem('lastActivity', (new Date()).getTime());
+
+ // make shure roster will be reloaded
+ jsxc.storage.removeUserItem('buddylist');
+
+ jsxc.storage.removeUserItem('windowlist');
+ jsxc.storage.removeUserItem('own');
+ jsxc.storage.removeUserItem('avatar', 'own');
+ jsxc.storage.removeUserItem('otrlist');
+
+ if (jsxc.options.loginForm.triggered) {
+ switch (jsxc.options.loginForm.onConnected || 'submit') {
+ case 'submit':
+ jsxc.submitLoginForm();
+ /* falls through */
+ case false:
+ jsxc.xmpp.connectionReady();
+ return;
+ }
+ }
+
+ // start chat
+
+ jsxc.gui.init();
+ $('#jsxc_roster').removeClass('jsxc_noConnection');
+ jsxc.onMaster();
+ jsxc.xmpp.conn.resume();
+ jsxc.gui.dialog.close();
+ $(document).trigger('attached.jsxc');
+ },
+
+ /**
+ * Triggered if connection is attached
+ *
+ * @private
+ */
+ attached: function() {
+
+ jsxc.xmpp.conn.addHandler(jsxc.xmpp.onRosterChanged, 'jabber:iq:roster', 'iq', 'set');
+ jsxc.xmpp.conn.addHandler(jsxc.xmpp.onMessage, null, 'message', 'chat');
+ jsxc.xmpp.conn.addHandler(jsxc.xmpp.onReceived, null, 'message');
+ jsxc.xmpp.conn.addHandler(jsxc.xmpp.onPresence, null, 'presence');
+
+ var caps = jsxc.xmpp.conn.caps;
+ var domain = jsxc.xmpp.conn.domain;
+
+ if (caps && jsxc.options.get('carbons').enable) {
+ var conditionalEnable = function() {
+ if (jsxc.xmpp.conn.caps.hasFeatureByJid(domain, jsxc.CONST.NS.CARBONS)) {
+ jsxc.xmpp.carbons.enable();
+ }
+ };
+
+ if (typeof caps._knownCapabilities[caps._jidVerIndex[domain]] === 'undefined') {
+ var _jidNodeIndex = JSON.parse(localStorage.getItem('strophe.caps._jidNodeIndex')) || {};
+
+ $(document).on('caps.strophe', function onCaps(ev, from) {
+
+ if (from !== domain) {
+ return;
+ }
+
+ conditionalEnable();
+
+ $(document).off('caps.strophe', onCaps);
+ });
+
+ caps._requestCapabilities(jsxc.xmpp.conn.domain, _jidNodeIndex[domain], caps._jidVerIndex[domain]);
+ } else {
+ // We know server caps
+ conditionalEnable();
+ }
+ }
+
+ // Only load roaster if necessary
+ if (!jsxc.restore || !jsxc.storage.getUserItem('buddylist')) {
+ // in order to not overide existing presence information, we send
+ // pres first after roster is ready
+ $(document).one('cloaded.roster.jsxc', jsxc.xmpp.sendPres);
+
+ $('#jsxc_roster > p:first').remove();
+
+ var iq = $iq({
+ type: 'get'
+ }).c('query', {
+ xmlns: 'jabber:iq:roster'
+ });
+
+ jsxc.xmpp.conn.sendIQ(iq, jsxc.xmpp.onRoster);
+ } else {
+ jsxc.xmpp.sendPres();
+ }
+
+ jsxc.xmpp.connectionReady();
+ },
+
+ /**
+ * Triggered if the connection is ready
+ */
+ connectionReady: function() {
+
+ // Load saved unique id
+ jsxc.xmpp.conn._uniqueId = jsxc.storage.getItem('_uniqueId') || new Date().getTime();
+
+ $(document).trigger('connectionReady.jsxc');
+ },
+
+ /**
+ * Sends presence stanza to server.
+ */
+ sendPres: function() {
+ // disco stuff
+ if (jsxc.xmpp.conn.disco) {
+ jsxc.xmpp.conn.disco.addIdentity('client', 'web', 'JSXC');
+ jsxc.xmpp.conn.disco.addFeature(Strophe.NS.DISCO_INFO);
+ jsxc.xmpp.conn.disco.addFeature(Strophe.NS.RECEIPTS);
+ }
+
+ // create presence stanza
+ var pres = $pres();
+
+ if (jsxc.xmpp.conn.caps) {
+ // attach caps
+ pres.c('c', jsxc.xmpp.conn.caps.generateCapsAttrs()).up();
+ }
+
+ var presState = jsxc.storage.getUserItem('presence') || 'online';
+ if (presState !== 'online') {
+ pres.c('show').t(presState).up();
+ }
+
+ var priority = jsxc.options.get('priority');
+ if (priority && typeof priority[presState] !== 'undefined' && parseInt(priority[presState]) !== 0) {
+ pres.c('priority').t(priority[presState]).up();
+ }
+
+ jsxc.debug('Send presence', pres.toString());
+ jsxc.xmpp.conn.send(pres);
+ },
+
+ /**
+ * Triggered if lost connection
+ *
+ * @private
+ */
+ disconnected: function() {
+ jsxc.debug('disconnected');
+
+ jsxc.storage.removeItem('sid');
+ jsxc.storage.removeItem('rid');
+ jsxc.storage.removeItem('lastActivity');
+ jsxc.storage.removeItem('hidden');
+ jsxc.storage.removeUserItem('avatar', 'own');
+ jsxc.storage.removeUserItem('otrlist');
+
+ $(document).off('connected.jsxc', jsxc.xmpp.connected);
+ $(document).off('attached.jsxc', jsxc.xmpp.attached);
+ $(document).off('disconnected.jsxc', jsxc.xmpp.disconnected);
+ $(document).off('ridChange', jsxc.xmpp.onRidChange);
+ $(document).off('connfail.jsxc', jsxc.xmpp.onConnfail);
+ $(document).off('authfail.jsxc', jsxc.xmpp.onAuthFail);
+
+ jsxc.xmpp.conn = null;
+
+ $('#jsxc_windowList').remove();
+
+ if (jsxc.triggeredFromElement) {
+ $(document).trigger('toggle.roster.jsxc', [ 'hidden', 0 ]);
+ $('#jsxc_roster').remove();
+
+ if (jsxc.triggeredFromLogout) {
+ window.location = jsxc.options.logoutElement.attr('href');
+ }
+ } else {
+ jsxc.gui.roster.noConnection();
+ }
+
+ window.clearInterval(jsxc.keepalive);
+ },
+
+ /**
+ * Triggered on connection fault
+ *
+ * @param {String} condition information why we lost the connection
+ * @private
+ */
+ onConnfail: function(ev, condition) {
+ jsxc.debug('XMPP connection failed: ' + condition);
+
+ if (jsxc.options.loginForm.triggered) {
+ jsxc.submitLoginForm();
+ }
+ },
+
+ /**
+ * Triggered on auth fail.
+ *
+ * @private
+ */
+ onAuthFail: function() {
+ if (jsxc.options.loginForm.triggered) {
+ switch (jsxc.options.loginForm.onAuthFail || 'ask') {
+ case 'ask':
+ jsxc.gui.showAuthFail();
+ break;
+ case 'submit':
+ jsxc.submitLoginForm();
+ break;
+ }
+ }
+
+ if (jsxc.triggeredFromBox) {
+ jsxc.gui.showAuthFail();
+ }
+ },
+
+ /**
+ * Triggered on initial roster load
+ *
+ * @param {dom} iq
+ * @private
+ */
+ onRoster: function(iq) {
+ /*
+ * &lt;iq from='' type='get' id=''> &lt;query xmlns='jabber:iq:roster'> &lt;item
+ * jid='' name='' subscription='' /> ... &lt;/query> &lt;/iq>
+ */
+
+ jsxc.debug('Load roster', iq);
+
+ var buddies = [];
+
+ $(iq).find('item').each(function() {
+ var jid = $(this).attr('jid');
+ var name = $(this).attr('name') || jid;
+ var bid = jsxc.jidToBid(jid);
+ var sub = $(this).attr('subscription');
+
+ buddies.push(bid);
+
+ jsxc.storage.removeUserItem('res', bid);
+
+ jsxc.storage.saveBuddy(bid, {
+ jid: jid,
+ name: name,
+ status: 0,
+ sub: sub,
+ res: []
+ });
+
+ jsxc.gui.roster.add(bid);
+ });
+
+ if (buddies.length === 0) {
+ jsxc.gui.roster.empty();
+ }
+
+ jsxc.storage.setUserItem('buddylist', buddies);
+
+ jsxc.debug('Roster loaded');
+ $(document).trigger('cloaded.roster.jsxc');
+ },
+
+ /**
+ * Triggerd on roster changes
+ *
+ * @param {dom} iq
+ * @returns {Boolean} True to preserve handler
+ * @private
+ */
+ onRosterChanged: function(iq) {
+ /*
+ * &lt;iq from='' type='set' id=''> &lt;query xmlns='jabber:iq:roster'> &lt;item
+ * jid='' name='' subscription='' /> &lt;/query> &lt;/iq>
+ */
+
+ jsxc.debug('onRosterChanged', iq);
+
+ $(iq).find('item').each(function() {
+ var jid = $(this).attr('jid');
+ var name = $(this).attr('name') || jid;
+ var bid = jsxc.jidToBid(jid);
+ var sub = $(this).attr('subscription');
+ // var ask = $(this).attr('ask');
+
+ if (sub === 'remove') {
+ jsxc.gui.roster.purge(bid);
+ } else {
+ var bl = jsxc.storage.getUserItem('buddylist');
+
+ if (bl.indexOf(bid) &lt; 0) {
+ bl.push(bid); // (INFO) push returns the new length
+ jsxc.storage.setUserItem('buddylist', bl);
+ }
+
+ var temp = jsxc.storage.saveBuddy(bid, {
+ jid: jid,
+ name: name,
+ sub: sub
+ });
+
+ if (temp === 'updated') {
+
+ jsxc.gui.update(bid);
+ jsxc.gui.roster.reorder(bid);
+ } else {
+ jsxc.gui.roster.add(bid);
+ }
+ }
+
+ // Remove pending friendship request from notice list
+ if (sub === 'from' || sub === 'both') {
+ var notices = jsxc.storage.getUserItem('notices');
+ var noticeKey = null, notice;
+
+ for (noticeKey in notices) {
+ notice = notices[noticeKey];
+
+ if (notice.fnName === 'gui.showApproveDialog' && notice.fnParams[0] === jid) {
+ jsxc.debug('Remove notice with key ' + noticeKey);
+
+ jsxc.notice.remove(noticeKey);
+ }
+ }
+ }
+ });
+
+ if (!jsxc.storage.getUserItem('buddylist') || jsxc.storage.getUserItem('buddylist').length === 0) {
+ jsxc.gui.roster.empty();
+ } else {
+ $('#jsxc_roster > p:first').remove();
+ }
+
+ // preserve handler
+ return true;
+ },
+
+ /**
+ * Triggered on incoming presence stanzas
+ *
+ * @param {dom} presence
+ * @private
+ */
+ onPresence: function(presence) {
+ /*
+ * &lt;presence xmlns='jabber:client' type='unavailable' from='' to=''/>
+ *
+ * &lt;presence xmlns='jabber:client' from='' to=''> &lt;priority>5&lt;/priority>
+ * &lt;c xmlns='http://jabber.org/protocol/caps'
+ * node='http://psi-im.org/caps' ver='caps-b75d8d2b25' ext='ca cs
+ * ep-notify-2 html'/> &lt;/presence>
+ *
+ * &lt;presence xmlns='jabber:client' from='' to=''> &lt;show>chat&lt;/show>
+ * &lt;status>&lt;/status> &lt;priority>5&lt;/priority> &lt;c
+ * xmlns='http://jabber.org/protocol/caps' node='http://psi-im.org/caps'
+ * ver='caps-b75d8d2b25' ext='ca cs ep-notify-2 html'/> &lt;/presence>
+ */
+ jsxc.debug('onPresence', presence);
+
+ var ptype = $(presence).attr('type');
+ var from = $(presence).attr('from');
+ var jid = Strophe.getBareJidFromJid(from).toLowerCase();
+ var r = Strophe.getResourceFromJid(from);
+ var bid = jsxc.jidToBid(jid);
+ var data = jsxc.storage.getUserItem('buddy', bid);
+ var res = jsxc.storage.getUserItem('res', bid) || {};
+ var status = null;
+ var xVCard = $(presence).find('x[xmlns="vcard-temp:x:update"]');
+
+ if (jid === Strophe.getBareJidFromJid(jsxc.storage.getItem("jid"))) {
+ return true;
+ }
+
+ if (ptype === 'error') {
+ $(document).trigger('error.presence.jsxc', [ from, presence ]);
+
+ jsxc.error('[XMPP] ' + $(presence).attr('code'));
+ return true;
+ }
+
+ // incoming friendship request
+ if (ptype === 'subscribe') {
+ jsxc.storage.setUserItem('friendReq', {
+ jid: jid,
+ approve: -1
+ });
+ jsxc.notice.add($.t('Friendship_request'), $.t('from') + ' ' + jid, 'gui.showApproveDialog', [ jid ]);
+
+ return true;
+ } else if (ptype === 'unavailable' || ptype === 'unsubscribed') {
+ status = jsxc.CONST.STATUS.indexOf('offline');
+ } else {
+ var show = $(presence).find('show').text();
+ if (show === '') {
+ status = jsxc.CONST.STATUS.indexOf('online');
+ } else {
+ status = jsxc.CONST.STATUS.indexOf(show);
+ }
+ }
+
+ if (status === 0) {
+ delete res[r];
+ } else {
+ res[r] = status;
+ }
+
+ var maxVal = [];
+ var max = 0, prop = null;
+ for (prop in res) {
+ if (res.hasOwnProperty(prop)) {
+ if (max &lt;= res[prop]) {
+ if (max !== res[prop]) {
+ maxVal = [];
+ max = res[prop];
+ }
+ maxVal.push(prop);
+ }
+ }
+ }
+
+ if (data.status === 0 && max > 0) {
+ // buddy has come online
+ jsxc.notification.notify({
+ title: data.name,
+ msg: $.t('has_come_online'),
+ source: bid
+ });
+ }
+
+ data.status = max;
+ data.res = maxVal;
+ data.jid = jid;
+
+ // Looking for avatar
+ if (xVCard.length > 0) {
+ var photo = xVCard.find('photo');
+
+ if (photo.length > 0 && photo.text() !== data.avatar) {
+ jsxc.storage.removeUserItem('avatar', data.avatar);
+ data.avatar = photo.text();
+ }
+ }
+
+ // Reset jid
+ if (jsxc.gui.window.get(bid).length > 0) {
+ jsxc.gui.window.get(bid).data('jid', jid);
+ }
+
+ jsxc.storage.setUserItem('buddy', bid, data);
+ jsxc.storage.setUserItem('res', bid, res);
+
+ jsxc.debug('Presence (' + from + '): ' + status);
+
+ jsxc.gui.update(bid);
+ jsxc.gui.roster.reorder(bid);
+
+ $(document).trigger('presence.jsxc', [ from, status, presence ]);
+
+ // preserve handler
+ return true;
+ },
+
+ /**
+ * Triggered on incoming message stanzas
+ *
+ * @param {dom} presence
+ * @returns {Boolean}
+ * @private
+ */
+ onMessage: function(stanza) {
+
+ var forwarded = $(stanza).find('forwarded[xmlns="' + jsxc.CONST.NS.FORWARD + '"]');
+ var message, carbon;
+
+ if (forwarded.length > 0) {
+ message = forwarded.find('> message');
+ forwarded = true;
+ carbon = $(stanza).find('> [xmlns="' + jsxc.CONST.NS.CARBONS + '"]');
+
+ if (carbon.length === 0) {
+ carbon = false;
+ }
+
+ jsxc.debug('Incoming forwarded message', message);
+ } else {
+ message = stanza;
+ forwarded = false;
+ carbon = false;
+
+ jsxc.debug('Incoming message', message);
+ }
+
+ var body = $(message).find('body:first').text();
+
+ if (!body || (body.match(/\?OTR/i) && forwarded)) {
+ return true;
+ }
+
+ var type = $(message).attr('type');
+ var from = $(message).attr('from');
+ var mid = $(message).attr('id');
+ var bid;
+
+ var delay = $(message).find('delay[xmlns="urn:xmpp:delay"]');
+
+ var stamp = (delay.length > 0) ? new Date(delay.attr('stamp')) : new Date();
+ stamp = stamp.getTime();
+
+ if (carbon) {
+ var direction = (carbon.prop("tagName") === 'sent') ? 'out' : 'in';
+ bid = jsxc.jidToBid((direction === 'out') ? $(message).attr('to') : from);
+
+ jsxc.gui.window.postMessage(bid, direction, body, false, forwarded, stamp);
+
+ return true;
+
+ } else if (forwarded) {
+ // Someone forwarded a message to us
+
+ body = from + ' ' + $.t('to') + ' ' + $(stanza).attr('to') + '"' + body + '"';
+
+ from = $(stanza).attr('from');
+ }
+
+ var jid = Strophe.getBareJidFromJid(from);
+ bid = jsxc.jidToBid(jid);
+ var data = jsxc.storage.getUserItem('buddy', bid);
+ var request = $(message).find("request[xmlns='urn:xmpp:receipts']");
+
+ if (data === null) {
+ // jid not in roster
+
+ var chat = jsxc.storage.getUserItem('chat', bid) || [];
+
+ if (chat.length === 0) {
+ jsxc.notice.add($.t('Unknown_sender'), $.t('You_received_a_message_from_an_unknown_sender') + ' (' + bid + ').', 'gui.showUnknownSender', [ bid ]);
+ }
+
+ var msg = jsxc.removeHTML(body);
+ msg = jsxc.escapeHTML(msg);
+
+ jsxc.storage.saveMessage(bid, 'in', msg, false, forwarded, stamp);
+
+ return true;
+ }
+
+ var win = jsxc.gui.window.init(bid);
+
+ // If we now the full jid, we use it
+ if (type === 'chat') {
+ win.data('jid', from);
+ jsxc.storage.updateUserItem('buddy', bid, {
+ jid: from
+ });
+ }
+
+ $(document).trigger('message.jsxc', [ from, body ]);
+
+ // create related otr object
+ if (jsxc.master && !jsxc.otr.objects[bid]) {
+ jsxc.otr.create(bid);
+ }
+
+ if (!forwarded && mid !== null && request.length && data !== null && (data.sub === 'both' || data.sub === 'from') && type === 'chat') {
+ // Send received according to XEP-0184
+ jsxc.xmpp.conn.send($msg({
+ to: from
+ }).c('received', {
+ xmlns: 'urn:xmpp:receipts',
+ id: mid
+ }));
+ }
+
+ if (jsxc.otr.objects.hasOwnProperty(bid)) {
+ jsxc.otr.objects[bid].receiveMsg(body, {
+ stamp: stamp,
+ forwarded: forwarded
+ });
+ } else {
+ jsxc.gui.window.postMessage(bid, 'in', body, false, forwarded, stamp);
+ }
+
+ // preserve handler
+ return true;
+ },
+
+ /**
+ * Triggerd if the rid changed
+ *
+ * @param {event} ev
+ * @param {obejct} data
+ * @private
+ */
+ onRidChange: function(ev, data) {
+ jsxc.storage.setItem('rid', data.rid);
+ },
+
+ /**
+ * response to friendship request
+ *
+ * @param {string} from jid from original friendship req
+ * @param {boolean} approve
+ */
+ resFriendReq: function(from, approve) {
+ if (jsxc.master) {
+ jsxc.xmpp.conn.send($pres({
+ to: from,
+ type: (approve) ? 'subscribed' : 'unsubscribed'
+ }));
+
+ jsxc.storage.removeUserItem('friendReq');
+ jsxc.gui.dialog.close();
+
+ } else {
+ jsxc.storage.updateUserItem('friendReq', 'approve', approve);
+ }
+ },
+
+ /**
+ * Add buddy to my friends
+ *
+ * @param {string} username jid
+ * @param {string} alias
+ */
+ addBuddy: function(username, alias) {
+ var bid = jsxc.jidToBid(username);
+
+ if (jsxc.master) {
+ // add buddy to roster (trigger onRosterChanged)
+ var iq = $iq({
+ type: 'set'
+ }).c('query', {
+ xmlns: 'jabber:iq:roster'
+ }).c('item', {
+ jid: username,
+ name: alias || ''
+ });
+ jsxc.xmpp.conn.sendIQ(iq);
+
+ // send subscription request to buddy (trigger onRosterChanged)
+ jsxc.xmpp.conn.send($pres({
+ to: username,
+ type: 'subscribe'
+ }));
+
+ jsxc.storage.removeUserItem('add_' + bid);
+ } else {
+ jsxc.storage.setUserItem('add_' + bid, {
+ username: username,
+ alias: alias || null
+ });
+ }
+ },
+
+ /**
+ * Remove buddy from my friends
+ *
+ * @param {type} jid
+ */
+ removeBuddy: function(jid) {
+ var bid = jsxc.jidToBid(jid);
+
+ // Shortcut to remove buddy from roster and cancle all subscriptions
+ var iq = $iq({
+ type: 'set'
+ }).c('query', {
+ xmlns: 'jabber:iq:roster'
+ }).c('item', {
+ jid: Strophe.getBareJidFromJid(jid),
+ subscription: 'remove'
+ });
+ jsxc.xmpp.conn.sendIQ(iq);
+
+ jsxc.gui.roster.purge(bid);
+ },
+
+ onReceived: function(message) {
+ var from = $(message).attr('from');
+ var jid = Strophe.getBareJidFromJid(from);
+ var bid = jsxc.jidToBid(jid);
+ var received = $(message).find("received[xmlns='urn:xmpp:receipts']");
+
+ if (received.length) {
+ var receivedId = received.attr('id').replace(/:/, '-');
+ var chat = jsxc.storage.getUserItem('chat', bid);
+ var i;
+
+ for (i = chat.length - 1; i >= 0; i--) {
+ if (chat[i].uid === receivedId) {
+ chat[i].received = true;
+
+ $('#' + receivedId).addClass('jsxc_received');
+
+ jsxc.storage.setUserItem('chat', bid, chat);
+ break;
+ }
+ }
+ }
+
+ return true;
+ },
+
+ /**
+ * Public function to send message.
+ *
+ * @memberOf jsxc.xmpp
+ * @param bid css jid of user
+ * @param msg message
+ * @param uid unique id
+ */
+ sendMessage: function(bid, msg, uid) {
+ if (jsxc.otr.objects.hasOwnProperty(bid)) {
+ jsxc.otr.objects[bid].sendMsg(msg, uid);
+ } else {
+ jsxc.xmpp._sendMessage(jsxc.gui.window.get(bid).data('jid'), msg, uid);
+ }
+ },
+
+ /**
+ * Create message stanza and send it.
+ *
+ * @memberOf jsxc.xmpp
+ * @param jid Jabber id
+ * @param msg Message
+ * @param uid unique id
+ * @private
+ */
+ _sendMessage: function(jid, msg, uid) {
+ var data = jsxc.storage.getUserItem('buddy', jsxc.jidToBid(jid)) || {};
+ var isBar = (Strophe.getBareJidFromJid(jid) === jid);
+ var type = data.type || 'chat';
+
+ var xmlMsg = $msg({
+ to: jid,
+ type: type,
+ id: uid
+ }).c('body').t(msg);
+
+ if (jsxc.xmpp.carbons.enabled && msg.match(/^\?OTR/)) {
+ xmlMsg.up().c("private", {
+ xmlns: jsxc.CONST.NS.CARBONS
+ });
+ }
+
+ if (type === 'chat' && (isBar || jsxc.xmpp.conn.caps.hasFeatureByJid(jid, Strophe.NS.RECEIPTS))) {
+ // Add request according to XEP-0184
+ xmlMsg.up().c('request', {
+ xmlns: 'urn:xmpp:receipts'
+ });
+ }
+
+ jsxc.xmpp.conn.send(xmlMsg);
+ },
+
+ /**
+ * This function loads a vcard.
+ *
+ * @memberOf jsxc.xmpp
+ * @param bid
+ * @param cb
+ * @param error_cb
+ */
+ loadVcard: function(bid, cb, error_cb) {
+ if (jsxc.master) {
+ jsxc.xmpp.conn.vcard.get(cb, bid, error_cb);
+ } else {
+ jsxc.storage.setUserItem('vcard', bid, 'request:' + (new Date()).getTime());
+
+ $(document).one('loaded.vcard.jsxc', function(ev, result) {
+ if (result && result.state === 'success') {
+ cb($(result.data).get(0));
+ } else {
+ error_cb();
+ }
+ });
+ }
+ },
+
+ /**
+ * Retrieves capabilities.
+ *
+ * @memberOf jsxc.xmpp
+ * @param jid
+ * @returns List of known capabilities
+ */
+ getCapabilitiesByJid: function(jid) {
+ if (jsxc.xmpp.conn) {
+ return jsxc.xmpp.conn.caps.getCapabilitiesByJid(jid);
+ }
+
+ var jidVerIndex = JSON.parse(localStorage.getItem('strophe.caps._jidVerIndex')) || {};
+ var knownCapabilities = JSON.parse(localStorage.getItem('strophe.caps._knownCapabilities')) || {};
+
+ if (jidVerIndex[jid]) {
+ return knownCapabilities[jidVerIndex[jid]];
+ }
+
+ return null;
+ }
+};
+
+/**
+ * Handle carbons (XEP-0280);
+ *
+ * @namespace jsxc.xmpp.carbons
+ */
+jsxc.xmpp.carbons = {
+ enabled: false,
+
+ /**
+ * Enable carbons.
+ *
+ * @memberOf jsxc.xmpp.carbons
+ * @param cb callback
+ */
+ enable: function(cb) {
+ var iq = $iq({
+ type: 'set'
+ }).c('enable', {
+ xmlns: jsxc.CONST.NS.CARBONS
+ });
+
+ jsxc.xmpp.conn.sendIQ(iq, function() {
+ jsxc.xmpp.carbons.enabled = true;
+
+ jsxc.debug('Carbons enabled');
+
+ if (cb) {
+ cb.call(this);
+ }
+ }, function(stanza) {
+ jsxc.warn('Could not enable carbons', stanza);
+ });
+ },
+
+ /**
+ * Disable carbons.
+ *
+ * @memberOf jsxc.xmpp.carbons
+ * @param cb callback
+ */
+ disable: function(cb) {
+ var iq = $iq({
+ type: 'set'
+ }).c('disable', {
+ xmlns: jsxc.CONST.NS.CARBONS
+ });
+
+ jsxc.xmpp.conn.sendIQ(iq, function() {
+ jsxc.xmpp.carbons.enabled = false;
+
+ jsxc.debug('Carbons disabled');
+
+ if (cb) {
+ cb.call(this);
+ }
+ }, function(stanza) {
+ jsxc.warn('Could not disable carbons', stanza);
+ });
+ },
+
+ /**
+ * Enable/Disable carbons depending on options key.
+ *
+ * @memberOf jsxc.xmpp.carbons
+ * @param err error message
+ */
+ refresh: function(err) {
+ if (err === false) {
+ return;
+ }
+
+ if (jsxc.options.get('carbons').enable) {
+ return jsxc.xmpp.carbons.enable();
+ }
+
+ return jsxc.xmpp.carbons.disable();
+ }
+};
+</code></pre>
+ </article>
+ </section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html>
diff --git a/doc/jsxc.muc.html b/doc/jsxc.muc.html
new file mode 100644
index 00000000..518852ab
--- /dev/null
+++ b/doc/jsxc.muc.html
@@ -0,0 +1,2948 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>JSDoc: Namespace: muc</title>
+
+ <script src="scripts/prettify/prettify.js"> </script>
+ <script src="scripts/prettify/lang-css.js"> </script>
+ <!--[if lt IE 9]>
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+ <![endif]-->
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
+</head>
+
+<body>
+
+<div id="main">
+
+ <h1 class="page-title">Namespace: muc</h1>
+
+
+
+
+
+<section>
+
+<header>
+ <h2>
+ <span class="ancestors"><a href="jsxc.html">jsxc</a>.</span>
+
+ muc
+ </h2>
+
+</header>
+
+<article>
+ <div class="container-overview">
+
+
+
+
+ <div class="description">Implements Multi-User Chat (XEP-0045).</div>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line20">line 20</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+ </div>
+
+
+
+
+
+
+
+
+
+
+
+
+ <h3 class="subsection-title">Members</h3>
+
+ <dl>
+
+<dt>
+ <h4 class="name" id="conn"><span class="type-signature">&lt;static> </span>conn<span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+ <div class="description">
+ strophe connection
+ </div>
+
+
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line27">line 27</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="CONST"><span class="type-signature">&lt;static> </span>CONST<span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+ <div class="description">
+ some constants
+ </div>
+
+
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line30">line 30</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="onStatus"><span class="type-signature">&lt;static> </span>onStatus<span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+ <div class="description">
+ Handle status codes. Every function gets room jid, nickname, member data and xdata.
+ </div>
+
+
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line763">line 763</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+</dd>
+
+ </dl>
+
+
+
+ <h3 class="subsection-title">Methods</h3>
+
+ <dl>
+
+<dt>
+ <h4 class="name" id="close"><span class="type-signature">&lt;static> </span>close<span class="signature">(room)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Close the given room.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line442">line 442</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="destroy"><span class="type-signature">&lt;static> </span>destroy<span class="signature">(room, handler_cb, error_cb)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Destroy the given room.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>handler_cb</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">function</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Function to handle the successful destruction</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>error_cb</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">function</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Function to handle an error</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line420">line 420</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="emptyMembers"><span class="type-signature">&lt;static> </span>emptyMembers<span class="signature">(room)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Empty member list.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line989">line 989</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="init"><span class="type-signature">&lt;private, static> </span>init<span class="signature">(o)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Initialize muc plugin.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>o</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">object</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Options</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line60">line 60</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="initMenu"><span class="type-signature">&lt;static> </span>initMenu<span class="signature">()</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Add entry to menu.
+ </div>
+
+
+
+
+
+
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line121">line 121</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="initWindow"><span class="type-signature">&lt;private, static> </span>initWindow<span class="signature">(event, win)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Init group chat window.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>event</code></td>
+
+
+ <td class="type">
+
+ </td>
+
+
+
+
+
+ <td class="description last">Event</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>win</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">jQuery</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Window object</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line474">line 474</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="insertMember"><span class="type-signature">&lt;static> </span>insertMember<span class="signature">(room, nickname, memberdata)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Insert member to room member list.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>nickname</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Nickname</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>memberdata</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Member data</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line901">line 901</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="join"><span class="type-signature">&lt;static> </span>join<span class="signature">(room, nickname, <span class="optional">password</span>, <span class="optional">roomName</span>, <span class="optional">subject</span>)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Join the given room.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+ <th>Argument</th>
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+ <td class="attributes">
+
+
+
+
+
+ </td>
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>nickname</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+ <td class="attributes">
+
+
+
+
+
+ </td>
+
+
+
+
+ <td class="description last">Desired nickname</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>password</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+ <td class="attributes">
+
+ &lt;optional><br>
+
+
+
+
+
+ </td>
+
+
+
+
+ <td class="description last">Password</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>roomName</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+ <td class="attributes">
+
+ &lt;optional><br>
+
+
+
+
+
+ </td>
+
+
+
+
+ <td class="description last">Room alias</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>subject</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+ <td class="attributes">
+
+ &lt;optional><br>
+
+
+
+
+
+ </td>
+
+
+
+
+ <td class="description last">Current subject</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line355">line 355</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="leave"><span class="type-signature">&lt;static> </span>leave<span class="signature">(room)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Leave given room.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line376">line 376</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="onAddRoster"><span class="type-signature">&lt;private, static> </span>onAddRoster<span class="signature">(event, room, data, bud)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Prepare group chat roster item.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>event</code></td>
+
+
+ <td class="type">
+
+ </td>
+
+
+
+
+
+ <td class="description last"></td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>data</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">object</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room data</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>bud</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">jQuery</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Roster item</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line1092">line 1092</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="onErrorMessage"><span class="type-signature">&lt;private, static> </span>onErrorMessage<span class="signature">(message)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Handle group chat error message.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>message</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Message stanza</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line1060">line 1060</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="onExited"><span class="type-signature">&lt;private, static> </span>onExited<span class="signature">(room)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Clean up after we exited a room.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line397">line 397</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="onGroupchatMessage"><span class="type-signature">&lt;private, static> </span>onGroupchatMessage<span class="signature">(message)</span><span class="type-signature"> &rarr; {boolean}</span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Handle incoming group chat message.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>message</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Message stanza</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line1005">line 1005</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+ <h5>Returns:</h5>
+
+
+<div class="param-desc">
+ True on success
+</div>
+
+
+
+<dl>
+ <dt>
+ Type
+ </dt>
+ <dd>
+
+<span class="param-type">boolean</span>
+
+
+ </dd>
+</dl>
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="onPresence"><span class="type-signature">&lt;private, static> </span>onPresence<span class="signature">(event, from, status, presence)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Triggered on incoming presence stanzas.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>event</code></td>
+
+
+ <td class="type">
+
+ </td>
+
+
+
+
+
+ <td class="description last"></td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>from</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>status</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">integer</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Online status between 0 and 5</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>presence</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Presence stanza</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line614">line 614</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="onPresenceError"><span class="type-signature">&lt;static> </span>onPresenceError<span class="signature">(event, from, presence)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Handle group chat presence errors.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>event</code></td>
+
+
+ <td class="type">
+
+ </td>
+
+
+
+
+
+ <td class="description last"></td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>from</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>presence</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Presence stanza</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line739">line 739</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+ <h5>Returns:</h5>
+
+
+<div class="param-desc">
+ Returns true on success
+</div>
+
+
+
+<dl>
+ <dt>
+ Type
+ </dt>
+ <dd>
+
+<span class="param-type">Boolean</span>
+
+
+ </dd>
+</dl>
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="postReason"><span class="type-signature">&lt;static> </span>postReason<span class="signature">(room, xdata)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Extract reason from xdata and if available post it to room.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>xdata</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">jQuery</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Xdata</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line875">line 875</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="removeMember"><span class="type-signature">&lt;static> </span>removeMember<span class="signature">(room, nickname)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Remove member from room member list.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>nickname</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Nickname</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line944">line 944</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="scrollMemberListBy"><span class="type-signature">&lt;static> </span>scrollMemberListBy<span class="signature">(room, offset)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Scroll or update member list position.
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>room</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Room jid</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>offset</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">integer</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">=0: update position; >0: Scroll to left; <0: Scroll to right</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line960">line 960</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
+ <h4 class="name" id="showJoinChat"><span class="type-signature">&lt;static> </span>showJoinChat<span class="signature">()</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Open join dialog.
+ </div>
+
+
+
+
+
+
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.muc.js.html">jsxc.lib.muc.js</a>, <a href="jsxc.lib.muc.js.html#line134">line 134</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+ </dl>
+
+
+
+
+
+</article>
+
+</section>
+
+
+
+
+</div>
+
+<nav>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
+</nav>
+
+<br clear="both">
+
+<footer>
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:27 GMT+0200 (CEST)
+</footer>
+
+<script> prettyPrint(); </script>
+<script src="scripts/linenumber.js"> </script>
+</body>
+</html> \ No newline at end of file
diff --git a/doc/jsxc.notification.html b/doc/jsxc.notification.html
index e8ac592f..613ee30e 100644
--- a/doc/jsxc.notification.html
+++ b/doc/jsxc.notification.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5433">line 5433</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line1">line 1</a>
</li></ul></dd>
@@ -134,7 +134,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5441">line 5441</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line9">line 9</a>
</li></ul></dd>
@@ -199,7 +199,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5599">line 5599</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line191">line 191</a>
</li></ul></dd>
@@ -257,8 +257,8 @@
<div class="description">
- Checks if browser has support for notifications and add on chrome to
-the default api.
+ Checks if browser has support for notifications and add on chrome to the
+default api.
</div>
@@ -291,7 +291,7 @@ the default api.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5511">line 5511</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line112">line 112</a>
</li></ul></dd>
@@ -382,7 +382,7 @@ the default api.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5448">line 5448</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line16">line 16</a>
</li></ul></dd>
@@ -500,7 +500,7 @@ the default api.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5658">line 5658</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line250">line 250</a>
</li></ul></dd>
@@ -528,7 +528,7 @@ the default api.
<dt>
- <h4 class="name" id="notify"><span class="type-signature">&lt;static> </span>notify<span class="signature">(title, msg, d, force, soundFile, loop)</span><span class="type-signature"></span></h4>
+ <h4 class="name" id="notify"><span class="type-signature">&lt;static> </span>notify<span class="signature">(title, msg, d, force, soundFile, loop, source)</span><span class="type-signature"></span></h4>
</dt>
@@ -675,6 +675,24 @@ the default api.
</tr>
+
+ <tr>
+
+ <td class="name"><code>source</code></td>
+
+
+ <td class="type">
+
+ </td>
+
+
+
+
+
+ <td class="description last">Bid which triggered this notification</td>
+ </tr>
+
+
</tbody>
</table>
@@ -702,7 +720,7 @@ the default api.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5475">line 5475</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line49">line 49</a>
</li></ul></dd>
@@ -865,7 +883,7 @@ the default api.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5611">line 5611</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line203">line 203</a>
</li></ul></dd>
@@ -935,7 +953,7 @@ messages.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5555">line 5555</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line156">line 156</a>
</li></ul></dd>
@@ -1004,7 +1022,7 @@ messages.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5580">line 5580</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line172">line 172</a>
</li></ul></dd>
@@ -1073,7 +1091,7 @@ messages.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5642">line 5642</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line234">line 234</a>
</li></ul></dd>
@@ -1191,7 +1209,7 @@ messages.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5673">line 5673</a>
+ <a href="jsxc.lib.notification.js.html">jsxc.lib.notification.js</a>, <a href="jsxc.lib.notification.js.html#line265">line 265</a>
</li></ul></dd>
@@ -1232,13 +1250,13 @@ messages.
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:28 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.options.html b/doc/jsxc.options.html
index 87721fad..f8c35502 100644
--- a/doc/jsxc.options.html
+++ b/doc/jsxc.options.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line740">line 740</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line1">line 1</a>
</li></ul></dd>
@@ -134,7 +134,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line748">line 748</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line9">line 9</a>
</li></ul></dd>
@@ -188,7 +188,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line823">line 823</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line84">line 84</a>
</li></ul></dd>
@@ -242,7 +242,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line754">line 754</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line15">line 15</a>
</li></ul></dd>
@@ -296,7 +296,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line820">line 820</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line81">line 81</a>
</li></ul></dd>
@@ -350,7 +350,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line849">line 849</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line110">line 110</a>
</li></ul></dd>
@@ -404,7 +404,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line785">line 785</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line46">line 46</a>
</li></ul></dd>
@@ -458,7 +458,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line838">line 838</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line99">line 99</a>
</li></ul></dd>
@@ -512,7 +512,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line814">line 814</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line75">line 75</a>
</li></ul></dd>
@@ -566,7 +566,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line852">line 852</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line113">line 113</a>
</li></ul></dd>
@@ -620,7 +620,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line829">line 829</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line90">line 90</a>
</li></ul></dd>
@@ -674,7 +674,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line817">line 817</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line78">line 78</a>
</li></ul></dd>
@@ -728,7 +728,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line757">line 757</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line18">line 18</a>
</li></ul></dd>
@@ -782,7 +782,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line832">line 832</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line93">line 93</a>
</li></ul></dd>
@@ -836,7 +836,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line776">line 776</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line37">line 37</a>
</li></ul></dd>
@@ -890,7 +890,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line835">line 835</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line96">line 96</a>
</li></ul></dd>
@@ -944,7 +944,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line826">line 826</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line87">line 87</a>
</li></ul></dd>
@@ -998,7 +998,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line751">line 751</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line12">line 12</a>
</li></ul></dd>
@@ -1052,7 +1052,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line766">line 766</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line27">line 27</a>
</li></ul></dd>
@@ -1163,7 +1163,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line860">line 860</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line121">line 121</a>
</li></ul></dd>
@@ -1233,7 +1233,7 @@ connection is found.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line844">line 844</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line105">line 105</a>
</li></ul></dd>
@@ -1350,7 +1350,7 @@ connection is found.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line195">line 195</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line190">line 190</a>
</li></ul></dd>
@@ -1388,6 +1388,146 @@ connection is found.
<dt>
+ <h4 class="name" id="getUsers"><span class="type-signature">&lt;static> </span>getUsers<span class="signature">(search, cb)</span><span class="type-signature"></span></h4>
+
+
+</dt>
+<dd>
+
+
+ <div class="description">
+ Returns a list of usernames and aliases
+ </div>
+
+
+
+
+
+
+
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>search</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">string</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Search token (start with)</td>
+ </tr>
+
+
+
+ <tr>
+
+ <td class="name"><code>cb</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type"><a href="global.html#getUsers-cb">getUsers-cb</a></span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">Called with list of users</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
+
+
+<dl class="details">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <dt class="tag-source">Source:</dt>
+ <dd class="tag-source"><ul class="dummy"><li>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line155">line 155</a>
+ </li></ul></dd>
+
+
+
+
+
+
+
+</dl>
+
+
+
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+<dt>
<h4 class="name" id="loadSettings"><span class="type-signature">&lt;static> </span>loadSettings<span class="signature">(username, password)</span><span class="type-signature"> &rarr; {object}</span></h4>
@@ -1490,7 +1630,7 @@ connection is found.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line872">line 872</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line133">line 133</a>
</li></ul></dd>
@@ -1624,7 +1764,7 @@ connection is found.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line883">line 883</a>
+ <a href="jsxc.lib.options.js.html">jsxc.lib.options.js</a>, <a href="jsxc.lib.options.js.html#line144">line 144</a>
</li></ul></dd>
@@ -1786,7 +1926,7 @@ connection is found.
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line207">line 207</a>
+ <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line202">line 202</a>
</li></ul></dd>
@@ -1827,13 +1967,13 @@ connection is found.
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:28 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.otr.html b/doc/jsxc.otr.html
index 4f7c7a4c..1d890075 100644
--- a/doc/jsxc.otr.html
+++ b/doc/jsxc.otr.html
@@ -64,7 +64,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4971">line 4971</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line2">line 2</a>
</li></ul></dd>
@@ -132,7 +132,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4976">line 4976</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line7">line 7</a>
</li></ul></dd>
@@ -197,7 +197,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5398">line 5398</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line429">line 429</a>
</li></ul></dd>
@@ -314,7 +314,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5261">line 5261</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line292">line 292</a>
</li></ul></dd>
@@ -431,7 +431,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5024">line 5024</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line55">line 55</a>
</li></ul></dd>
@@ -518,7 +518,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5328">line 5328</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line359">line 359</a>
</li></ul></dd>
@@ -653,7 +653,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5412">line 5412</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line443">line 443</a>
</li></ul></dd>
@@ -770,7 +770,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5230">line 5230</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line261">line 261</a>
</li></ul></dd>
@@ -923,7 +923,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5245">line 5245</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line276">line 276</a>
</li></ul></dd>
@@ -1101,7 +1101,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5173">line 5173</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line204">line 204</a>
</li></ul></dd>
@@ -1376,7 +1376,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4990">line 4990</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line21">line 21</a>
</li></ul></dd>
@@ -1493,7 +1493,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5293">line 5293</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line324">line 324</a>
</li></ul></dd>
@@ -1633,7 +1633,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5010">line 5010</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line41">line 41</a>
</li></ul></dd>
@@ -1824,7 +1824,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5204">line 5204</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line235">line 235</a>
</li></ul></dd>
@@ -1959,7 +1959,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line5216">line 5216</a>
+ <a href="jsxc.lib.otr.js.html">jsxc.lib.otr.js</a>, <a href="jsxc.lib.otr.js.html#line247">line 247</a>
</li></ul></dd>
@@ -2018,13 +2018,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:28 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.storage.html b/doc/jsxc.storage.html
index 6ab85e39..92c692f7 100644
--- a/doc/jsxc.storage.html
+++ b/doc/jsxc.storage.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4370">line 4370</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line3">line 3</a>
</li></ul></dd>
@@ -134,7 +134,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4381">line 4381</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line14">line 14</a>
</li></ul></dd>
@@ -270,7 +270,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4449">line 4449</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line82">line 82</a>
</li></ul></dd>
@@ -383,7 +383,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4390">line 4390</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line23">line 23</a>
</li></ul></dd>
@@ -517,7 +517,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4466">line 4466</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line99">line 99</a>
</li></ul></dd>
@@ -667,7 +667,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4578">line 4578</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line211">line 211</a>
</li></ul></dd>
@@ -901,7 +901,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4628">line 4628</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line261">line 261</a>
</li></ul></dd>
@@ -1064,7 +1064,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4591">line 4591</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line224">line 224</a>
</li></ul></dd>
@@ -1222,7 +1222,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4485">line 4485</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line118">line 118</a>
</li></ul></dd>
@@ -1334,7 +1334,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4503">line 4503</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line136">line 136</a>
</li></ul></dd>
@@ -1464,7 +1464,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4946">line 4946</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line589">line 589</a>
</li></ul></dd>
@@ -1514,7 +1514,7 @@
<dt>
- <h4 class="name" id="saveMessage"><span class="type-signature">&lt;static> </span>saveMessage<span class="signature">(bid, direction, msg, encrypted, forwarded)</span><span class="type-signature"></span></h4>
+ <h4 class="name" id="saveMessage"><span class="type-signature">&lt;static> </span>saveMessage<span class="signature">(bid, direction, msg, encrypted, forwarded, sender)</span><span class="type-signature"></span></h4>
</dt>
@@ -1643,6 +1643,24 @@
</tr>
+
+ <tr>
+
+ <td class="name"><code>sender</code></td>
+
+
+ <td class="type">
+
+ </td>
+
+
+
+
+
+ <td class="description last"></td>
+ </tr>
+
+
</tbody>
</table>
@@ -1670,7 +1688,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4913">line 4913</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line555">line 555</a>
</li></ul></dd>
@@ -1843,7 +1861,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4404">line 4404</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line37">line 37</a>
</li></ul></dd>
@@ -2069,7 +2087,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4525">line 4525</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line158">line 158</a>
</li></ul></dd>
@@ -2264,7 +2282,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4557">line 4557</a>
+ <a href="jsxc.lib.storage.js.html">jsxc.lib.storage.js</a>, <a href="jsxc.lib.storage.js.html#line190">line 190</a>
</li></ul></dd>
@@ -2305,13 +2323,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:28 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.webrtc.html b/doc/jsxc.webrtc.html
index 2c24f227..01516b27 100644
--- a/doc/jsxc.webrtc.html
+++ b/doc/jsxc.webrtc.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line63">line 63</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line59">line 59</a>
</li></ul></dd>
@@ -134,7 +134,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line82">line 82</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line78">line 78</a>
</li></ul></dd>
@@ -188,7 +188,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line88">line 88</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line84">line 84</a>
</li></ul></dd>
@@ -242,7 +242,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line70">line 70</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line66">line 66</a>
</li></ul></dd>
@@ -296,7 +296,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line79">line 79</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line75">line 75</a>
</li></ul></dd>
@@ -350,7 +350,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line73">line 73</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line69">line 69</a>
</li></ul></dd>
@@ -404,7 +404,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line76">line 76</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line72">line 72</a>
</li></ul></dd>
@@ -458,7 +458,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line85">line 85</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line81">line 81</a>
</li></ul></dd>
@@ -566,7 +566,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line193">line 193</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line189">line 189</a>
</li></ul></dd>
@@ -653,7 +653,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line152">line 152</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line148">line 148</a>
</li></ul></dd>
@@ -722,7 +722,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line745">line 745</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line747">line 747</a>
</li></ul></dd>
@@ -791,7 +791,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line96">line 96</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line92">line 92</a>
</li></ul></dd>
@@ -921,7 +921,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line250">line 250</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line246">line 246</a>
</li></ul></dd>
@@ -990,7 +990,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line692">line 692</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line694">line 694</a>
</li></ul></dd>
@@ -1156,7 +1156,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line218">line 218</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line214">line 214</a>
</li></ul></dd>
@@ -1286,7 +1286,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line470">line 470</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line472">line 472</a>
</li></ul></dd>
@@ -1355,7 +1355,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line572">line 572</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line574">line 574</a>
</li></ul></dd>
@@ -1557,7 +1557,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line537">line 537</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line539">line 539</a>
</li></ul></dd>
@@ -1687,7 +1687,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line408">line 408</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line410">line 410</a>
</li></ul></dd>
@@ -1835,7 +1835,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line633">line 633</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line635">line 635</a>
</li></ul></dd>
@@ -1904,7 +1904,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line455">line 455</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line457">line 457</a>
</li></ul></dd>
@@ -2034,7 +2034,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line422">line 422</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line424">line 424</a>
</li></ul></dd>
@@ -2164,7 +2164,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line325">line 325</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line327">line 327</a>
</li></ul></dd>
@@ -2294,7 +2294,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line345">line 345</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line347">line 347</a>
</li></ul></dd>
@@ -2442,7 +2442,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line585">line 585</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line587">line 587</a>
</li></ul></dd>
@@ -2590,7 +2590,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line620">line 620</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line622">line 622</a>
</li></ul></dd>
@@ -2659,7 +2659,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line757">line 757</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line759">line 759</a>
</li></ul></dd>
@@ -2789,7 +2789,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line360">line 360</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line362">line 362</a>
</li></ul></dd>
@@ -2901,7 +2901,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line794">line 794</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line796">line 796</a>
</li></ul></dd>
@@ -3031,7 +3031,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line703">line 703</a>
+ <a href="jsxc.lib.webrtc.js.html">jsxc.lib.webrtc.js</a>, <a href="jsxc.lib.webrtc.js.html#line705">line 705</a>
</li></ul></dd>
@@ -3184,13 +3184,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:28 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.xmpp.carbons.html b/doc/jsxc.xmpp.carbons.html
index 6d354021..e317ed08 100644
--- a/doc/jsxc.xmpp.carbons.html
+++ b/doc/jsxc.xmpp.carbons.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4291">line 4291</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line1034">line 1034</a>
</li></ul></dd>
@@ -184,7 +184,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4331">line 4331</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line1074">line 1074</a>
</li></ul></dd>
@@ -296,7 +296,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4305">line 4305</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line1048">line 1048</a>
</li></ul></dd>
@@ -408,7 +408,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4357">line 4357</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line1100">line 1100</a>
</li></ul></dd>
@@ -449,13 +449,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:15 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:28 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/doc/jsxc.xmpp.html b/doc/jsxc.xmpp.html
index 5e18c5d2..cc5c6e78 100644
--- a/doc/jsxc.xmpp.html
+++ b/doc/jsxc.xmpp.html
@@ -66,7 +66,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3276">line 3276</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line1">line 1</a>
</li></ul></dd>
@@ -141,7 +141,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3284">line 3284</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line9">line 9</a>
</li></ul></dd>
@@ -195,7 +195,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3285">line 3285</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line10">line 10</a>
</li></ul></dd>
@@ -249,7 +249,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3286">line 3286</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line11">line 11</a>
</li></ul></dd>
@@ -393,7 +393,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4217">line 4217</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line960">line 960</a>
</li></ul></dd>
@@ -533,7 +533,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4114">line 4114</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line857">line 857</a>
</li></ul></dd>
@@ -602,7 +602,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3536">line 3536</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line269">line 269</a>
</li></ul></dd>
@@ -671,7 +671,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3490">line 3490</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line223">line 223</a>
</li></ul></dd>
@@ -740,7 +740,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3599">line 3599</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line332">line 332</a>
</li></ul></dd>
@@ -809,7 +809,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3645">line 3645</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line378">line 378</a>
</li></ul></dd>
@@ -921,7 +921,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4275">line 4275</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line1018">line 1018</a>
</li></ul></dd>
@@ -1079,7 +1079,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4252">line 4252</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line995">line 995</a>
</li></ul></dd>
@@ -1107,7 +1107,7 @@
<dt>
- <h4 class="name" id="logout"><span class="type-signature">&lt;static> </span>logout<span class="signature">()</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
+ <h4 class="name" id="logout"><span class="type-signature">&lt;static> </span>logout<span class="signature">(complete)</span><span class="type-signature"> &rarr; {Boolean}</span></h4>
</dt>
@@ -1124,6 +1124,54 @@
+ <h5>Parameters:</h5>
+
+
+<table class="params">
+ <thead>
+ <tr>
+
+ <th>Name</th>
+
+
+ <th>Type</th>
+
+
+
+
+
+ <th class="last">Description</th>
+ </tr>
+ </thead>
+
+ <tbody>
+
+
+ <tr>
+
+ <td class="name"><code>complete</code></td>
+
+
+ <td class="type">
+
+
+<span class="param-type">boolean</span>
+
+
+
+ </td>
+
+
+
+
+
+ <td class="description last">If set to false, roster will not be removed</td>
+ </tr>
+
+
+ </tbody>
+</table>
+
<dl class="details">
@@ -1148,7 +1196,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3424">line 3424</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line157">line 157</a>
</li></ul></dd>
@@ -1235,7 +1283,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3698">line 3698</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line432">line 432</a>
</li></ul></dd>
@@ -1352,7 +1400,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3685">line 3685</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line419">line 419</a>
</li></ul></dd>
@@ -1469,7 +1517,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3959">line 3959</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line702">line 702</a>
</li></ul></dd>
@@ -1604,7 +1652,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3838">line 3838</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line576">line 576</a>
</li></ul></dd>
@@ -1744,7 +1792,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4083">line 4083</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line826">line 826</a>
</li></ul></dd>
@@ -1861,7 +1909,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3717">line 3717</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line455">line 455</a>
</li></ul></dd>
@@ -1978,7 +2026,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3765">line 3765</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line503">line 503</a>
</li></ul></dd>
@@ -2117,7 +2165,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4149">line 4149</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line892">line 892</a>
</li></ul></dd>
@@ -2257,7 +2305,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4093">line 4093</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line836">line 836</a>
</li></ul></dd>
@@ -2405,7 +2453,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line4200">line 4200</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line943">line 943</a>
</li></ul></dd>
@@ -2474,7 +2522,7 @@
<dt class="tag-source">Source:</dt>
<dd class="tag-source"><ul class="dummy"><li>
- <a href="jsxc.lib.js.html">jsxc.lib.js</a>, <a href="jsxc.lib.js.html#line3610">line 3610</a>
+ <a href="jsxc.lib.xmpp.js.html">jsxc.lib.xmpp.js</a>, <a href="jsxc.lib.xmpp.js.html#line343">line 343</a>
</li></ul></dd>
@@ -2515,13 +2563,13 @@
</div>
<nav>
- <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.l10n.html">l10n</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul>
+ <h2><a href="index.html">Index</a></h2><h3>Namespaces</h3><ul><li><a href="jsxc.html">jsxc</a></li><li><a href="jsxc.gui.html">gui</a></li><li><a href="jsxc.gui.dialog.html">dialog</a></li><li><a href="jsxc.gui.queryActions.html">queryActions</a></li><li><a href="jsxc.gui.roster.html">roster</a></li><li><a href="jsxc.gui.template.html">template</a></li><li><a href="jsxc.gui.window.html">window</a></li><li><a href="jsxc.muc.html">muc</a></li><li><a href="jsxc.notification.html">notification</a></li><li><a href="jsxc.options.html">options</a></li><li><a href="jsxc.otr.html">otr</a></li><li><a href="jsxc.storage.html">storage</a></li><li><a href="jsxc.webrtc.html">webrtc</a></li><li><a href="jsxc.xmpp.html">xmpp</a></li><li><a href="jsxc.xmpp.carbons.html">carbons</a></li></ul><h3><a href="global.html">Global</a></h3>
</nav>
<br clear="both">
<footer>
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Wed Feb 25 2015 19:15:14 GMT+0100 (CET)
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.2.2</a> on Fri May 08 2015 13:05:28 GMT+0200 (CEST)
</footer>
<script> prettyPrint(); </script>
diff --git a/package.json b/package.json
index c899b94b..8f883ced 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jsxc",
- "version": "2.0.0-beta2",
+ "version": "2.0.0",
"description": "Real-time chat app",
"homepage": "http://www.jsxc.org/",
"bugs": "https://github.com/jsxc/jsxc/issues",