﻿
JsScriptLoader=function(){this.addEvents({done:true});}
Ext.extend(JsScriptLoader,Ext.util.Observable,{loadingCount:0,scripts:null,portlets:[],normaliseUrl:function(url){return url.replace(/^https?:\/\/[^\/]+\//i,"/").toLowerCase();},addPortlet:function(portlet){if(!this.scripts){this.scripts={};var heads=document.documentElement.getElementsByTagName("head");for(var h=0;h<heads.length;h++){var node=heads[h].firstChild;while(node!=null){if(node.nodeType==1&&node.tagName.toLowerCase()=="script"){var url=this.normaliseUrl(node.src);if(url){this.scripts[url]=true;}}
node=node.nextSibling;}}}
var anyToLoad=false;for(var i=0;i<portlet.scriptsInvolved.length;++i){var url=this.normaliseUrl(portlet.scriptsInvolved[i]);if(!this.scripts.hasOwnProperty(url)){this.scripts[url]=false;this.loadScript(url);anyToLoad=true;}else if(!this.scripts[url]){anyToLoad=true;}}
if(anyToLoad){this.portlets.push(portlet);}
return anyToLoad;},loaded:function(sEl){var url=this.normaliseUrl(sEl.src);if(sEl.readyState&&sEl.readyState!="loaded"&&sEl.readyState!="complete"){return;}
sEl.onreadystatechange=sEl.onload=null;if(--this.loadingCount==0){var portlets=this.portlets;this.portlets=[];this.fireEvent('done',portlets);}
this.scripts[url]=true;},loadScript:function(url){++this.loadingCount;var sEl=document.createElement("script");sEl.type="text/javascript";sEl.language="JavaScript";sEl.src=url;sEl.onreadystatechange=sEl.onload=this.loaded.createDelegate(this,[sEl]);document.getElementsByTagName("head")[0].appendChild(sEl);}});