window.ice||(window.ice={});
window.ice.icepush||function(f){function E(){var a=!1;if(window.localStorage){var c=String(Math.random());try{window.localStorage.testLocalStorage=c,a=window.localStorage.testLocalStorage==c}finally{window.localStorage.removeItem("testLocalStorage")}}return a&&Ia&&!Ja}function q(a){return function(c){return c==a}}function v(a,c){return function(){var d=reject(a,c);empty(a);each(d,curry(append,a))}}function N(a,c){function d(g){var d=g.newValue;g.key==a&&d&&(g=split(d,b)[0],c(split(g," ")))}var b=
":::";window.localStorage.getItem(a)||window.localStorage.setItem(a,"");window.addEventListener?window.addEventListener("storage",d,!1):document.attachEvent("onstorage",d);return object(function(g){g(z,function(g,d){window.localStorage.setItem(a,join(d," ")+b+Math.random());var h=navigator.userAgent;/MSIE/.test(h)||/Trident/.test(h)||c(d)});g(P,noop)})}function Ka(a,c){var d=lookupCookie(a,function(){return Cookie(a,"")}),b=run(Delay(function(){try{var a=value(d)||"",b=split(a," ");if(notEmpty(b)){var e=
c(b);update(d,join(complement(b,e)," "))}}catch(h){warn(f.logger,"failed to listen for updates",h)}},300));return object(function(a){a(z,function(a,b){var g=split(value(d)," ");update(d,join(asSet(concatenate(g,b))," "))});a(P,function(a){stop(b)})})}function ba(){try{return split(m(w)," ")}catch(a){return[]}}function qa(a){if(ha(ra)){var c=split(m(w)," ");n(w,join(complement(c,a)," "))}}function La(a){var c=split(m(w)," ");try{lookupCookieValue(l)}catch(d){try{var b=a[0].split(":")[0];Cookie(l,b)}catch(g){error(f.logger,
"Failed to extract browser ID from push ID.")}}n(w,join(asSet(concatenate(c,a))," "));x=concatenate(x,a)}function y(a){throw"Server internal error: "+contentAsText(a);}function Q(a){if(contains(a,"http://")||contains(a,"https://"))return a;var c=f.push.configuration.contextPath;if(startsWith(a,c))return a;if(c)endsWith(c,"/")&&(c=substring(c,0,size(c)-1));else{var d=window.location.pathname;try{var b=lastIndexOf(d,"/"),c=substring(d,0,b)}catch(g){c=d}}return c+"/"+a}function sa(a){return(a=getHeader(a,
"Content-Type"))&&startsWith(a,"text/xml")}function e(a,c,d){var b=f.push.configuration.parameterPrefix;b&&(c=b+c);addNameValue(a,c,d)}window.ice.icepush=!0;eval(ice.importFrom("ice.lib.functional"));eval(ice.importFrom("ice.lib.oo"));eval(ice.importFrom("ice.lib.collection"));eval(ice.importFrom("ice.lib.string"));eval(ice.importFrom("ice.lib.delay"));eval(ice.importFrom("ice.lib.cookie"));eval(ice.importFrom("ice.lib.window"));eval(ice.importFrom("ice.lib.event"));eval(ice.importFrom("ice.lib.element"));
eval(ice.importFrom("ice.lib.logger"));eval(ice.importFrom("ice.lib.query"));eval(ice.importFrom("ice.lib.http"));eval(ice.importFrom("ice.lib.configuration"));var F=navigator.userAgent.match(/Firefox\/(\w\.?\w)/),Ia=F?3.6<Number(F[1]):!0,Ja=window.attachEvent||/Trident.*rv\:11\./.test(navigator.userAgent)||/MSIE/.test(navigator.userAgent),s=operator(),G=operator(),n=operator(),m=operator(),R=operator(),ha,S;(function(){var a={},c=function(b,c){a[b]=c||"";return object(function(c){c(m,function(c){return(c=
a[b])?c:""});c(n,function(c,d){a[b]=d});c(R,function(c){delete a[b]})})},d,b;E()?(d=function(a,b){window.localStorage.setItem(a,window.localStorage.getItem(a)||"");return object(function(b){b(m,function(b){return(b=window.localStorage.getItem(a))?b:""});b(n,function(b,c){window.localStorage.setItem(a,c||"")});b(R,function(b){window.localStorage.removeItem(a)})})},b=function(a){return null!=window.localStorage.getItem(a)}):(d=function(a,b){var c=existsCookie(a)?lookupCookie(a):Cookie(a,b);return object(function(b){b(m,
function(b){try{return value(c)}catch(d){return c=Cookie(a,""),""}});b(n,function(b,d){try{update(c,d)}catch(e){c=Cookie(a,d)}});b(R,function(b){existsCookie(a)&&remove(lookupCookie(a))})})},b=existsCookie);S=function(a,b){return object(function(b){function e(){var b=f.push&&f.push.configuration&&f.push.configuration.nonSharedConnection,t;p&&(t=m(p));k==b&&p||(p=b?c(a):d(a),k=b);t&&n(p,t);return p}var p,k;b(m,function(a){return m(e())});b(n,function(a,b){n(e(),b)});b(R,function(a){R(e())})})};ha=
function(c){return f.push&&f.push.configuration&&f.push.configuration.nonSharedConnection?null!=a[c]:b(c)}})();operator();var ia=operator(),ja=operator(),ua=operator(),va=operator(),wa=operator(),xa=operator(),ya=operator(),za=operator(),ka=operator(),da=operator(),Aa=operator(),Ba=operator(),Ca=operator(),la=operator(),Da;(function(){function a(a,b,c){var d=0,g=inject(c,[b],function(b,c){return insert(b,curry(runOnce,Delay(a,c)))});return function(){d<g.length&&(apply(g[d],arguments),d++)}}var c=
"ice.push.heartbeat",d="ice.push.sequence",b="ice.connection.running",g="ice.connection.contextpath",O=":acquired",r=5E3;Da=function(h,p,k){function ta(a){try{lookupCookieValue(l),e(a,"ice.sendConfiguration",""),ta=noop}catch(b){}}function t(){try{if(debug(h,"closing previous connection..."),close(T),n(na,f.push.configuration.contextPath),U=ba(),isEmpty(U))B(),broadcast(V,["connection stopped, no pushIDs registered"]);else{debug(h,"connect...");var a=Q(f.push.configuration.blockingConnectionURI);
T=postAsynchronously(G,a,function(a){e(a,l,lookupCookieValue(l));e(a,Fa,f.windowID);e(a,H,ice.push.configuration.account);e(a,I,ice.push.configuration.realm);e(a,J,ice.push.configuration.access_token);e(a,c,ea-r);e(a,d,m(fa));each(U,curry(e,a,Ga));broadcast(K,[a]);ta(a)},FormPost,$witch(function(a){a(OK,function(a){var b=Number(getHeader(a,d));b&&n(fa,b);var b="close"!=getHeader(a,"X-Connection"),c=notEmpty(contentAsText(a));b?(c?(broadcast(D,[a]),s()):(warn(h,"empty response received"),--L),0<L?
(y(),C()):info(h,"blocking connection stopped, too many empty responses received...")):(info(h,"blocking connection stopped at server's request..."),(a=getHeader(a,"X-Connection-reason"))&&info(h,a),B(),broadcast(V,["connection stopped by server"]))});a(ServerInternalError,Z)}))}}catch(b){error(h,"failed to re-initiate blocking connection",b)}}function ma(){ea=attributeAsNumber(k,"heartbeatTimeout",15E3);X=collect(split(attributeAsString(k,"networkErrorRetryTimeouts","1 1 1 2 2 3")," "),Number)}function Ea(){Y=
collect(split(attributeAsString(k,"serverErrorRetryTimeouts","1000 2000 4000")," "),Number);Z=a(C,broadcaster(E),Y)}function s(){L=attributeAsNumber(k,"emptyResponseRetries",3)}function q(a,b,c,d){function g(){var d=!0,t=runOnce(Delay(function(){if(d){var t=c.length;e<t?(a(++e,t),B=g()):b()}},c[e]));return function(){d=!1;stop(t)}}var e=d();B();B=g();return function(){return e}}function v(){return asArray(collect(X,function(a){return a*ea+r}))}function w(a,b){warn(h,"failed to connect "+a+" time"+
(1<a?"s":"")+(a<b?", retrying ...":""));broadcast(N);C()}function x(){broadcast(ga)}function y(){ca=q(w,x,v(),$)}function A(){info(h,"initialize connection within window "+f.windowID);y();n(fa,Number(m(fa))+1);C()}function z(){n(u,p)}function F(){na=S(g,f.push.configuration.contextPath);m(na)!=f.push.configuration.contextPath&&(z(),info(h,'Blocking connection cannot be shared among multiple web-contexts.\nInitiating blocking connection for "'+f.push.configuration.contextPath+'"  web-context...'));
oa=run(Delay(function(){!ha(b)||isEmpty(m(u))?(z(),info(h,"blocking connection not initialized...candidate for its creation")):(startsWith(m(u),p)&&(endsWith(m(u),O)||(n(u,p+O),notEmpty(ba())&&A()),n(aa,(new Date).getTime()+3*M)),asNumber(m(aa))<(new Date).getTime()&&(setTimeout(z,1.5*Math.random()*M),info(h,"blocking connection lease expired...candidate for its creation")));if(m(u)==p+O){var a=ba();if(size(a)!=size(U)||notEmpty(complement(a,U)))abort(T),C()}else B(),abort(T);a=m(u);if(endsWith(m(u),
O)){if(pa!=a){pa=a;var a=broadcast,c=P,d;d=m(u);var g=indexOf(d,O);d=-1<g?substring(d,0,g):d;a(c,[d])}}else pa=""},M))}h=childLogger(h,"async-connection");var G=Client(!1),K=[],D=[],E=[],ga=[],N=[],V=[],P=[],fa=S(d),T=object(function(a){a(close,noop);a(abort,noop)});onBeforeUnload(window,function(){ga=[]});var U=ba(),C=t,ea,X;ma();var Y,Z;Ea();var L;s();var $=function(){return 0},ca=$,B=noop,M=1E3,aa=S("ice.connection.lease",asString((new Date).getTime())),u=S(b),na,pa="",W=!1,oa=object(function(a){a(stop,
noop)});return object(function(a){a(ia,function(a,b){append(K,b)});a(ja,function(a,b){append(D,b)});a(ua,function(a,b){append(E,b)});a(va,function(a,b){append(ga,b)});a(wa,function(a,b){append(N,b)});a(xa,function(a,b){append(V,b)});a(ya,function(a,b){append(P,b)});a(za,function(a){F();info(h,"connection monitoring started within window "+f.windowID);W=!1});a(ka,function(a){W&&(C=t,A(),F(),W=!1)});a(da,function(a){not(W)&&(abort(T),stop(oa),B(),C=noop,W=!0,broadcast(V,["connection stopped"]))});a(Aa,
function(a,b,c,d){if(W)a=Q(f.push.configuration.blockingConnectionURI),postAsynchronously(G,a,function(a){e(a,Fa,f.windowID);each(U,curry(e,a,Ga));b(curry(e,a))},function(a){FormPost(a);c(curry(setHeader,a))},$witch(function(a){a(OK,function(a){d(curry(getHeader,a),contentAsText(a),contentAsDOM(a))});a(ServerInternalError,function(){throw statusText(response);})}));else throw"Cannot make a request while the blocking connection is running.";});a(Ca,function(a,b){ma();ea=b;info(h,"heartbeat timeout changed to "+
b+" ms");ca=q(w,x,v(),ca)});a(Ba,function(a){ma();ca=q(w,x,v(),ca);Ea()});a(la,function(b){try{a(la,noop),y=C=noop}catch(c){error(h,"error during shutdown",c)}finally{broadcast(V,["connection stopped"]),D=ga=E=V=[],abort(T),B(),stop(oa),m(u)==p+O&&R(u)}})})}})();var z=operator(),P=operator(),X=operator(),K=operator(),Ha;(function(){Ha=E()?function(a){function c(){var a=ba(),b=[],c;for(c in g)g.hasOwnProperty(c)&&not(contains(a,c))&&append(b,c);each(b,function(a){delete g[a]});each(a,function(a){var b=
g[a];g[a]=b?b+1:1});notEmpty(a)&&z(e,a);return g}function d(){var a=c(),d=[],g;for(g in a)a.hasOwnProperty(g)&&5<a[g]&&append(d,g);notEmpty(d)&&(info(b,"expirying unused pushIDs: "+d),qa(d))}var b=childLogger(a,"pushid-expiry"),g={},e=N("ice.push.liveliness",function(a){var b=x;a=intersect(a,b);notEmpty(a)&&z(f,b)}),f=N("ice.push.confirm",function(a){each(a,function(a){delete g[a]})}),h=object(function(a){a(stop,noop)});return object(function(a){a(X,function(a){info(b,"resume monitoring for unused pushIDs");
h=Delay(d,1E4);run(h)});a(K,function(a){info(b,"stopped monitoring for unused pushIDs");stop(h)})})}:function(){return object(function(a){a(X,noop);a(K,noop)})}})();var Y=[];f.onNotification=function(a){append(Y,a);return v(Y,q(a))};var Z=[];f.onBlockingConnectionReceive=function(a){append(Z,a);return v(Z,q(a))};var L=[];f.onBlockingConnectionServerError=function(a){append(L,a);return v(L,q(a))};var $=[];f.onBlockingConnectionUnstable=function(a){append($,a);return v($,q(a))};var M=[];f.onBlockingConnectionLost=
function(a){append(M,a);return v(M,q(a))};var aa=[];f.onBlockingConnectionReEstablished=function(a){append(aa,a);return v(aa,q(a))};var Ga="ice.pushid",ra="ice.pushids",l="ice.push.browser",Fa="ice.push.window",H="ice.push.account",I="ice.push.realm",J="ice.push.access_token",F=LocalStorageLogHandler(window.console?ConsoleLogHandler(debug):WindowLogHandler(debug,window.location.href));f.windowID=f.windowID||substring(Math.random().toString(16),2,7);f.logger=Logger(["icepush"],F);f.info=info;var x=
[],w=S(ra),r=function(){var a=[];return object(function(c){c(s,function(c,b,g){a=reject(a,function(a){return key(a)==b});append(a,Cell(b,g))});c(G,function(c,b){var g=b.nodeName,e=detect(a,function(a){return key(a)==g},function(){throw"Unknown message received: "+g;});value(e)(b)})})}();s(r,"parsererror",function(a){logger.error("Parsing error");a=a.firstChild;logger.error(a.data);logger.error(a.firstChild.data)});s(r,"macro",function(a){return function(c){each(c.childNodes,curry(G,a))}}(r));s(r,
"browser",function(a){Cookie(l,a.getAttribute("id"))});var D=[],A=Client(!0);f.uriextension="";f.push={register:function(a,c){if("function"==typeof c)La(a),f.onNotification(function(d){D=asArray(intersect(d,a));if(notEmpty(D))try{c(D)}catch(b){error(f.logger,"error thrown by push notification callback",b)}});else throw"the callback is not a function";},deregister:function(a){qa(a);x=complement(x,a)},getCurrentNotifications:function(){return D},createPushId:function(a,c){var d=Q(f.push.configuration.createPushIdURI||
"create-push-id.icepush");postAsynchronously(A,d,function(a){try{e(a,l,lookupCookieValue(l))}catch(c){}e(a,H,ice.push.configuration.account);e(a,I,ice.push.configuration.realm);e(a,J,ice.push.configuration.access_token)},FormPost,$witch(function(b){b(OK,function(b){sa(b)?a&&1<a?error(f.logger,"failed to set ice.push.browser cookie"):(G(r,contentAsDOM(b).documentElement),a=a?a+1:1,f.push.createPushId(a,c)):(b=contentAsText(b),c(b))});b(ServerInternalError,y)}))},notify:function(a,c){var d=Q(f.push.configuration.notifyURI||
"notify.icepush");postAsynchronously(A,d,function(b){e(b,l,lookupCookieValue(l));e(b,H,ice.push.configuration.account);e(b,I,ice.push.configuration.realm);e(b,J,ice.push.configuration.access_token);e(b,"group",a);if(c){c.duration||(c.duration=0);c.delay||(c.delay=0);for(var d in c)if(c.hasOwnProperty(d)){var f=c[d];"delay"==d?e(b,"delay",f):"at"==d?e(b,"at",f):"duration"==d?e(b,"duration",f):e(b,"option",d+"="+f)}}},FormPost,$witch(function(a){a(ServerInternalError,y)}))},addGroupMember:function(a,
c,d){var b=Q(f.push.configuration.addGroupMemberURI||"add-group-member.icepush");postAsynchronously(A,b,function(b){e(b,l,lookupCookieValue(l));e(b,H,ice.push.configuration.account);e(b,I,ice.push.configuration.realm);e(b,J,ice.push.configuration.access_token);e(b,"group",a);e(b,"id",c);if(d)for(var f in d)d.hasOwnProperty(f)&&e(b,f,d[f])},FormPost,$witch(function(a){a(ServerInternalError,y)}))},removeGroupMember:function(a,c){var d=Q(f.push.configuration.removeGroupMemberURI||"remove-group-member.icepush");
postAsynchronously(A,d,function(b){e(b,l,lookupCookieValue(l));e(b,H,ice.push.configuration.account);e(b,I,ice.push.configuration.realm);e(b,J,ice.push.configuration.access_token);e(b,"group",a);e(b,"id",c)},FormPost,$witch(function(a){a(ServerInternalError,y)}))},get:function(a,c,d){getAsynchronously(A,a,function(a){e(a,l,lookupCookieValue(l));e(a,H,ice.push.configuration.account);e(a,I,ice.push.configuration.realm);e(a,J,ice.push.configuration.access_token);c(curry(e,a))},noop,$witch(function(a){a(OK,
function(a){d(statusCode(a),contentAsText(a),contentAsDOM(a))});a(ServerInternalError,y)}))},post:function(a,c,d){postAsynchronously(A,a,function(a){e(a,l,lookupCookieValue(l));e(a,H,ice.push.configuration.account);e(a,I,ice.push.configuration.realm);e(a,J,ice.push.configuration.access_token);c(curry(e,a))},FormPost,$witch(function(a){a(OK,function(a){d(statusCode(a),contentAsText(a),contentAsDOM(a))});a(ServerInternalError,y)}))},searchAndEvaluateScripts:function(a){each(a.getElementsByTagName("script"),
function(c){var d=document.createElement("script");d.setAttribute("type","text/javascript");c.src?d.src=c.src:d.text=c.text;a.appendChild(d)})},configuration:{contextPath:".",blockingConnectionURI:"listen.icepush",account:"",realm:"",access_token:""}};(function(){function a(a){try{var c=asArray(intersect(a,x));return notEmpty(c)?(broadcast(Y,[c]),debug(b,"picked up notifications for this window: "+c),c):[]}catch(d){return warn(b,"failed to listen for updates",d),[]}}function c(){try{info(b,"shutting down bridge..."),
c=noop,P(q)}finally{la(k)}}var d=f.windowID,b=childLogger(f.logger,d),g,l=f.push.configuration,n=document.documentElement,h=XMLDynamicConfiguration(function(){return n}),p=Ha(b),k=Da(b,d,h);s(r,"configuration",function(a){n=a;l.contextPath=attributeAsString(h,"contextPath",l.contextPath);l.blockingConnectionURI=attributeAsString(h,"blockingConnectionURI",l.blockingConnectionURI||"listen.icepush");Ba(k)});s(r,"back-off",function(a){debug(b,"received back-off");a=asNumber(a.getAttribute("delay"));try{da(k)}finally{runOnce(Delay(function(){ka(k)},
a))}});var q=E()?N("ice.notified.pushids",a):Ka("ice.notified.pushids",a);s(r,"noop",noop);s(r,"notified-pushids",function(a){if((a=a.firstChild)&&!blank(a.data)){var c=split(a.data," ");debug(b,"received notifications: "+c);a=z;var d=q,c=asSet(c),e=split(m(w)," "),c=intersect(c,e);a(d,c)}else warn(b,"No notification was received.")});onBeforeUnload(window,function(){da(k)});onUnload(window,c);ia(k,function(a){g&&e(a,"ice.push.heartbeatTimestamp",g)});ja(k,function(a){if(sa(a)){var d=contentAsDOM(a).documentElement;
G(r,d);broadcast(Z,[d])}else d=getHeader(a,"Content-Type"),warn(b,"unknown content in response - "+d+", expected text/xml"),c();hasHeader(a,"ice.push.heartbeatTimestamp")&&(g=Number(getHeader(a,"ice.push.heartbeatTimestamp")))});ua(k,function(a){try{warn(b,"server side error"),broadcast(L,[statusCode(a),contentAsText(a),contentAsDOM(a)])}finally{c()}});xa(k,function(a){debug(b,a+" in window ["+d+"]");K(p)});ya(k,function(a){broadcast(aa);(a==f.windowID?X:K)(p)});va(k,function(a){try{warn(b,"connection to server was lost"),
broadcast(M,[a])}finally{c()}});wa(k,function(){warn(b,"connection in trouble");broadcast($)});f.push.connection={startConnection:function(){za(k)},resumeConnection:function(){ka(k)},pauseConnection:function(){da(k)},changeHeartbeatInterval:function(a){Ca(k,a)},onSend:function(a){ia(k,function(b){a(function(a,c){e(b,a,c)})})},onReceive:function(a){ja(k,function(b){a(function(a){return getHeader(b,a)},contentAsText(b),contentAsDOM(b))})},controlRequest:function(a,b,c){Aa(k,a,b,c)}};info(b,"bridge loaded!");
onLoad(window,f.push.connection.startConnection)})();onKeyPress(document,function(a){a=$event(a);isEscKey(a)&&cancelDefaultAction(a)})}(window.ice);
