(function(c,b,d){var a; b.Granite=b.Granite||{}; b.Granite.$=b.Granite.$||c; b._g=b._g||{}; b._g.$=b._g.$||c; a=Granite.HTTP; c.ajaxSetup({externalize:true,encodePath:true,hook:true,beforeSend:function(f,e){if(typeof G_IS_HOOKED==="undefined"||!G_IS_HOOKED(e.url)){if(e.externalize){e.url=a.externalize(e.url) }if(e.encodePath){e.url=a.encodePathOfURI(e.url) }}if(e.hook){var g=a.getXhrHook(e.url,e.type,e.data); if(g){e.url=g.url; if(g.params){if(e.type.toUpperCase()==="GET"){e.url+="?"+c.param(g.params) }else{e.data=c.param(g.params) }}}}},statusCode:{403:function(e){if(e.getResponseHeader("X-Reason")==="Authentication Failed"){a.handleLoginRedirect() }}}}); c.ajaxSettings.traditional=true }(jQuery,this)); (function(d){d.Granite=d.Granite||{}; if(d.Granite.csrf){return }d.Granite.csrf={initialised:false,refreshToken:n,_clearToken:m}; function b(){this._handler=[] }b.prototype={then:function(t,s){this._handler.push({resolve:t,reject:s}) },resolve:function(){this._execute("resolve",arguments) },reject:function(){this._execute("reject",arguments) },_execute:function(s,t){if(this._handler===null){throw new Error("Promise already completed.") }for(var u=0,v=this._handler.length; u