//begin _assets/jsolait/jsolait.js
Class=function(name,base1,classScope){
var args=[];
for(var i=0;i<arguments.length;i++){
args[i]=arguments[i];
}
classScope=args.pop();
var classID=Class.__idcount__++;
if((args.length>0)&&(typeof args[0]=='string')){
name=args.shift();
}else{
name="anonymous"+classID;
}
var bases=args;
var __class__={__isArray__:false,
__name__:name,
__bases__:bases,
__id__:'@'+classID,
__str__:function(){
return "[class %s]".format(this.__name__);
}
};
var baseProtos=[];
var proto;
if(bases.length==0){
proto={};
proto.__str__=function(){
return "[%s %s]".format(this.__class__.prototype.__call__===undefined?'object':'callable',this.__class__.__name__);
};
__class__.__bases__=[Object];
}else{
var baseProto;
for(var i=0;i<bases.length;i++){
var baseClass=bases[i];
baseProtos.push(baseClass.prototype);
if(baseClass.__createProto__!==undefined){
baseProto=baseClass.__createProto__(bases);
}else{
baseProto=new baseClass(Class);
}
__class__.__isArray__=__class__.__isArray__||baseClass.__isArray__;
if(i==0){
proto=baseProto;
}else{
for(var key in baseProto){
if(proto[key]===undefined){
proto[key]=baseProto[key];
}
}
}
for(var key in baseClass){
if((key!='prototype')&&(__class__[key]===undefined)){
__class__[key]=baseClass[key];
}
}
}
}
if(proto.__id__===undefined){
proto.__id__=function(){
this.__id__='@'+(Class.__idcount__++);
return this.__id__;
};
}
proto.__class__=__class__;
if(classScope.length-1>baseProtos.length){
var privId='__priv__'+__class__.__id__;
classScope.apply(this,[proto,privId].concat(baseProtos));
}else{
classScope.apply(this,[proto].concat(baseProtos));
}
proto.toString=proto.__str__;
if(proto.__call__){
var NewClass=function(calledBy){
if(calledBy!==Class){
var rslt=function(){
return rslt.__call__.apply(rslt,arguments);
};
var proto=arguments.callee.prototype;
for(var n in proto){
rslt[n]=proto[n];
}
rslt.constructor=proto.__class__;
rslt.toString=proto.__str__;
if(rslt.__init__){
rslt.__init__.apply(rslt,arguments);
}
return rslt;
}
};
}else if(__class__.__isArray__){
var NewClass=function(calledBy){
if(calledBy!==Class){
rslt=[];
var proto=arguments.callee.prototype;
for(var n in proto){
rslt[n]=proto[n];
}
rslt.constructor=proto.__class__;
rslt.toString=proto.__str__;
if(rslt.__init__){
rslt.__init__.apply(rslt,arguments);
}else{
if(arguments.length==1){
rslt.length=arguments[0];
}else{
for(var i=0;i<arguments.length;i++){
rslt.push(arguments[i]);
}
}
}
return rslt;
}
};}else{
var NewClass=function(calledBy){
if(calledBy!==Class){
if(this.__init__){
this.__init__.apply(this,arguments);
}
}
};
}
proto.constructor=NewClass;
proto.__class__=NewClass;
NewClass.prototype=proto;
for(var key in __class__){
NewClass[key]=__class__[key];
}
NewClass.toString=__class__.__str__;
return NewClass;
};
Class.__idcount__=0;
Class.__str__=Class.toString=function(){return "[object Class]";};
Class.__createProto__=function(){throw "Can't use Class as a base class.";};
Function.__createProto__=function(){throw "Cannot inherit from Function. implement the callable interface instead using YourClass::__call__.";};
Array.__createProto__=function(){var r=[];r.__str__=Array.prototype.toString;return r;};
Array.__isArray__=true;
Array.__str__=Array.toString=function(){return "[class Array]";};
Object.__str__=Object.toString=function(){return "[class Object]";};
Number.__str__=Number.toString=function(){return "[class Number]";};
String.__str__=String.toString=function(){return "[class String]";};
str=String;
repr=function(obj){
if(obj==null){
return null;
}else if(obj.__repr__){
return obj.__repr__();
}else{
switch(typeof obj){
case "string":
obj=obj.replace(/\\/g,"\\\\").replace(/\"/g,"\\\"").replace(/\n/g,"\\n").replace(/\r/g,"\\r");
return '"'+obj+'"';
case "boolean":case "number":
return ""+obj;
case "object":
var out=[];
if(obj==null){
return "null";
}else if(obj instanceof Array){
for(var i=0;i<obj.length;i++){
out.push(repr(obj[i]));
}
return "["+out.join(",")+"]";
}else if(obj instanceof Object){
for(var key in obj){
out.push(repr(key)+":"+repr(obj[key]));
}
return "{"+out.join(",")+"}";
}
}
}
};
id=function(obj,forceId){
switch(typeof obj.__id__){
case "undefined":
if(obj instanceof String||typeof obj=='string'){
return '$'+obj;
}else if(obj instanceof Number||typeof obj=='number'){
return '#'+obj;
}else if(forceId){
obj.__id__='@'+(Class.__idcount__++);
return obj.__id__;
}else{
throw new jsolait.Exception('Objec cannot be IDed: %s'.format(obj));
}
case "function":
return obj.__id__();
default:
return obj.__id__;
}
};
bind=function(obj,fn){
return function(){
return fn.apply(obj,arguments);
};
};
isinstance=function(obj,cls){
if(obj instanceof cls){
return true;
}else{
return issubclass(obj.constructor,cls);
}
};
issubclass=function(cls,baseclass){
if(baseclass===Object||cls===baseclass||(cls.prototype instanceof baseclass)){
return true;
}else{
var bases=cls.__bases__;
if(bases!=null){
for(var i=0;i<bases.length;i++){
if(bases[i]===baseclass){
return true;
}
}
for(var i=0;i<bases.length;i++){
if(issubclass(bases[i],baseclass)){
return true;
}
}
}
return false;
}
};
Module=function(name,version,moduleScope){
var newMod=new Module.ModuleClass(name,version,Module.currentURI);
try{
moduleScope.call(newMod,newMod);
}catch(e){
throw new Module.ModuleScopeExecFailed(newMod,e);
}
for(var n in newMod){
var obj=newMod[n];
if(typeof obj=='function'){
obj.__name__=n;
}
}
jsolait.registerModule(newMod);
return newMod;
};
Module.ModuleClass=Class(function(publ){
publ.name;
publ.version;
publ.__sourceURI__;
publ.Exception;
publ.__init__=function(name,version,sourceURI){
this.name=name;
this.version=version;
this.__sourceURI__=sourceURI;
this.Exception=Class(Module.Exception,function(){});
this.Exception.prototype.module=this;
};
publ.__str__=function(){
return "[module '%s' version: %s]".format(this.name,(this.version+'').replace(/\$Revision:\s(\d+) \$/,"rev.$1"));
};
});
Module.toString=function(){
return "[object Module]";
};
Module.__createProto__=function(){
throw "Can't use Module as a base class.";
};
Module.Exception=Class("Exception",function(publ){
publ.__init__=function(msg,trace){
this.name=this.constructor.__name__;
this.message=''+msg;
this.trace=trace;
};
publ.__str__=function(){
return this.toTraceString();
};
publ.toTraceString=function(indent){
indent=indent==null?0:indent;
var s="%s in %s:\n%s".format(this.name,this.module,this.message.indent(4)).indent(indent);
if(this.trace){
if(this.trace.toTraceString){
s+=('\n\nbecause:\n'+this.trace.toTraceString(indent+4));
}else{
s+=(this.trace+'\n').indent(indent+4);
}
}
return s;
};
publ.name;
publ.message;
publ.module="jsolait";
publ.trace;
});
Module.ModuleScopeExecFailed=Class("ModuleScopeExecFailed",Module.Exception,function(publ,supr){
publ.__init__=function(module,trace){
supr.__init__.call(this,"Failed to run the module scope for %s".format(module),trace);
this.failedModule=module;
};
publ.module;
});
Module("jsolait","$Revision: 61 $",function(mod){
jsolait=mod;
mod.modules={};
mod.knownModuleURIs={"async":"%(baseURI)s/lib/async.js","codecs":"%(baseURI)s/lib/codecs.js","crypto":"%(baseURI)s/lib/crypto.js","dom":"%(baseURI)s/lib/dom.js","forms":"%(baseURI)s/lib/forms.js","iter":"%(baseURI)s/lib/iter.js","jsonrpc":"%(baseURI)s/lib/jsonrpc.js","lang":"%(baseURI)s/lib/lang.js","operators":"%(baseURI)s/lib/operators.js","sets":"%(baseURI)s/lib/sets.js","strings":"%(baseURI)s/lib/strings.js","testing":"%(baseURI)s/lib/testing.js","urllib":"%(baseURI)s/lib/urllib.js","xml":"%(baseURI)s/lib/xml.js","xmlrpc":"%(baseURI)s/lib/xmlrpc.js",".svn":"%(baseURI)s/lib/.svn/","net":"%(baseURI)s/lib/net/"};
mod.moduleSearchURIs=["."];
mod.baseURI="./jsolait";
mod.packagesURI="%(baseURI)s/packages";
var getHTTP=function(){
var obj;
try{
obj=new XMLHttpRequest();
}catch(e){
try{
obj=new ActiveXObject("Msxml2.XMLHTTP.4.0");
}catch(e){
try{
obj=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
obj=new ActiveXObject("microsoft.XMLHTTP");
}catch(e){
throw new mod.Exception("Unable to get an HTTP request object.");
}
}
}
}
return obj;
};
mod.loadURI=function(uri,headers){
headers=(headers!==undefined)?headers:[];
try{
var xmlhttp=getHTTP();
xmlhttp.open("GET",uri,false);
for(var i=0;i<headers.length;i++){
xmlhttp.setRequestHeader(headers[i][0],headers[i][1]);
}
xmlhttp.send("");
}catch(e){
throw new mod.LoadURIFailed(uri,e);
}
if(xmlhttp.status==200||xmlhttp.status==0||xmlhttp.status==null||xmlhttp.status==304){
var s=new String(xmlhttp.responseText);
s.__sourceURI__=uri;
return s;
}else{
throw new mod.LoadURIFailed(uri,new mod.Exception("Server did not respond with 200"));
}
};
mod.LoadURIFailed=Class(mod.Exception,function(publ,priv,supr){
publ.__init__=function(sourceURI,trace){
supr.__init__.call(this,"Failed to load file: '%s'".format(sourceURI.indent(2)),trace);
this.sourceURI=sourceURI;
};
publ.sourceURI;
});
mod.__imprt__=function(name){
if(mod.modules[name]){
return mod.modules[name];
}else{
var src,modPath;
var searchURIs=[];
if(mod.knownModuleURIs[name]!=undefined){
searchURIs.push(mod.knownModuleURIs[name].format(mod));
}else{
name=name.split('.');
if(name.length>1){
if(mod.knownModuleURIs[name[0]]!=undefined){
var uri=mod.knownModuleURIs[name[0]].format(mod);
searchURIs.push("%s/%s.js".format(uri,name.slice(1).join('/')));
}
searchURIs.push("%s/%s.js".format(mod.packagesURI.format(mod),name.join('/')));
}
for(var i=0;i<mod.moduleSearchURIs.length;i++){
searchURIs.push("%s/%s.js".format(mod.moduleSearchURIs[i].format(mod),name.join("/")));
}
name=name.join(".");
}
var failedURIs=[];
for(var i=0;i<searchURIs.length;i++){
try{
src=mod.loadURI(searchURIs[i]);
break;
}catch(e){
failedURIs.push(e.sourceURI);
}
}
if(src==null){
throw new mod.ImportFailed(name,failedURIs);
}else{
try{
var srcURI=src.__sourceURI__;
src='Module.currentURI="%s";\n%s\nModule.currentURI=null;\n'.format(src.__sourceURI__.replace(/\\/g,'\\\\'),src);
var f=new Function("",src);
f();
}catch(e){
throw new mod.ImportFailed(name,[srcURI],e);
}
if(mod.modules[name]!=null){
return mod.modules[name];
}else{
throw new mod.ImportFailed(name,[srcURI],new mod.Exception("Module did not register itself and cannot be imported. "+name));
}
}
}
};
mod.ImportFailed=Class(mod.Exception,function(publ,supr){
publ.__init__=function(moduleName,moduleURIs,trace){
supr.__init__.call(this,"Failed to import module: '%s' from:\n%s".format(moduleName,moduleURIs.join(',\n').indent(2)),trace);
this.moduleName=moduleName;
this.moduleURIs=moduleURIs;
};
publ.moduleName;
publ.moduleURIs;
});
imprt=function(name){
return mod.__imprt__(name);
};
mod.__registerModule__=function(modObj,modName){
if(modName!='jsolait'){
return mod.modules[modName]=modObj;
}
};
mod.registerModule=function(modObj,modName){
modName=modName===undefined?modObj.name:modName;
return mod.__registerModule__(modObj,modName);
};
var FormatSpecifier=function(s){
var s=s.match(/%(\(\w+\)){0,1}([ 0-]){0,1}(\+){0,1}(\d+){0,1}(\.\d+){0,1}(.)/);
if(s[1]){
this.key=s[1].slice(1,-1);
}else{
this.key=null;
}
this.paddingFlag=s[2];
if(this.paddingFlag==""){
this.paddingFlag=" ";
}
this.signed=(s[3]=="+");
this.minLength=parseInt(s[4]);
if(isNaN(this.minLength)){
this.minLength=0;
}
if(s[5]){
this.percision=parseInt(s[5].slice(1,s[5].length));
}else{
this.percision=-1;
}
this.type=s[6];
};
var pad=function(s,flag,len){
if(flag=="-"){
var c=" ";
}else{
var c=''+flag;
}
var rslt=c.mul(len-s.length);
if(flag=="-"){
rslt=s+rslt;
}else{
rslt+=s;
}
return rslt;
};
String.prototype.format=function(){
var sf=this.match(/(%(\(\w+\)){0,1}[ 0-]{0,1}(\+){0,1}(\d+){0,1}(\.\d+){0,1}[dibouxXeEfFgGcrs%])|([^%]+)/g);
if(sf){
if(sf.join("")!=this){
throw new mod.Exception("Unsupported formating string.");
}
}else{
throw new mod.Exception("Unsupported formating string.");
}
var rslt="";
var s;
var obj;
var cnt=0;
var frmt;
var sign="";
for(var i=0;i<sf.length;i++){
s=sf[i];
if(s=="%%"){
s="%";
}else if(s=="%s"){
if(cnt>=arguments.length){
throw new mod.Exception("Not enough arguments for format string.");
}else{
obj=arguments[cnt];
cnt++;
}
if(obj===null){
obj="null";
}else if(obj===undefined){
obj="undefined";
}
s=obj.toString();
}else if(s.slice(0,1)=="%"){
frmt=new FormatSpecifier(s);
if(frmt.key){
if((typeof arguments[0])=="object"&&arguments.length==1){
obj=arguments[0][frmt.key];
}else{
throw new mod.Exception("Object or associative array expected as formating value.");
}
}else{
if(cnt>=arguments.length){
throw new mod.Exception("Not enough arguments for format string.");
}else{
obj=arguments[cnt];
cnt++;
}
}
if(frmt.type=="s"){
if(obj===null){
obj="null";
}else if(obj===undefined){
obj="undefined";
}
s=pad(obj.toString(),frmt.paddingFlag,frmt.minLength);
}else if(frmt.type=="c"){
if(frmt.paddingFlag=="0"){
frmt.paddingFlag=" ";
}
if(typeof obj=="number"){
s=pad(String.fromCharCode(obj),frmt.paddingFlag,frmt.minLength);
}else if(typeof obj=="string"){
if(obj.length==1){
s=pad(obj,frmt.paddingFlag,frmt.minLength);
}else{
throw new mod.Exception("Character of length 1 required.");
}
}else{
throw new mod.Exception("Character or Byte required.");
}
}else if(typeof obj=="number"){
if(obj<0){
obj=-obj;
sign="-";
}else if(frmt.signed){
sign="+";
}else{
sign="";
}
switch(frmt.type){
case "f":
case "F":
if(frmt.percision>-1){
s=obj.toFixed(frmt.percision).toString();
}else{
s=obj.toString();
}
break;
case "E":
case "e":
if(frmt.percision>-1){
s=obj.toExponential(frmt.percision);
}else{
s=obj.toExponential();
}
s=s.replace("e",frmt.type);
break;
case "b":
s=obj.toString(2);
s=pad(s,"0",frmt.percision);
break;
case "o":
s=obj.toString(8);
s=pad(s,"0",frmt.percision);
break;
case "x":
s=obj.toString(16).toLowerCase();
s=pad(s,"0",frmt.percision);
break;
case "X":
s=obj.toString(16).toUpperCase();
s=pad(s,"0",frmt.percision);
break;
default:
s=parseInt(obj).toString();
s=pad(s,"0",frmt.percision);
break;
}
if(frmt.paddingFlag=="0"){
s=pad(s,"0",frmt.minLength-sign.length);
}
s=sign+s;
s=pad(s,frmt.paddingFlag,frmt.minLength);
}else{
throw new mod.Exception("Number required.");
}
}
rslt+=s;
}
return rslt;
};
String.prototype.pad=function(flag,len){
if(flag=="-"){
var c=" ";
}else{
var c=''+flag;
}
var s=c.mul(len-this.length);
if(flag=="-"){
s=this+s;
}else{
s+=this;
}
return s;
};
String.prototype.indent=function(indent){
var out=[];
var s=this.split('\n');
for(var i=0;i<s.length;i++){
out.push(' '.mul(indent)+s[i]);
}
return out.join('\n');
};
String.prototype.mul=function(l){
l=(l<0)?0:l;
var a=new Array(l+1);
return a.join(this);
};
}); 
// end _assets/jsolait/jsolait.js



