/**
 * pulp javascript
 * 
 */
var pulpLoader = window.pulpLoader || (function() {
  
  var d = window.pulpLoaderDependencies || {};
  d['pulp.ajax.js'] = ['pulp.cls.event.js'];
  d['pulp.array.js'] = ['pulp.cls.js'];
  d['pulp.base.js'] = ['pulp.js'];
  d['pulp.browser.js'] = ['pulp.base.js'];
  d['pulp.cls.js'] = ['pulp.base.js'];
  d['pulp.cls.event.js'] = ['pulp.cls.js'];
  d['pulp.cookie.js'] = ['pulp.cls.js'];
  d['pulp.createElement.js'] = ['pulp.js'];
  d['pulp.cssQuery.js'] = ['pulp.base.js', 'lib/nwmatcher.js'];
  d['pulp.date.js'] = ['pulp.base.js'];
  d['pulp.date.extensions.js'] = ['pulp.cls.js','pulp.date.js'];
  d['pulp.event.js'] = ['pulp.cls.js'];
  d['pulp.event.delegate.js'] = ['pulp.event.js','pulp.cssQuery.js'];
  d['pulp.event.custom.js'] = ['pulp.event.js'];
  d['pulp.field.js'] = ['pulp.cls.js'];
  d['pulp.func.js'] = ['pulp.base.js'];
  d['pulp.hash.js'] = ['pulp.cls.js'];
  d['pulp.json.js'] = ['pulp.js','lib/json_yui.js'];
  d['pulp.safeJson.js'] = ['pulp.js', 'lib/json_parse.js','lib/json_yui.js'];
  d['pulp.node.js'] = ['pulp.cls.event.js','pulp.event.js'];
  d['pulp.nodeList.js'] = ['pulp.array.js','pulp.cssQuery.js','pulp.node.js'];
  d['pulp.morph.js'] = ['pulp.node.js','lib/Animator.js'];
  d['pulp.string.js'] = ['pulp.base.js'];
  d['pulp.type.js'] = ['pulp.base.js'];
  d['pulp.template.js'] = ['pulp.cls.js'];
  d['pulp.unit.js'] = ['pulp.cls.event.js','pulp.template'];
  d['pulp.unit2.js'] = ['pulp.cls.event.js','pulp.template'];
  d['pulp.unit.benchmark.js'] = ['pulp.unit.js'];
  d['pulp.unit.launcher.js'] = ['pulp.unit.js'];
  
  function resolve(includes, dependencies) {			
    var resolved = [], i = 0, inc, deps;
    while ((inc = includes[i++])) {
      if (inc in dependencies) {
        deps = resolve(dependencies[inc], dependencies);
        resolved = deps.concat(resolved);
      }
      resolved.push(inc);
    }
    return arrayUnique(resolved);    
  }
  
  function arrayUnique(a) {
    var results = [], r = 0;
    for (var i = 0, len = a.length; i < len; i++) {
      if (!inArray(results, a[i])) {
        results[r++] = a[i];
      }
    }
    return results;
  }
  
  var inArray = (Array.prototype.indexOf ?
    function(a, v) {
      return a.indexOf(v) > -1;
    } :
    function(a, v) {
      for (var i = 0, len = a.length; i < len; i++) {
        if (a[i] === v) {
          return true;
        }
      }
      return false;
    }
  );
  
  function parseScriptTags() {
    var scripts = document.getElementsByTagName('script'),
      i = 0,
      script, query, httpBase, toLoad, filename
    ;
    while((script = scripts[i++])) {
      if (script.readByLoader) { continue; }
      query = (/^(.*)pulp\.loader\.js\?(.+)$/).exec(String(script.src));
      if (query) {
        script.readByLoader = true;
        httpBase = query[1];				
        toLoad = resolve(query[2].split(','), d);
        i = 0;
        while ((filename = toLoad[i++])) {
          // document is not yet loaded so document.write is safe
          document.write('<script type="text/javascript" src="' + httpBase + filename + '"></scr' + 'ipt>');					
        }
        break;
      }
    }
  }

  return {
    parseScriptTags: parseScriptTags
  };
  
})();

pulpLoader.parseScriptTags();