{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/tmp.JS2R2BwTJs/b1/jsjac_1.3.4+dfsg-3_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/tmp.JS2R2BwTJs/b2/jsjac_1.3.4+dfsg-3_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,2 +1,2 @@\n \n- 8738fa8de934df331ae61912fae39fda 80840 javascript optional libjs-jac_1.3.4+dfsg-3_all.deb\n+ bf165622a3b9b27dc75c29c64b7563e8 92984 javascript optional libjs-jac_1.3.4+dfsg-3_all.deb\n"}, {"source1": "libjs-jac_1.3.4+dfsg-3_all.deb", "source2": "libjs-jac_1.3.4+dfsg-3_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2021-01-04 23:02:43.000000 debian-binary\n--rw-r--r-- 0 0 0 2696 2021-01-04 23:02:43.000000 control.tar.xz\n--rw-r--r-- 0 0 0 77952 2021-01-04 23:02:43.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 2692 2021-01-04 23:02:43.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 90100 2021-01-04 23:02:43.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n drwxr-xr-x 0 root (0) root (0) 0 2021-01-04 23:02:43.000000 ./\n--rw-r--r-- 0 root (0) root (0) 760 2021-01-04 23:02:43.000000 ./control\n+-rw-r--r-- 0 root (0) root (0) 761 2021-01-04 23:02:43.000000 ./control\n -rw-r--r-- 0 root (0) root (0) 6529 2021-01-04 23:02:43.000000 ./md5sums\n"}, {"source1": "./control", "source2": "./control", "unified_diff": "@@ -1,13 +1,13 @@\n Package: libjs-jac\n Source: jsjac\n Version: 1.3.4+dfsg-3\n Architecture: all\n Maintainer: Debian XMPP Maintainers \n-Installed-Size: 984\n+Installed-Size: 1162\n Recommends: javascript-common\n Suggests: ejabberd\n Section: javascript\n Priority: optional\n Homepage: https://github.com/sstrigler/JSJaC\n Description: JavaScript Jabber Client Library\n JSJaC is a jabber client library written in JavaScript to ease implementation\n"}, {"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -76,11 +76,11 @@\n -rw-r--r-- 0 root (0) root (0) 6305 2021-01-04 23:02:43.000000 ./usr/share/doc/libjs-jac/doc/overview-tree.html\n -rw-r--r-- 0 root (0) root (0) 660 2021-01-04 23:02:43.000000 ./usr/share/doc/libjs-jac/doc/overview-xmlextras.js.html\n -rw-r--r-- 0 root (0) root (0) 1583 2021-01-04 23:02:43.000000 ./usr/share/doc/libjs-jac/doc/stylesheet.css\n drwxr-xr-x 0 root (0) root (0) 0 2011-03-14 00:20:43.000000 ./usr/share/doc/libjs-jac/examples/\n -rw-r--r-- 0 root (0) root (0) 9874 2011-03-14 00:20:43.000000 ./usr/share/doc/libjs-jac/examples/simpleclient.html\n drwxr-xr-x 0 root (0) root (0) 0 2021-01-04 23:02:43.000000 ./usr/share/javascript/\n drwxr-xr-x 0 root (0) root (0) 0 2021-01-04 23:02:43.000000 ./usr/share/javascript/jsjac/\n--rw-r--r-- 0 root (0) root (0) 1338 2021-01-04 23:02:43.000000 ./usr/share/javascript/jsjac/jsjac.min.js\n--rw-r--r-- 0 root (0) root (0) 164096 2021-01-04 23:02:43.000000 ./usr/share/javascript/jsjac/jsjac.uncompressed.js\n+-rw-r--r-- 0 root (0) root (0) 68937 2021-01-04 23:02:43.000000 ./usr/share/javascript/jsjac/jsjac.min.js\n+-rw-r--r-- 0 root (0) root (0) 279313 2021-01-04 23:02:43.000000 ./usr/share/javascript/jsjac/jsjac.uncompressed.js\n lrwxrwxrwx 0 root (0) root (0) 0 2021-01-04 23:02:43.000000 ./usr/share/javascript/jsjac/jsjac.js -> jsjac.uncompressed.js\n lrwxrwxrwx 0 root (0) root (0) 0 2021-01-04 23:02:43.000000 ./usr/share/javascript/jsjac/jsjac.packed.js -> jsjac.min.js\n"}, {"source1": "./usr/share/doc/libjs-jac/doc/Date.html", "source2": "./usr/share/doc/libjs-jac/doc/Date.html", "unified_diff": "@@ -362,10 +362,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/Document.html", "source2": "./usr/share/doc/libjs-jac/doc/Document.html", "unified_diff": "@@ -200,10 +200,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/GLOBALS.html", "source2": "./usr/share/doc/libjs-jac/doc/GLOBALS.html", "unified_diff": "@@ -1609,10 +1609,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCConnection.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCConnection.html", "unified_diff": "@@ -1054,10 +1054,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCConsoleLogger.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCConsoleLogger.html", "unified_diff": "@@ -448,10 +448,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCCookie.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCCookie.html", "unified_diff": "@@ -911,10 +911,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCCookieException.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCCookieException.html", "unified_diff": "@@ -308,10 +308,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCHttpBindingConnection.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCHttpBindingConnection.html", "unified_diff": "@@ -416,10 +416,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCHttpPollingConnection.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCHttpPollingConnection.html", "unified_diff": "@@ -350,10 +350,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCIQ.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCIQ.html", "unified_diff": "@@ -542,10 +542,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCJID.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCJID.html", "unified_diff": "@@ -747,10 +747,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCJIDInvalidException.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCJIDInvalidException.html", "unified_diff": "@@ -309,10 +309,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCJSON.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCJSON.html", "unified_diff": "@@ -330,10 +330,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCKeys.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCKeys.html", "unified_diff": "@@ -444,10 +444,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCMessage.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCMessage.html", "unified_diff": "@@ -579,10 +579,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCPacket.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCPacket.html", "unified_diff": "@@ -79,15 +79,15 @@\n \n \n \n
\n
\n Direct Known Subclasses: \n
\n- JSJaCMessage, JSJaCPresence, JSJaCIQ\n+ JSJaCMessage, JSJaCIQ, JSJaCPresence\n
\n
\n \n \n \n
\n
\n@@ -1332,10 +1332,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/JSJaCPresence.html", "source2": "./usr/share/doc/libjs-jac/doc/JSJaCPresence.html", "unified_diff": "@@ -639,10 +639,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/Node.html", "source2": "./usr/share/doc/libjs-jac/doc/Node.html", "unified_diff": "@@ -200,10 +200,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/Number.html", "source2": "./usr/share/doc/libjs-jac/doc/Number.html", "unified_diff": "@@ -309,10 +309,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/STANZA_ERROR.html", "source2": "./usr/share/doc/libjs-jac/doc/STANZA_ERROR.html", "unified_diff": "@@ -314,10 +314,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/String.html", "source2": "./usr/share/doc/libjs-jac/doc/String.html", "unified_diff": "@@ -265,10 +265,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/XMLDocument.html", "source2": "./usr/share/doc/libjs-jac/doc/XMLDocument.html", "unified_diff": "@@ -200,10 +200,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/help-doc.html", "source2": "./usr/share/doc/libjs-jac/doc/help-doc.html", "unified_diff": "@@ -151,10 +151,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/index-all.html", "source2": "./usr/share/doc/libjs-jac/doc/index-all.html", "unified_diff": "@@ -1379,10 +1379,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaC.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaC.js.html", "unified_diff": "@@ -76,16 +76,16 @@\n \n \n

Summary

\n

\n \t\n \t\tMagic dependency loading. Taken from script.aculo.us\n and modified to break it.\n-

Author: Stefan Strigler steve@zeank.in-berlin.de \n-
Version: $Revision$

\n+

Version: $Revision$

Author: Stefan Strigler steve@zeank.in-berlin.de \n+
\n \t\n

\n \n
\n \n \n \n@@ -200,10 +200,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCBuilder.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCBuilder.js.html", "unified_diff": "@@ -277,10 +277,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCConfig.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCConfig.js.html", "unified_diff": "@@ -172,10 +172,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCConnection.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCConnection.js.html", "unified_diff": "@@ -1454,10 +1454,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCConsoleLogger.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCConsoleLogger.js.html", "unified_diff": "@@ -239,10 +239,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCConstants.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCConstants.js.html", "unified_diff": "@@ -259,10 +259,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCCookie.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCCookie.js.html", "unified_diff": "@@ -392,10 +392,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCError.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCError.js.html", "unified_diff": "@@ -161,10 +161,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCHttpBindingConnection.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCHttpBindingConnection.js.html", "unified_diff": "@@ -695,10 +695,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCHttpPollingConnection.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCHttpPollingConnection.js.html", "unified_diff": "@@ -498,10 +498,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCJID.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCJID.js.html", "unified_diff": "@@ -76,16 +76,16 @@\n \n \n

Summary

\n

\n \t\n \t\tThis file contains all things that make life easier when\n dealing with JIDs\n-

Author: Stefan Strigler\n-
Version: $Revision$

\n+

Version: $Revision$

Author: Stefan Strigler\n+
\n \t\n

\n \n
\n \n \n \n@@ -370,10 +370,10 @@\n
\n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCJSON.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCJSON.js.html", "unified_diff": "@@ -295,10 +295,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCKeys.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCKeys.js.html", "unified_diff": "@@ -229,10 +229,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCPacket.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-JSJaCPacket.js.html", "unified_diff": "@@ -908,10 +908,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-crypt.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-crypt.js.html", "unified_diff": "@@ -76,16 +76,16 @@\n \n \n

Summary

\n

\n \t\n \t\tCollection of MD5 and SHA1 hashing and encoding\n methods.\n-

Version: $Revision$

Author: Stefan Strigler steve@zeank.in-berlin.de\n-
\n+

Author: Stefan Strigler steve@zeank.in-berlin.de\n+
Version: $Revision$

\n \t\n

\n \n
\n \n \n \n@@ -1523,10 +1523,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-header.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-header.js.html", "unified_diff": "@@ -155,10 +155,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-jsextras.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-jsextras.js.html", "unified_diff": "@@ -239,10 +239,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary-xmlextras.js.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary-xmlextras.js.html", "unified_diff": "@@ -78,16 +78,16 @@\n

Summary

\n

\n \t\n \t\tWrapper to make working with XmlHttpRequest and the\n DOM more convenient (cross browser compliance).\n this code is taken from\n http://webfx.eae.net/dhtml/xmlextras/xmlextras.html\n-

Version: $Revision$

Author: Stefan Strigler steve@zeank.in-berlin.de\n-
\n+

Author: Stefan Strigler steve@zeank.in-berlin.de\n+
Version: $Revision$

\n \t\n

\n \n
\n \n \n \n@@ -383,10 +383,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-summary.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-summary.html", "unified_diff": "@@ -258,10 +258,10 @@\n \n \n \n
\n \n \n \n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\n \n \n"}, {"source1": "./usr/share/doc/libjs-jac/doc/overview-tree.html", "source2": "./usr/share/doc/libjs-jac/doc/overview-tree.html", "unified_diff": "@@ -133,10 +133,10 @@\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n-
Documentation generated by JSDoc on Mon Apr 17 17:01:47 2023
\r\n+
Documentation generated by JSDoc on Wed Mar 16 12:40:04 2022
\r\n \r\n \r\n"}, {"source1": "./usr/share/javascript/jsjac/jsjac.min.js", "source2": "./usr/share/javascript/jsjac/jsjac.min.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -55,8 +55,2972 @@\n return a\n };\n Number.max = function(a, b) {\n return (a > b) ? a : b\n };\n Number.min = function(a, b) {\n return (a < b) ? a : b\n+};\n+var hexcase = 0;\n+var b64pad = \"=\";\n+var chrsz = 8;\n+\n+function hex_sha1(a) {\n+ return binb2hex(core_sha1(str2binb(a), a.length * chrsz))\n+}\n+\n+function b64_sha1(a) {\n+ return binb2b64(core_sha1(str2binb(a), a.length * chrsz))\n+}\n+\n+function str_sha1(a) {\n+ return binb2str(core_sha1(str2binb(a), a.length * chrsz))\n+}\n+\n+function hex_hmac_sha1(a, b) {\n+ return binb2hex(core_hmac_sha1(a, b))\n+}\n+\n+function b64_hmac_sha1(a, b) {\n+ return binb2b64(core_hmac_sha1(a, b))\n+}\n+\n+function str_hmac_sha1(a, b) {\n+ return binb2str(core_hmac_sha1(a, b))\n+}\n+\n+function sha1_vm_test() {\n+ return hex_sha1(\"abc\") == \"a9993e364706816aba3e25717850c26c9cd0d89d\"\n+}\n+\n+function core_sha1(v, o) {\n+ v[o >> 5] |= 128 << (24 - o % 32);\n+ v[((o + 64 >> 9) << 4) + 15] = o;\n+ var y = Array(80);\n+ var u = 1732584193;\n+ var s = -271733879;\n+ var r = -1732584194;\n+ var q = 271733878;\n+ var p = -1009589776;\n+ for (var l = 0; l < v.length; l += 16) {\n+ var n = u;\n+ var m = s;\n+ var k = r;\n+ var h = q;\n+ var f = p;\n+ for (var g = 0; g < 80; g++) {\n+ if (g < 16) {\n+ y[g] = v[l + g]\n+ } else {\n+ y[g] = rol(y[g - 3] ^ y[g - 8] ^ y[g - 14] ^ y[g - 16], 1)\n+ }\n+ var z = safe_add(safe_add(rol(u, 5), sha1_ft(g, s, r, q)), safe_add(safe_add(p, y[g]), sha1_kt(g)));\n+ p = q;\n+ q = r;\n+ r = rol(s, 30);\n+ s = u;\n+ u = z\n+ }\n+ u = safe_add(u, n);\n+ s = safe_add(s, m);\n+ r = safe_add(r, k);\n+ q = safe_add(q, h);\n+ p = safe_add(p, f)\n+ }\n+ return Array(u, s, r, q, p)\n+}\n+\n+function sha1_ft(e, a, g, f) {\n+ if (e < 20) {\n+ return (a & g) | ((~a) & f)\n+ }\n+ if (e < 40) {\n+ return a ^ g ^ f\n+ }\n+ if (e < 60) {\n+ return (a & g) | (a & f) | (g & f)\n+ }\n+ return a ^ g ^ f\n+}\n+\n+function sha1_kt(a) {\n+ return (a < 20) ? 1518500249 : (a < 40) ? 1859775393 : (a < 60) ? -1894007588 : -899497514\n+}\n+\n+function core_hmac_sha1(c, f) {\n+ var e = str2binb(c);\n+ if (e.length > 16) {\n+ e = core_sha1(e, c.length * chrsz)\n+ }\n+ var a = Array(16),\n+ d = Array(16);\n+ for (var b = 0; b < 16; b++) {\n+ a[b] = e[b] ^ 909522486;\n+ d[b] = e[b] ^ 1549556828\n+ }\n+ var g = core_sha1(a.concat(str2binb(f)), 512 + f.length * chrsz);\n+ return core_sha1(d.concat(g), 512 + 160)\n+}\n+\n+function rol(a, b) {\n+ return (a << b) | (a >>> (32 - b))\n+}\n+\n+function str2binb(d) {\n+ var c = Array();\n+ var a = (1 << chrsz) - 1;\n+ for (var b = 0; b < d.length * chrsz; b += chrsz) {\n+ c[b >> 5] |= (d.charCodeAt(b / chrsz) & a) << (32 - chrsz - b % 32)\n+ }\n+ return c\n+}\n+\n+function binb2str(c) {\n+ var d = \"\";\n+ var a = (1 << chrsz) - 1;\n+ for (var b = 0; b < c.length * 32; b += chrsz) {\n+ d += String.fromCharCode((c[b >> 5] >>> (32 - chrsz - b % 32)) & a)\n+ }\n+ return d\n+}\n+\n+function binb2hex(c) {\n+ var b = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\";\n+ var d = \"\";\n+ for (var a = 0; a < c.length * 4; a++) {\n+ d += b.charAt((c[a >> 2] >> ((3 - a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((3 - a % 4) * 8)) & 15)\n+ }\n+ return d\n+}\n+\n+function binb2b64(d) {\n+ var c = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n+ var f = \"\";\n+ for (var b = 0; b < d.length * 4; b += 3) {\n+ var e = (((d[b >> 2] >> 8 * (3 - b % 4)) & 255) << 16) | (((d[b + 1 >> 2] >> 8 * (3 - (b + 1) % 4)) & 255) << 8) | ((d[b + 2 >> 2] >> 8 * (3 - (b + 2) % 4)) & 255);\n+ for (var a = 0; a < 4; a++) {\n+ if (b * 8 + a * 6 > d.length * 32) {\n+ f += b64pad\n+ } else {\n+ f += c.charAt((e >> 6 * (3 - a)) & 63)\n+ }\n+ }\n+ }\n+ return f.replace(/AAA\\=(\\=*?)$/, \"$1\")\n+}\n+\n+function hex_md5(a) {\n+ return binl2hex(core_md5(str2binl(a), a.length * chrsz))\n+}\n+\n+function b64_md5(a) {\n+ return binl2b64(core_md5(str2binl(a), a.length * chrsz))\n+}\n+\n+function str_md5(a) {\n+ return binl2str(core_md5(str2binl(a), a.length * chrsz))\n+}\n+\n+function hex_hmac_md5(a, b) {\n+ return binl2hex(core_hmac_md5(a, b))\n+}\n+\n+function b64_hmac_md5(a, b) {\n+ return binl2b64(core_hmac_md5(a, b))\n+}\n+\n+function str_hmac_md5(a, b) {\n+ return binl2str(core_hmac_md5(a, b))\n+}\n+\n+function md5_vm_test() {\n+ return hex_md5(\"abc\") == \"900150983cd24fb0d6963f7d28e17f72\"\n+}\n+\n+function core_md5(p, k) {\n+ p[k >> 5] |= 128 << ((k) % 32);\n+ p[(((k + 64) >>> 9) << 4) + 14] = k;\n+ var o = 1732584193;\n+ var n = -271733879;\n+ var m = -1732584194;\n+ var l = 271733878;\n+ for (var g = 0; g < p.length; g += 16) {\n+ var j = o;\n+ var h = n;\n+ var f = m;\n+ var e = l;\n+ o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936);\n+ l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586);\n+ m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819);\n+ n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330);\n+ o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897);\n+ l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426);\n+ m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341);\n+ n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983);\n+ o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416);\n+ l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417);\n+ m = md5_ff(m, l, o, n, p[g + 10], 17, -42063);\n+ n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162);\n+ o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682);\n+ l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101);\n+ m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290);\n+ n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329);\n+ o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510);\n+ l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632);\n+ m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713);\n+ n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302);\n+ o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691);\n+ l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083);\n+ m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335);\n+ n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848);\n+ o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438);\n+ l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690);\n+ m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961);\n+ n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501);\n+ o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467);\n+ l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784);\n+ m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473);\n+ n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734);\n+ o = md5_hh(o, n, m, l, p[g + 5], 4, -378558);\n+ l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463);\n+ m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562);\n+ n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556);\n+ o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060);\n+ l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353);\n+ m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632);\n+ n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640);\n+ o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174);\n+ l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222);\n+ m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979);\n+ n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189);\n+ o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487);\n+ l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835);\n+ m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520);\n+ n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651);\n+ o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844);\n+ l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415);\n+ m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905);\n+ n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055);\n+ o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571);\n+ l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606);\n+ m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523);\n+ n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799);\n+ o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359);\n+ l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744);\n+ m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380);\n+ n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649);\n+ o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070);\n+ l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379);\n+ m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259);\n+ n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551);\n+ o = safe_add(o, j);\n+ n = safe_add(n, h);\n+ m = safe_add(m, f);\n+ l = safe_add(l, e)\n+ }\n+ return Array(o, n, m, l)\n+}\n+\n+function md5_cmn(h, e, d, c, g, f) {\n+ return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)\n+}\n+\n+function md5_ff(g, f, k, j, e, i, h) {\n+ return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h)\n+}\n+\n+function md5_gg(g, f, k, j, e, i, h) {\n+ return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h)\n+}\n+\n+function md5_hh(g, f, k, j, e, i, h) {\n+ return md5_cmn(f ^ k ^ j, g, f, e, i, h)\n+}\n+\n+function md5_ii(g, f, k, j, e, i, h) {\n+ return md5_cmn(k ^ (f | (~j)), g, f, e, i, h)\n+}\n+\n+function core_hmac_md5(c, f) {\n+ var e = str2binl(c);\n+ if (e.length > 16) {\n+ e = core_md5(e, c.length * chrsz)\n+ }\n+ var a = Array(16),\n+ d = Array(16);\n+ for (var b = 0; b < 16; b++) {\n+ a[b] = e[b] ^ 909522486;\n+ d[b] = e[b] ^ 1549556828\n+ }\n+ var g = core_md5(a.concat(str2binl(f)), 512 + f.length * chrsz);\n+ return core_md5(d.concat(g), 512 + 128)\n+}\n+\n+function safe_add(a, d) {\n+ var c = (a & 65535) + (d & 65535);\n+ var b = (a >> 16) + (d >> 16) + (c >> 16);\n+ return (b << 16) | (c & 65535)\n+}\n+\n+function bit_rol(a, b) {\n+ return (a << b) | (a >>> (32 - b))\n+}\n+\n+function str2binl(d) {\n+ var c = Array();\n+ var a = (1 << chrsz) - 1;\n+ for (var b = 0; b < d.length * chrsz; b += chrsz) {\n+ c[b >> 5] |= (d.charCodeAt(b / chrsz) & a) << (b % 32)\n+ }\n+ return c\n+}\n+\n+function binl2str(c) {\n+ var d = \"\";\n+ var a = (1 << chrsz) - 1;\n+ for (var b = 0; b < c.length * 32; b += chrsz) {\n+ d += String.fromCharCode((c[b >> 5] >>> (b % 32)) & a)\n+ }\n+ return d\n+}\n+\n+function binl2hex(c) {\n+ var b = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\";\n+ var d = \"\";\n+ for (var a = 0; a < c.length * 4; a++) {\n+ d += b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15)\n+ }\n+ return d\n+}\n+\n+function binl2b64(d) {\n+ var c = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n+ var f = \"\";\n+ for (var b = 0; b < d.length * 4; b += 3) {\n+ var e = (((d[b >> 2] >> 8 * (b % 4)) & 255) << 16) | (((d[b + 1 >> 2] >> 8 * ((b + 1) % 4)) & 255) << 8) | ((d[b + 2 >> 2] >> 8 * ((b + 2) % 4)) & 255);\n+ for (var a = 0; a < 4; a++) {\n+ if (b * 8 + a * 6 > d.length * 32) {\n+ f += b64pad\n+ } else {\n+ f += c.charAt((e >> 6 * (3 - a)) & 63)\n+ }\n+ }\n+ }\n+ return f\n+}\n+\n+function utf8t2d(a) {\n+ a = a.replace(/\\r\\n/g, \"\\n\");\n+ var b = new Array;\n+ var g = String.fromCharCode(237);\n+ if (g.charCodeAt(0) < 0) {\n+ for (var f = 0; f < a.length; f++) {\n+ var e = a.charCodeAt(f);\n+ if (e > 0) {\n+ b[b.length] = e\n+ } else {\n+ b[b.length] = (((256 + e) >> 6) | 192);\n+ b[b.length] = (((256 + e) & 63) | 128)\n+ }\n+ }\n+ } else {\n+ for (var f = 0; f < a.length; f++) {\n+ var e = a.charCodeAt(f);\n+ if (e < 128) {\n+ b[b.length] = e\n+ } else {\n+ if ((e > 127) && (e < 2048)) {\n+ b[b.length] = ((e >> 6) | 192);\n+ b[b.length] = ((e & 63) | 128)\n+ } else {\n+ b[b.length] = ((e >> 12) | 224);\n+ b[b.length] = (((e >> 6) & 63) | 128);\n+ b[b.length] = ((e & 63) | 128)\n+ }\n+ }\n+ }\n+ }\n+ return b\n+}\n+\n+function utf8d2t(c) {\n+ var b = new Array;\n+ var a = 0;\n+ while (a < c.length) {\n+ if (c[a] < 128) {\n+ b[b.length] = String.fromCharCode(c[a]);\n+ a++\n+ } else {\n+ if ((c[a] > 191) && (c[a] < 224)) {\n+ b[b.length] = String.fromCharCode(((c[a] & 31) << 6) | (c[a + 1] & 63));\n+ a += 2\n+ } else {\n+ b[b.length] = String.fromCharCode(((c[a] & 15) << 12) | ((c[a + 1] & 63) << 6) | (c[a + 2] & 63));\n+ a += 3\n+ }\n+ }\n+ }\n+ return b.join(\"\")\n+}\n+\n+function b64arrays() {\n+ var b = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n+ b64 = new Array();\n+ f64 = new Array();\n+ for (var a = 0; a < b.length; a++) {\n+ b64[a] = b.charAt(a);\n+ f64[b.charAt(a)] = a\n+ }\n+}\n+\n+function b64d2t(f) {\n+ var e = new Array;\n+ var c = 0;\n+ var a = f.length;\n+ if ((a % 3) == 1) {\n+ f[f.length] = 0;\n+ f[f.length] = 0\n+ }\n+ if ((a % 3) == 2) {\n+ f[f.length] = 0\n+ }\n+ while (c < f.length) {\n+ e[e.length] = b64[f[c] >> 2];\n+ e[e.length] = b64[((f[c] & 3) << 4) | (f[c + 1] >> 4)];\n+ e[e.length] = b64[((f[c + 1] & 15) << 2) | (f[c + 2] >> 6)];\n+ e[e.length] = b64[f[c + 2] & 63];\n+ c += 3\n+ }\n+ if ((a % 3) == 1) {\n+ e[e.length - 1] = e[e.length - 2] = \"=\"\n+ }\n+ if ((a % 3) == 2) {\n+ e[e.length - 1] = \"=\"\n+ }\n+ var b = e.join(\"\");\n+ return b\n+}\n+\n+function b64t2d(b) {\n+ var c = new Array;\n+ var a = 0;\n+ b = b.replace(/\\n|\\r/g, \"\");\n+ b = b.replace(/=/g, \"\");\n+ while (a < b.length) {\n+ c[c.length] = (f64[b.charAt(a)] << 2) | (f64[b.charAt(a + 1)] >> 4);\n+ c[c.length] = (((f64[b.charAt(a + 1)] & 15) << 4) | (f64[b.charAt(a + 2)] >> 2));\n+ c[c.length] = (((f64[b.charAt(a + 2)] & 3) << 6) | (f64[b.charAt(a + 3)]));\n+ a += 4\n+ }\n+ if (b.length % 4 == 2) {\n+ c = c.slice(0, c.length - 2)\n+ }\n+ if (b.length % 4 == 3) {\n+ c = c.slice(0, c.length - 1)\n+ }\n+ return c\n+}\n+if (typeof(atob) == \"undefined\" || typeof(btoa) == \"undefined\") {\n+ b64arrays()\n+}\n+if (typeof(atob) == \"undefined\") {\n+ atob = function(a) {\n+ return utf8d2t(b64t2d(a))\n+ }\n+}\n+if (typeof(btoa) == \"undefined\") {\n+ btoa = function(a) {\n+ return b64d2t(utf8t2d(a))\n+ }\n+}\n+\n+function cnonce(b) {\n+ var c = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n+ var d = \"\";\n+ for (var a = 0; a < b; a++) {\n+ d += c.charAt(Math.round(Math.random(new Date().getTime()) * (c.length - 1)))\n+ }\n+ return d\n+}\n+\n+function JSJaCJSON() {}\n+JSJaCJSON.toString = function(c) {\n+ var a = {\n+ \"\\b\": \"\\\\b\",\n+ \"\\t\": \"\\\\t\",\n+ \"\\n\": \"\\\\n\",\n+ \"\\f\": \"\\\\f\",\n+ \"\\r\": \"\\\\r\",\n+ '\"': '\\\\\"',\n+ \"\\\\\": \"\\\\\\\\\"\n+ },\n+ b = {\n+ array: function(g) {\n+ var j = [\"[\"],\n+ d, n, m, h = g.length,\n+ k;\n+ for (m = 0; m < h; m += 1) {\n+ k = g[m];\n+ n = b[typeof k];\n+ if (n) {\n+ try {\n+ k = n(k);\n+ if (typeof k == \"string\") {\n+ if (d) {\n+ j[j.length] = \",\"\n+ }\n+ j[j.length] = k;\n+ d = true\n+ }\n+ } catch (o) {}\n+ }\n+ }\n+ j[j.length] = \"]\";\n+ return j.join(\"\")\n+ },\n+ \"boolean\": function(d) {\n+ return String(d)\n+ },\n+ \"null\": function(d) {\n+ return \"null\"\n+ },\n+ number: function(d) {\n+ return isFinite(d) ? String(d) : \"null\"\n+ },\n+ object: function(g) {\n+ if (g) {\n+ if (g instanceof Array) {\n+ return b.array(g)\n+ }\n+ var h = [\"{\"],\n+ d, l, k, j;\n+ for (k in g) {\n+ if (g.hasOwnProperty(k)) {\n+ j = g[k];\n+ l = b[typeof j];\n+ if (l) {\n+ try {\n+ j = l(j);\n+ if (typeof j == \"string\") {\n+ if (d) {\n+ h[h.length] = \",\"\n+ }\n+ h.push(b.string(k), \":\", j);\n+ d = true\n+ }\n+ } catch (m) {}\n+ }\n+ }\n+ }\n+ h[h.length] = \"}\";\n+ return h.join(\"\")\n+ }\n+ return \"null\"\n+ },\n+ string: function(d) {\n+ if (/[\"\\\\\\x00-\\x1f]/.test(d)) {\n+ d = d.replace(/([\\x00-\\x1f\\\\\"])/g, function(f, e) {\n+ var g = a[e];\n+ if (g) {\n+ return g\n+ }\n+ g = e.charCodeAt();\n+ return \"\\\\u00\" + Math.floor(g / 16).toString(16) + (g % 16).toString(16)\n+ })\n+ }\n+ return '\"' + d + '\"'\n+ }\n+ };\n+ switch (typeof(c)) {\n+ case \"object\":\n+ return b.object(c);\n+ case \"array\":\n+ return b.array(c)\n+ }\n+};\n+JSJaCJSON.parse = function(str) {\n+ try {\n+ return !(/[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]/.test(str.replace(/\"(\\\\.|[^\"\\\\])*\"/g, \"\"))) && eval(\"(\" + str + \")\")\n+ } catch (e) {\n+ return false\n+ }\n+};\n+\n+function XmlHttp() {}\n+XmlHttp.create = function() {\n+ try {\n+ if (window.XMLHttpRequest) {\n+ var b = new XMLHttpRequest();\n+ if (b.readyState == null) {\n+ b.readyState = 1;\n+ b.addEventListener(\"load\", function() {\n+ b.readyState = 4;\n+ if (typeof b.onreadystatechange == \"function\") {\n+ b.onreadystatechange()\n+ }\n+ }, false)\n+ }\n+ return b\n+ }\n+ if (window.ActiveXObject) {\n+ return new ActiveXObject(XmlHttp.getPrefix() + \".XmlHttp\")\n+ }\n+ } catch (a) {}\n+ throw new Error(\"Your browser does not support XmlHttp objects\")\n+};\n+XmlHttp.getPrefix = function() {\n+ if (XmlHttp.prefix) {\n+ return XmlHttp.prefix\n+ }\n+ var c = [\"MSXML2\", \"Microsoft\", \"MSXML\", \"MSXML3\"];\n+ var d;\n+ for (var b = 0; b < c.length; b++) {\n+ try {\n+ d = new ActiveXObject(c[b] + \".XmlHttp\");\n+ return XmlHttp.prefix = c[b]\n+ } catch (a) {}\n+ }\n+ throw new Error(\"Could not find an installed XML parser\")\n+};\n+\n+function XmlDocument() {}\n+XmlDocument.create = function(b, d) {\n+ b = b || \"foo\";\n+ d = d || \"\";\n+ try {\n+ var e;\n+ if (document.implementation && document.implementation.createDocument) {\n+ e = document.implementation.createDocument(d, b, null);\n+ if (e.readyState == null) {\n+ e.readyState = 1;\n+ e.addEventListener(\"load\", function() {\n+ e.readyState = 4;\n+ if (typeof e.onreadystatechange == \"function\") {\n+ e.onreadystatechange()\n+ }\n+ }, false)\n+ }\n+ } else {\n+ if (window.ActiveXObject) {\n+ e = new ActiveXObject(XmlDocument.getPrefix() + \".DomDocument\")\n+ }\n+ }\n+ if (!e.documentElement || e.documentElement.tagName != b || (e.documentElement.namespaceURI && e.documentElement.namespaceURI != d)) {\n+ try {\n+ if (d != \"\") {\n+ e.appendChild(e.createElement(b)).setAttribute(\"xmlns\", d)\n+ } else {\n+ e.appendChild(e.createElement(b))\n+ }\n+ } catch (a) {\n+ e = document.implementation.createDocument(d, b, null);\n+ if (e.documentElement == null) {\n+ e.appendChild(e.createElement(b))\n+ }\n+ if (d != \"\" && e.documentElement.getAttribute(\"xmlns\") != d) {\n+ e.documentElement.setAttribute(\"xmlns\", d)\n+ }\n+ }\n+ }\n+ return e\n+ } catch (c) {}\n+ throw new Error(\"Your browser does not support XmlDocument objects\")\n+};\n+XmlDocument.getPrefix = function() {\n+ if (XmlDocument.prefix) {\n+ return XmlDocument.prefix\n+ }\n+ var c = [\"MSXML2\", \"Microsoft\", \"MSXML\", \"MSXML3\"];\n+ var d;\n+ for (var b = 0; b < c.length; b++) {\n+ try {\n+ d = new ActiveXObject(c[b] + \".DomDocument\");\n+ return XmlDocument.prefix = c[b]\n+ } catch (a) {}\n+ }\n+ throw new Error(\"Could not find an installed XML parser\")\n+};\n+if (typeof(Document) != \"undefined\" && window.DOMParser) {\n+ Document.prototype.loadXML = function(b) {\n+ var c = (new DOMParser()).parseFromString(b, \"text/xml\");\n+ while (this.hasChildNodes()) {\n+ this.removeChild(this.lastChild)\n+ }\n+ for (var a = 0; a < c.childNodes.length; a++) {\n+ this.appendChild(this.importNode(c.childNodes[a], true))\n+ }\n+ }\n+}\n+if (window.XMLSerializer && window.Node && Node.prototype && Node.prototype.__defineGetter__) {\n+ XMLDocument.prototype.__defineGetter__(\"xml\", function() {\n+ return (new XMLSerializer()).serializeToString(this)\n+ });\n+ Document.prototype.__defineGetter__(\"xml\", function() {\n+ return (new XMLSerializer()).serializeToString(this)\n+ });\n+ Node.prototype.__defineGetter__(\"xml\", function() {\n+ return (new XMLSerializer()).serializeToString(this)\n+ })\n+}\n+var JSJaCBuilder = {\n+ buildNode: function(d, a) {\n+ var b, c = arguments[4];\n+ if (arguments[2]) {\n+ if (JSJaCBuilder._isStringOrNumber(arguments[2]) || (arguments[2] instanceof Array)) {\n+ b = this._createElement(d, a, c);\n+ JSJaCBuilder._children(d, b, arguments[2])\n+ } else {\n+ c = arguments[2][\"xmlns\"] || c;\n+ b = this._createElement(d, a, c);\n+ for (attr in arguments[2]) {\n+ if (arguments[2].hasOwnProperty(attr) && attr != \"xmlns\") {\n+ b.setAttribute(attr, arguments[2][attr])\n+ }\n+ }\n+ }\n+ } else {\n+ b = this._createElement(d, a, c)\n+ }\n+ if (arguments[3]) {\n+ JSJaCBuilder._children(d, b, arguments[3], c)\n+ }\n+ return b\n+ },\n+ _createElement: function(e, a, d) {\n+ try {\n+ if (d) {\n+ return e.createElementNS(d, a)\n+ }\n+ } catch (b) {}\n+ var c = e.createElement(a);\n+ if (d) {\n+ c.setAttribute(\"xmlns\", d)\n+ }\n+ return c\n+ },\n+ _text: function(a, b) {\n+ return a.createTextNode(b)\n+ },\n+ _children: function(h, c, b, d) {\n+ if (typeof b == \"object\") {\n+ for (var a in b) {\n+ if (b.hasOwnProperty(a)) {\n+ var g = b[a];\n+ if (typeof g == \"object\") {\n+ if (g instanceof Array) {\n+ var f = JSJaCBuilder.buildNode(h, g[0], g[1], g[2], d);\n+ c.appendChild(f)\n+ } else {\n+ c.appendChild(g)\n+ }\n+ } else {\n+ if (JSJaCBuilder._isStringOrNumber(g)) {\n+ c.appendChild(JSJaCBuilder._text(h, g))\n+ }\n+ }\n+ }\n+ }\n+ } else {\n+ if (JSJaCBuilder._isStringOrNumber(b)) {\n+ c.appendChild(JSJaCBuilder._text(h, b))\n+ }\n+ }\n+ },\n+ _attributes: function(a) {\n+ var b = [];\n+ for (attribute in a) {\n+ if (a.hasOwnProperty(attribute)) {\n+ b.push(attribute + '=\"' + a[attribute].toString().htmlEnc() + '\"')\n+ }\n+ }\n+ return b.join(\" \")\n+ },\n+ _isStringOrNumber: function(a) {\n+ return (typeof a == \"string\" || typeof a == \"number\")\n+ }\n+};\n+var NS_DISCO_ITEMS = \"http://jabber.org/protocol/disco#items\";\n+var NS_DISCO_INFO = \"http://jabber.org/protocol/disco#info\";\n+var NS_VCARD = \"vcard-temp\";\n+var NS_AUTH = \"jabber:iq:auth\";\n+var NS_AUTH_ERROR = \"jabber:iq:auth:error\";\n+var NS_REGISTER = \"jabber:iq:register\";\n+var NS_SEARCH = \"jabber:iq:search\";\n+var NS_ROSTER = \"jabber:iq:roster\";\n+var NS_PRIVACY = \"jabber:iq:privacy\";\n+var NS_PRIVATE = \"jabber:iq:private\";\n+var NS_VERSION = \"jabber:iq:version\";\n+var NS_TIME = \"jabber:iq:time\";\n+var NS_LAST = \"jabber:iq:last\";\n+var NS_XDATA = \"jabber:x:data\";\n+var NS_IQDATA = \"jabber:iq:data\";\n+var NS_DELAY = \"jabber:x:delay\";\n+var NS_EXPIRE = \"jabber:x:expire\";\n+var NS_EVENT = \"jabber:x:event\";\n+var NS_XCONFERENCE = \"jabber:x:conference\";\n+var NS_STATS = \"http://jabber.org/protocol/stats\";\n+var NS_MUC = \"http://jabber.org/protocol/muc\";\n+var NS_MUC_USER = \"http://jabber.org/protocol/muc#user\";\n+var NS_MUC_ADMIN = \"http://jabber.org/protocol/muc#admin\";\n+var NS_MUC_OWNER = \"http://jabber.org/protocol/muc#owner\";\n+var NS_PUBSUB = \"http://jabber.org/protocol/pubsub\";\n+var NS_PUBSUB_EVENT = \"http://jabber.org/protocol/pubsub#event\";\n+var NS_PUBSUB_OWNER = \"http://jabber.org/protocol/pubsub#owner\";\n+var NS_PUBSUB_NMI = \"http://jabber.org/protocol/pubsub#node-meta-info\";\n+var NS_COMMANDS = \"http://jabber.org/protocol/commands\";\n+var NS_STREAM = \"http://etherx.jabber.org/streams\";\n+var NS_STANZAS = \"urn:ietf:params:xml:ns:xmpp-stanzas\";\n+var NS_STREAMS = \"urn:ietf:params:xml:ns:xmpp-streams\";\n+var NS_TLS = \"urn:ietf:params:xml:ns:xmpp-tls\";\n+var NS_SASL = \"urn:ietf:params:xml:ns:xmpp-sasl\";\n+var NS_SESSION = \"urn:ietf:params:xml:ns:xmpp-session\";\n+var NS_BIND = \"urn:ietf:params:xml:ns:xmpp-bind\";\n+var NS_FEATURE_IQAUTH = \"http://jabber.org/features/iq-auth\";\n+var NS_FEATURE_IQREGISTER = \"http://jabber.org/features/iq-register\";\n+var NS_FEATURE_COMPRESS = \"http://jabber.org/features/compress\";\n+var NS_COMPRESS = \"http://jabber.org/protocol/compress\";\n+\n+function STANZA_ERROR(c, b, a) {\n+ if (window == this) {\n+ return new STANZA_ERROR(c, b, a)\n+ }\n+ this.code = c;\n+ this.type = b;\n+ this.cond = a\n+}\n+var ERR_BAD_REQUEST = STANZA_ERROR(\"400\", \"modify\", \"bad-request\");\n+var ERR_CONFLICT = STANZA_ERROR(\"409\", \"cancel\", \"conflict\");\n+var ERR_FEATURE_NOT_IMPLEMENTED = STANZA_ERROR(\"501\", \"cancel\", \"feature-not-implemented\");\n+var ERR_FORBIDDEN = STANZA_ERROR(\"403\", \"auth\", \"forbidden\");\n+var ERR_GONE = STANZA_ERROR(\"302\", \"modify\", \"gone\");\n+var ERR_INTERNAL_SERVER_ERROR = STANZA_ERROR(\"500\", \"wait\", \"internal-server-error\");\n+var ERR_ITEM_NOT_FOUND = STANZA_ERROR(\"404\", \"cancel\", \"item-not-found\");\n+var ERR_JID_MALFORMED = STANZA_ERROR(\"400\", \"modify\", \"jid-malformed\");\n+var ERR_NOT_ACCEPTABLE = STANZA_ERROR(\"406\", \"modify\", \"not-acceptable\");\n+var ERR_NOT_ALLOWED = STANZA_ERROR(\"405\", \"cancel\", \"not-allowed\");\n+var ERR_NOT_AUTHORIZED = STANZA_ERROR(\"401\", \"auth\", \"not-authorized\");\n+var ERR_PAYMENT_REQUIRED = STANZA_ERROR(\"402\", \"auth\", \"payment-required\");\n+var ERR_RECIPIENT_UNAVAILABLE = STANZA_ERROR(\"404\", \"wait\", \"recipient-unavailable\");\n+var ERR_REDIRECT = STANZA_ERROR(\"302\", \"modify\", \"redirect\");\n+var ERR_REGISTRATION_REQUIRED = STANZA_ERROR(\"407\", \"auth\", \"registration-required\");\n+var ERR_REMOTE_SERVER_NOT_FOUND = STANZA_ERROR(\"404\", \"cancel\", \"remote-server-not-found\");\n+var ERR_REMOTE_SERVER_TIMEOUT = STANZA_ERROR(\"504\", \"wait\", \"remote-server-timeout\");\n+var ERR_RESOURCE_CONSTRAINT = STANZA_ERROR(\"500\", \"wait\", \"resource-constraint\");\n+var ERR_SERVICE_UNAVAILABLE = STANZA_ERROR(\"503\", \"cancel\", \"service-unavailable\");\n+var ERR_SUBSCRIPTION_REQUIRED = STANZA_ERROR(\"407\", \"auth\", \"subscription-required\");\n+var ERR_UNEXPECTED_REQUEST = STANZA_ERROR(\"400\", \"wait\", \"unexpected-request\");\n+\n+function JSJaCConsoleLogger(a) {\n+ this.level = a || 4;\n+ this.start = function() {};\n+ this.log = function(c, d) {\n+ d = d || 0;\n+ if (d > this.level) {\n+ return\n+ }\n+ if (typeof(console) == \"undefined\") {\n+ return\n+ }\n+ try {\n+ switch (d) {\n+ case 0:\n+ console.warn(c);\n+ break;\n+ case 1:\n+ console.error(c);\n+ break;\n+ case 2:\n+ console.info(c);\n+ break;\n+ case 4:\n+ console.debug(c);\n+ break;\n+ default:\n+ console.log(c);\n+ break\n+ }\n+ } catch (b) {\n+ try {\n+ console.log(c)\n+ } catch (b) {}\n+ }\n+ };\n+ this.setLevel = function(b) {\n+ this.level = b;\n+ return this\n+ };\n+ this.getLevel = function() {\n+ return this.level\n+ }\n+}\n+\n+function JSJaCCookie(a, d, b, c, e) {\n+ if (window == this) {\n+ return new JSJaCCookie(a, d, b, c, e)\n+ }\n+ this.name = a;\n+ this.value = d;\n+ this.secs = b;\n+ this.domain = c;\n+ this.path = e;\n+ this.write = function() {\n+ if (this.secs) {\n+ var g = new Date();\n+ g.setTime(g.getTime() + (this.secs * 1000));\n+ var f = \"; expires=\" + g.toGMTString()\n+ } else {\n+ var f = \"\"\n+ }\n+ var h = this.domain ? \"; domain=\" + this.domain : \"\";\n+ var i = this.path ? \"; path=\" + this.path : \"; path=/\";\n+ document.cookie = this.getName() + \"=\" + JSJaCCookie._escape(this.getValue()) + f + h + i\n+ };\n+ this.erase = function() {\n+ var f = new JSJaCCookie(this.getName(), \"\", -1);\n+ f.write()\n+ };\n+ this.getName = function() {\n+ return this.name\n+ };\n+ this.setName = function(f) {\n+ this.name = f;\n+ return this\n+ };\n+ this.getValue = function() {\n+ return this.value\n+ };\n+ this.setValue = function(f) {\n+ this.value = f;\n+ return this\n+ };\n+ this.setDomain = function(f) {\n+ this.domain = f;\n+ return this\n+ };\n+ this.setPath = function(f) {\n+ this.path = f;\n+ return this\n+ }\n+}\n+JSJaCCookie.read = function(b) {\n+ var e = b + \"=\";\n+ var a = document.cookie.split(\";\");\n+ for (var d = 0; d < a.length; d++) {\n+ var f = a[d];\n+ while (f.charAt(0) == \" \") {\n+ f = f.substring(1, f.length)\n+ }\n+ if (f.indexOf(e) == 0) {\n+ return new JSJaCCookie(b, JSJaCCookie._unescape(f.substring(e.length, f.length)))\n+ }\n+ }\n+ throw new JSJaCCookieException(\"Cookie not found\")\n+};\n+JSJaCCookie.get = function(a) {\n+ return JSJaCCookie.read(a).getValue()\n+};\n+JSJaCCookie.remove = function(a) {\n+ JSJaCCookie.read(a).erase()\n+};\n+JSJaCCookie._escape = function(a) {\n+ return a.replace(/;/g, \"%3AB\")\n+};\n+JSJaCCookie._unescape = function(a) {\n+ return a.replace(/%3AB/g, \";\")\n+};\n+\n+function JSJaCCookieException(a) {\n+ this.message = a;\n+ this.name = \"CookieException\"\n+}\n+\n+function JSJaCError(c, b, d) {\n+ var a = XmlDocument.create(\"error\", \"jsjac\");\n+ a.documentElement.setAttribute(\"code\", c);\n+ a.documentElement.setAttribute(\"type\", b);\n+ if (d) {\n+ a.documentElement.appendChild(a.createElement(d)).setAttribute(\"xmlns\", \"urn:ietf:params:xml:ns:xmpp-stanzas\")\n+ }\n+ return a.documentElement\n+}\n+var JSJACJID_FORBIDDEN = ['\"', \" \", \"&\", \"'\", \"/\", \":\", \"<\", \">\", \"@\"];\n+\n+function JSJaCJID(a) {\n+ this._node = \"\";\n+ this._domain = \"\";\n+ this._resource = \"\";\n+ if (typeof(a) == \"string\") {\n+ if (a.indexOf(\"@\") != -1) {\n+ this.setNode(a.substring(0, a.indexOf(\"@\")));\n+ a = a.substring(a.indexOf(\"@\") + 1)\n+ }\n+ if (a.indexOf(\"/\") != -1) {\n+ this.setResource(a.substring(a.indexOf(\"/\") + 1));\n+ a = a.substring(0, a.indexOf(\"/\"))\n+ }\n+ this.setDomain(a)\n+ } else {\n+ this.setNode(a.node);\n+ this.setDomain(a.domain);\n+ this.setResource(a.resource)\n+ }\n+}\n+JSJaCJID.prototype.getNode = function() {\n+ return this._node\n+};\n+JSJaCJID.prototype.getDomain = function() {\n+ return this._domain\n+};\n+JSJaCJID.prototype.getResource = function() {\n+ return this._resource\n+};\n+JSJaCJID.prototype.setNode = function(a) {\n+ JSJaCJID._checkNodeName(a);\n+ this._node = a || \"\";\n+ return this\n+};\n+JSJaCJID.prototype.setDomain = function(a) {\n+ if (!a || a == \"\") {\n+ throw new JSJaCJIDInvalidException(\"domain name missing\")\n+ }\n+ JSJaCJID._checkNodeName(a);\n+ this._domain = a;\n+ return this\n+};\n+JSJaCJID.prototype.setResource = function(a) {\n+ this._resource = a || \"\";\n+ return this\n+};\n+JSJaCJID.prototype.toString = function() {\n+ var a = \"\";\n+ if (this.getNode() && this.getNode() != \"\") {\n+ a = this.getNode() + \"@\"\n+ }\n+ a += this.getDomain();\n+ if (this.getResource() && this.getResource() != \"\") {\n+ a += \"/\" + this.getResource()\n+ }\n+ return a\n+};\n+JSJaCJID.prototype.removeResource = function() {\n+ return this.setResource()\n+};\n+JSJaCJID.prototype.clone = function() {\n+ return new JSJaCJID(this.toString())\n+};\n+JSJaCJID.prototype.isEntity = function(a) {\n+ if (typeof a == \"string\") {\n+ a = (new JSJaCJID(a))\n+ }\n+ a.removeResource();\n+ return (this.clone().removeResource().toString() === a.toString())\n+};\n+JSJaCJID._checkNodeName = function(a) {\n+ if (!a || a == \"\") {\n+ return\n+ }\n+ for (var b = 0; b < JSJACJID_FORBIDDEN.length; b++) {\n+ if (a.indexOf(JSJACJID_FORBIDDEN[b]) != -1) {\n+ throw new JSJaCJIDInvalidException(\"forbidden char in nodename: \" + JSJACJID_FORBIDDEN[b])\n+ }\n+ }\n+};\n+\n+function JSJaCJIDInvalidException(a) {\n+ this.message = a;\n+ this.name = \"JSJaCJIDInvalidException\"\n+}\n+\n+function JSJaCKeys(d, c) {\n+ var a = Math.random();\n+ this._k = new Array();\n+ this._k[0] = a.toString();\n+ if (c) {\n+ this.oDbg = c\n+ } else {\n+ this.oDbg = {};\n+ this.oDbg.log = function() {}\n+ }\n+ if (d) {\n+ for (var b = 1; b < JSJAC_NKEYS; b++) {\n+ this._k[b] = d(this._k[b - 1]);\n+ c.log(b + \": \" + this._k[b], 4)\n+ }\n+ }\n+ this._indexAt = JSJAC_NKEYS - 1;\n+ this.getKey = function() {\n+ return this._k[this._indexAt--]\n+ };\n+ this.lastKey = function() {\n+ return (this._indexAt == 0)\n+ };\n+ this.size = function() {\n+ return this._k.length\n+ };\n+ this._getSuspendVars = function() {\n+ return (\"_k,_indexAt\").split(\",\")\n+ }\n+}\n+var JSJACPACKET_USE_XMLNS = true;\n+\n+function JSJaCPacket(a) {\n+ this.name = a;\n+ if (typeof(JSJACPACKET_USE_XMLNS) != \"undefined\" && JSJACPACKET_USE_XMLNS) {\n+ this.doc = XmlDocument.create(a, \"jabber:client\")\n+ } else {\n+ this.doc = XmlDocument.create(a, \"\")\n+ }\n+}\n+JSJaCPacket.prototype.pType = function() {\n+ return this.name\n+};\n+JSJaCPacket.prototype.getDoc = function() {\n+ return this.doc\n+};\n+JSJaCPacket.prototype.getNode = function() {\n+ if (this.getDoc() && this.getDoc().documentElement) {\n+ return this.getDoc().documentElement\n+ } else {\n+ return null\n+ }\n+};\n+JSJaCPacket.prototype.setTo = function(a) {\n+ if (!a || a == \"\") {\n+ this.getNode().removeAttribute(\"to\")\n+ } else {\n+ if (typeof(a) == \"string\") {\n+ this.getNode().setAttribute(\"to\", a)\n+ } else {\n+ this.getNode().setAttribute(\"to\", a.toString())\n+ }\n+ }\n+ return this\n+};\n+JSJaCPacket.prototype.setFrom = function(a) {\n+ if (!a || a == \"\") {\n+ this.getNode().removeAttribute(\"from\")\n+ } else {\n+ if (typeof(a) == \"string\") {\n+ this.getNode().setAttribute(\"from\", a)\n+ } else {\n+ this.getNode().setAttribute(\"from\", a.toString())\n+ }\n+ }\n+ return this\n+};\n+JSJaCPacket.prototype.setID = function(a) {\n+ if (!a || a == \"\") {\n+ this.getNode().removeAttribute(\"id\")\n+ } else {\n+ this.getNode().setAttribute(\"id\", a)\n+ }\n+ return this\n+};\n+JSJaCPacket.prototype.setType = function(a) {\n+ if (!a || a == \"\") {\n+ this.getNode().removeAttribute(\"type\")\n+ } else {\n+ this.getNode().setAttribute(\"type\", a)\n+ }\n+ return this\n+};\n+JSJaCPacket.prototype.setXMLLang = function(a) {\n+ if (!a || a == \"\") {\n+ this.getNode().removeAttribute(\"xml:lang\")\n+ } else {\n+ this.getNode().setAttribute(\"xml:lang\", a)\n+ }\n+ return this\n+};\n+JSJaCPacket.prototype.getTo = function() {\n+ return this.getNode().getAttribute(\"to\")\n+};\n+JSJaCPacket.prototype.getFrom = function() {\n+ return this.getNode().getAttribute(\"from\")\n+};\n+JSJaCPacket.prototype.getToJID = function() {\n+ return new JSJaCJID(this.getTo())\n+};\n+JSJaCPacket.prototype.getFromJID = function() {\n+ return new JSJaCJID(this.getFrom())\n+};\n+JSJaCPacket.prototype.getID = function() {\n+ return this.getNode().getAttribute(\"id\")\n+};\n+JSJaCPacket.prototype.getType = function() {\n+ return this.getNode().getAttribute(\"type\")\n+};\n+JSJaCPacket.prototype.getXMLLang = function() {\n+ return this.getNode().getAttribute(\"xml:lang\")\n+};\n+JSJaCPacket.prototype.getXMLNS = function() {\n+ return this.getNode().namespaceURI || this.getNode().getAttribute(\"xmlns\")\n+};\n+JSJaCPacket.prototype.getChild = function(b, d) {\n+ if (!this.getNode()) {\n+ return null\n+ }\n+ b = b || \"*\";\n+ d = d || \"*\";\n+ if (this.getNode().getElementsByTagNameNS) {\n+ return this.getNode().getElementsByTagNameNS(d, b).item(0)\n+ }\n+ var a = this.getNode().getElementsByTagName(b);\n+ if (d != \"*\") {\n+ for (var c = 0; c < a.length; c++) {\n+ if (a.item(c).namespaceURI == d || a.item(c).getAttribute(\"xmlns\") == d) {\n+ return a.item(c)\n+ }\n+ }\n+ } else {\n+ return a.item(0)\n+ }\n+ return null\n+};\n+JSJaCPacket.prototype.getChildVal = function(b, d) {\n+ var e = this.getChild(b, d);\n+ var a = \"\";\n+ if (e && e.hasChildNodes()) {\n+ for (var c = 0; c < e.childNodes.length; c++) {\n+ if (e.childNodes.item(c).nodeValue) {\n+ a += e.childNodes.item(c).nodeValue\n+ }\n+ }\n+ }\n+ return a\n+};\n+JSJaCPacket.prototype.clone = function() {\n+ return JSJaCPacket.wrapNode(this.getNode())\n+};\n+JSJaCPacket.prototype.isError = function() {\n+ return (this.getType() == \"error\")\n+};\n+JSJaCPacket.prototype.errorReply = function(a) {\n+ var b = this.clone();\n+ b.setTo(this.getFrom());\n+ b.setFrom();\n+ b.setType(\"error\");\n+ b.appendNode(\"error\", {\n+ code: a.code,\n+ type: a.type\n+ }, [\n+ [a.cond]\n+ ]);\n+ return b\n+};\n+JSJaCPacket.prototype.xml = typeof XMLSerializer != \"undefined\" ? function() {\n+ var a = (new XMLSerializer()).serializeToString(this.getNode());\n+ if (typeof(a) == \"undefined\") {\n+ a = (new XMLSerializer()).serializeToString(this.doc)\n+ }\n+ return a\n+} : function() {\n+ return this.getDoc().xml\n+};\n+JSJaCPacket.prototype._getAttribute = function(a) {\n+ return this.getNode().getAttribute(a)\n+};\n+if (document.ELEMENT_NODE == null) {\n+ document.ELEMENT_NODE = 1;\n+ document.ATTRIBUTE_NODE = 2;\n+ document.TEXT_NODE = 3;\n+ document.CDATA_SECTION_NODE = 4;\n+ document.ENTITY_REFERENCE_NODE = 5;\n+ document.ENTITY_NODE = 6;\n+ document.PROCESSING_INSTRUCTION_NODE = 7;\n+ document.COMMENT_NODE = 8;\n+ document.DOCUMENT_NODE = 9;\n+ document.DOCUMENT_TYPE_NODE = 10;\n+ document.DOCUMENT_FRAGMENT_NODE = 11;\n+ document.NOTATION_NODE = 12\n+}\n+JSJaCPacket.prototype._importNode = function(f, b) {\n+ switch (f.nodeType) {\n+ case document.ELEMENT_NODE:\n+ if (this.getDoc().createElementNS) {\n+ var e = this.getDoc().createElementNS(f.namespaceURI, f.nodeName)\n+ } else {\n+ var e = this.getDoc().createElement(f.nodeName)\n+ }\n+ if (f.attributes && f.attributes.length > 0) {\n+ for (var d = 0, c = f.attributes.length; d < c; d++) {\n+ var a = f.attributes.item(d);\n+ if (a.nodeName == \"xmlns\" && e.getAttribute(\"xmlns\") != null) {\n+ continue\n+ }\n+ if (e.setAttributeNS && a.namespaceURI) {\n+ e.setAttributeNS(a.namespaceURI, a.nodeName, a.nodeValue)\n+ } else {\n+ e.setAttribute(a.nodeName, a.nodeValue)\n+ }\n+ }\n+ }\n+ if (b && f.childNodes && f.childNodes.length > 0) {\n+ for (var d = 0, c = f.childNodes.length; d < c; d++) {\n+ e.appendChild(this._importNode(f.childNodes.item(d), b))\n+ }\n+ }\n+ return e;\n+ break;\n+ case document.TEXT_NODE:\n+ case document.CDATA_SECTION_NODE:\n+ case document.COMMENT_NODE:\n+ return this.getDoc().createTextNode(f.nodeValue);\n+ break\n+ }\n+};\n+JSJaCPacket.prototype._setChildNode = function(g, b) {\n+ var a = this.getChild(g);\n+ var d = this.getDoc().createTextNode(b);\n+ if (a) {\n+ try {\n+ a.replaceChild(d, a.firstChild)\n+ } catch (f) {}\n+ } else {\n+ try {\n+ a = this.getDoc().createElementNS(this.getNode().namespaceURI, g)\n+ } catch (c) {\n+ a = this.getDoc().createElement(g)\n+ }\n+ this.getNode().appendChild(a);\n+ a.appendChild(d)\n+ }\n+ return a\n+};\n+JSJaCPacket.prototype.buildNode = function(a) {\n+ return JSJaCBuilder.buildNode(this.getDoc(), a, arguments[1], arguments[2])\n+};\n+JSJaCPacket.prototype.appendNode = function(a) {\n+ if (typeof a == \"object\") {\n+ return this.getNode().appendChild(a)\n+ } else {\n+ return this.getNode().appendChild(this.buildNode(a, arguments[1], arguments[2], null, this.getNode().namespaceURI))\n+ }\n+};\n+\n+function JSJaCPresence() {\n+ this.base = JSJaCPacket;\n+ this.base(\"presence\")\n+}\n+JSJaCPresence.prototype = new JSJaCPacket;\n+JSJaCPresence.prototype.setStatus = function(a) {\n+ this._setChildNode(\"status\", a);\n+ return this\n+};\n+JSJaCPresence.prototype.setShow = function(a) {\n+ if (a == \"chat\" || a == \"away\" || a == \"xa\" || a == \"dnd\") {\n+ this._setChildNode(\"show\", a)\n+ }\n+ return this\n+};\n+JSJaCPresence.prototype.setPriority = function(a) {\n+ this._setChildNode(\"priority\", a);\n+ return this\n+};\n+JSJaCPresence.prototype.setPresence = function(b, a, c) {\n+ if (b) {\n+ this.setShow(b)\n+ }\n+ if (a) {\n+ this.setStatus(a)\n+ }\n+ if (c) {\n+ this.setPriority(c)\n+ }\n+ return this\n+};\n+JSJaCPresence.prototype.getStatus = function() {\n+ return this.getChildVal(\"status\")\n+};\n+JSJaCPresence.prototype.getShow = function() {\n+ return this.getChildVal(\"show\")\n+};\n+JSJaCPresence.prototype.getPriority = function() {\n+ return this.getChildVal(\"priority\")\n+};\n+\n+function JSJaCIQ() {\n+ this.base = JSJaCPacket;\n+ this.base(\"iq\")\n+}\n+JSJaCIQ.prototype = new JSJaCPacket;\n+JSJaCIQ.prototype.setIQ = function(c, a, b) {\n+ if (c) {\n+ this.setTo(c)\n+ }\n+ if (a) {\n+ this.setType(a)\n+ }\n+ if (b) {\n+ this.setID(b)\n+ }\n+ return this\n+};\n+JSJaCIQ.prototype.setQuery = function(c) {\n+ var a;\n+ try {\n+ a = this.getDoc().createElementNS(c, \"query\")\n+ } catch (b) {\n+ a = this.getDoc().createElement(\"query\");\n+ a.setAttribute(\"xmlns\", c)\n+ }\n+ this.getNode().appendChild(a);\n+ return a\n+};\n+JSJaCIQ.prototype.getQuery = function() {\n+ return this.getNode().getElementsByTagName(\"query\").item(0)\n+};\n+JSJaCIQ.prototype.getQueryXMLNS = function() {\n+ if (this.getQuery()) {\n+ return this.getQuery().namespaceURI || this.getQuery().getAttribute(\"xmlns\")\n+ } else {\n+ return null\n+ }\n+};\n+JSJaCIQ.prototype.reply = function(d) {\n+ var b = this.clone();\n+ b.setTo(this.getFrom());\n+ b.setFrom();\n+ b.setType(\"result\");\n+ if (d) {\n+ if (typeof d == \"string\") {\n+ b.getChild().appendChild(b.getDoc().loadXML(d))\n+ } else {\n+ if (d.constructor == Array) {\n+ var c = b.getChild();\n+ for (var a = 0; a < d.length; a++) {\n+ if (typeof d[a] == \"string\") {\n+ c.appendChild(b.getDoc().loadXML(d[a]))\n+ } else {\n+ if (typeof d[a] == \"object\") {\n+ c.appendChild(d[a])\n+ }\n+ }\n+ }\n+ } else {\n+ if (typeof d == \"object\") {\n+ b.getChild().appendChild(d)\n+ }\n+ }\n+ }\n+ }\n+ return b\n+};\n+\n+function JSJaCMessage() {\n+ this.base = JSJaCPacket;\n+ this.base(\"message\")\n+}\n+JSJaCMessage.prototype = new JSJaCPacket;\n+JSJaCMessage.prototype.setBody = function(a) {\n+ this._setChildNode(\"body\", a);\n+ return this\n+};\n+JSJaCMessage.prototype.setSubject = function(a) {\n+ this._setChildNode(\"subject\", a);\n+ return this\n+};\n+JSJaCMessage.prototype.setThread = function(a) {\n+ this._setChildNode(\"thread\", a);\n+ return this\n+};\n+JSJaCMessage.prototype.getThread = function() {\n+ return this.getChildVal(\"thread\")\n+};\n+JSJaCMessage.prototype.getBody = function() {\n+ return this.getChildVal(\"body\")\n+};\n+JSJaCMessage.prototype.getSubject = function() {\n+ return this.getChildVal(\"subject\")\n+};\n+JSJaCPacket.wrapNode = function(b) {\n+ var a = null;\n+ switch (b.nodeName.toLowerCase()) {\n+ case \"presence\":\n+ a = new JSJaCPresence();\n+ break;\n+ case \"message\":\n+ a = new JSJaCMessage();\n+ break;\n+ case \"iq\":\n+ a = new JSJaCIQ();\n+ break\n+ }\n+ if (a) {\n+ a.getDoc().replaceChild(a._importNode(b, true), a.getNode())\n+ }\n+ return a\n+};\n+\n+function JSJaCConnection(a) {\n+ if (a && a.oDbg && a.oDbg.log) {\n+ this.oDbg = a.oDbg\n+ } else {\n+ this.oDbg = new Object();\n+ this.oDbg.log = function() {}\n+ }\n+ if (a && a.timerval) {\n+ this.setPollInterval(a.timerval)\n+ } else {\n+ this.setPollInterval(JSJAC_TIMERVAL)\n+ }\n+ if (a && a.httpbase) {\n+ this._httpbase = a.httpbase\n+ }\n+ if (a && a.allow_plain) {\n+ this.allow_plain = a.allow_plain\n+ } else {\n+ this.allow_plain = JSJAC_ALLOW_PLAIN\n+ }\n+ if (a && a.cookie_prefix) {\n+ this._cookie_prefix = a.cookie_prefix\n+ } else {\n+ this._cookie_prefix = \"\"\n+ }\n+ this._connected = false;\n+ this._events = new Array();\n+ this._keys = null;\n+ this._ID = 0;\n+ this._inQ = new Array();\n+ this._pQueue = new Array();\n+ this._regIDs = new Array();\n+ this._req = new Array();\n+ this._status = \"intialized\";\n+ this._errcnt = 0;\n+ this._inactivity = JSJAC_INACTIVITY;\n+ this._sendRawCallbacks = new Array()\n+}\n+JSJaCConnection.prototype.connect = function(a) {\n+ this._setStatus(\"connecting\");\n+ this.domain = a.domain || \"localhost\";\n+ this.username = a.username;\n+ this.resource = a.resource;\n+ this.pass = a.pass;\n+ this.register = a.register;\n+ this.authhost = a.authhost || this.domain;\n+ this.authtype = a.authtype || \"sasl\";\n+ if (a.xmllang && a.xmllang != \"\") {\n+ this._xmllang = a.xmllang\n+ }\n+ this.host = a.host || this.domain;\n+ this.port = a.port || 5222;\n+ if (a.secure) {\n+ this.secure = \"true\"\n+ } else {\n+ this.secure = \"false\"\n+ }\n+ if (a.wait) {\n+ this._wait = a.wait\n+ }\n+ this.jid = this.username + \"@\" + this.domain;\n+ this.fulljid = this.jid + \"/\" + this.resource;\n+ this._rid = Math.round(100000.5 + (((900000.49999) - (100000.5)) * Math.random()));\n+ var c = this._getFreeSlot();\n+ this._req[c] = this._setupRequest(true);\n+ var b = this._getInitialRequestString();\n+ this.oDbg.log(b, 4);\n+ this._req[c].r.onreadystatechange = JSJaC.bind(function() {\n+ if (this._req[c].r.readyState == 4) {\n+ this.oDbg.log(\"async recv: \" + this._req[c].r.responseText, 4);\n+ this._handleInitialResponse(c)\n+ }\n+ }, this);\n+ if (typeof(this._req[c].r.onerror) != \"undefined\") {\n+ this._req[c].r.onerror = JSJaC.bind(function(d) {\n+ this.oDbg.log(\"XmlHttpRequest error\", 1);\n+ return false\n+ }, this)\n+ }\n+ this._req[c].r.send(b)\n+};\n+JSJaCConnection.prototype.connected = function() {\n+ return this._connected\n+};\n+JSJaCConnection.prototype.disconnect = function() {\n+ this._setStatus(\"disconnecting\");\n+ if (!this.connected()) {\n+ return\n+ }\n+ this._connected = false;\n+ clearInterval(this._interval);\n+ clearInterval(this._inQto);\n+ if (this._timeout) {\n+ clearTimeout(this._timeout)\n+ }\n+ var b = this._getFreeSlot();\n+ this._req[b] = this._setupRequest(false);\n+ request = this._getRequestString(false, true);\n+ this.oDbg.log(\"Disconnecting: \" + request, 4);\n+ this._req[b].r.send(request);\n+ try {\n+ JSJaCCookie.read(this._cookie_prefix + \"JSJaC_State\").erase()\n+ } catch (a) {}\n+ this.oDbg.log(\"Disconnected: \" + this._req[b].r.responseText, 2);\n+ this._handleEvent(\"ondisconnect\")\n+};\n+JSJaCConnection.prototype.getPollInterval = function() {\n+ return this._timerval\n+};\n+JSJaCConnection.prototype.registerHandler = function(event) {\n+ event = event.toLowerCase();\n+ var eArg = {\n+ handler: arguments[arguments.length - 1],\n+ childName: \"*\",\n+ childNS: \"*\",\n+ type: \"*\"\n+ };\n+ if (arguments.length > 2) {\n+ eArg.childName = arguments[1]\n+ }\n+ if (arguments.length > 3) {\n+ eArg.childNS = arguments[2]\n+ }\n+ if (arguments.length > 4) {\n+ eArg.type = arguments[3]\n+ }\n+ if (!this._events[event]) {\n+ this._events[event] = new Array(eArg)\n+ } else {\n+ this._events[event] = this._events[event].concat(eArg)\n+ }\n+ this._events[event] = this._events[event].sort(function(a, b) {\n+ var aRank = 0;\n+ var bRank = 0;\n+ with(a) {\n+ if (type == \"*\") {\n+ aRank++\n+ }\n+ if (childNS == \"*\") {\n+ aRank++\n+ }\n+ if (childName == \"*\") {\n+ aRank++\n+ }\n+ }\n+ with(b) {\n+ if (type == \"*\") {\n+ bRank++\n+ }\n+ if (childNS == \"*\") {\n+ bRank++\n+ }\n+ if (childName == \"*\") {\n+ bRank++\n+ }\n+ }\n+ if (aRank > bRank) {\n+ return 1\n+ }\n+ if (aRank < bRank) {\n+ return -1\n+ }\n+ return 0\n+ });\n+ this.oDbg.log(\"registered handler for event '\" + event + \"'\", 2)\n+};\n+JSJaCConnection.prototype.unregisterHandler = function(e, d) {\n+ e = e.toLowerCase();\n+ if (!this._events[e]) {\n+ return\n+ }\n+ var a = this._events[e],\n+ c = new Array();\n+ for (var b = 0; b < a.length; b++) {\n+ if (a[b].handler != d) {\n+ c.push(a[b])\n+ }\n+ }\n+ if (a.length != c.length) {\n+ this._events[e] = c;\n+ this.oDbg.log(\"unregistered handler for event '\" + e + \"'\", 2)\n+ }\n+};\n+JSJaCConnection.prototype.registerIQGet = function(a, b, c) {\n+ this.registerHandler(\"iq\", a, b, \"get\", c)\n+};\n+JSJaCConnection.prototype.registerIQSet = function(a, b, c) {\n+ this.registerHandler(\"iq\", a, b, \"set\", c)\n+};\n+JSJaCConnection.prototype.resume = function() {\n+ try {\n+ var a = JSJaCCookie.read(this._cookie_prefix + \"JSJaC_State\").getValue();\n+ this.oDbg.log(\"read cookie: \" + a, 2);\n+ JSJaCCookie.read(this._cookie_prefix + \"JSJaC_State\").erase();\n+ return this.resumeFromData(JSJaCJSON.parse(a))\n+ } catch (b) {}\n+ return false\n+};\n+JSJaCConnection.prototype.resumeFromData = function(c) {\n+ try {\n+ this._setStatus(\"resuming\");\n+ for (var b in c) {\n+ if (c.hasOwnProperty(b)) {\n+ this[b] = c[b]\n+ }\n+ }\n+ if (this._keys) {\n+ this._keys2 = new JSJaCKeys();\n+ var a = this._keys2._getSuspendVars();\n+ for (var b = 0; b < a.length; b++) {\n+ this._keys2[a[b]] = this._keys[a[b]]\n+ }\n+ this._keys = this._keys2\n+ }\n+ if (this._connected) {\n+ this._handleEvent(\"onresume\");\n+ setTimeout(JSJaC.bind(this._resume, this), this.getPollInterval());\n+ this._interval = setInterval(JSJaC.bind(this._checkQueue, this), JSJAC_CHECKQUEUEINTERVAL);\n+ this._inQto = setInterval(JSJaC.bind(this._checkInQ, this), JSJAC_CHECKINQUEUEINTERVAL)\n+ }\n+ return (this._connected === true)\n+ } catch (d) {\n+ if (d.message) {\n+ this.oDbg.log(\"Resume failed: \" + d.message, 1)\n+ } else {\n+ this.oDbg.log(\"Resume failed: \" + d, 1)\n+ }\n+ return false\n+ }\n+};\n+JSJaCConnection.prototype.send = function(d, b, a) {\n+ if (!d || !d.pType) {\n+ this.oDbg.log(\"no packet: \" + d, 1);\n+ return false\n+ }\n+ if (!this.connected()) {\n+ return false\n+ }\n+ if (b) {\n+ if (!d.getID()) {\n+ d.setID(\"JSJaCID_\" + this._ID++)\n+ }\n+ this._registerPID(d.getID(), b, a)\n+ }\n+ try {\n+ this._handleEvent(d.pType() + \"_out\", d);\n+ this._handleEvent(\"packet_out\", d);\n+ this._pQueue = this._pQueue.concat(d.xml())\n+ } catch (c) {\n+ this.oDbg.log(c.toString(), 1);\n+ return false\n+ }\n+ return true\n+};\n+JSJaCConnection.prototype.sendIQ = function(e, c, a) {\n+ if (!e || e.pType() != \"iq\") {\n+ return false\n+ }\n+ c = c || {};\n+ var b = c.error_handler || JSJaC.bind(function(g) {\n+ this.oDbg.log(g.xml(), 1)\n+ }, this);\n+ var d = c.result_handler || JSJaC.bind(function(g) {\n+ this.oDbg.log(g.xml(), 2)\n+ }, this);\n+ var f = function(h, g) {\n+ switch (h.getType()) {\n+ case \"error\":\n+ b(h);\n+ break;\n+ case \"result\":\n+ d(h, g);\n+ break\n+ }\n+ };\n+ return this.send(e, f, a)\n+};\n+JSJaCConnection.prototype.setPollInterval = function(a) {\n+ if (a && !isNaN(a)) {\n+ this._timerval = a\n+ }\n+ return this._timerval\n+};\n+JSJaCConnection.prototype.status = function() {\n+ return this._status\n+};\n+JSJaCConnection.prototype.suspend = function() {\n+ var b = this.suspendToData();\n+ try {\n+ var f = new JSJaCCookie(this._cookie_prefix + \"JSJaC_State\", JSJaCJSON.toString(b));\n+ this.oDbg.log(\"writing cookie: \" + f.getValue() + \"\\n(length:\" + f.getValue().length + \")\", 2);\n+ f.write();\n+ var a = JSJaCCookie.get(this._cookie_prefix + \"JSJaC_State\");\n+ if (f.getValue() != a) {\n+ this.oDbg.log(\"Suspend failed writing cookie.\\nread: \" + a, 1);\n+ f.erase();\n+ return false\n+ }\n+ return true\n+ } catch (d) {\n+ this.oDbg.log(\"Failed creating cookie '\" + this._cookie_prefix + \"JSJaC_State': \" + d.message, 1)\n+ }\n+ return false\n+};\n+JSJaCConnection.prototype.suspendToData = function() {\n+ clearTimeout(this._timeout);\n+ clearInterval(this._interval);\n+ clearInterval(this._inQto);\n+ this._suspend();\n+ var c = (\"_connected,_keys,_ID,_inQ,_pQueue,_regIDs,_errcnt,_inactivity,domain,username,resource,jid,fulljid,_sid,_httpbase,_timerval,_is_polling\").split(\",\");\n+ c = c.concat(this._getSuspendVars());\n+ var e = new Object();\n+ for (var d = 0; d < c.length; d++) {\n+ if (!this[c[d]]) {\n+ continue\n+ }\n+ if (this[c[d]]._getSuspendVars) {\n+ var a = this[c[d]]._getSuspendVars();\n+ var f = new Object();\n+ for (var b = 0; b < a.length; b++) {\n+ f[a[b]] = this[c[d]][a[b]]\n+ }\n+ } else {\n+ var f = this[c[d]]\n+ }\n+ e[c[d]] = f\n+ }\n+ this._connected = false;\n+ this._setStatus(\"suspending\");\n+ return e\n+};\n+JSJaCConnection.prototype._abort = function() {\n+ clearTimeout(this._timeout);\n+ clearInterval(this._inQto);\n+ clearInterval(this._interval);\n+ this._connected = false;\n+ this._setStatus(\"aborted\");\n+ this.oDbg.log(\"Disconnected.\", 1);\n+ this._handleEvent(\"ondisconnect\");\n+ this._handleEvent(\"onerror\", JSJaCError(\"500\", \"cancel\", \"service-unavailable\"))\n+};\n+JSJaCConnection.prototype._checkInQ = function() {\n+ for (var a = 0; a < this._inQ.length && a < 10; a++) {\n+ var b = this._inQ[0];\n+ this._inQ = this._inQ.slice(1, this._inQ.length);\n+ var c = JSJaCPacket.wrapNode(b);\n+ if (!c) {\n+ return\n+ }\n+ this._handleEvent(\"packet_in\", c);\n+ if (c.pType && !this._handlePID(c)) {\n+ this._handleEvent(c.pType() + \"_in\", c);\n+ this._handleEvent(c.pType(), c)\n+ }\n+ }\n+};\n+JSJaCConnection.prototype._checkQueue = function() {\n+ if (this._pQueue.length != 0) {\n+ this._process()\n+ }\n+ return true\n+};\n+JSJaCConnection.prototype._doAuth = function() {\n+ if (this.has_sasl && this.authtype == \"nonsasl\") {\n+ this.oDbg.log(\"Warning: SASL present but not used\", 1)\n+ }\n+ if (!this._doSASLAuth() && !this._doLegacyAuth()) {\n+ this.oDbg.log(\"Auth failed for authtype \" + this.authtype, 1);\n+ this.disconnect();\n+ return false\n+ }\n+ return true\n+};\n+JSJaCConnection.prototype._doInBandReg = function() {\n+ if (this.authtype == \"saslanon\" || this.authtype == \"anonymous\") {\n+ return\n+ }\n+ var a = new JSJaCIQ();\n+ a.setType(\"set\");\n+ a.setID(\"reg1\");\n+ a.appendNode(\"query\", {\n+ xmlns: \"jabber:iq:register\"\n+ }, [\n+ [\"username\", this.username],\n+ [\"password\", this.pass]\n+ ]);\n+ this.send(a, this._doInBandRegDone)\n+};\n+JSJaCConnection.prototype._doInBandRegDone = function(a) {\n+ if (a && a.getType() == \"error\") {\n+ this.oDbg.log(\"registration failed for \" + this.username, 0);\n+ this._handleEvent(\"onerror\", a.getChild(\"error\"));\n+ return\n+ }\n+ this.oDbg.log(this.username + \" registered succesfully\", 0);\n+ this._doAuth()\n+};\n+JSJaCConnection.prototype._doLegacyAuth = function() {\n+ if (this.authtype != \"nonsasl\" && this.authtype != \"anonymous\") {\n+ return false\n+ }\n+ var a = new JSJaCIQ();\n+ a.setIQ(this.server, \"get\", \"auth1\");\n+ a.appendNode(\"query\", {\n+ xmlns: \"jabber:iq:auth\"\n+ }, [\n+ [\"username\", this.username]\n+ ]);\n+ this.send(a, this._doLegacyAuth2);\n+ return true\n+};\n+JSJaCConnection.prototype._doLegacyAuth2 = function(b) {\n+ if (!b || b.getType() != \"result\") {\n+ if (b && b.getType() == \"error\") {\n+ this._handleEvent(\"onerror\", b.getChild(\"error\"))\n+ }\n+ this.disconnect();\n+ return\n+ }\n+ var a = (b.getChild(\"digest\") != null);\n+ var b = new JSJaCIQ();\n+ b.setIQ(this.server, \"set\", \"auth2\");\n+ query = b.appendNode(\"query\", {\n+ xmlns: \"jabber:iq:auth\"\n+ }, [\n+ [\"username\", this.username],\n+ [\"resource\", this.resource]\n+ ]);\n+ if (a) {\n+ query.appendChild(b.buildNode(\"digest\", {\n+ xmlns: \"jabber:iq:auth\"\n+ }, hex_sha1(this.streamid + this.pass)))\n+ } else {\n+ if (this.allow_plain) {\n+ query.appendChild(b.buildNode(\"password\", {\n+ xmlns: \"jabber:iq:auth\"\n+ }, this.pass))\n+ } else {\n+ this.oDbg.log(\"no valid login mechanism found\", 1);\n+ this.disconnect();\n+ return false\n+ }\n+ }\n+ this.send(b, this._doLegacyAuthDone)\n+};\n+JSJaCConnection.prototype._doLegacyAuthDone = function(a) {\n+ if (a.getType() != \"result\") {\n+ if (a.getType() == \"error\") {\n+ this._handleEvent(\"onerror\", a.getChild(\"error\"))\n+ }\n+ this.disconnect()\n+ } else {\n+ this._handleEvent(\"onconnect\")\n+ }\n+};\n+JSJaCConnection.prototype._doSASLAuth = function() {\n+ if (this.authtype == \"nonsasl\" || this.authtype == \"anonymous\") {\n+ return false\n+ }\n+ if (this.authtype == \"saslanon\") {\n+ if (this.mechs.ANONYMOUS) {\n+ this.oDbg.log(\"SASL using mechanism 'ANONYMOUS'\", 2);\n+ return this._sendRaw(\"\", this._doSASLAuthDone)\n+ }\n+ this.oDbg.log(\"SASL ANONYMOUS requested but not supported\", 1)\n+ } else {\n+ if (this.mechs[\"DIGEST-MD5\"]) {\n+ this.oDbg.log(\"SASL using mechanism 'DIGEST-MD5'\", 2);\n+ return this._sendRaw(\"\", this._doSASLAuthDigestMd5S1)\n+ } else {\n+ if (this.allow_plain && this.mechs.PLAIN) {\n+ this.oDbg.log(\"SASL using mechanism 'PLAIN'\", 2);\n+ var a = this.username + \"@\" + this.domain + String.fromCharCode(0) + this.username + String.fromCharCode(0) + this.pass;\n+ this.oDbg.log(\"authenticating with '\" + a + \"'\", 2);\n+ a = btoa(a);\n+ return this._sendRaw(\"\" + a + \"\", this._doSASLAuthDone)\n+ }\n+ }\n+ this.oDbg.log(\"No SASL mechanism applied\", 1);\n+ this.authtype = \"nonsasl\"\n+ }\n+ return false\n+};\n+JSJaCConnection.prototype._doSASLAuthDigestMd5S1 = function(e) {\n+ if (e.nodeName != \"challenge\") {\n+ this.oDbg.log(\"challenge missing\", 1);\n+ this._handleEvent(\"onerror\", JSJaCError(\"401\", \"auth\", \"not-authorized\"));\n+ this.disconnect()\n+ } else {\n+ var d = atob(e.firstChild.nodeValue);\n+ this.oDbg.log(\"got challenge: \" + d, 2);\n+ this._nonce = d.substring(d.indexOf(\"nonce=\") + 7);\n+ this._nonce = this._nonce.substring(0, this._nonce.indexOf('\"'));\n+ this.oDbg.log(\"nonce: \" + this._nonce, 2);\n+ if (this._nonce == \"\" || this._nonce.indexOf('\"') != -1) {\n+ this.oDbg.log(\"nonce not valid, aborting\", 1);\n+ this.disconnect();\n+ return\n+ }\n+ this._digest_uri = \"xmpp/\";\n+ this._digest_uri += this.domain;\n+ this._cnonce = cnonce(14);\n+ this._nc = \"00000001\";\n+ var c = str_md5(this.username + \":\" + this.domain + \":\" + this.pass) + \":\" + this._nonce + \":\" + this._cnonce;\n+ var b = \"AUTHENTICATE:\" + this._digest_uri;\n+ var a = hex_md5(hex_md5(c) + \":\" + this._nonce + \":\" + this._nc + \":\" + this._cnonce + \":auth:\" + hex_md5(b));\n+ var f = 'username=\"' + this.username + '\",realm=\"' + this.domain + '\",nonce=\"' + this._nonce + '\",cnonce=\"' + this._cnonce + '\",nc=\"' + this._nc + '\",qop=auth,digest-uri=\"' + this._digest_uri + '\",response=\"' + a + '\",charset=\"utf-8\"';\n+ this.oDbg.log(\"response: \" + f, 2);\n+ this._sendRaw(\"\" + binb2b64(str2binb(f)) + \"\", this._doSASLAuthDigestMd5S2)\n+ }\n+};\n+JSJaCConnection.prototype._doSASLAuthDigestMd5S2 = function(e) {\n+ if (e.nodeName == \"failure\") {\n+ if (e.xml) {\n+ this.oDbg.log(\"auth error: \" + e.xml, 1)\n+ } else {\n+ this.oDbg.log(\"auth error\", 1)\n+ }\n+ this._handleEvent(\"onerror\", JSJaCError(\"401\", \"auth\", \"not-authorized\"));\n+ this.disconnect();\n+ return\n+ }\n+ var c = atob(e.firstChild.nodeValue);\n+ this.oDbg.log(\"response: \" + c, 2);\n+ var f = c.substring(c.indexOf(\"rspauth=\") + 8);\n+ this.oDbg.log(\"rspauth: \" + f, 2);\n+ var d = str_md5(this.username + \":\" + this.domain + \":\" + this.pass) + \":\" + this._nonce + \":\" + this._cnonce;\n+ var b = \":\" + this._digest_uri;\n+ var a = hex_md5(hex_md5(d) + \":\" + this._nonce + \":\" + this._nc + \":\" + this._cnonce + \":auth:\" + hex_md5(b));\n+ this.oDbg.log(\"rsptest: \" + a, 2);\n+ if (a != f) {\n+ this.oDbg.log(\"SASL Digest-MD5: server repsonse with wrong rspauth\", 1);\n+ this.disconnect();\n+ return\n+ }\n+ if (e.nodeName == \"success\") {\n+ this._reInitStream(this.domain, this._doStreamBind)\n+ } else {\n+ this._sendRaw(\"\", this._doSASLAuthDone)\n+ }\n+};\n+JSJaCConnection.prototype._doSASLAuthDone = function(a) {\n+ if (a.nodeName != \"success\") {\n+ this.oDbg.log(\"auth failed\", 1);\n+ this._handleEvent(\"onerror\", JSJaCError(\"401\", \"auth\", \"not-authorized\"));\n+ this.disconnect()\n+ } else {\n+ this._reInitStream(this.domain, this._doStreamBind)\n+ }\n+};\n+JSJaCConnection.prototype._doStreamBind = function() {\n+ var a = new JSJaCIQ();\n+ a.setIQ(null, \"set\", \"bind_1\");\n+ a.appendNode(\"bind\", {\n+ xmlns: \"urn:ietf:params:xml:ns:xmpp-bind\"\n+ }, [\n+ [\"resource\", this.resource]\n+ ]);\n+ this.oDbg.log(a.xml());\n+ this.send(a, this._doXMPPSess)\n+};\n+JSJaCConnection.prototype._doXMPPSess = function(a) {\n+ if (a.getType() != \"result\" || a.getType() == \"error\") {\n+ this.disconnect();\n+ if (a.getType() == \"error\") {\n+ this._handleEvent(\"onerror\", a.getChild(\"error\"))\n+ }\n+ return\n+ }\n+ this.fulljid = a.getChildVal(\"jid\");\n+ this.jid = this.fulljid.substring(0, this.fulljid.lastIndexOf(\"/\"));\n+ a = new JSJaCIQ();\n+ a.setIQ(this.domain, \"set\", \"sess_1\");\n+ a.appendNode(\"session\", {\n+ xmlns: \"urn:ietf:params:xml:ns:xmpp-session\"\n+ }, []);\n+ this.oDbg.log(a.xml());\n+ this.send(a, this._doXMPPSessDone)\n+};\n+JSJaCConnection.prototype._doXMPPSessDone = function(a) {\n+ if (a.getType() != \"result\" || a.getType() == \"error\") {\n+ this.disconnect();\n+ if (a.getType() == \"error\") {\n+ this._handleEvent(\"onerror\", a.getChild(\"error\"))\n+ }\n+ return\n+ } else {\n+ this._handleEvent(\"onconnect\")\n+ }\n+};\n+JSJaCConnection.prototype._handleEvent = function(d, a) {\n+ d = d.toLowerCase();\n+ this.oDbg.log(\"incoming event '\" + d + \"'\", 3);\n+ if (!this._events[d]) {\n+ return\n+ }\n+ this.oDbg.log(\"handling event '\" + d + \"'\", 2);\n+ for (var b = 0; b < this._events[d].length; b++) {\n+ var c = this._events[d][b];\n+ if (typeof c.handler == \"function\") {\n+ try {\n+ if (a) {\n+ if (a.pType) {\n+ if ((!a.getNode().hasChildNodes() && c.childName != \"*\") || (a.getNode().hasChildNodes() && !a.getChild(c.childName, c.childNS))) {\n+ continue\n+ }\n+ if (c.type != \"*\" && a.getType() != c.type) {\n+ continue\n+ }\n+ this.oDbg.log(c.childName + \"/\" + c.childNS + \"/\" + c.type + \" => match for handler \" + c.handler, 3)\n+ }\n+ if (c.handler(a)) {\n+ break\n+ }\n+ } else {\n+ if (c.handler()) {\n+ break\n+ }\n+ }\n+ } catch (f) {\n+ if (f.fileName && f.lineNumber) {\n+ this.oDbg.log(c.handler + \"\\n>>>\" + f.name + \": \" + f.message + \" in \" + f.fileName + \" line \" + f.lineNumber, 1)\n+ } else {\n+ this.oDbg.log(c.handler + \"\\n>>>\" + f.name + \": \" + f.message, 1)\n+ }\n+ }\n+ }\n+ }\n+};\n+JSJaCConnection.prototype._handlePID = function(d) {\n+ if (!d.getID()) {\n+ return false\n+ }\n+ for (var b in this._regIDs) {\n+ if (this._regIDs.hasOwnProperty(b) && this._regIDs[b] && b == d.getID()) {\n+ var a = d.getID();\n+ this.oDbg.log(\"handling \" + a, 3);\n+ try {\n+ if (this._regIDs[b].cb.call(this, d, this._regIDs[b].arg) === false) {\n+ return false\n+ } else {\n+ this._unregisterPID(a);\n+ return true\n+ }\n+ } catch (c) {\n+ this.oDbg.log(c.name + \": \" + c.message, 1);\n+ this._unregisterPID(a);\n+ return true\n+ }\n+ }\n+ }\n+ return false\n+};\n+JSJaCConnection.prototype._handleResponse = function(d) {\n+ var c = this._parseResponse(d);\n+ if (!c) {\n+ return\n+ }\n+ for (var b = 0; b < c.childNodes.length; b++) {\n+ if (this._sendRawCallbacks.length) {\n+ var a = this._sendRawCallbacks[0];\n+ this._sendRawCallbacks = this._sendRawCallbacks.slice(1, this._sendRawCallbacks.length);\n+ a.fn.call(this, c.childNodes.item(b), a.arg);\n+ continue\n+ }\n+ this._inQ = this._inQ.concat(c.childNodes.item(b))\n+ }\n+};\n+JSJaCConnection.prototype._parseStreamFeatures = function(f) {\n+ if (!f) {\n+ this.oDbg.log(\"nothing to parse ... aborting\", 1);\n+ return false\n+ }\n+ var e;\n+ if (f.getElementsByTagNameNS) {\n+ e = f.getElementsByTagNameNS(\"http://etherx.jabber.org/streams\", \"error\").item(0)\n+ } else {\n+ var g = f.getElementsByTagName(\"error\");\n+ for (var b = 0; b < g.length; b++) {\n+ if (g.item(b).namespaceURI == \"http://etherx.jabber.org/streams\") {\n+ e = g.item(b);\n+ break\n+ }\n+ }\n+ }\n+ if (e) {\n+ this._setStatus(\"internal_server_error\");\n+ clearTimeout(this._timeout);\n+ clearInterval(this._interval);\n+ clearInterval(this._inQto);\n+ this._handleEvent(\"onerror\", JSJaCError(\"503\", \"cancel\", \"session-terminate\"));\n+ this._connected = false;\n+ this.oDbg.log(\"Disconnected.\", 1);\n+ this._handleEvent(\"ondisconnect\");\n+ return false\n+ }\n+ this.mechs = new Object();\n+ var d = f.getElementsByTagName(\"mechanisms\");\n+ this.has_sasl = false;\n+ for (var b = 0; b < d.length; b++) {\n+ if (d.item(b).getAttribute(\"xmlns\") == \"urn:ietf:params:xml:ns:xmpp-sasl\") {\n+ this.has_sasl = true;\n+ var c = d.item(b).getElementsByTagName(\"mechanism\");\n+ for (var a = 0; a < c.length; a++) {\n+ this.mechs[c.item(a).firstChild.nodeValue] = true\n+ }\n+ break\n+ }\n+ }\n+ if (this.has_sasl) {\n+ this.oDbg.log(\"SASL detected\", 2)\n+ } else {\n+ this.oDbg.log(\"No support for SASL detected\", 2);\n+ return false\n+ }\n+ return true\n+};\n+JSJaCConnection.prototype._process = function(a) {\n+ if (!this.connected()) {\n+ this.oDbg.log(\"Connection lost ...\", 1);\n+ if (this._interval) {\n+ clearInterval(this._interval)\n+ }\n+ return\n+ }\n+ this.setPollInterval(a);\n+ if (this._timeout) {\n+ clearTimeout(this._timeout)\n+ }\n+ var d = this._getFreeSlot();\n+ if (d < 0) {\n+ return\n+ }\n+ if (typeof(this._req[d]) != \"undefined\" && typeof(this._req[d].r) != \"undefined\" && this._req[d].r.readyState != 4) {\n+ this.oDbg.log(\"Slot \" + d + \" is not ready\");\n+ return\n+ }\n+ if (!this.isPolling() && this._pQueue.length == 0 && this._req[(d + 1) % 2] && this._req[(d + 1) % 2].r.readyState != 4) {\n+ this.oDbg.log(\"all slots busy, standby ...\", 2);\n+ return\n+ }\n+ if (!this.isPolling()) {\n+ this.oDbg.log(\"Found working slot at \" + d, 2)\n+ }\n+ this._req[d] = this._setupRequest(true);\n+ this._req[d].r.onreadystatechange = JSJaC.bind(function() {\n+ if (!this.connected()) {\n+ return\n+ }\n+ if (this._req[d].r.readyState == 4) {\n+ this._setStatus(\"processing\");\n+ this.oDbg.log(\"async recv: \" + this._req[d].r.responseText, 4);\n+ this._handleResponse(this._req[d]);\n+ if (this._pQueue.length) {\n+ this._timeout = setTimeout(JSJaC.bind(this._process, this), 100)\n+ } else {\n+ this.oDbg.log(\"scheduling next poll in \" + this.getPollInterval() + \" msec\", 4);\n+ this._timeout = setTimeout(JSJaC.bind(this._process, this), this.getPollInterval())\n+ }\n+ }\n+ }, this);\n+ try {\n+ this._req[d].r.onerror = JSJaC.bind(function() {\n+ if (!this.connected()) {\n+ return\n+ }\n+ this._errcnt++;\n+ this.oDbg.log(\"XmlHttpRequest error (\" + this._errcnt + \")\", 1);\n+ if (this._errcnt > JSJAC_ERR_COUNT) {\n+ this._abort();\n+ return false\n+ }\n+ this._setStatus(\"onerror_fallback\");\n+ setTimeout(JSJaC.bind(this._resume, this), this.getPollInterval());\n+ return false\n+ }, this)\n+ } catch (b) {}\n+ var c = this._getRequestString();\n+ if (typeof(this._rid) != \"undefined\") {\n+ this._req[d].rid = this._rid\n+ }\n+ this.oDbg.log(\"sending: \" + c, 4);\n+ this._req[d].r.send(c)\n+};\n+JSJaCConnection.prototype._registerPID = function(c, b, a) {\n+ if (!c || !b) {\n+ return false\n+ }\n+ this._regIDs[c] = new Object();\n+ this._regIDs[c].cb = b;\n+ if (a) {\n+ this._regIDs[c].arg = a\n+ }\n+ this.oDbg.log(\"registered \" + c, 3);\n+ return true\n+};\n+JSJaCConnection.prototype._sendEmpty = function JSJaCSendEmpty() {\n+ var b = this._getFreeSlot();\n+ this._req[b] = this._setupRequest(true);\n+ this._req[b].r.onreadystatechange = JSJaC.bind(function() {\n+ if (this._req[b].r.readyState == 4) {\n+ this.oDbg.log(\"async recv: \" + this._req[b].r.responseText, 4);\n+ this._getStreamID(b)\n+ }\n+ }, this);\n+ if (typeof(this._req[b].r.onerror) != \"undefined\") {\n+ this._req[b].r.onerror = JSJaC.bind(function(c) {\n+ this.oDbg.log(\"XmlHttpRequest error\", 1);\n+ return false\n+ }, this)\n+ }\n+ var a = this._getRequestString();\n+ this.oDbg.log(\"sending: \" + a, 4);\n+ this._req[b].r.send(a)\n+};\n+JSJaCConnection.prototype._sendRaw = function(c, b, a) {\n+ if (b) {\n+ this._sendRawCallbacks.push({\n+ fn: b,\n+ arg: a\n+ })\n+ }\n+ this._pQueue.push(c);\n+ this._process();\n+ return true\n+};\n+JSJaCConnection.prototype._setStatus = function(a) {\n+ if (!a || a == \"\") {\n+ return\n+ }\n+ if (a != this._status) {\n+ this._status = a;\n+ this._handleEvent(\"onstatuschanged\", a);\n+ this._handleEvent(\"status_changed\", a)\n+ }\n+};\n+JSJaCConnection.prototype._unregisterPID = function(a) {\n+ if (!this._regIDs[a]) {\n+ return false\n+ }\n+ this._regIDs[a] = null;\n+ this.oDbg.log(\"unregistered \" + a, 3);\n+ return true\n+};\n+\n+function JSJaCHttpBindingConnection(a) {\n+ this.base = JSJaCConnection;\n+ this.base(a);\n+ this._hold = JSJACHBC_MAX_HOLD;\n+ this._inactivity = 0;\n+ this._last_requests = new Object();\n+ this._last_rid = 0;\n+ this._min_polling = 0;\n+ this._pause = 0;\n+ this._wait = JSJACHBC_MAX_WAIT\n+}\n+JSJaCHttpBindingConnection.prototype = new JSJaCConnection();\n+JSJaCHttpBindingConnection.prototype.inherit = function(a) {\n+ if (a.jid) {\n+ var b = new JSJaCJID(a.jid);\n+ this.domain = b.getDomain();\n+ this.username = b.getNode();\n+ this.resource = b.getResource()\n+ } else {\n+ this.domain = a.domain || \"localhost\";\n+ this.username = a.username;\n+ this.resource = a.resource\n+ }\n+ this._sid = a.sid;\n+ this._rid = a.rid;\n+ this._min_polling = a.polling;\n+ this._inactivity = a.inactivity;\n+ this._setHold(a.requests - 1);\n+ this.setPollInterval(this._timerval);\n+ if (a.wait) {\n+ this._wait = a.wait\n+ }\n+ this._connected = true;\n+ this._handleEvent(\"onconnect\");\n+ this._interval = setInterval(JSJaC.bind(this._checkQueue, this), JSJAC_CHECKQUEUEINTERVAL);\n+ this._inQto = setInterval(JSJaC.bind(this._checkInQ, this), JSJAC_CHECKINQUEUEINTERVAL);\n+ this._timeout = setTimeout(JSJaC.bind(this._process, this), this.getPollInterval())\n+};\n+JSJaCHttpBindingConnection.prototype.setPollInterval = function(a) {\n+ if (a && !isNaN(a)) {\n+ if (!this.isPolling()) {\n+ this._timerval = 100\n+ } else {\n+ if (this._min_polling && a < this._min_polling * 1000) {\n+ this._timerval = this._min_polling * 1000\n+ } else {\n+ if (this._inactivity && a > this._inactivity * 1000) {\n+ this._timerval = this._inactivity * 1000\n+ } else {\n+ this._timerval = a\n+ }\n+ }\n+ }\n+ }\n+ return this._timerval\n+};\n+JSJaCHttpBindingConnection.prototype.isPolling = function() {\n+ return (this._hold == 0)\n+};\n+JSJaCHttpBindingConnection.prototype._getFreeSlot = function() {\n+ for (var a = 0; a < this._hold + 1; a++) {\n+ if (typeof(this._req[a]) == \"undefined\" || typeof(this._req[a].r) == \"undefined\" || this._req[a].r.readyState == 4) {\n+ return a\n+ }\n+ }\n+ return -1\n+};\n+JSJaCHttpBindingConnection.prototype._getHold = function() {\n+ return this._hold\n+};\n+JSJaCHttpBindingConnection.prototype._getRequestString = function(b, e) {\n+ b = b || \"\";\n+ var f = \"\";\n+ if (this._rid <= this._last_rid && typeof(this._last_requests[this._rid]) != \"undefined\") {\n+ f = this._last_requests[this._rid].xml\n+ } else {\n+ var a = \"\";\n+ while (this._pQueue.length) {\n+ var d = this._pQueue[0];\n+ a += d;\n+ this._pQueue = this._pQueue.slice(1, this._pQueue.length)\n+ }\n+ f = \"\" + b + a + \"\"\n+ } else {\n+ f += \"/>\"\n+ }\n+ this._last_requests[this._rid] = new Object();\n+ this._last_requests[this._rid].xml = f;\n+ this._last_rid = this._rid;\n+ for (var c in this._last_requests) {\n+ if (this._last_requests.hasOwnProperty(c) && c < this._rid - this._hold) {\n+ delete(this._last_requests[c])\n+ }\n+ }\n+ }\n+ return f\n+};\n+JSJaCHttpBindingConnection.prototype._getInitialRequestString = function() {\n+ var a = \"\";\n+ return a\n+};\n+JSJaCHttpBindingConnection.prototype._getStreamID = function(b) {\n+ this.oDbg.log(this._req[b].r.responseText, 4);\n+ if (!this._req[b].r.responseXML || !this._req[b].r.responseXML.documentElement) {\n+ this._handleEvent(\"onerror\", JSJaCError(\"503\", \"cancel\", \"service-unavailable\"));\n+ return\n+ }\n+ var a = this._req[b].r.responseXML.documentElement;\n+ if (a.getAttribute(\"authid\")) {\n+ this.streamid = a.getAttribute(\"authid\");\n+ this.oDbg.log(\"got streamid: \" + this.streamid, 2)\n+ }\n+ if (!this._parseStreamFeatures(a) || !this.streamid) {\n+ this._timeout = setTimeout(JSJaC.bind(this._sendEmpty, this), this.getPollInterval());\n+ return\n+ }\n+ this._timeout = setTimeout(JSJaC.bind(this._process, this), this.getPollInterval());\n+ if (this.register) {\n+ this._doInBandReg()\n+ } else {\n+ this._doAuth()\n+ }\n+};\n+JSJaCHttpBindingConnection.prototype._getSuspendVars = function() {\n+ return (\"host,port,secure,_rid,_last_rid,_wait,_min_polling,_inactivity,_hold,_last_requests,_pause\").split(\",\")\n+};\n+JSJaCHttpBindingConnection.prototype._handleInitialResponse = function(c) {\n+ try {\n+ this.oDbg.log(this._req[c].r.getAllResponseHeaders(), 4);\n+ this.oDbg.log(this._req[c].r.responseText, 4)\n+ } catch (b) {\n+ this.oDbg.log(\"No response\", 4)\n+ }\n+ if (this._req[c].r.status != 200 || !this._req[c].r.responseXML) {\n+ this.oDbg.log(\"initial response broken (status: \" + this._req[c].r.status + \")\", 1);\n+ this._handleEvent(\"onerror\", JSJaCError(\"503\", \"cancel\", \"service-unavailable\"));\n+ return\n+ }\n+ var a = this._req[c].r.responseXML.documentElement;\n+ if (!a || a.tagName != \"body\" || a.namespaceURI != \"http://jabber.org/protocol/httpbind\") {\n+ this.oDbg.log(\"no body element or incorrect body in initial response\", 1);\n+ this._handleEvent(\"onerror\", JSJaCError(\"500\", \"wait\", \"internal-service-error\"));\n+ return\n+ }\n+ if (a.getAttribute(\"type\") == \"terminate\") {\n+ this.oDbg.log(\"invalid response:\\n\" + this._req[c].r.responseText, 1);\n+ clearTimeout(this._timeout);\n+ this._connected = false;\n+ this.oDbg.log(\"Disconnected.\", 1);\n+ this._handleEvent(\"ondisconnect\");\n+ this._handleEvent(\"onerror\", JSJaCError(\"503\", \"cancel\", \"service-unavailable\"));\n+ return\n+ }\n+ this._sid = a.getAttribute(\"sid\");\n+ this.oDbg.log(\"got sid: \" + this._sid, 2);\n+ if (a.getAttribute(\"polling\")) {\n+ this._min_polling = a.getAttribute(\"polling\")\n+ }\n+ if (a.getAttribute(\"inactivity\")) {\n+ this._inactivity = a.getAttribute(\"inactivity\")\n+ }\n+ if (a.getAttribute(\"requests\")) {\n+ this._setHold(a.getAttribute(\"requests\") - 1)\n+ }\n+ this.oDbg.log(\"set hold to \" + this._getHold(), 2);\n+ if (a.getAttribute(\"ver\")) {\n+ this._bosh_version = a.getAttribute(\"ver\")\n+ }\n+ if (a.getAttribute(\"maxpause\")) {\n+ this._pause = Number.min(a.getAttribute(\"maxpause\"), JSJACHBC_MAXPAUSE)\n+ }\n+ this.setPollInterval(this._timerval);\n+ this._connected = true;\n+ this._inQto = setInterval(JSJaC.bind(this._checkInQ, this), JSJAC_CHECKINQUEUEINTERVAL);\n+ this._interval = setInterval(JSJaC.bind(this._checkQueue, this), JSJAC_CHECKQUEUEINTERVAL);\n+ this._getStreamID(c)\n+};\n+JSJaCHttpBindingConnection.prototype._parseResponse = function(c) {\n+ if (!this.connected() || !c) {\n+ return null\n+ }\n+ var b = c.r;\n+ try {\n+ if (b.status == 404 || b.status == 403) {\n+ this._abort();\n+ return null\n+ }\n+ if (b.status != 200 || !b.responseXML) {\n+ this._errcnt++;\n+ var g = \"invalid response (\" + b.status + \"):\\n\" + b.getAllResponseHeaders() + \"\\n\" + b.responseText;\n+ if (!b.responseXML) {\n+ g += \"\\nResponse failed to parse!\"\n+ }\n+ this.oDbg.log(g, 1);\n+ if (this._errcnt > JSJAC_ERR_COUNT) {\n+ this._abort();\n+ return null\n+ }\n+ if (this.connected()) {\n+ this.oDbg.log(\"repeating (\" + this._errcnt + \")\", 1);\n+ this._setStatus(\"proto_error_fallback\");\n+ setTimeout(JSJaC.bind(this._resume, this), this.getPollInterval())\n+ }\n+ return null\n+ }\n+ } catch (d) {\n+ this.oDbg.log(\"XMLHttpRequest error: status not available\", 1);\n+ this._errcnt++;\n+ if (this._errcnt > JSJAC_ERR_COUNT) {\n+ this._abort()\n+ } else {\n+ if (this.connected()) {\n+ this.oDbg.log(\"repeating (\" + this._errcnt + \")\", 1);\n+ this._setStatus(\"proto_error_fallback\");\n+ setTimeout(JSJaC.bind(this._resume, this), this.getPollInterval())\n+ }\n+ }\n+ return null\n+ }\n+ var a = b.responseXML.documentElement;\n+ if (!a || a.tagName != \"body\" || a.namespaceURI != \"http://jabber.org/protocol/httpbind\") {\n+ this.oDbg.log(\"invalid response:\\n\" + b.responseText, 1);\n+ clearTimeout(this._timeout);\n+ clearInterval(this._interval);\n+ clearInterval(this._inQto);\n+ this._connected = false;\n+ this.oDbg.log(\"Disconnected.\", 1);\n+ this._handleEvent(\"ondisconnect\");\n+ this._setStatus(\"internal_server_error\");\n+ this._handleEvent(\"onerror\", JSJaCError(\"500\", \"wait\", \"internal-server-error\"));\n+ return null\n+ }\n+ if (typeof(c.rid) != \"undefined\" && this._last_requests[c.rid]) {\n+ if (this._last_requests[c.rid].handled) {\n+ this.oDbg.log(\"already handled \" + c.rid, 2);\n+ return null\n+ } else {\n+ this._last_requests[c.rid].handled = true\n+ }\n+ }\n+ if (a.getAttribute(\"type\") == \"terminate\") {\n+ this.oDbg.log(\"session terminated:\\n\" + b.responseText, 1);\n+ clearTimeout(this._timeout);\n+ clearInterval(this._interval);\n+ clearInterval(this._inQto);\n+ var f = a.getAttribute(\"condition\");\n+ if (f == \"remote-stream-error\") {\n+ if (a.getElementsByTagName(\"conflict\").length > 0) {\n+ this._setStatus(\"session-terminate-conflict\")\n+ }\n+ }\n+ if (f == null) {\n+ f = \"session-terminate\"\n+ }\n+ this._handleEvent(\"onerror\", JSJaCError(\"503\", \"cancel\", f));\n+ this._connected = false;\n+ this.oDbg.log(\"Disconnected.\", 1);\n+ this._handleEvent(\"ondisconnect\");\n+ return null\n+ }\n+ this._errcnt = 0;\n+ return b.responseXML.documentElement\n+};\n+JSJaCHttpBindingConnection.prototype._reInitStream = function(c, b, a) {\n+ this._reinit = true;\n+ b.call(this, a)\n+};\n+JSJaCHttpBindingConnection.prototype._resume = function() {\n+ if (this._pause == 0 && this._rid >= this._last_rid) {\n+ this._rid = this._last_rid - 1\n+ }\n+ this._process()\n+};\n+JSJaCHttpBindingConnection.prototype._setHold = function(a) {\n+ if (!a || isNaN(a) || a < 0) {\n+ a = 0\n+ } else {\n+ if (a > JSJACHBC_MAX_HOLD) {\n+ a = JSJACHBC_MAX_HOLD\n+ }\n+ }\n+ this._hold = a;\n+ return this._hold\n+};\n+JSJaCHttpBindingConnection.prototype._setupRequest = function(a) {\n+ var c = new Object();\n+ var b = XmlHttp.create();\n+ try {\n+ b.open(\"POST\", this._httpbase, a);\n+ b.setRequestHeader(\"Content-Type\", \"text/xml; charset=utf-8\")\n+ } catch (d) {\n+ this.oDbg.log(d, 1)\n+ }\n+ c.r = b;\n+ this._rid++;\n+ c.rid = this._rid;\n+ return c\n+};\n+JSJaCHttpBindingConnection.prototype._suspend = function() {\n+ if (this._pause == 0) {\n+ return\n+ }\n+ var c = this._getFreeSlot();\n+ this._req[c] = this._setupRequest(false);\n+ var b = \"\";\n+ while (this._pQueue.length) {\n+ var a = this._pQueue[0];\n+ b += a;\n+ this._pQueue = this._pQueue.slice(1, this._pQueue.length)\n+ }\n+ b += \"\";\n+ this.oDbg.log(\"Disconnecting: \" + b, 4);\n+ this._req[c].r.send(b)\n+};\n+\n+function JSJaCHttpPollingConnection(a) {\n+ this.base = JSJaCConnection;\n+ this.base(a);\n+ JSJACPACKET_USE_XMLNS = false\n+}\n+JSJaCHttpPollingConnection.prototype = new JSJaCConnection();\n+JSJaCHttpPollingConnection.prototype.isPolling = function() {\n+ return true\n+};\n+JSJaCHttpPollingConnection.prototype._getFreeSlot = function() {\n+ if (typeof(this._req[0]) == \"undefined\" || typeof(this._req[0].r) == \"undefined\" || this._req[0].r.readyState == 4) {\n+ return 0\n+ } else {\n+ return -1\n+ }\n+};\n+JSJaCHttpPollingConnection.prototype._getInitialRequestString = function() {\n+ var b = \"0\";\n+ if (JSJAC_HAVEKEYS) {\n+ this._keys = new JSJaCKeys(b64_sha1, this.oDbg);\n+ key = this._keys.getKey();\n+ b += \";\" + key\n+ }\n+ var a = this.domain;\n+ if (this.authhost) {\n+ a = this.authhost\n+ }\n+ b += \",\";\n+ return b\n+};\n+JSJaCHttpPollingConnection.prototype._getRequestString = function(a, b) {\n+ var c = this._sid;\n+ if (JSJAC_HAVEKEYS) {\n+ c += \";\" + this._keys.getKey();\n+ if (this._keys.lastKey()) {\n+ this._keys = new JSJaCKeys(b64_sha1, this.oDbg);\n+ c += \";\" + this._keys.getKey()\n+ }\n+ }\n+ c += \",\";\n+ if (a) {\n+ c += a\n+ }\n+ while (this._pQueue.length) {\n+ c += this._pQueue[0];\n+ this._pQueue = this._pQueue.slice(1, this._pQueue.length)\n+ }\n+ if (b) {\n+ c += \"\"\n+ }\n+ return c\n+};\n+JSJaCHttpPollingConnection.prototype._getStreamID = function() {\n+ if (this._req[0].r.responseText == \"\") {\n+ this.oDbg.log(\"waiting for stream id\", 2);\n+ this._timeout = setTimeout(JSJaC.bind(this._sendEmpty, this), 1000);\n+ return\n+ }\n+ this.oDbg.log(this._req[0].r.responseText, 4);\n+ if (this._req[0].r.responseText.match(/id=[\\'\\\"]([^\\'\\\"]+)[\\'\\\"]/)) {\n+ this.streamid = RegExp.$1\n+ }\n+ this.oDbg.log(\"got streamid: \" + this.streamid, 2);\n+ var c;\n+ try {\n+ var a = this._req[0].r.responseText;\n+ if (!a.match(/<\\/stream:stream>\\s*$/)) {\n+ a += \"\"\n+ }\n+ c = XmlDocument.create(\"doc\");\n+ c.loadXML(a);\n+ if (!this._parseStreamFeatures(c)) {\n+ this.authtype = \"nonsasl\";\n+ return\n+ }\n+ } catch (b) {\n+ this.oDbg.log(\"loadXML: \" + b.toString(), 1)\n+ }\n+ this._connected = true;\n+ if (this.register) {\n+ this._doInBandReg()\n+ } else {\n+ this._doAuth()\n+ }\n+ this._process(this._timerval)\n+};\n+JSJaCHttpPollingConnection.prototype._getSuspendVars = function() {\n+ return new Array()\n+};\n+JSJaCHttpPollingConnection.prototype._handleInitialResponse = function() {\n+ this.oDbg.log(this._req[0].r.getAllResponseHeaders(), 4);\n+ var b = this._req[0].r.getResponseHeader(\"Set-Cookie\");\n+ b = b.split(\";\");\n+ for (var a = 0; a < b.length; a++) {\n+ aArg = b[a].split(\"=\");\n+ if (aArg[0] == \"ID\") {\n+ this._sid = aArg[1]\n+ }\n+ }\n+ this.oDbg.log(\"got sid: \" + this._sid, 2);\n+ this._connected = true;\n+ this._interval = setInterval(JSJaC.bind(this._checkQueue, this), JSJAC_CHECKQUEUEINTERVAL);\n+ this._inQto = setInterval(JSJaC.bind(this._checkInQ, this), JSJAC_CHECKINQUEUEINTERVAL);\n+ this._getStreamID()\n+};\n+JSJaCHttpPollingConnection.prototype._parseResponse = function(a) {\n+ var h = a.r;\n+ if (!this.connected()) {\n+ return null\n+ }\n+ if (h.status != 200) {\n+ this.oDbg.log(\"invalid response (\" + h.status + \"):\" + h.responseText + \"\\n\" + h.getAllResponseHeaders(), 1);\n+ this._setStatus(\"internal_server_error\");\n+ clearTimeout(this._timeout);\n+ clearInterval(this._interval);\n+ clearInterval(this._inQto);\n+ this._connected = false;\n+ this.oDbg.log(\"Disconnected.\", 1);\n+ this._handleEvent(\"ondisconnect\");\n+ this._handleEvent(\"onerror\", JSJaCError(\"503\", \"cancel\", \"service-unavailable\"));\n+ return null\n+ }\n+ this.oDbg.log(h.getAllResponseHeaders(), 4);\n+ var b, j = h.getResponseHeader(\"Set-Cookie\");\n+ if (j == null) {\n+ b = \"-1:0\"\n+ } else {\n+ j = j.split(\";\");\n+ var b;\n+ for (var d = 0; d < j.length; d++) {\n+ var g = j[d].split(\"=\");\n+ if (g[0] == \"ID\") {\n+ b = g[1]\n+ }\n+ }\n+ }\n+ if (typeof(b) != \"undefined\" && b.indexOf(\":0\") != -1) {\n+ switch (b.substring(0, b.indexOf(\":0\"))) {\n+ case \"0\":\n+ this.oDbg.log(\"invalid response:\" + h.responseText, 1);\n+ break;\n+ case \"-1\":\n+ this.oDbg.log(\"Internal Server Error\", 1);\n+ break;\n+ case \"-2\":\n+ this.oDbg.log(\"Bad Request\", 1);\n+ break;\n+ case \"-3\":\n+ this.oDbg.log(\"Key Sequence Error\", 1);\n+ break\n+ }\n+ this._setStatus(\"internal_server_error\");\n+ clearTimeout(this._timeout);\n+ clearInterval(this._interval);\n+ clearInterval(this._inQto);\n+ this._handleEvent(\"onerror\", JSJaCError(\"500\", \"wait\", \"internal-server-error\"));\n+ this._connected = false;\n+ this.oDbg.log(\"Disconnected.\", 1);\n+ this._handleEvent(\"ondisconnect\");\n+ return null\n+ }\n+ if (!h.responseText || h.responseText == \"\") {\n+ return null\n+ }\n+ try {\n+ var c = h.responseText.replace(/\\<\\?xml.+\\?\\>/, \"\");\n+ if (c.match(/\"\n+ }\n+ var k = JSJaCHttpPollingConnection._parseTree(\"\" + c + \"\");\n+ if (!k || k.tagName == \"parsererror\") {\n+ this.oDbg.log(\"parsererror\", 1);\n+ k = JSJaCHttpPollingConnection._parseTree(\"\" + h.responseText);\n+ if (k && k.tagName != \"parsererror\") {\n+ this.oDbg.log(\"stream closed\", 1);\n+ if (k.getElementsByTagName(\"conflict\").length > 0) {\n+ this._setStatus(\"session-terminate-conflict\")\n+ }\n+ clearTimeout(this._timeout);\n+ clearInterval(this._interval);\n+ clearInterval(this._inQto);\n+ this._handleEvent(\"onerror\", JSJaCError(\"503\", \"cancel\", \"session-terminate\"));\n+ this._connected = false;\n+ this.oDbg.log(\"Disconnected.\", 1);\n+ this._handleEvent(\"ondisconnect\")\n+ } else {\n+ this.oDbg.log(\"parsererror:\" + k, 1)\n+ }\n+ return k\n+ }\n+ return k\n+ } catch (f) {\n+ this.oDbg.log(\"parse error:\" + f.message, 1)\n+ }\n+ return null\n+};\n+JSJaCHttpPollingConnection.prototype._reInitStream = function(c, b, a) {\n+ this._sendRaw(\"\", b, a)\n+};\n+JSJaCHttpPollingConnection.prototype._resume = function() {\n+ this._process(this._timerval)\n+};\n+JSJaCHttpPollingConnection.prototype._setupRequest = function(a) {\n+ var c = XmlHttp.create();\n+ try {\n+ c.open(\"POST\", this._httpbase, a);\n+ if (c.overrideMimeType) {\n+ c.overrideMimeType(\"text/plain; charset=utf-8\")\n+ }\n+ c.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\")\n+ } catch (d) {\n+ this.oDbg.log(d, 1)\n+ }\n+ var b = new Object();\n+ b.r = c;\n+ return b\n+};\n+JSJaCHttpPollingConnection.prototype._suspend = function() {};\n+JSJaCHttpPollingConnection._parseTree = function(a) {\n+ try {\n+ var b = XmlDocument.create(\"body\", \"foo\");\n+ if (typeof(b.loadXML) != \"undefined\") {\n+ b.loadXML(a);\n+ return b.documentElement\n+ } else {\n+ if (window.DOMParser) {\n+ return (new DOMParser()).parseFromString(a, \"text/xml\").documentElement\n+ }\n+ }\n+ } catch (c) {}\n+ return null\n+};\n+var JSJaC = {\n+ Version: \"$Rev$\",\n+ require: function(a) {\n+ document.write('');\n+ },\n+ load: function() {\n+ var includes = ['xmlextras',\n+ 'jsextras',\n+ 'crypt',\n+ 'JSJaCConfig',\n+ 'JSJaCConstants',\n+ 'JSJaCCookie',\n+ 'JSJaCJSON',\n+ 'JSJaCJID',\n+ 'JSJaCBuilder',\n+ 'JSJaCPacket',\n+ 'JSJaCError',\n+ 'JSJaCKeys',\n+ 'JSJaCConnection',\n+ 'JSJaCHttpPollingConnection',\n+ 'JSJaCHttpBindingConnection',\n+ 'JSJaCConsoleLogger'\n+ ];\n+ var scripts = document.getElementsByTagName(\"script\");\n+ var path = './';\n+ for (var i = 0; i < scripts.length; i++) {\n+ if (scripts.item(i).src && scripts.item(i).src.match(/JSJaC\\.js$/)) {\n+ path = scripts.item(i).src.replace(/JSJaC.js$/, '');\n+ break;\n+ }\n+ }\n+ for (var i = 0; i < includes.length; i++)\n+ this.require(path + includes[i] + '.js');\n+ },\n+ bind: function(fn, obj, optArg) {\n+ return function(arg) {\n+ return fn.apply(obj, [arg, optArg]);\n+ };\n+ }\n+};\n+\n+if (typeof JSJaCConnection == 'undefined')\n+ JSJaC.load();\n"}]}]}]}]}]}