//begin _assets/jsolait/lib/urllib.js
Module("urllib","$Revision: 41 $",function(mod){
mod.NoHTTPRequestObject=Class(mod.Exception,function(publ,supr){
publ.__init__=function(trace){
supr.__init__.call(this,"Could not create an HTTP request object",trace);
};
});
mod.RequestOpenFailed=Class(mod.Exception,function(publ,supr){
publ.__init__=function(trace){
supr.__init__.call(this,"Opening of HTTP request failed.",trace);
};
});
mod.SendFailed=Class(mod.Exception,function(publ,supr){
publ.__init__=function(trace){
supr.__init__.call(this,"Sending of HTTP request failed.",trace);
};
});
var ASVRequest=Class(function(publ){
publ.__init__=function(){
if((getURL==null)||(postURL==null)){
throw "getURL and postURL are not available!";
}else{
this.readyState=0;
this.responseText="";
this.__contType="";
this.status=200;
}
};
publ.open=function(type,url,async){
if(async==false){
throw "Can only open asynchronous connections!";
}
this.__type=type;
this.__url=url;
this.readyState=0;
};
publ.setRequestHeader=function(name,value){
if(name=="Content-Type"){
this.__contType=value;
}
};
publ.send=function(data){
var self=this;
var cbh=new Object();
cbh.operationComplete=function(rsp){
self.readyState=4;
self.responseText=rsp.content;
if(this.ignoreComplete==false){
if(self.onreadystatechange){
self.onreadystatechange();
}
}
};
cbh.ignoreComplete=false;
try{
if(this.__type=="GET"){
getURL(this.__url,cbh);
}else if(this.__type=="POST"){
postURL(this.__url,data,cbh,this.__contType);
}
}catch(e){
cbh.ignoreComplete=true;
throw e;
}
};
});
var getHTTP=function(){
var obj;
try{
obj=new XMLHttpRequest();
}catch(e){
try{
obj=new ActiveXObject("Msxml2.XMLHTTP.4.0");
}catch(e){
try{
obj=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
obj=new ActiveXObject("microsoft.XMLHTTP");
}catch(e){
try{
obj=new ASVRequest();
}catch(e){
throw new mod.NoHTTPRequestObject("Neither Mozilla, IE nor ASV found. Can't do HTTP request without them.");
}
}
}
}
}
return obj;
};
mod.sendRequest=function(type,url,user,pass,data,headers,callback){
var async=false;
if(typeof arguments[arguments.length-1]=='function'){
var async=true;
callback=arguments[arguments.length-1];
}
var headindex=arguments.length-((async||arguments[arguments.length-1]==null)?2:1);
if(arguments[headindex] instanceof Array){
headers=arguments[headindex];
}else{
headers=[];
}
if(typeof user=="string"&&typeof pass=="string"){
if(typeof data!="string"){
data="";
}
}else if(typeof user=="string"){
data=user;
user=null;
pass=null;
}else{
user=null;
pass=null;
}
var xmlhttp=getHTTP();
try{
if(user!=null){
xmlhttp.open(type,url,async,user,pass);
}else{
xmlhttp.open(type,url,async);
}
}catch(e){
throw new mod.RequestOpenFailed(e);
}
for(var i=0;i<headers.length;i++){
try{
xmlhttp.setRequestHeader(headers[i][0],headers[i][1]);
}catch(e){
}
}
if(async){
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
callback(xmlhttp);
xmlhttp=null;
}else if(xmlhttp.readyState==2){
try{
var isNetscape=netscape;
try{
var s=xmlhttp.status;
}catch(e){
callback(xmlhttp);
xmlhttp=null;
}
}catch(e){
}
}
};
}
try{
xmlhttp.send(data);
}catch(e){
if(async){
callback(xmlhttp,e);
xmlhttp=null;
}else{
throw new mod.SendFailed(e);
}
}
return xmlhttp;
};
mod.getURL=function(url,user,pass,headers,callback){
var a=["GET"];
for(var i=0;i<arguments.length;i++){
a.push(arguments[i]);
}
return mod.sendRequest.apply(this,a);
};
mod.postURL=function(url,user,pass,data,headers,callback){
var a=["POST"];
for(var i=0;i<arguments.length;i++){
a.push(arguments[i]);
}
return mod.sendRequest.apply(this,a);
};
mod.isUsable=function(){
try{
getHTTP();
return true;}catch(e){
return false;
}
};
});
// end _assets/jsolait/lib/urllib.js


