diff options
Diffstat (limited to 'template-common/scripts.js')
-rw-r--r-- | template-common/scripts.js | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/template-common/scripts.js b/template-common/scripts.js index 83f4815e7..452be1699 100644 --- a/template-common/scripts.js +++ b/template-common/scripts.js @@ -72,3 +72,108 @@ function popuphelp(url) ); } + + +Function.prototype.pwgBind = function() { + var __method = this, object = arguments[0], args = new Array(); + for (var i=1; i<arguments.length; i++) + args[i-1] = arguments[i]; + return function() { return __method.apply(object, args); } +} + +PwgWS = function(urlRoot) +{ + this.urlRoot = urlRoot; + this.options = { + method: "GET", + async: true, + onFailure: null, + onSuccess: null + }; +}; + +PwgWS.prototype = { + + callService : function(method, parameters, options) + { + if (options) + { + for (var property in options) + this.options[property] = options[property]; + } + try { this.transport = new XMLHttpRequest();} + catch(e) { + try { this.transport = new ActiveXObject('Msxml2.XMLHTTP'); } + catch(e) { + try { this.transport = new ActiveXObject('Microsoft.XMLHTTP'); } + catch (e){ + dispatchError(0, "Cannot create request object"); + } + } + } + this.transport.onreadystatechange = this.onStateChange.pwgBind(this); + + var url = this.urlRoot; + url += "ws.php?format=json&method="+method; + if (parameters) + { + for (var property in parameters) + { + if ( typeof parameters[property] == 'object' && parameters[property]) + { + for (var i=0; i<parameters[property].length; i++) + url += "&"+property+"[]="+parameters[property][i]; + } + else + url += "&"+property+"="+parameters[property]; + } + } + this.transport.open(this.options.method, url, this.options.async); + this.transport.send(null); + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState == 4) + this.respondToReadyState(this.transport.readyState); + }, + + dispatchError: function( httpCode, text ) + { + !this.options.onFailure || this.options.onFailure( httpCode, text); + }, + + respondToReadyState: function(readyState) + { + var transport = this.transport; + if (readyState==4 && transport.status == 200) + { + var resp; + try { + eval('resp = ' + transport.responseText); + } + catch (e) + { + this.dispatchError( 200, e.message + '\n' + transport.responseText.substr(0,256).escapeHTML() ); + } + if (resp!=null) + { + if (resp.stat==null) + this.dispatchError( 200, "Invalid response" ); + else if (resp.stat=='ok') + { + if (this.options.onSuccess) this.options.onSuccess( resp.result ); + } + else + this.dispatchError( 200, resp.err + " " + resp.message); + } + } + if (readyState==4 && transport.status != 200) + this.dispatchError( transport.status, transport.statusText ); + }, + + + transport: null, + urlRoot: null, + options: {} +} |