JS.Package=new JS.Class({initialize:function(a){this._3=a;this._0=[];this._1=[]},addDependency:function(a){if(typeof a==='string')a=this.klass.getByName(a);if(!a)return;if(JS.indexOf(this._0,a)===-1)this._0.push(a)},addName:function(a){if(!this.contains(a))this._1.push(a)},contains:function(a){return JS.indexOf(this._1,a)!==-1},getObjects:function(){var a=[],b=this._1.length,c;while(b--){c=this.klass.getObject(this._1[b]);if(c)a.push(c)}return a},isLoaded:function(a){var b=this._0.length;if(a!==false){while(b--){if(!this._0[b].isLoaded())return false}}return this.getObjects().length===this._1.length},expand:function(a){var b=a||[],c,d;for(c=0,d=this._0.length;c<d;c++)this._0[c].expand(b);if(JS.indexOf(b,this)===-1)b.push(this);return b},injectScript:function(a,b){if(this.isLoaded(false))return a.call(b||null);var c=document.createElement('script');c.type='text/javascript';c.src=this._3;c.onload=c.onreadystatechange=function(){if(!c.readyState||c.readyState==='loaded'||c.readyState==='complete'||(c.readyState===4&&c.status===200)){a.call(b||null);c=null}};document.getElementsByTagName('head')[0].appendChild(c)},extend:{_2:{},_4:this,getByPath:function(a){return this._2[a]||(this._2[a]=new this(a))},getByName:function(a){for(var b in this._2){if(this._2[b].contains(a))return this._2[b]}return null},getObject:function(a){var b=this._4,c=a.split('.'),d;while(d=c.shift())b=(b||{})[d];return b},expand:function(a){var b=[];for(var c=0,d=a.length;c<d;c++)a[c].expand(b);return b},load:function(a,b,c){if(a.length===0)return b&&b.call(c||null);a.shift().injectScript(function(){this.load(a,b,c)},this)},DSL:{pkg:function(a,b){var c=b?JS.Package.getByPath(b):JS.Package.getByName(a);c.addName(a);return new JS.Package.Description(c)}},Description:new JS.Class({initialize:function(a){this._5=a},requires:function(a){this._5.addDependency(a);return this}})}});JS.Packages=function(a){a.call(JS.Package.DSL)};require=function(){var a=JS.array(arguments),b=[];while(typeof a[0]==='string')b.push(JS.Package.getByName(a.shift()));b=JS.Package.expand(b);JS.Package.load(b,a[0],a[1])};