// begin _assets/jsolait/lib/xml.js
Module("xml","$Revision: 55 $",function(mod){
mod.XMLNS="http://www.w3.org/2000/xmlns/";
mod.NSXML="http://www.w3.org/XML/1998/namespace";
mod.nsPrefixMap={"http://www.w3.org/2000/xmlns/":"xmlns","http://www.w3.org/XML/1998/namespace":"xml"};
mod.NoXMLParser=Class(mod.Exception,function(publ,supr){
publ.__init__=function(trace){
supr.__init__.call(this,"Could not create an XML parser.",trace);
};
});
mod.ParsingFailed=Class(mod.Exception,function(publ,supr){
publ.__init__=function(xml,trace){
supr.__init__.call(this,"Failed parsing XML document.",trace);
this.xml=xml;
};
publ.xml;
});
mod.parseXML=function(xml){
var obj=null;
var isMoz=false;
var isIE=false;
var isASV=false;
try{
var p=window.parseXML;
if(p==null){
throw "No ASV paseXML";
}
isASV=true;
}catch(e){
try{
obj=new DOMParser();
isMoz=true;
}catch(e){
try{
obj=new ActiveXObject("Msxml2.DomDocument.4.0");isIE=true;
}catch(e){
try{
obj=new ActiveXObject("Msxml2.DomDocument");isIE=true;
}catch(e){
try{
obj=new ActiveXObject("microsoft.XMLDOM");isIE=true;
}catch(e){
throw new mod.NoXMLParser(e);
}
}
}
}
}
try{
if(isMoz){
obj=obj.parseFromString(xml,"text/xml");
return obj;
}else if(isIE){
obj.loadXML(xml);
return obj;
}else if(isASV){
return window.parseXML(xml,null);
}
}catch(e){
throw new mod.ParsingFailed(xml,e);
}
};
mod.importNode=function(importedNode,deep){
deep=(deep==null)?true:deep;
var ELEMENT_NODE=1;
var ATTRIBUTE_NODE=2;
var TEXT_NODE=3;
var CDATA_SECTION_NODE=4;
var ENTITY_REFERENCE_NODE=5;
var ENTITY_NODE=6;
var PROCESSING_INSTRUCTION_NODE=7;
var COMMENT_NODE=8;
var DOCUMENT_NODE=9;
var DOCUMENT_TYPE_NODE=10;
var DOCUMENT_FRAGMENT_NODE=11;
var NOTATION_NODE=12;
var importChildren=function(srcNode,parent){
if(deep){
for(var i=0;i<srcNode.childNodes.length;i++){
var n=mod.importNode(srcNode.childNodes.item(i),true);
parent.appendChild(n);
}
}
};
var node=null;
switch(importedNode.nodeType){
case ATTRIBUTE_NODE:
node=document.createAttributeNS(importedNode.namespaceURI,importedNode.nodeName);
node.value=importedNode.value;
break;
case DOCUMENT_FRAGMENT_NODE:
node=document.createDocumentFragment();
importChildren(importedNode,node);
break;
case ELEMENT_NODE:
node=document.createElementNS(importedNode.namespaceURI,importedNode.tagName);
for(var i=0;i<importedNode.attributes.length;i++){
var attr=this.importNode(importedNode.attributes.item(i),deep);
node.setAttributeNodeNS(attr);
}
importChildren(importedNode,node);
break;
case ENTITY_REFERENCE_NODE:
node=importedNode;
break;
case PROCESSING_INSTRUCTION_NODE:
node=document.createProcessingInstruction(importedNode.target,importedNode.data);
break;
case TEXT_NODE:
case CDATA_SECTION_NODE:
case COMMENT_NODE:
node=document.createTextNode(importedNode.nodeValue);
break;
case DOCUMENT_NODE:
case DOCUMENT_TYPE_NODE:
case NOTATION_NODE:
case ENTITY_NODE:
throw "not supported in DOM2";
break;
}
return node;
};
var getNSPrefix=function(node,namespaceURI,nsPrefixMap){
if(!namespaceURI){
return "";
}else if(mod.nsPrefixMap[namespaceURI]){
return mod.nsPrefixMap[namespaceURI]+":";
}else if(nsPrefixMap[namespaceURI]!=null){
return nsPrefixMap[namespaceURI]+":";
}
if(node.nodeType==1){
for(var i=0;i<node.attributes.length;i++){
var attr=node.attributes.item(i);
if(attr.namespaceURI==mod.XMLNS&&attr.value==namespaceURI){
return attr.localName+":";
}
}
}else{
throw new Error("Cannot find a namespace prefix for "+namespaceURI);
}
if(node.parentNode){
return getNSPrefix(node.parentNode,namespaceURI,nsPrefixMap);}else{
throw new Error("Cannot find a namespace prefix for "+namespaceURI);
}
};
mod.node2XML=function(node,nsPrefixMap,attrParent){
nsPrefixMap=(nsPrefixMap==null)?{}:nsPrefixMap;
var ELEMENT_NODE=1;
var ATTRIBUTE_NODE=2;
var TEXT_NODE=3;
var CDATA_SECTION_NODE=4;
var ENTITY_REFERENCE_NODE=5;
var ENTITY_NODE=6;
var PROCESSING_INSTRUCTION_NODE=7;
var COMMENT_NODE=8;
var DOCUMENT_NODE=9;
var DOCUMENT_TYPE_NODE=10;
var DOCUMENT_FRAGMENT_NODE=11;
var NOTATION_NODE=12;
var s="";
switch(node.nodeType){
case ATTRIBUTE_NODE:
try{
var nsprefix=getNSPrefix(attrParent,node.namespaceURI,nsPrefixMap);
}catch(e){
alert(node.namespaceURI+"\n"+e.message);
}
var localName=node.localName;
if(typeof localName=='undefined'){
localName=node.name;
}
if(nsprefix+localName=="xmlns:xmlns"){
nsprefix="";
}s+=nsprefix+localName+'="'+node.value+'"';
break;
case DOCUMENT_NODE:
if(node.documentElement!=null){
s+=this.node2XML(node.documentElement,nsPrefixMap);
}
break;
case ELEMENT_NODE:
s+="<"+node.tagName;
for(var i=0;i<node.attributes.length;i++){
s+=" "+this.node2XML(node.attributes.item(i),nsPrefixMap,node);
}
if(node.childNodes.length==0){
s+="/>\n";
}else{
s+=">";
for(var child=node.firstChild;child!=null;child=child.nextSibling){
s+=this.node2XML(child,nsPrefixMap);
}
s+="</"+node.tagName+">\n";
}
break;
case PROCESSING_INSTRUCTION_NODE:
s+="<?"+node.target+" "+node.data+" ?>";
break;
case TEXT_NODE:
s+=node.nodeValue;
break;
case CDATA_SECTION_NODE:
s+="<"+"![CDATA["+node.nodeValue+"]"+"]>";
break;
case COMMENT_NODE:
s+="<!--"+node.nodeValue+"-->";
break;
case ENTITY_REFERENCE_NODE:
case DOCUMENT_FRAGMENT_NODE:
case DOCUMENT_TYPE_NODE:
case NOTATION_NODE:
case ENTITY_NODE:
throw new mod.Exception("Nodetype(%s) not supported.".format(node.nodeType));
break;
}
return s;
};
});
// end _assets/jsolait/lib/xml.js


