var samp=(function(){var WEBSAMP_PORT=21012;var WEBSAMP_PATH="/";var WEBSAMP_PREFIX="samp.webhub.";var WEBSAMP_CLIENT_PREFIX="";TYPE_STRING="string";TYPE_LIST="list";TYPE_MAP="map";var heir=function(proto){function F(){};F.prototype=proto;return new F();};var getSampType=function(obj){if(typeof obj==="string"){return TYPE_STRING;} else if(obj instanceof Array){return TYPE_LIST;} else if(obj instanceof Object&&obj!==null){return TYPE_MAP;} else{throw new Error("Not legal SAMP object type: "+obj);}};var getChildElements=function(el,childTagName){var children=el.childNodes;var child;var childEls=[];var i;for(i=0;i" +" of <"+el.tagName+">" +" is not a <"+childTagName+">");} childEls.push(child);}} return childEls;};var getSoleChild=function(el,childTagName){var children=getChildElements(el,childTagName);if(children.length===1){return children[0];} else{throw new Error("No sole child of <"+el.tagName+">");}};var getTextContent=function(el){var txt="";var i;var child;for(i=0;i/g,">");};XmlRpc.checkParams=function(paramList,typeList){var i;for(i=0;i" +XmlRpc.escapeXml(obj) +"";} else if(type===TYPE_LIST){result=[];result.push(prefix+"",prefix+" ",prefix+" ");for(i=0;i",prefix+" ",prefix+"");return result.join("\n");} else if(type===TYPE_MAP){result=[];result.push(prefix+"");result.push(prefix+" ");for(i in obj){result.push(prefix+" ");result.push(prefix+" " +XmlRpc.escapeXml(i) +"");result.push(v2x(obj[i],prefix+" "));result.push(prefix+" ");} result.push(prefix+" ");result.push(prefix+"");return result.join("\n");} else{throw new Error("bad type");}};XmlRpc.xmlToValue=function x2v(valueEl,allowInt){var childEls=getChildElements(valueEl);var i;var j;var txt;var node;var childEl;var elName;if(childEls.length===0){return getTextContent(valueEl);} else if(childEls.length===1){childEl=childEls[0];elName=childEl.tagName;if(elName==="string"){return getTextContent(childEl);} else if(elName==="array"){var valueEls=getChildElements(getSoleChild(childEl,"data"),"value");var list=[];for(i=0;i and/or " +"in ?");}} return map;} else if(allowInt&&(elName==="int"||elName==="i4")){return getTextContent(childEl);} else{throw new Error("Non SAMP-friendly value content: " +"<"+elName+">");}} else{throw new Error("Bad XML-RPC content - multiple elements");}};XmlRpc.decodeParams=function(paramsEl){var paramEls=getChildElements(paramsEl,"param");var i;var results=[];for(i=0;i");} var contentEl=getSoleChild(mrEl);if(contentEl.tagName==="fault"){return XmlRpc.decodeFault(contentEl);} else if(contentEl.tagName==="params"){return XmlRpc.decodeParams(contentEl)[0];} else{throw new Error("Bad XML-RPC response - unknown element" +" <"+contentEl.tagName+">");}};XmlRpc.Fault=function(faultString,faultCode){this.faultString=faultString;this.faultCode=faultCode;};XmlRpc.Fault.prototype.toString=function(){return"XML-RPC Fault ("+this.faultCode+"): "+this.faultString;};var XmlRpcRequest=function(methodName,params){this.methodName=methodName;this.params=params||[];} XmlRpcRequest.prototype.toString=function(){return this.methodName+"("+stringify(this.params)+")";};XmlRpcRequest.prototype.addParam=function(param){this.params.push(param);return this;};XmlRpcRequest.prototype.addParams=function(params){var i;for(i=0;i",""," "+this.methodName+""," ");for(var i=0;i",XmlRpc.valueToXml(this.params[i]," ")," ");} lines.push(" ","");return lines.join("\n");};var XmlRpcClient=function(endpoint){this.endpoint=endpoint||"http://localhost:"+WEBSAMP_PORT+WEBSAMP_PATH;};XmlRpcClient.createXHR=function(){var XhrL2=function(xhr){this.xhr=xhr;xhr.onreadystatechange=(function(l2){return function(){if(xhr.readyState!==4){return;} else if(!l2.completed){if(+xhr.status===200){l2.completed=true;l2.responseText=xhr.responseText;l2.responseXML=xhr.responseXML;if(l2.onload){l2.onload();}}}};})(this);xhr.onerror=(function(l2){return function(event){if(!l2.completed){l2.completed=true;if(l2.onerror){if(event){event.toString=function(){return"No hub?";};} else{event="No hub?";} l2.onerror(event);}}};})(this);xhr.ontimeout=(function(l2){return function(event){if(!l2.completed){l2.completed=true;if(l2.onerror){l2.onerror("timeout");}}};})(this);};XhrL2.prototype.open=function(method,url){this.xhr.open(method,url);};XhrL2.prototype.send=function(body){this.xhr.send(body);};XhrL2.prototype.abort=function(){this.xhr.abort();} XhrL2.prototype.setContentType=function(mimeType){if("setRequestHeader"in this.xhr){this.xhr.setRequestHeader("Content-Type",mimeType);}} var XdrL2=function(xdr){this.xdr=xdr;xdr.onload=(function(l2){return function(){var e;l2.responseText=xdr.responseText;if(xdr.contentType==="text/xml"||xdr.contentType==="application/xml"||/\/x-/.test(xdr.contentType)){try{var xdoc=new ActiveXObject("Microsoft.XMLDOM");xdoc.loadXML(xdr.responseText);l2.responseXML=xdoc;} catch(e){l2.responseXML=e;}} if(l2.onload){l2.onload();}};})(this);xdr.onerror=(function(l2){return function(event){if(l2.onerror){l2.onerror(event);}};})(this);xdr.ontimeout=(function(l2){return function(event){if(l2.onerror){l2.onerror(event);}};})(this);};XdrL2.prototype.open=function(method,url){this.xdr.open(method,url);};XdrL2.prototype.send=function(body){this.xdr.send(body);};XdrL2.prototype.abort=function(){this.xdr.abort();};XdrL2.prototype.setContentType=function(mimeType){};if(typeof XMLHttpRequest!=="undefined"){var xhr=new XMLHttpRequest();if("withCredentials"in xhr){return new XhrL2(xhr);}} if(typeof XDomainRequest!=="undefined"){return new XdrL2(new XDomainRequest());} if(typeof flensed.flXHR!=="undefined"){return new XhrL2(new flensed.flXHR({instancePooling:true}));} throw new Error("no cross-origin mechanism available");};XmlRpcClient.prototype.execute=function(req,resultHandler,errHandler){(function(xClient){var xhr;var e;try{xhr=XmlRpcClient.createXHR();xhr.open("POST",xClient.endpoint);xhr.setContentType("text/xml");} catch(e){errHandler(e);throw e;} xhr.onload=function(){var xml=xhr.responseXML;var result;var e;if(xml){try{result=XmlRpc.decodeResponse(xml);} catch(e){if(errHandler){errHandler(e);} return;}} else{if(errHandler){errHandler("no XML response");} return;} if(result instanceof XmlRpc.Fault){if(errHandler){errHandler(result);}} else{if(resultHandler){resultHandler(result);}}};xhr.onerror=function(event){if(event){event.toString=function(){return"No hub?";}} else{event="No hub";} if(errHandler){errHandler(event);}};xhr.send(req.toXml());return xhr;})(this);};var Message=function(mtype,params){this["samp.mtype"]=mtype;this["samp.params"]=params;};var Connection=function(regInfo){this.regInfo=regInfo;this.privateKey=regInfo["samp.private-key"];if(!typeof(this.privateKey)==="string"){throw new Error("Bad registration object");} this.xClient=new XmlRpcClient();};(function(){var connMethods={call:[TYPE_STRING,TYPE_STRING,TYPE_MAP],callAll:[TYPE_STRING,TYPE_MAP],callAndWait:[TYPE_STRING,TYPE_MAP,TYPE_STRING],declareMetadata:[TYPE_MAP],declareSubscriptions:[TYPE_MAP],getMetadata:[TYPE_STRING],getRegisteredClients:[],getSubscribedClients:[TYPE_STRING],getSubscriptions:[TYPE_STRING],notify:[TYPE_STRING,TYPE_MAP],notifyAll:[TYPE_MAP],ping:[],reply:[TYPE_STRING,TYPE_MAP]};var fn;var types;for(fn in connMethods){(function(fname,types){Connection.prototype[fname]=function(sampArgs,resultHandler,errHandler){var closer=(function(c){return function(){c.close()}})(this);errHandler=errHandler||closer XmlRpc.checkParams(sampArgs,types);var request=new XmlRpcRequest(WEBSAMP_PREFIX+fname);request.addParam(this.privateKey);request.addParams(sampArgs);return this.xClient.execute(request,resultHandler,errHandler);};})(fn,connMethods[fn]);}})();Connection.prototype.unregister=function(){var e;if(this.callbackRequest){try{this.callbackRequest.abort();} catch(e){}} var request=new XmlRpcRequest(WEBSAMP_PREFIX+"unregister");request.addParam(this.privateKey);try{this.xClient.execute(request);} catch(e){} delete this.regInfo;delete this.privateKey;};Connection.prototype.close=function(){var e;if(this.closed){return;} this.closed=true;try{if(this.regInfo){this.unregister();}} catch(e){} if(this.onclose){oc=this.onclose;delete this.onclose;try{oc();} catch(e){}}};Connection.prototype.setCallable=function(callableClient,successHandler){var e;if(this.callbackRequest){try{this.callbackRequest.abort();} catch(e){} finally{delete this.callbackRequest;}} if(!callableClient&&!this.regInfo){return;} var request=new XmlRpcRequest(WEBSAMP_PREFIX+"allowReverseCallbacks");request.addParam(this.privateKey);request.addParam(callableClient?"1":"0");var closer=(function(c){return function(){c.close()}})(this);if(callableClient){(function(connection){var invokeCallback=function(callback){var methodName=callback["samp.methodName"];var methodParams=callback["samp.params"];var handlerFunc=undefined;if(methodName===WEBSAMP_CLIENT_PREFIX +"receiveNotification"){handlerFunc=callableClient.receiveNotification;} else if(methodName===WEBSAMP_CLIENT_PREFIX +"receiveCall"){handlerFunc=callableClient.receiveCall;} else if(methodName===WEBSAMP_CLIENT_PREFIX +"receiveResponse"){handlerFunc=callableClient.receiveResponse;} else{} if(handlerFunc){handlerFunc.apply(callableClient,methodParams);}};var startTime;var resultHandler=function(result){if(getSampType(result)!=TYPE_LIST){errHandler(new Error("pullCallbacks result not List"));return;} var i;var e;for(i=0;iRegistered: ";node.appendChild(label);node.appendChild(regText);this.update();return node;};Connector.prototype.update=function(){var i;var isConnected=!!this.connection;var enableds=isConnected?this.whenRegs:this.whenUnregs;var disableds=isConnected?this.whenUnregs:this.whenRegs;for(i=0;i