Index: lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as
===================================================================
RCS file: /usr/local/cvsroot/lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as,v
diff -u -r1.56 -r1.57
--- lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as 24 Sep 2008 23:32:13 -0000 1.56
+++ lams_flash/src/central/flash/org/lamsfoundation/lams/authoring/DesignDataModel.as 16 Oct 2008 06:47:12 -0000 1.57
@@ -647,7 +647,7 @@
* @return data obj
*/
- public static function getDataForInitializing(title:String, description:String, designID:Number, orgID:Number, lExportPortfolio:Boolean):Object{
+ public static function getDataForInitializing(title:String, description:String, designID:Number, orgID:Number, lExportPortfolio:Boolean, enablePresence:Boolean, enableIm:Boolean):Object{
var data:Object = new Object();
if(title) { data.lessonName = title; }
@@ -660,6 +660,12 @@
if(lExportPortfolio != null) { data.learnerExportPortfolio = lExportPortfolio }
else { data.learnerExportPortfolio = false }
+ if(enablePresence != null) { data.enablePresence = enablePresence }
+ else { data.enablePresence = false }
+
+ if(enableIm != null) { data.enableIm = enableIm }
+ else { data.enableIm = false }
+
data.copyType = COPY_TYPE_ID_RUN;
return data;
Index: lams_flash/src/central/flash/org/lamsfoundation/lams/learner/Presence.as
===================================================================
RCS file: /usr/local/cvsroot/lams_flash/src/central/flash/org/lamsfoundation/lams/learner/Presence.as,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_flash/src/central/flash/org/lamsfoundation/lams/learner/Presence.as 16 Oct 2008 06:47:12 -0000 1.1
@@ -0,0 +1,266 @@
+/***************************************************************************
+ * Copyright (C) 2008 LAMS Foundation (http://lamsfoundation.org)
+ * =============================================================
+ * License Information: http://lamsfoundation.org/licensing/lams/2.0/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2.0
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ * USA
+ *
+ * http://www.gnu.org/licenses/gpl.txt
+ * ************************************************************************
+ */
+
+import org.lamsfoundation.lams.learner.*;
+import org.lamsfoundation.lams.learner.ls.*;
+import org.lamsfoundation.lams.common.Sequence;
+import org.lamsfoundation.lams.common.ToolTip;
+import org.lamsfoundation.lams.common.util.*;
+import org.lamsfoundation.lams.common.dict.*;
+import org.lamsfoundation.lams.common.style.*;
+import org.lamsfoundation.lams.common.ApplicationParent;
+import mx.controls.*
+import mx.utils.*
+import mx.managers.*
+import mx.events.*
+
+class Presence extends MovieClip {
+
+ //Height Properties
+ private var presenceHeightHide:Number = 20;
+ private var presenceHeightFull:Number = 217;
+
+ //Open Close Identifier
+ private var _presenceIsExpanded:Boolean;
+
+ //Presence stuff
+ private var selectedChatItem:Object;
+ private var lastClickX:Number;
+ private var lastClickY:Number;
+ private var clickInterval:Number;
+ private var dataGridInitialized:Boolean;
+ private var DOUBLECLICKSPEED:Number = 500;
+ private var chatDialog:MovieClip;
+
+ //Component properties
+ private var _presence_mc:MovieClip;
+ private var presenceHead_pnl:MovieClip;
+ private var presenceTitle_lbl:Label;
+ private var presenceMinIcon:MovieClip;
+ private var presenceMaxIcon:MovieClip;
+ private var presenceClickTarget_mc:MovieClip;
+ private var _tip:ToolTip;
+ private var _users_dg:DataGrid;
+
+ private var panel:MovieClip;
+ private var _lessonModel:LessonModel;
+ private var _lessonController:LessonController;
+ private var _tm:ThemeManager;
+ private var _dictionary:Dictionary;
+
+ //These are defined so that the compiler can 'see' the events that are added at runtime by EventDispatcher
+ private var dispatchEvent:Function;
+ public var addEventListener:Function;
+ public var removeEventListener:Function;
+
+ // Constructor
+ public function Presence() {
+ Debugger.log('PRESENCE: started constructor',Debugger.MED,'Presence','Presence');
+
+ // Set up this class to use the Flash event delegation model
+ EventDispatcher.initialize(this);
+
+ _tm = ThemeManager.getInstance();
+ _tip = new ToolTip();
+ _dictionary = Dictionary.getInstance();
+ _dictionary.addEventListener('init',Proxy.create(this,setLabels));
+ this._visible = false;
+
+ Stage.addListener(this);
+
+ // Let it wait one frame to set up the components.
+ MovieClipUtils.doLater(Proxy.create(this,init));
+ Debugger.log('PRESENCE: calling init method',Debugger.MED,'Presence','Presence');
+ }
+
+ // Called a frame after movie attached to allow components to initialise
+ public function init(){
+ Debugger.log('PRESENCE: started init',Debugger.MED,'init','Presence');
+
+ //Delete the enterframe dispatcher
+ delete this.onEnterFrame;
+ _lessonModel = _lessonModel;
+ _lessonController = _lessonController;
+ _presence_mc = this;
+ _presenceIsExpanded = true;
+ dataGridInitialized = false;
+ presenceMaxIcon._visible = false;
+ presenceMinIcon._visible = true;
+ dataGridInitialized = false;
+ _lessonModel.setPresenceHeight(presenceHeightFull);
+ setLabels();
+ resize(Stage.width);
+
+ presenceClickTarget_mc.onRelease = Proxy.create(this, localOnRelease);
+
+ this.onEnterFrame = setLabels;
+ }
+
+ // Click handler
+ private function localOnRelease():Void{
+ if (_presenceIsExpanded){
+ _presenceIsExpanded = false
+ presenceMinIcon._visible = false;
+ presenceMaxIcon._visible = true;
+ _lessonModel.setPresenceHeight(presenceHeightHide);
+
+ }else {
+ _presenceIsExpanded = true
+ presenceMinIcon._visible = true;
+ presenceMaxIcon._visible = false;
+ _lessonModel.setPresenceHeight(presenceHeightFull);
+ //Application.getInstance().onResize();
+ }
+ }
+
+ // Attempts a connection with a given Jabber server
+ public function attemptConnection():Void{
+ Debugger.log('PRESENCE: attempting to connect through Javascript',Debugger.MED,'attemptConnection','Presence');
+
+ var myDate = new Date();
+ var h = myDate.getHours().toString(), m = myDate.getMinutes().toString(), s = myDate.getSeconds().toString();
+ var resource = "LAMSPRESENCE"+h+""+m+""+s;
+
+ Debugger.log("PRESENCE: with arguements - " + String(_root.presenceServerUrl) + " " + String(_root.userID) + " " + String(_root.userID) + " " + String(resource) + " " + String(_root.lessonID) + " " + _root.firstName + _root.lastName + " " + "false" + " " + "true",Debugger.MED,'attemptConnection','Presence');
+ _root.proxy.call("doLogin", _root.presenceServerUrl, _root.userID, _root.userID, resource, _root.lessonID, _root.firstName + _root.lastName, false, true);
+ }
+
+ public function isPresenceExpanded():Boolean{
+ return _presenceIsExpanded;
+ }
+
+ public function presenceFullHeight():Number{
+ return presenceHeightFull;
+ }
+
+ public function showToolTip(btnObj, btnTT:String):Void{
+ var Xpos = Application.HEADER_X+ 5;
+ var Ypos = Application.HEADER_Y+( btnObj._y+btnObj._height)+2;
+ var ttHolder = ApplicationParent.tooltip;
+ var ttMessage = Dictionary.getValue(btnTT);
+ var ttWidth = 150
+ _tip.DisplayToolTip(ttHolder, ttMessage, Xpos, Ypos, undefined, ttWidth);
+ }
+
+ public function hideToolTip():Void{
+ _tip.CloseToolTip();
+ }
+
+ private function setStyles(){
+ Debugger.log('PRESENCE: setting styles',Debugger.MED,'setStyles','Presence');
+ var styleObj = _tm.getStyleObject('smallLabel');
+
+ styleObj = _tm.getStyleObject('textarea');
+ presenceTitle_lbl.setStyle('styleName', styleObj);
+
+ //For Panels
+ styleObj = _tm.getStyleObject('BGPanel');
+ presenceHead_pnl.setStyle('styleName',styleObj);
+ }
+
+ private function setLabels(){
+ Debugger.log('PRESENCE: setting labels',Debugger.MED,'setLabels','Presence');
+
+ presenceTitle_lbl.text = Dictionary.getValue('pres_panel_lbl');
+ setStyles();
+ setupDataGrid(null);
+ delete this.onEnterFrame;
+ dispatchEvent({type:'load',target:this});
+
+ }
+
+ public function setupDataGrid(dataProvider:Array){
+ // If datagrid is not initialized, do so
+ if(!dataGridInitialized) {
+ Debugger.log('PRESENCE: setting up dataGrid',Debugger.MED,'setLabels','Presence');
+
+ _users_dg.addEventListener("cellPress", Proxy.create(this, cellPress));
+ _users_dg.columnNames = ["nick"];
+
+ var col:mx.controls.gridclasses.DataGridColumn;
+ col = _users_dg.getColumnAt(0);
+ col.headerText = Dictionary.getValue('pres_colnamelearners_lbl');
+ col.width = _users_dg._width;
+ dataGridInitialized = true;
+ }
+
+ // If dataprovider is null (called from Presence), set label to loading and wait for call from javascript
+ if(!dataProvider) {
+ _users_dg.dataProvider = [{nick:Dictionary.getValue('pres_dataproviderloading_lbl')}];
+ }
+ // Initialize dataprovider from javascript
+ else {
+ _users_dg.dataProvider = dataProvider;
+ _users_dg.sortItemsBy("nick");
+ _users_dg.invalidate();
+ }
+
+
+ }
+
+ private function cellPress(event) {
+ // I'm not clicking on an empty cell
+ if (event.target.selectedItem.nick != undefined) {
+ //Double click action
+ if (clickInterval != null && _users_dg.selectedItem.nick == selectedChatItem.nick) {
+ Debugger.log('PRESENCE: double click event',Debugger.MED,'cellPress','Presence');
+
+ //_debugDialog = PopUpManager.createPopUp(Application.root, LFWindow, false,{title:'Debug',closeButton:true,scrollContentPath:'debugDialog'});
+
+ clearInterval(clickInterval);
+ clickInterval = null;
+ // First click
+ } else {
+ clearInterval(clickInterval);
+ clickInterval = null;
+ selectedChatItem = _users_dg.selectedItem;
+ lastClickX = _root._xmouse;
+ lastClickY = _root._ymouse;
+ clickInterval = setInterval(Proxy.create(this, endClickTimer), DOUBLECLICKSPEED);
+ }
+ }
+ }
+
+ private function endClickTimer() {
+ // Do actions of first click
+ Debugger.log('PRESENCE: single click event',Debugger.MED,'cellPress','Presence');
+ clearInterval(clickInterval);
+ //ajoutMenuChat(xK, yK);
+ clickInterval = null;
+ }
+
+ public function resize(width:Number){
+ panel._width = width;
+
+ }
+
+ function get className():String {
+ return 'Presence';
+ }
+
+ public function showPresence(v:Boolean) {
+ Debugger.log("Show/Hide Presence: " + v, Debugger.GEN, "showPresence", "Presence");
+ this._visible = v;
+ }
+
+}
\ No newline at end of file
Index: lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/LessonTabView.as
===================================================================
RCS file: /usr/local/cvsroot/lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/LessonTabView.as,v
diff -u -r1.12 -r1.13
--- lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/LessonTabView.as 2 Oct 2008 06:32:50 -0000 1.12
+++ lams_flash/src/central/flash/org/lamsfoundation/lams/monitoring/mv/tabviews/LessonTabView.as 16 Oct 2008 06:47:12 -0000 1.13
@@ -81,8 +81,6 @@
private var _monitorLesson_mc:MovieClip;
private var _lessonStateArr:Array;
private var bkg_pnl:MovieClip;
- private var LSDescription_scp:ScrollPane;
- private var LSDescriptionContent_mc:MovieClip;
//Labels
private var status_lbl:Label;
@@ -104,7 +102,8 @@
//Text Items
private var LSTitle_lbl:Label;
- private var LSDescription_txa:TextArea;
+ private var LSDescription_lbl:Label;
+
private var sessionStatus_txt:Label;
private var numLearners_txt:Label;
private var class_txt:Label;
@@ -401,10 +400,26 @@
private function populateLessonDetails():Void{
var s:Object = mm.getSequence();
-
+ var limit:Number = 120;
+
LSTitle_lbl.text = "" + s.name + "";
- LSDescription_txa.text = String(s.description);
+ var charCount:Array = StringUtils.scanString(String(s.description), "\n");
+ s.
+ Debugger.log('DEBUG: '+ String(s.description) + ' with char count: ' + String(charCount.length), Debugger.MED,'populateLessonDetails','org.lamsfoundation.lams.LessonTabView');
+ if(charCount.length > 3) {
+ Debugger.log('DEBUG: '+ String(charCount[2]), Debugger.MED,'populateLessonDetails','org.lamsfoundation.lams.LessonTabView');
+ LSDescription_lbl.text = String(s.description).substr(0, charCount[2]);
+ LSDescription_lbl.text += "...";
+ }
+ else if(s.description.length > limit) {
+ LSDescription_lbl.text = String(s.description).substr(0, limit);
+ LSDescription_lbl.text += "...";
+ }
+ else {
+ LSDescription_lbl.text = String(s.description);
+ }
+
sessionStatus_txt.text = showStatus(s.state);
numLearners_txt.text = String(s.noStartedLearners) + " " + Dictionary.getValue('ls_of_text')+" "+String(s.noPossibleLearners);
learnerURL_txt.text = _root.serverURL+"launchlearner.do?lessonID="+_root.lessonID;
@@ -708,7 +723,7 @@
* Opens the view competences dialog
*/
public function showCompetencesDialog(mm:MonitorModel) {
- var opendialog:MovieClip = PopUpManager.createPopUp(mm.getMonitor().root, LFWindow, false,{title:Dictionary.getValue('view_competences_dlg'),closeButton:true,scrollContentPath:'viewCompetencesDialog'});
+ var opendialog:MovieClip = PopUpManager.createPopUp(mm.getMonitor().root, LFWindow, false,{title:"View Competences",closeButton:true,scrollContentPath:'viewCompetencesDialog'});
opendialog.addEventListener('contentLoaded',Delegate.create(_monitorController,testFunction));
}
Index: lams_learning/web/lams_learner.swf
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/Attic/lams_learner.swf,v
diff -u -r1.100 -r1.101
Binary files differ
Index: lams_learning/web/includes/JavaScriptFlashGateway.js
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/Attic/JavaScriptFlashGateway.js,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/web/includes/JavaScriptFlashGateway.js 16 Oct 2008 06:46:10 -0000 1.1
@@ -0,0 +1,455 @@
+/*
+Macromedia(r) Flash(r) JavaScript Integration Kit License
+
+
+Copyright (c) 2005 Macromedia, inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if any, must
+include the following acknowledgment:
+
+"This product includes software developed by Macromedia, Inc.
+(http://www.macromedia.com)."
+
+Alternately, this acknowledgment may appear in the software itself, if and
+wherever such third-party acknowledgments normally appear.
+
+4. The name Macromedia must not be used to endorse or promote products derived
+from this software without prior written permission. For written permission,
+please contact devrelations@macromedia.com.
+
+5. Products derived from this software may not be called "Macromedia" or
+"Macromedia Flash", nor may "Macromedia" or "Macromedia Flash" appear in their
+name.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MACROMEDIA OR
+ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+--
+
+This code is part of the Flash / JavaScript Integration Kit:
+http://www.macromedia.com/go/flashjavascript/
+
+Created by:
+
+Christian Cantrell
+http://weblogs.macromedia.com/cantrell/
+mailto:cantrell@macromedia.com
+
+Mike Chambers
+http://weblogs.macromedia.com/mesh/
+mailto:mesh@macromedia.com
+
+Macromedia
+*/
+
+/**
+ * Create a new Exception object.
+ * name: The name of the exception.
+ * message: The exception message.
+ */
+function Exception(name, message)
+{
+ if (name)
+ this.name = name;
+ if (message)
+ this.message = message;
+}
+
+/**
+ * Set the name of the exception.
+ */
+Exception.prototype.setName = function(name)
+{
+ this.name = name;
+}
+
+/**
+ * Get the exception's name.
+ */
+Exception.prototype.getName = function()
+{
+ return this.name;
+}
+
+/**
+ * Set a message on the exception.
+ */
+Exception.prototype.setMessage = function(msg)
+{
+ this.message = msg;
+}
+
+/**
+ * Get the exception message.
+ */
+Exception.prototype.getMessage = function()
+{
+ return this.message;
+}
+
+/**
+ * Generates a browser-specific Flash tag. Create a new instance, set whatever
+ * properties you need, then call either toString() to get the tag as a string, or
+ * call write() to write the tag out.
+ */
+
+/**
+ * Creates a new instance of the FlashTag.
+ * src: The path to the SWF file.
+ * width: The width of your Flash content.
+ * height: the height of your Flash content.
+ */
+function FlashTag(src, width, height)
+{
+ this.src = src;
+ this.width = width;
+ this.height = height;
+ this.version = '6,0,47,0';
+ this.id = null;
+ this.bgcolor = 'ffffff';
+ this.flashVars = null;
+}
+
+/**
+ * Sets the Flash version used in the Flash tag.
+ */
+FlashTag.prototype.setVersion = function(v)
+{
+ this.version = v;
+}
+
+/**
+ * Sets the ID used in the Flash tag.
+ */
+FlashTag.prototype.setId = function(id)
+{
+ this.id = id;
+}
+
+/**
+ * Sets the background color used in the Flash tag.
+ */
+FlashTag.prototype.setBgcolor = function(bgc)
+{
+ this.bgcolor = bgc;
+}
+
+/**
+ * Sets any variables to be passed into the Flash content.
+ */
+FlashTag.prototype.setFlashvars = function(fv)
+{
+ this.flashVars = fv;
+}
+
+/**
+ * Get the Flash tag as a string.
+ */
+FlashTag.prototype.toString = function()
+{
+ var ie = (navigator.appName.indexOf ("Microsoft") != -1) ? 1 : 0;
+ var flashTag = new String();
+ if (ie)
+ {
+ flashTag += '';
+ }
+ else
+ {
+ flashTag += '';
+ }
+ return flashTag;
+}
+
+/**
+ * Write the Flash tag out. Pass in a reference to the document to write to.
+ */
+FlashTag.prototype.write = function(doc)
+{
+ doc.write(this.toString());
+}
+
+/**
+ * The FlashSerializer serializes JavaScript variables of types object, array, string,
+ * number, date, boolean, null or undefined into XML.
+ */
+
+/**
+ * Create a new instance of the FlashSerializer.
+ * useCdata: Whether strings should be treated as character data. If false, strings are simply XML encoded.
+ */
+function FlashSerializer(useCdata)
+{
+ this.useCdata = useCdata;
+}
+
+/**
+ * Serialize an array into a format that can be deserialized in Flash. Supported data types are object,
+ * array, string, number, date, boolean, null, and undefined. Returns a string of serialized data.
+ */
+FlashSerializer.prototype.serialize = function(args)
+{
+ var qs = new String();
+
+ for (var i = 0; i < args.length; ++i)
+ {
+ switch(typeof(args[i]))
+ {
+ case 'undefined':
+ qs += 't'+(i)+'=undf';
+ break;
+ case 'string':
+ qs += 't'+(i)+'=str&d'+(i)+'='+escape(args[i]);
+ break;
+ case 'number':
+ qs += 't'+(i)+'=num&d'+(i)+'='+escape(args[i]);
+ break;
+ case 'boolean':
+ qs += 't'+(i)+'=bool&d'+(i)+'='+escape(args[i]);
+ break;
+ case 'object':
+ if (args[i] == null)
+ {
+ qs += 't'+(i)+'=null';
+ }
+ else if (args[i] instanceof Date)
+ {
+ qs += 't'+(i)+'=date&d'+(i)+'='+escape(args[i].getTime());
+ }
+ else // array or object
+ {
+ try
+ {
+ qs += 't'+(i)+'=xser&d'+(i)+'='+escape(this._serializeXML(args[i]));
+ }
+ catch (exception)
+ {
+ throw new Exception("FlashSerializationException",
+ "The following error occurred during complex object serialization: " + exception.getMessage());
+ }
+ }
+ break;
+ default:
+ throw new Exception("FlashSerializationException",
+ "You can only serialize strings, numbers, booleans, dates, objects, arrays, nulls, and undefined.");
+ }
+
+ if (i != (args.length - 1))
+ {
+ qs += '&';
+ }
+ }
+
+ return qs;
+}
+
+/**
+ * Private
+ */
+FlashSerializer.prototype._serializeXML = function(obj)
+{
+ var doc = new Object();
+ doc.xml = '';
+ this._serializeNode(obj, doc, null);
+ doc.xml += '';
+ return doc.xml;
+}
+
+/**
+ * Private
+ */
+FlashSerializer.prototype._serializeNode = function(obj, doc, name)
+{
+ switch(typeof(obj))
+ {
+ case 'undefined':
+ doc.xml += '';
+ break;
+ case 'string':
+ doc.xml += ''+this._escapeXml(obj)+'';
+ break;
+ case 'number':
+ doc.xml += ''+obj+'';
+ break;
+ case 'boolean':
+ doc.xml += '';
+ break;
+ case 'object':
+ if (obj == null)
+ {
+ doc.xml += '';
+ }
+ else if (obj instanceof Date)
+ {
+ doc.xml += ''+obj.getTime()+'';
+ }
+ else if (obj instanceof Array)
+ {
+ doc.xml += '';
+ for (var i = 0; i < obj.length; ++i)
+ {
+ this._serializeNode(obj[i], doc, null);
+ }
+ doc.xml += '';
+ }
+ else
+ {
+ doc.xml += '';
+ for (var n in obj)
+ {
+ if (typeof(obj[n]) == 'function')
+ continue;
+ this._serializeNode(obj[n], doc, n);
+ }
+ doc.xml += '';
+ }
+ break;
+ default:
+ throw new Exception("FlashSerializationException",
+ "You can only serialize strings, numbers, booleans, objects, dates, arrays, nulls and undefined");
+ break;
+ }
+}
+
+/**
+ * Private
+ */
+FlashSerializer.prototype._addName= function(name)
+{
+ if (name != null)
+ {
+ return ' name="'+name+'"';
+ }
+ return '';
+}
+
+/**
+ * Private
+ */
+FlashSerializer.prototype._escapeXml = function(str)
+{
+ if (this.useCdata)
+ return '';
+ else
+ return str.replace(/&/g,'&').replace(/ 1)
+ {
+ var justArgs = new Array();
+ for (var i = 1; i < arguments.length; ++i)
+ {
+ justArgs.push(arguments[i]);
+ }
+ qs += ('&' + this.flashSerializer.serialize(justArgs));
+ }
+
+ var divName = '_flash_proxy_' + this.uid;
+ if(!document.getElementById(divName))
+ {
+ var newTarget = document.createElement("div");
+ newTarget.id = divName;
+ document.body.appendChild(newTarget);
+ }
+ var target = document.getElementById(divName);
+ var ft = new FlashTag(this.proxySwfName, 1, 1);
+ ft.setVersion('6,0,65,0');
+ ft.setFlashvars(qs);
+ target.innerHTML = ft.toString();
+}
+
+/**
+ * This is the function that proxies function calls from Flash to JavaScript.
+ * It is called implicitly.
+ */
+FlashProxy.callJS = function()
+{
+ var functionToCall = eval(arguments[0]);
+ var argArray = new Array();
+ for (var i = 1; i < arguments.length; ++i)
+ {
+ argArray.push(arguments[i]);
+ }
+ functionToCall.apply(functionToCall, argArray);
+}
+
Index: lams_learning/web/includes/JavaScriptFlashGateway.swf
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/Attic/JavaScriptFlashGateway.swf,v
diff -u
Binary files differ
Index: lams_learning/web/includes/presence.js
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/Attic/presence.js,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/web/includes/presence.js 16 Oct 2008 06:46:10 -0000 1.1
@@ -0,0 +1,404 @@
+
+/* ******* Constants ******* */
+var GROUPCHAT_MSG = "";
+var PRIVATE_MSG = "private_message";
+var PALETTE = ["#0000FF", "#006699", "#0066FF", "#6633FF", "#00CCFF", "#009900", "#00CC33", "#339900", "#008080", "#66FF66", "#CC6600", "#FF6600", "#FF9900", "#CC6633", "#FF9933", "#990000", "#A50021", "#990033", "#CC3300", "#FF6666", "#330033", "#663399", "#6633CC", "#660099", "#FF00FF", "#999900", "#808000", "#FF9FF2", "#666633", "#292929", "#666666"];
+/* ******* Connection variables ******* */
+var CONFERENCEROOM = "";
+var XMPPDOMAIN = "";
+var USERNAME = "";
+var PASSWORD = "";
+var NICK = "";
+var RESOURCE = "";
+var FROMFLASH;
+/* ******* Helper Functions ******* */
+function getColour(nick) {
+ var charSum = 0;
+ for (var i = 0; i < nick.length; i++) {
+ charSum += nick.charCodeAt(i);
+ }
+ return PALETTE[charSum % (PALETTE.length)];
+}
+function htmlEnc(str) {
+ if (!str) {
+ return null;
+ }
+ str = str.replace(/&/g, "&");
+ str = str.replace(//g, ">");
+ str = str.replace(/\"/g, """);
+ str = str.replace(/\n/g, " ");
+ return str;
+}
+
+function createElem(name, attrs, style, text) {
+ var e = document.createElement(name);
+ if (attrs) {
+ for (var key in attrs) {
+ if (key == "attrClass") {
+ e.className = attrs[key];
+ } else {
+ if (key == "attrId") {
+ e.id = attrs[key];
+ } else {
+ e.setAttribute(key, attrs[key]);
+ }
+ }
+ }
+ }
+ if (style) {
+ for (key in style) {
+ e.style[key] = style[key];
+ }
+ }
+ if (text) {
+ e.appendChild(document.createTextNode(text));
+ }
+ return e;
+}
+
+/* ******* Roster ******* */
+function RosterUser(nick) {
+ this.nick = nick;
+ this.status = "unavailable";
+}
+function getRosterUserByNick(nick) {
+ for (var i = 0; i < this.users.length; i++) {
+ if (this.users[i].nick == nick) {
+ return this.users[i];
+ }
+ }
+ return null;
+}
+function AddRosterUser(user) {
+ this.users[this.users.length] = user;
+}
+function UpdateRosterUser(user) {
+ // TODO do we need this.
+}
+function RemoveRosterUser() {
+}
+function GetAllRosterUsers() {
+ return this.users;
+}
+
+function UpdateRosterDisplay() {
+ if(FROMFLASH){
+ // send users to flash
+ var availableUsers = [];
+ for (var i = 0; i < this.users.length; i++) {
+ if (this.users[i].status != "unavailable") {
+ availableUsers[availableUsers.length] = this.users[i];
+ }
+ }
+ flashProxy.call("sendUsersToFlash", availableUsers);
+ }
+ else {
+ // send roster to no flash version
+ var rosterDiv = document.getElementById("roster");
+ rosterDiv.innerHTML = "";
+ for (var i = 0; i < this.users.length; i++) {
+ if (this.users[i].status != "unavailable") {
+ var className = "unselected";
+ if (i == this.currentIndex) {
+ className = "selected";
+ }
+ var nick = this.users[i].nick;
+ var userDiv = createElem("div", {attrId:"user-" + i, attrClass:className, onClick:"selectUser(this);"}, {width:"100%", color:"#0000FF"}, this.users[i].nick);
+ rosterDiv.appendChild(userDiv);
+ }
+ }
+ }
+}
+function Roster() {
+ this.users = [];
+ this.currentIndex = null;
+ // objects methods
+ this.getUserByNick = getRosterUserByNick;
+ this.addUser = AddRosterUser;
+ this.updateUser = UpdateRosterUser;
+ this.removeUser = RemoveRosterUser;
+ this.updateDisplay = UpdateRosterDisplay;
+ this.getAllUsers = GetAllRosterUsers;
+}
+var roster = new Roster();
+
+function selectUser(userDiv) {
+ if (MODE == "teacher") {
+ var newIndex = userDiv.id.substring(userDiv.id.indexOf("-") + 1, userDiv.id.length);
+ if (roster.currentIndex == newIndex) {
+ roster.currentIndex = null;
+ } else {
+ roster.currentIndex = newIndex;
+ }
+
+ // update "send message to" display
+ var sendToUserSpan = document.getElementById("sendToUser");
+ var sendToEveryoneSpan = document.getElementById("sendToEveryone");
+ if (roster.currentIndex == null) {
+ sendToEveryoneSpan.style.display = "inline";
+ sendToUserSpan.style.display = "none";
+ } else {
+ sendToEveryoneSpan.style.display = "none";
+ sendToUserSpan.style.display = "inline";
+ var nick = roster.users[roster.currentIndex].nick;
+ var nickElem = createElem("span", null, {color:getColour(nick)}, nick);
+ sendToUserSpan.innerHTML = ""; // clear previous user name
+ sendToUserSpan.appendChild(nickElem);
+ }
+ roster.updateDisplay();
+ }
+}
+
+/* ******* Chat functions ******* */
+function setFocusOnTextarea() {
+ document.forms[0].msg.focus();
+}
+function scrollMessageDisplay() {
+ var iRespDiv = document.getElementById("iResp");
+ iRespDiv.scrollTop = iRespDiv.scrollHeight;
+}
+function generateMessageHTML(nick, message, type) {
+ var colour = getColour(nick);
+ var fromElem = createElem("div", {attrClass:"messageFrom"}, null, nick);
+ var msgElem = createElem("div", {attrClass:"message " + type}, {color:colour}, null);
+ msgElem.innerHTML = message;
+ msgElem.insertBefore(fromElem, msgElem.firstChild);
+ return msgElem;
+}
+function updateMessageDisplay(htmlMessage) {
+ var iRespDiv = document.getElementById("iResp");
+ iRespDiv.appendChild(htmlMessage);
+ iRespDiv.scrollTop = iRespDiv.scrollHeight;
+}
+function sendMsg(aForm) {
+ if (aForm.msg.value === "") {
+ return false; // do not send empty messages.
+ }
+ var aMsg = new JSJaCMessage();
+ if (MODE == "teacher" && !(roster.currentIndex === null)) {
+ var toNick = roster.users[roster.currentIndex].nick;
+ aMsg.setTo(CONFERENCEROOM + "/" + toNick);
+ aMsg.setType("chat");
+ var message = "[" + toNick + "] " + aForm.msg.value;
+ aMsg.setBody(message);
+ // apending the private message to the incoming window,
+ // since the jabber server will not echo sent private messages.
+ // TODO: need to check if this is correct behaviour
+ if (!(NICK == toNick)) {
+ updateMessageDisplay(generateMessageHTML(NICK, message, PRIVATE_MSG));
+ }
+ } else {
+ aMsg.setTo(CONFERENCEROOM);
+ aMsg.setType("groupchat");
+ aMsg.setBody(aForm.msg.value);
+ }
+
+ // }
+ aMsg.setFrom(USERNAME + "@" + XMPPDOMAIN + "/" + RESOURCE);
+ con.send(aMsg);
+ aForm.msg.value = "";
+ return false;
+}
+
+/* ******* Event Handlers ******* */
+function handleEvent(aJSJaCPacket) {
+ document.getElementById("iResp").innerHTML += "IN (raw): " + htmlEnc(aJSJaCPacket.xml()) + "
";
+}
+function handleMessage(aJSJaCPacket) {
+ var nick = aJSJaCPacket.getFrom().substring(aJSJaCPacket.getFrom().indexOf("/") + 1);
+ var message = htmlEnc(aJSJaCPacket.getBody());
+ var type = aJSJaCPacket.getType();
+ var htmlMessage;
+ if (type == "chat") {
+ htmlMessage = generateMessageHTML(nick, message, PRIVATE_MSG);
+ } else {
+ if (type == "groupchat") {
+ htmlMessage = generateMessageHTML(nick, message, GROUPCHAT_MSG);
+ } else {
+ /* somethings wrong, dont add anything.*/
+ htmlMessage = "";
+ }
+ }
+ updateMessageDisplay(htmlMessage);
+}
+function handlePresence(presence) {
+ // debug statement for presence
+ //alert("presence");
+ var from = presence.getFrom();
+ var status = presence.getStatus();
+ var show = presence.getShow();
+ var type = presence.getType();
+ // get x element for MUC
+ var x;
+ for (var i = 0; i < presence.getNode().getElementsByTagName("x").length; i++) {
+ if (presence.getNode().getElementsByTagName("x").item(i).getAttribute("xmlns") == "http://jabber.org/protocol/muc#user") {
+ x = presence.getNode().getElementsByTagName("x").item(i);
+ break;
+ }
+ }
+
+ // extract nick.
+ var nick;
+ if (from.indexOf("/") != -1) {
+ nick = from.substring(from.indexOf("/") + 1);
+ }
+ var user = roster.getUserByNick(nick);
+ if (!user) {
+ user = new RosterUser(nick);
+ roster.addUser(user);
+ }
+ if (show) {
+ user.status = show;
+ } else {
+ if (type) {
+ if (type == "unavailable") {
+ user.status = "unavailable";
+ }
+ } else {
+ // default: means presence is available.
+ user.status = "available";
+ }
+ }
+
+ if(FROMFLASH){
+ // notify flash
+ flashProxy.call("sendMessageToFlash", "Presence handled");
+ }
+ else {
+ // NoFlash equivalent
+ }
+
+ roster.updateDisplay();
+}
+function handleConnected() {
+ //debug statement for connecton
+ //alert("connected");
+
+ // send presence
+ var aPresence = new JSJaCPresence();
+ aPresence.setTo(CONFERENCEROOM + "/" + NICK);
+ aPresence.setFrom(USERNAME + "@" + XMPPDOMAIN);
+ var x = aPresence.getDoc().createElement("x");
+ x.setAttribute("xmlns", "http://jabber.org/protocol/muc");
+ x.appendChild(aPresence.getDoc().createElement("password")).appendChild(aPresence.getDoc().createTextNode(PASSWORD));
+ aPresence.getNode().appendChild(x);
+ con.send(aPresence);
+
+ // set up roster
+ roster = new Roster();
+
+ if(FROMFLASH){
+ // notify flash
+ flashProxy.call("sendMessageToFlash", "Connected");
+ }
+ else {
+ // NoFlash equivalent
+ }
+}
+function handleError(e) {
+ //debug statement for error�
+ //alert("error" + e.getAttribute("code"));
+
+ if(FROMFLASH){
+ // notify flash
+ flashProxy.call("sendMessageToFlash", "Code: " + e.getAttribute("code") + " Type: " + e.getAttribute("type"));
+ }
+
+ switch(e.getAttribute("code")){
+ // unauthorized, try register
+ case "401":
+ doLogin(null, null, null, null, null, null, true, null);
+ break;
+ }
+}
+
+function breakPoint() {
+ var i = 0;
+}
+
+/* ******* Init ******* */
+function doLogin(presenceServerUrl, userID, password, resource, chatroom, nickname, register, fromFlash) {
+ try {
+ // if register is set to false (first time login), store connection info, otherwise, just use it again
+ if(!register) {
+ USERNAME = userID;
+ PASSWORD = password;
+ RESOURCE = resource;
+ XMPPDOMAIN = presenceServerUrl;
+ NICK = nickname;
+ CONFERENCEROOM = chatroom + "@conference." + presenceServerUrl;
+ FROMFLASH = fromFlash;
+ // debug statement for connection information
+ //alert(HTTPBASE + USERNAME + PASSWORD + RESOURCE + XMPPDOMAIN + NICK + CONFERENCEROOM + FROMFLASH);
+ }
+
+ // setup args for contructor
+ // HTTPBASE is defined in controlFrame for flash interface and in mainnoflash for flashless interface
+ var oArgs = {httpbase:HTTPBASE, timerval:6000};
+ if (typeof (oDbg) != "undefined") {
+ oArgs.oDbg = oDbg;
+ }
+ con = new JSJaCHttpBindingConnection(oArgs);
+ con.registerHandler("message", handleMessage);
+ con.registerHandler("presence", handlePresence);
+ con.registerHandler("iq", handleEvent);
+ con.registerHandler("onconnect", handleConnected);
+ con.registerHandler("onerror", handleError);
+
+ // setup args for connect method
+ oArgs = {domain:XMPPDOMAIN, username:USERNAME, resource:RESOURCE, pass:PASSWORD, register:register};
+ con.connect(oArgs);
+
+ if(FROMFLASH){
+ // notify flash
+ flashProxy.call("sendMessageToFlash", "Attempting connection");
+ }
+ else {
+ // NoFlash equivalent
+ }
+ }
+ catch (e) {
+ flashProxy.call("sendMessageToFlash", e.toString());
+ }
+ finally {
+ return false;
+ }
+}
+function getUsers() {
+ flashProxy.call("sendMessageToFlash", GetAllRosterUsers());
+}
+function init() {
+ /*
+ if (typeof (Debugger) == "function") {
+ var oDbg = new Debugger(4, "simpleclient");
+ oDbg.start();
+ }
+ doLogin();
+ */
+}
+onload = init;
+onunload = function () {
+ if (typeof (con) != "undefined" && con.disconnect) {
+ con.disconnect();
+ }
+};
+/* ******* Helper functions ******* */
+function checkEnter(e) { //e is event object passed from function invocation
+ var characterCode; //literal character code will be stored in this variable
+ if (e && e.which) { //if which property of event object is supported (NN4)
+ e = e;
+ characterCode = e.which; //character code is contained in NN4's which property
+ } else {
+ e = event;
+ characterCode = e.keyCode; //character code is contained in IE's keyCode property
+ }
+ if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
+ //document.forms[0].submit(); //submit the form
+ sendMsg(document.forms[0]);
+ return false;
+ } else {
+ return true;
+ }
+}
+
Index: lams_learning/web/includes/jsjac-1.3.1/AUTHORS
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/jsjac-1.3.1/Attic/AUTHORS,v
diff -u
Binary files differ
Index: lams_learning/web/includes/jsjac-1.3.1/COPYING
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/jsjac-1.3.1/Attic/COPYING,v
diff -u
Binary files differ
Index: lams_learning/web/includes/jsjac-1.3.1/ChangeLog
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/jsjac-1.3.1/Attic/ChangeLog,v
diff -u
Binary files differ
Index: lams_learning/web/includes/jsjac-1.3.1/MPL-1.1.txt
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/jsjac-1.3.1/Attic/MPL-1.1.txt,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/web/includes/jsjac-1.3.1/MPL-1.1.txt 16 Oct 2008 06:46:10 -0000 1.1
@@ -0,0 +1,470 @@
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
+
Index: lams_learning/web/includes/jsjac-1.3.1/Makefile
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/jsjac-1.3.1/Attic/Makefile,v
diff -u
Binary files differ
Index: lams_learning/web/includes/jsjac-1.3.1/README
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/jsjac-1.3.1/Attic/README,v
diff -u
Binary files differ
Index: lams_learning/web/includes/jsjac-1.3.1/gpl-2.0.txt
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/jsjac-1.3.1/Attic/gpl-2.0.txt,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/web/includes/jsjac-1.3.1/gpl-2.0.txt 16 Oct 2008 06:46:10 -0000 1.1
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
Index: lams_learning/web/includes/jsjac-1.3.1/jsjac.js
===================================================================
RCS file: /usr/local/cvsroot/lams_learning/web/includes/jsjac-1.3.1/Attic/jsjac.js,v
diff -u
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ lams_learning/web/includes/jsjac-1.3.1/jsjac.js 16 Oct 2008 06:46:10 -0000 1.1
@@ -0,0 +1,506 @@
+/* JSJaC - The JavaScript Jabber Client Library
+ * Copyright (C) 2004-2008 Stefan Strigler
+ *
+ * JSJaC is licensed under the terms of the Mozilla Public License
+ * version 1.1 or, at your option, under the terms of the GNU General
+ * Public License version 2 or subsequent, or the terms of the GNU Lesser
+ * General Public License version 2.1 or subsequent.
+ *
+ * Please visit http://zeank.in-berlin.de/jsjac/ for details about JSJaC.
+ */
+
+var JSJAC_HAVEKEYS = true; // whether to use keys
+var JSJAC_NKEYS = 16; // number of keys to generate
+var JSJAC_INACTIVITY = 300; // qnd hack to make suspend/resume work more smoothly with polling
+var JSJAC_ERR_COUNT = 10; // number of retries in case of connection errors
+
+var JSJAC_ALLOW_PLAIN = true; // whether to allow plaintext logins
+
+var JSJAC_CHECKQUEUEINTERVAL = 1; // msecs to poll send queue
+var JSJAC_CHECKINQUEUEINTERVAL = 1; // msecs to poll incoming queue
+
+// Options specific to HTTP Binding (BOSH)
+var JSJACHBC_BOSH_VERSION = "1.6";
+var JSJACHBC_USE_BOSH_VER = true;
+
+var JSJACHBC_MAX_HOLD = 1;
+var JSJACHBC_MAX_WAIT = 300;
+
+var JSJACHBC_MAXPAUSE = 120;
+
+/*** END CONFIG ***/
+
+
+String.prototype.htmlEnc=function(){var str=this.replace(/&/g,"&");str=str.replace(//g,">");str=str.replace(/\"/g,""");str=str.replace(/\n/g," ");return str;};Date.jab2date=function(ts){var date=new Date(Date.UTC(ts.substr(0,4),ts.substr(5,2)-1,ts.substr(8,2),ts.substr(11,2),ts.substr(14,2),ts.substr(17,2)));if(ts.substr(ts.length-6,1)!='Z'){var offset=new Date();offset.setTime(0);offset.setUTCHours(ts.substr(ts.length-5,2));offset.setUTCMinutes(ts.substr(ts.length-2,2));if(ts.substr(ts.length-6,1)=='+')
+date.setTime(date.getTime()-offset.getTime());else if(ts.substr(ts.length-6,1)=='-')
+date.setTime(date.getTime()+offset.getTime());}
+return date;};Date.hrTime=function(ts){return Date.jab2date(ts).toLocaleString();};Date.prototype.jabberDate=function(){var padZero=function(i){if(i<10)return"0"+i;return i;};var jDate=this.getUTCFullYear()+"-";jDate+=padZero(this.getUTCMonth()+1)+"-";jDate+=padZero(this.getUTCDate())+"T";jDate+=padZero(this.getUTCHours())+":";jDate+=padZero(this.getUTCMinutes())+":";jDate+=padZero(this.getUTCSeconds())+"Z";return jDate;};Number.max=function(A,B){return(A>B)?A:B;};var hexcase=0;var b64pad="=";var chrsz=8;function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length*chrsz));}
+function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length*chrsz));}
+function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length*chrsz));}
+function hex_hmac_sha1(key,data){return binb2hex(core_hmac_sha1(key,data));}
+function b64_hmac_sha1(key,data){return binb2b64(core_hmac_sha1(key,data));}
+function str_hmac_sha1(key,data){return binb2str(core_hmac_sha1(key,data));}
+function sha1_vm_test()
+{return hex_sha1("abc")=="a9993e364706816aba3e25717850c26c9cd0d89d";}
+function core_sha1(x,len)
+{x[len>>5]|=0x80<<(24-len%32);x[((len+64>>9)<<4)+15]=len;var w=Array(80);var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var e=-1009589776;for(var i=0;i16)bkey=core_sha1(bkey,key.length*chrsz);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++)
+{ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}
+var hash=core_sha1(ipad.concat(str2binb(data)),512+data.length*chrsz);return core_sha1(opad.concat(hash),512+160);}
+function rol(num,cnt)
+{return(num<>>(32-cnt));}
+function str2binb(str)
+{var bin=Array();var mask=(1<>5]|=(str.charCodeAt(i/chrsz)&mask)<<(32-chrsz-i%32);return bin;}
+function binb2str(bin)
+{var str="";var mask=(1<>5]>>>(32-chrsz-i%32))&mask);return str;}
+function binb2hex(binarray)
+{var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i>2]>>((3-i%4)*8+4))&0xF)+
+hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8))&0xF);}
+return str;}
+function binb2b64(binarray)
+{var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;i>2]>>8*(3-i%4))&0xFF)<<16)|(((binarray[i+1>>2]>>8*(3-(i+1)%4))&0xFF)<<8)|((binarray[i+2>>2]>>8*(3-(i+2)%4))&0xFF);for(var j=0;j<4;j++)
+{if(i*8+j*6>binarray.length*32)str+=b64pad;else str+=tab.charAt((triplet>>6*(3-j))&0x3F);}}
+return str;}
+function hex_md5(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz));}
+function b64_md5(s){return binl2b64(core_md5(str2binl(s),s.length*chrsz));}
+function str_md5(s){return binl2str(core_md5(str2binl(s),s.length*chrsz));}
+function hex_hmac_md5(key,data){return binl2hex(core_hmac_md5(key,data));}
+function b64_hmac_md5(key,data){return binl2b64(core_hmac_md5(key,data));}
+function str_hmac_md5(key,data){return binl2str(core_hmac_md5(key,data));}
+function md5_vm_test()
+{return hex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72";}
+function core_md5(x,len)
+{x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i16)bkey=core_md5(bkey,key.length*chrsz);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++)
+{ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}
+var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128);}
+function safe_add(x,y)
+{var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);}
+function bit_rol(num,cnt)
+{return(num<>>(32-cnt));}
+function str2binl(str)
+{var bin=Array();var mask=(1<>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32);return bin;}
+function binl2str(bin)
+{var str="";var mask=(1<>5]>>>(i%32))&mask);return str;}
+function binl2hex(binarray)
+{var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i>2]>>((i%4)*8+4))&0xF)+
+hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF);}
+return str;}
+function binl2b64(binarray)
+{var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;i>2]>>8*(i%4))&0xFF)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&0xFF);for(var j=0;j<4;j++)
+{if(i*8+j*6>binarray.length*32)str+=b64pad;else str+=tab.charAt((triplet>>6*(3-j))&0x3F);}}
+return str;}
+function utf8t2d(t)
+{t=t.replace(/\r\n/g,"\n");var d=new Array;var test=String.fromCharCode(237);if(test.charCodeAt(0)<0)
+for(var n=0;n0)
+d[d.length]=c;else{d[d.length]=(((256+c)>>6)|192);d[d.length]=(((256+c)&63)|128);}}
+else
+for(var n=0;n127)&&(c<2048)){d[d.length]=((c>>6)|192);d[d.length]=((c&63)|128);}
+else{d[d.length]=((c>>12)|224);d[d.length]=(((c>>6)&63)|128);d[d.length]=((c&63)|128);}}
+return d;}
+function utf8d2t(d)
+{var r=new Array;var i=0;while(i191)&&(d[i]<224)){r[r.length]=String.fromCharCode(((d[i]&31)<<6)|(d[i+1]&63));i+=2;}
+else{r[r.length]=String.fromCharCode(((d[i]&15)<<12)|((d[i+1]&63)<<6)|(d[i+2]&63));i+=3;}}
+return r.join("");}
+function b64arrays(){var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';b64=new Array();f64=new Array();for(var i=0;i>2];r[r.length]=b64[((d[i]&3)<<4)|(d[i+1]>>4)];r[r.length]=b64[((d[i+1]&15)<<2)|(d[i+2]>>6)];r[r.length]=b64[d[i+2]&63];i+=3;}
+if((dl%3)==1)
+r[r.length-1]=r[r.length-2]="=";if((dl%3)==2)
+r[r.length-1]="=";var t=r.join("");return t;}
+function b64t2d(t){var d=new Array;var i=0;t=t.replace(/\n|\r/g,"");t=t.replace(/=/g,"");while(i>4);d[d.length]=(((f64[t.charAt(i+1)]&15)<<4)|(f64[t.charAt(i+2)]>>2));d[d.length]=(((f64[t.charAt(i+2)]&3)<<6)|(f64[t.charAt(i+3)]));i+=4;}
+if(t.length%4==2)
+d=d.slice(0,d.length-2);if(t.length%4==3)
+d=d.slice(0,d.length-1);return d;}
+if(typeof(atob)=='undefined'||typeof(btoa)=='undefined')
+b64arrays();if(typeof(atob)=='undefined'){atob=function(s){return utf8d2t(b64t2d(s));}}
+if(typeof(btoa)=='undefined'){btoa=function(s){return b64d2t(utf8t2d(s));}}
+function cnonce(size){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";var cnonce='';for(var i=0;i2)
+eArg.childName=arguments[1];if(arguments.length>3)
+eArg.childNS=arguments[2];if(arguments.length>4)
+eArg.type=arguments[3];if(!this._events[event])
+this._events[event]=new Array(eArg);else
+this._events[event]=this._events[event].concat(eArg);this._events[event]=this._events[event].sort(function(a,b){var aRank=0;var bRank=0;with(a){if(type=='*')
+aRank++;if(childNS=='*')
+aRank++;if(childName=='*')
+aRank++;}
+with(b){if(type=='*')
+bRank++;if(childNS=='*')
+bRank++;if(childName=='*')
+bRank++;}
+if(aRank>bRank)
+return 1;if(aRank",this._doSASLAuthDone);}
+this.oDbg.log("SASL ANONYMOUS requested but not supported",1);}else{if(this.mechs['DIGEST-MD5']){this.oDbg.log("SASL using mechanism 'DIGEST-MD5'",2);return this._sendRaw("",this._doSASLAuthDigestMd5S1);}else if(this.allow_plain&&this.mechs['PLAIN']){this.oDbg.log("SASL using mechanism 'PLAIN'",2);var authStr=this.username+'@'+
+this.domain+String.fromCharCode(0)+
+this.username+String.fromCharCode(0)+
+this.pass;this.oDbg.log("authenticating with '"+authStr+"'",2);authStr=btoa(authStr);return this._sendRaw(""+authStr+"",this._doSASLAuthDone);}
+this.oDbg.log("No SASL mechanism applied",1);this.authtype='nonsasl';}
+return false;};JSJaCConnection.prototype._doSASLAuthDigestMd5S1=function(el){if(el.nodeName!="challenge"){this.oDbg.log("challenge missing",1);this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));this.disconnect();}else{var challenge=atob(el.firstChild.nodeValue);this.oDbg.log("got challenge: "+challenge,2);this._nonce=challenge.substring(challenge.indexOf("nonce=")+7);this._nonce=this._nonce.substring(0,this._nonce.indexOf("\""));this.oDbg.log("nonce: "+this._nonce,2);if(this._nonce==''||this._nonce.indexOf('\"')!=-1){this.oDbg.log("nonce not valid, aborting",1);this.disconnect();return;}
+this._digest_uri="xmpp/";this._digest_uri+=this.domain;this._cnonce=cnonce(14);this._nc='00000001';var A1=str_md5(this.username+':'+this.domain+':'+this.pass)+':'+this._nonce+':'+this._cnonce;var A2='AUTHENTICATE:'+this._digest_uri;var response=hex_md5(hex_md5(A1)+':'+this._nonce+':'+this._nc+':'+
+this._cnonce+':auth:'+hex_md5(A2));var rPlain='username="'+this.username+'",realm="'+this.domain+'",nonce="'+this._nonce+'",cnonce="'+this._cnonce+'",nc="'+this._nc+'",qop=auth,digest-uri="'+this._digest_uri+'",response="'+response+'",charset=utf-8';this.oDbg.log("response: "+rPlain,2);this._sendRaw(""+
+binb2b64(str2binb(rPlain))+"",this._doSASLAuthDigestMd5S2);}};JSJaCConnection.prototype._doSASLAuthDigestMd5S2=function(el){if(el.nodeName=='failure'){if(el.xml)
+this.oDbg.log("auth error: "+el.xml,1);else
+this.oDbg.log("auth error",1);this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));this.disconnect();return;}
+var response=atob(el.firstChild.nodeValue);this.oDbg.log("response: "+response,2);var rspauth=response.substring(response.indexOf("rspauth=")+8);this.oDbg.log("rspauth: "+rspauth,2);var A1=str_md5(this.username+':'+this.domain+':'+this.pass)+':'+this._nonce+':'+this._cnonce;var A2=':'+this._digest_uri;var rsptest=hex_md5(hex_md5(A1)+':'+this._nonce+':'+this._nc+':'+
+this._cnonce+':auth:'+hex_md5(A2));this.oDbg.log("rsptest: "+rsptest,2);if(rsptest!=rspauth){this.oDbg.log("SASL Digest-MD5: server repsonse with wrong rspauth",1);this.disconnect();return;}
+if(el.nodeName=='success')
+this._reInitStream(this.domain,this._doStreamBind);else
+this._sendRaw("",this._doSASLAuthDone);};JSJaCConnection.prototype._doSASLAuthDone=function(el){if(el.nodeName!='success'){this.oDbg.log("auth failed",1);this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));this.disconnect();}else
+this._reInitStream(this.domain,this._doStreamBind);};JSJaCConnection.prototype._doStreamBind=function(){var iq=new JSJaCIQ();iq.setIQ(this.domain,'set','bind_1');iq.appendNode("bind",{xmlns:"urn:ietf:params:xml:ns:xmpp-bind"},[["resource",this.resource]]);this.oDbg.log(iq.xml());this.send(iq,this._doXMPPSess);};JSJaCConnection.prototype._doXMPPSess=function(iq){if(iq.getType()!='result'||iq.getType()=='error'){this.disconnect();if(iq.getType()=='error')
+this._handleEvent('onerror',iq.getChild('error'));return;}
+this.fulljid=iq.getChildVal("jid");this.jid=this.fulljid.substring(0,this.fulljid.lastIndexOf('/'));iq=new JSJaCIQ();iq.setIQ(this.domain,'set','sess_1');iq.appendNode("session",{xmlns:"urn:ietf:params:xml:ns:xmpp-session"},[]);this.oDbg.log(iq.xml());this.send(iq,this._doXMPPSessDone);};JSJaCConnection.prototype._doXMPPSessDone=function(iq){if(iq.getType()!='result'||iq.getType()=='error'){this.disconnect();if(iq.getType()=='error')
+this._handleEvent('onerror',iq.getChild('error'));return;}else
+this._handleEvent('onconnect');};JSJaCConnection.prototype._handleEvent=function(event,arg){event=event.toLowerCase();this.oDbg.log("incoming event '"+event+"'",3);if(!this._events[event])
+return;this.oDbg.log("handling event '"+event+"'",2);for(var i=0;i match for handler "+aEvent.handler,3);}
+if(aEvent.handler.call(this,arg))
+break;}
+else
+if(aEvent.handler.call(this))
+break;}catch(e){this.oDbg.log(aEvent.handler+"\n>>>"+e.name+": "+e.message,1);}}}};JSJaCConnection.prototype._handlePID=function(aJSJaCPacket){if(!aJSJaCPacket.getID())
+return false;for(var i in this._regIDs){if(this._regIDs.hasOwnProperty(i)&&this._regIDs[i]&&i==aJSJaCPacket.getID()){var pID=aJSJaCPacket.getID();this.oDbg.log("handling "+pID,3);try{if(this._regIDs[i].cb.call(this,aJSJaCPacket,this._regIDs[i].arg)===false){return false;}else{this._unregisterPID(pID);return true;}}catch(e){this.oDbg.log(e.name+": "+e.message);this._unregisterPID(pID);return true;}}}
+return false;};JSJaCConnection.prototype._handleResponse=function(req){var rootEl=this._parseResponse(req);if(!rootEl)
+return;for(var i=0;iJSJAC_ERR_COUNT){this._abort();return false;}
+this._setStatus('onerror_fallback');setTimeout(JSJaC.bind(this._resume,this),this.getPollInterval());return false;},this);}catch(e){}
+var reqstr=this._getRequestString();if(typeof(this._rid)!='undefined')
+this._req[slot].rid=this._rid;this.oDbg.log("sending: "+reqstr,4);this._req[slot].r.send(reqstr);};JSJaCConnection.prototype._registerPID=function(pID,cb,arg){if(!pID||!cb)
+return false;this._regIDs[pID]=new Object();this._regIDs[pID].cb=cb;if(arg)
+this._regIDs[pID].arg=arg;this.oDbg.log("registered "+pID,3);return true;};JSJaCConnection.prototype._sendEmpty=function JSJaCSendEmpty(){var slot=this._getFreeSlot();this._req[slot]=this._setupRequest(true);this._req[slot].r.onreadystatechange=JSJaC.bind(function(){if(this._req[slot].r.readyState==4){this.oDbg.log("async recv: "+this._req[slot].r.responseText,4);this._getStreamID(slot);}},this);if(typeof(this._req[slot].r.onerror)!='undefined'){this._req[slot].r.onerror=JSJaC.bind(function(e){this.oDbg.log('XmlHttpRequest error',1);return false;},this);}
+var reqstr=this._getRequestString();this.oDbg.log("sending: "+reqstr,4);this._req[slot].r.send(reqstr);};JSJaCConnection.prototype._sendRaw=function(xml,cb,arg){if(cb)
+this._sendRawCallbacks.push({fn:cb,arg:arg});this._pQueue.push(xml);this._process();return true;};JSJaCConnection.prototype._setStatus=function(status){if(!status||status=='')
+return;if(status!=this._status){this._status=status;this._handleEvent('onstatuschanged',status);this._handleEvent('status_changed',status);}};JSJaCConnection.prototype._unregisterPID=function(pID){if(!this._regIDs[pID])
+return false;this._regIDs[pID]=null;this.oDbg.log("unregistered "+pID,3);return true;};function JSJaCConsoleLogger(level){this.level=level||4;this.start=function(){};this.log=function(msg,level){level=level||0;if(level>this.level)
+return;if(typeof(console)=='undefined')
+return;try{switch(level){case 0:console.warn(msg);break;case 1:console.error(msg);break;case 2:console.info(msg);break;case 4:console.debug(msg);break;default:console.log(msg);break;}}catch(e){try{console.log(msg)}catch(e){}}};this.setLevel=function(level){this.level=level;return this;};this.getLevel=function(){return this.level;};}
+function JSJaCCookie(name,value,secs)
+{if(window==this)
+return new JSJaCCookie(name,value,secs);this.name=name;this.value=value;this.expires=secs;this.write=function(){if(this.secs){var date=new Date();date.setTime(date.getTime()+(this.secs*1000));var expires="; expires="+date.toGMTString();}else
+var expires="";document.cookie=this.getName()+"="+this.getValue()+expires+"; path=/";};this.erase=function(){var c=new JSJaCCookie(this.getName(),"",-1);c.write();};this.getName=function(){return this.name;};this.setName=function(name){this.name=name;return this;};this.getValue=function(){return this.value;};this.setValue=function(value){this.value=value;return this;};}
+JSJaCCookie.read=function(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i','@'];function JSJaCJID(jid){this._node='';this._domain='';this._resource='';if(typeof(jid)=='string'){if(jid.indexOf('@')!=-1){this.setNode(jid.substring(0,jid.indexOf('@')));jid=jid.substring(jid.indexOf('@')+1);}
+if(jid.indexOf('/')!=-1){this.setResource(jid.substring(jid.indexOf('/')+1));jid=jid.substring(0,jid.indexOf('/'));}
+this.setDomain(jid);}else{this.setNode(jid.node);this.setDomain(jid.domain);this.setResource(jid.resource);}}
+JSJaCJID.prototype.getNode=function(){return this._node;};JSJaCJID.prototype.getDomain=function(){return this._domain;};JSJaCJID.prototype.getResource=function(){return this._resource;};JSJaCJID.prototype.setNode=function(node){JSJaCJID._checkNodeName(node);this._node=node||'';return this;};JSJaCJID.prototype.setDomain=function(domain){if(!domain||domain=='')
+throw new JSJaCJIDInvalidException("domain name missing");JSJaCJID._checkNodeName(domain);this._domain=domain;return this;};JSJaCJID.prototype.setResource=function(resource){this._resource=resource||'';return this;};JSJaCJID.prototype.toString=function(){var jid='';if(this.getNode()&&this.getNode()!='')
+jid=this.getNode()+'@';jid+=this.getDomain();if(this.getResource()&&this.getResource()!="")
+jid+='/'+this.getResource();return jid;};JSJaCJID.prototype.removeResource=function(){return this.setResource();};JSJaCJID.prototype.clone=function(){return new JSJaCJID(this.toString());};JSJaCJID.prototype.isEntity=function(jid){if(typeof jid=='string')
+jid=(new JSJaCJID(jid));jid.removeResource();return(this.clone().removeResource().toString()===jid.toString());};JSJaCJID._checkNodeName=function(nodeprep){if(!nodeprep||nodeprep=='')
+return;for(var i=0;ithis._inactivity*1000)
+this._timerval=this._inactivity*1000;else
+this._timerval=timerval;}
+return this._timerval;};JSJaCHttpBindingConnection.prototype.isPolling=function(){return(this._hold==0)};JSJaCHttpBindingConnection.prototype._getFreeSlot=function(){for(var i=0;i"+raw+xml+"";while(this._pQueue.length){var curNode=this._pQueue[0];reqstr+=curNode;this._pQueue=this._pQueue.slice(1,this._pQueue.length);}
+reqstr+="