// begin _assets/jsolait/lib/xmlrpc.js

Module("xmlrpc","$Revision: 56 $",function(mod){
var xmlext=imprt("xml");
var urllib=imprt("urllib");
mod.InvalidServerResponse=Class(mod.Exception,function(publ,supr){
publ.__init__=function(status){
supr.__init__.call(this,"The server did not respond with a status 200 (OK) but with: "+status);
this.status=status;
};
publ.status;
});
mod.MalformedXmlRpc=Class(mod.Exception,function(publ,supr){
publ.__init__=function(msg,xml,trace){
supr.__init__.call(this,msg,trace);
this.xml=xml;
};
publ.xml;
});
mod.Fault=Class(mod.Exception,function(publ,supr){
publ.__init__=function(faultCode,faultString){
supr.__init__.call(this,"XML-RPC Fault: "+faultCode+"\n\n"+faultString);
this.faultCode=faultCode;
this.faultString=faultString;
};
publ.faultCode;
publ.faultString;
});
mod.marshall=function(obj){
if(obj.toXmlRpc!=null){
return obj.toXmlRpc();
}else{
var s="<struct>";
for(var attr in obj){
if(typeof obj[attr]!="function"){
s+="<member><name>"+attr+"</name><value>"+mod.marshall(obj[attr])+"</value></member>";
}
}
s+="</struct>";
return s;
}
};
mod.unmarshall=function(xml){
try{
var doc=xmlext.parseXML(xml);
}catch(e){
throw new mod.MalformedXmlRpc("The server's response could not be parsed.",xml,e);
}
var rslt=mod.unmarshallDoc(doc,xml);
doc=null;
return rslt;
};
mod.unmarshallDoc=function(doc,xml){
try{
var node=doc.documentElement;
if(node==null){
throw new mod.MalformedXmlRpc("No documentElement found.",xml);
}
switch(node.tagName){
case "methodResponse":
return parseMethodResponse(node);
case "methodCall":
return parseMethodCall(node);
default:
throw new mod.MalformedXmlRpc("'methodCall' or 'methodResponse' element expected.\nFound: '"+node.tagName+"'",xml);
}
}catch(e){
if(e.constructor==mod.Fault){
throw e;
}else{
throw new mod.MalformedXmlRpc("Unmarshalling of XML failed.",xml,e);
}
}
};
var parseMethodResponse=function(node){
try{
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "fault":
throw parseFault(child);
case "params":
var params=parseParams(child);
if(params.length==1){
return params[0];
}else{
throw new mod.MalformedXmlRpc("'params' element inside 'methodResponse' must have exactly ONE 'param' child element.\nFound: "+params.length);
}
default:
throw new mod.MalformedXmlRpc("'fault' or 'params' element expected.\nFound: '"+child.tagName+"'");
}
}
}
throw new mod.MalformedXmlRpc("No child elements found.");
}catch(e){
if(e.constructor==mod.Fault){
throw e;
}else{
throw new mod.MalformedXmlRpc("'methodResponse' element could not be parsed.",null,e);
}
}
};
var parseMethodCall=function(node){
try{
var methodName=null;
var params=new Array();
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "methodName":
methodName=new String(child.firstChild.nodeValue);
break;
case "params":
params=parseParams(child);
break;
default:
throw new mod.MalformedXmlRpc("'methodName' or 'params' element expected.\nFound: '"+child.tagName+"'");
}
}
}
if(methodName==null){
throw new mod.MalformedXmlRpc("'methodName' element expected.");
}else{
return new Array(methodName,params);
}
}catch(e){
throw new mod.MalformedXmlRpc("'methodCall' element could not be parsed.",null,e);
}
};
var parseParams=function(node){
try{
var params=new Array();
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "param":
params.push(parseParam(child));
break;
default:
throw new mod.MalformedXmlRpc("'param' element expected.\nFound: '"+child.tagName+"'");
}
}
}
return params;
}catch(e){
throw new mod.MalformedXmlRpc("'params' element could not be parsed.",null,e);
}
};
var parseParam=function(node){
try{
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "value":
return parseValue(child);
default:
throw new mod.MalformedXmlRpc("'value' element expected.\nFound: '"+child.tagName+"'");
}
}
}
throw new mod.MalformedXmlRpc("'value' element expected.But none found.");
}catch(e){
throw new mod.MalformedXmlRpc("'param' element could not be parsed.",null,e);
}
};
var parseValue=function(node){
try{
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "string":
var s="";
for(var j=0;j<child.childNodes.length;j++){
s+=new String(child.childNodes.item(j).nodeValue);
}
return s;
case "int":
case "i4":
case "double":
return(child.firstChild)?Number(child.firstChild.nodeValue):0;
case "boolean":
return Boolean(isNaN(parseInt(child.firstChild.nodeValue))?(child.firstChild.nodeValue=="true"):parseInt(child.firstChild.nodeValue));
case "base64":
return parseBase64(child);
case "dateTime.iso8601":
return parseDateTime(child);
case "array":
return parseArray(child);
case "struct":
return parseStruct(child);
case "nil":
return null;
default:
throw new mod.MalformedXmlRpc("'string','int','i4','double','boolean','base64','dateTime.iso8601','array' or 'struct' element expected.\nFound: '"+child.tagName+"'");
}
}
}
if(node.firstChild){
var s="";
for(var j=0;j<node.childNodes.length;j++){
s+=new String(node.childNodes.item(j).nodeValue);
}
return s;
}else{
return "";
}
}catch(e){
throw new mod.MalformedXmlRpc("'value' element could not be parsed.",null,e);
}
};
var parseBase64=function(node){
try{
var s=node.firstChild.nodeValue;
return s.decode("base64");
}catch(e){
throw new mod.MalformedXmlRpc("'base64' element could not be parsed.",null,e);
}
};
var parseDateTime=function(node){
try{
if(/^(\d{4})-?(\d{2})-?(\d{2})T(\d{2}):?(\d{2}):?(\d{2})/.test(node.firstChild.nodeValue)){
return new Date(Date.UTC(RegExp.$1,RegExp.$2-1,RegExp.$3,RegExp.$4,RegExp.$5,RegExp.$6));
}else{
throw new mod.MalformedXmlRpc("Could not convert the given date.");
}
}catch(e){
throw new mod.MalformedXmlRpc("'dateTime.iso8601' element could not be parsed.",null,e);
}
};
var parseArray=function(node){
try{
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "data":
return parseData(child);
default:
throw new mod.MalformedXmlRpc("'data' element expected.\nFound: '"+child.tagName+"'");
}
}
}
throw new mod.MalformedXmlRpc("'data' element expected. But not found.");
}catch(e){
throw new mod.MalformedXmlRpc("'array' element could not be parsed.",null,e);
}
};
var parseData=function(node){
try{
var rslt=new Array();
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "value":
rslt.push(parseValue(child));
break;
default:
throw new mod.MalformedXmlRpc("'value' element expected.\nFound: '"+child.tagName+"'");
}
}
}
return rslt;
}catch(e){
throw new mod.MalformedXmlRpc("'data' element could not be parsed.",null,e);
}
};
var parseStruct=function(node){
try{
var struct=new Object();
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "member":
var member=parseMember(child);
if(member[0]!=""){
struct[member[0]]=member[1];
}
break;
default:
throw new mod.MalformedXmlRpc("'data' element expected.\nFound: '"+child.tagName+"'");
}
}
}
return struct;
}catch(e){
throw new mod.MalformedXmlRpc("'struct' element could not be parsed.",null,e);
}
};
var parseMember=function(node){
try{
var name="";
var value=null;
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "value":
value=parseValue(child);
break;
case "name":
if(child.hasChildNodes()){
name=new String(child.firstChild.nodeValue);
}
break;
default:
throw new mod.MalformedXmlRpc("'value' or 'name' element expected.\nFound: '"+child.tagName+"'");
}
}
}
return[name,value];
}catch(e){
throw new mod.MalformedXmlRpc("'member' element could not be parsed.",null,e);
}
};
var parseFault=function(node){
try{
for(var i=0;i<node.childNodes.length;i++){
var child=node.childNodes.item(i);
if(child.nodeType==1){
switch(child.tagName){
case "value":
var flt=parseValue(child);
return new mod.Fault(flt.faultCode,flt.faultString);
default:
throw new mod.MalformedXmlRpc("'value' element expected.\nFound: '"+child.tagName+"'");
}
}
}
throw new mod.MalformedXmlRpc("'value' element expected. But not found.");
}catch(e){
throw new mod.MalformedXmlRpc("'fault' element could not be parsed.",null,e);
}
};
mod.XMLRPCMethod=Class(function(publ){
var postData=function(url,user,pass,data,callback){
if(callback==null){
var rslt=urllib.postURL(url,user,pass,data,[["Content-Type","text/xml"]]);
return rslt;
}else{
return urllib.postURL(url,user,pass,data,[["Content-Type","text/xml"]],callback);
}
};
var handleResponse=function(resp){
var status=null;
try{
status=resp.status;
}catch(e){
}
if(status==200){
var respDoc=null;
try{
respDoc=resp.responseXML;
}catch(e){
}
var respTxt="";
try{
respTxt=resp.responseText;
}catch(e){
}
if((respDoc==null)||(respDoc.documentElement==null)){
if(respTxt==null||respTxt==""){
throw new mod.MalformedXmlRpc("The server responded with an empty document.","");
}else{
return mod.unmarshall(respTxt);
}
}else{
return mod.unmarshallDoc(respDoc,respTxt);
}
}else{
throw new mod.InvalidServerResponse(status);
}
};
var getXML=function(methodName,args){
var data='<?xml version="1.0"?><methodCall><methodName>'+methodName+'</methodName>';
if(args.length>0){
data+="<params>";
for(var i=0;i<args.length;i++){
data+='<param><value>'+mod.marshall(args[i])+'</value></param>';
}
data+='</params>';
}
data+='</methodCall>';
return data;
};
publ.__init__=function(url,methodName,user,pass){
this.methodName=methodName;
this.url=url;
this.user=user;
this.password=pass;
};
publ.__call__=function(){
if(typeof arguments[arguments.length-1]!='function'){
var data=getXML(this.methodName,arguments);
var resp=postData(this.url,this.user,this.password,data);
return handleResponse(resp);
}else{
var args=new Array();
for(var i=0;i<arguments.length;i++){
args.push(arguments[i]);
}
var cb=args.pop();
var data=getXML(this.methodName,args);
return postData(this.url,this.user,this.password,data,function(resp){
var rslt=null;
var exc=null;
try{
rslt=handleResponse(resp);
}catch(e){
exc=e;
}
try{
cb(rslt,exc);
}catch(e){
}
args=null;
resp=null;
});
}
};
publ.toMulticall=function(){
var multiCallable=new Object();
multiCallable.methodName=this.methodName;
var params=[];
for(var i=0;i<arguments.length;i++){
params[i]=arguments[i];
}
multiCallable.params=params;
return multiCallable;
};
publ.setAuthentication=function(user,pass){
this.user=user;
this.password=pass;
};
publ.methodName;
publ.url;
publ.user;
publ.password;
});
mod.ServiceProxy=Class(function(publ){
publ.__init__=function(url,methodNames,user,pass){
if(methodNames instanceof Array){
if(methodNames.length>0){
var tryIntrospection=false;
}else{
var tryIntrospection=true;
}
}else{
pass=user;
user=methodNames;
methodNames=[];
var tryIntrospection=true;
}
this._url=url;
this._user=user;
this._password=pass;
this._addMethodNames(methodNames);
if(tryIntrospection){
try{
this._introspect();
}catch(e){
}
}
};
publ._addMethodNames=function(methodNames){
for(var i=0;i<methodNames.length;i++){
var obj=this;
var names=methodNames[i].split(".");
for(var n=0;n<names.length-1;n++){
var name=names[n];
if(obj[name]){
obj=obj[name];
}else{
obj[name]=new Object();
obj=obj[name];
}
}
var name=names[names.length-1];
if(obj[name]){
}else{
var mth=new mod.XMLRPCMethod(this._url,methodNames[i],this._user,this._password);
obj[name]=mth;
this._methods.push(mth);
}
}
};
publ._setAuthentication=function(user,pass){
this._user=user;
this._password=pass;
for(var i=0;i<this._methods.length;i++){
this._methods[i].setAuthentication(user,pass);
}
};
publ._introspect=function(){
this._addMethodNames(["system.listMethods","system.methodHelp","system.methodSignature"]);
var m=this.system.listMethods();
this._addMethodNames(m);
};
publ._url;
publ._user;
publ._password;
publ._methods=new Array();
});
mod.ServerProxy=mod.ServiceProxy;
String.prototype.toXmlRpc=function(){
return "<string>"+this.replace(/&/g,"&amp;").replace(/</g,"&lt;")+"</string>";
};
Number.prototype.toXmlRpc=function(){
if(this==parseInt(this)){
return "<int>"+this+"</int>";
}else if(this==parseFloat(this)){
return "<double>"+this+"</double>";
}else{
return false.toXmlRpc();
}
};
Boolean.prototype.toXmlRpc=function(){
if(this==true){
return "<boolean>1</boolean>";
}else{
return "<boolean>0</boolean>";
}
};
Date.prototype.toXmlRpc=function(){
var padd=function(s,p){
s=p+s;
return s.substring(s.length-p.length);
};
var y=padd(this.getUTCFullYear(),"0000");
var m=padd(this.getUTCMonth()+1,"00");
var d=padd(this.getUTCDate(),"00");
var h=padd(this.getUTCHours(),"00");
var min=padd(this.getUTCMinutes(),"00");
var s=padd(this.getUTCSeconds(),"00");
var ms=padd(this.getUTCMilliseconds(),"000");
var isodate=y+m+d+"T"+h+":"+min+":"+s+":"+ms;
return "<dateTime.iso8601>"+isodate+"</dateTime.iso8601>";
};
Array.prototype.toXmlRpc=function(){
var retstr="<array><data>";
for(var i=0;i<this.length;i++){
retstr+="<value>"+mod.marshall(this[i])+"</value>";
}
return retstr+"</data></array>";
};
mod.__main__=function(){
var s=new mod.ServiceProxy("http://jsolait.net/test.py",['echo']);
print("creating ServiceProxy object using introspection for method construction...\n");
print("%s created\n".format(s));
print("creating and marshalling test data:\n");
var o=[1.234,5,{a:"Hello & < ",b:new Date()}];
print(mod.marshall(o));
print("\ncalling echo() on remote service...\n");
var r=s.echo(o);
print("service returned data(marshalled again):\n");
print(mod.marshall(r));
};
});
// end _assets/jsolait/lib/xmlrpc.js
