var BigPipe={bigBipeComplete:false,jsResources:new Array(),allPageLetArrived:false,numberOfJsResources:0,onArrive:function(json){for(var i=0;i<json.js_files.length;i++){if($.inArray(json.js_files[i],this.jsResources)==-1){this.jsResources.push(json.js_files[i])}}var pageLet=new PageLet(json.id,json.css_files,json.innerHTML);pageLet.startLoading()},doneFromServer:function(){this.allPageLetArrived=true;this.numberOfJsResources=this.jsResources.length;if(this.numberOfJsResources==0){this.allLoaded()}else{for(var i=0;i<this.jsResources.length;i++){this.loadJsResource(this.jsResources[i])}}},debug:function(funcName,data){if(typeof console!="undefined"&&typeof console.log!="undefined"){console.log("BigPipe."+funcName,data)}},loadCssResource:function(cssResource,pageLet){if(window.localStorage&&window.localStorage.getItem(cssResource)){this.createCssTag(window.localStorage.getItem(cssResource));pageLet.cssResourceLoaded(cssResource)}else{$.ajax({url:cssResource,success:function(data){if(window.localStorage){window.localStorage.setItem(cssResource,data)}this.createCssTag(data);pageLet.cssResourceLoaded(cssResource)},error:function(jqXHR,textStatus,errorThrown){BigPipe.debug("resources:"+cssResource+"in error:"+errorThrown);pageLet.cssResourceLoaded(cssResource)}})}},jsResourceLoaded:function(jsResource){BigPipe.debug("resources:"+BigPipe.numberOfJsResources);BigPipe.numberOfJsResources--;if(BigPipe.numberOfJsResources==0){BigPipe.allLoaded()}},createCssTag:function(data){var css=document.createElement("style");var content=document.createTextNode(data);css.setAttribute("type","text/css");if(css.styleSheet){css.styleSheet.cssText=data}else{css.appendChild(content)}document.getElementsByTagName("head")[0].appendChild(css)},createJsTag:function(data){var js=document.createElement("script");var content=document.createTextNode(data);js.setAttribute("type","text/javascript");js.text=data;document.getElementsByTagName("head")[0].appendChild(js)},loadJsResource:function(jsResource){BigPipe.debug("loaded resource:"+jsResource);if(window.localStorage&&window.localStorage.getItem(jsResource)){BigPipe.createJsTag(window.localStorage.getItem(jsResource));BigPipe.jsResourceLoaded(jsResource)}else{$.ajax({url:jsResource,success:function(data){if(window.localStorage){window.localStorage.setItem(jsResource,data)}BigPipe.createJsTag(data);BigPipe.jsResourceLoaded(jsResource)},error:function(jqXHR,textStatus,errorThrown){BigPipe.debug("resources:"+BigPipe.numberOfJsResources+"in error:"+jsResource+":"+errorThrown);BigPipe.jsResourceLoaded(jsResource)}})}},allLoaded:function(){if(!this.bigBipeComplete){this.bigBipeComplete=true;jQuery(document).trigger("bigpipe-ready");BigPipe.debug("sent jquery event")}},forceLoad:function(){jQuery(document).trigger("bigpipe-ready")}};function PageLet(pageLetId,cssResources,htmlContent){this.pageLetId=pageLetId;this.cssResources=cssResources;this.htmlContent=htmlContent;this.numberOfResourcesToLoad=this.cssResources.length}PageLet.prototype={startLoading:function(){this.loadCssResources()},loadCssResources:function(){if(this.numberOfResourcesToLoad==0){this.insertHtml()}for(var i=0;i<this.cssResources.length;i++){BigPipe.loadCssResource(this.cssResources[i],this)}},insertHtml:function(){var div=document.getElementById(this.pageLetId);BigPipe.debug("injecting innerHTML to "+this.pageLetId);BigPipe.debug("container",div);if(div!=null&&typeof this.htmlContent=="string"&&this.htmlContent!=""){newChild=document.createElement("span");newChild.innerHTML=this.htmlContent;div.parentNode.replaceChild(newChild,div)}},cssResourceLoaded:function(resource){this.numberOfResourcesToLoad--;if(this.numberOfResourcesToLoad==0){this.insertHtml()}}};
