function API(baseurl){ this.baseurl = baseurl; this.get = function(page, handler = null){ var x = new XMLHttpRequest(); var async = (handler != null); if (async) { x.onload = function(){ var responseText = x.responseText; handler( responseText ); } } x.open("GET", this.baseurl + page, async); x.send(); if (!async) return x.responseText } this.post = function(page, handler = null){ var x = new XMLHttpRequest(); if (handler != null) { x.onload = function(){ var responseText = x.responseText; handler( responseText ); } } x.open("POST", this.baseurl + page); x.send(); } this.getJson = function(page, handler){ var j = function(t){ handler(JSON.parse(t)); }; return this.get( page, j ); } this.call = function(endpoint,method,parameters = []){ var x = new XMLHttpRequest(); x.open("POST", this.baseurl + endpoint, false); x.setRequestHeader("content-type","application/json"); var methodCall = { "MethodName": method, "Parameters": parameters } x.send(JSON.stringify(methodCall)); var result = JSON.parse(x.responseText); if (result.Exception != null) throw result.Exception; return result.Result; } this.loadPage = function (page) { var hContent = $("content"); var x = new XMLHttpRequest(); x.open("GET", this.baseurl + page, false); x.setRequestHeader("x-template-unframed","unframed"); x.send(); hContent.innerHTML = x.responseText; history.pushState(null, page, this.baseurl + page); this.fireOnLoad( hContent ); return false; } this.fireOnLoad = function(element){ if (element.onload != null) { element.onload(); } for (var n=0;n