var loader={
  uri:'/admin/js/index.php?load=',
  loaded:{},
  onready:[],
  body:document.getElementsByTagName('body')[0],
  load:function(packages,onload)
  {
    var t=this;
    if (t.isReady(packages))
    {
      onload();
    }
    else
    {
      var toLoad=t.getNotLoaded(packages);
      var onLoad=function()
      {
        for(var i=0;i<toLoad.length;i++)
        {
          t.loaded[toLoad[i]]=true;
        }

        for(i=0;i<t.onready.length;i++)
        {
          if (t.onready[i][1] && t.isReady(t.onready[i][0])){
            t.onready[i][1]();
            t.onready[i][1]=false;
          }
        }
      }

      if (toLoad.length)
      {
        var s=document.createElement('script');
        s.type='text/javascript';
        s.onload=onLoad;
        s.src=t.uri+toLoad.join(',');
        t.ready(packages,onload);
        t.body.appendChild(s);
      }
    }
  },
  ready:function(packages,onready)
  {
    var t=this;
    if (t.isReady(packages)) onready();
    else
    {
      var s=[packages,onready];
      t.onready.push(s);
    }
  },
  isPackageLoaded:function(p)
  {
    return typeof this.loaded[p]!="undefined";
  },
  isReady:function(packages)
  {
    for(var i=0;i<packages.length;i++)
      if (!this.isPackageLoaded(packages[i])) return false;
    return true;
  },
  getNotLoaded:function(packages)
  {
    var notLoaded=[];
    for(var i=0;i<packages.length;i++)
    {
      if (!this.isPackageLoaded(packages[i]))
      {
        notLoaded.push(packages[i]);
      }
    }
    return notLoaded;
  },
  init:function()
  {
    var src,matches,packages;
    var script=document.getElementsByTagName('script');
//    var match=new RegExp((this.uri).replace(/\//g,'\\\/').replace('?','\\\?')+'(.*)$');
    var match=new RegExp('\/admin\/js\/.*?load=(.*)$');
    for(var i=0;i<script.length;i++)
    {
      src=script[i].src;
      matches=src.match(match);
      if (matches && matches.length==2) {
        packages=matches[1].split(',');
        for(var j=0;j<packages.length;j++) this.loaded[packages[j]]=true;
      }
    }
  }
};
(function(){
  loader.init();
})();
