/* -*- coding: utf-8 -*-
 * underscore JavaScript Library v1.0
 * http://us.fatbrain.org/
 *
 * Copyright (c) 2009-2010 Jonas Jonsson (fatbrain@gmail.com)
 * All rights reserved.
 */

(function(G, t, E) {
  var _ = {},
    forEach = Array.prototype.forEach || function(f, t) { for (var i = 0, l = this.length; i < l; ++i) i in this && f.call(t || this, this[i], this); },
    map = Array.prototype.map || function(f) { for (var i = 0, a = [], l = this.length; i < l; ++i) if (i in this) a[i] = f(this[i]); return a; },
    reduce = Array.prototype.reduce || function(f, r) { return forEach.call(this, function(i) { r = f(r, i); }), r; },
    slice = Array.prototype.slice,
    push = Array.prototype.push,
    unshift = Array.prototype.unshift,
    hasOwnProperty = Object.prototype.hasOwnProperty,
    keys = Object.keys || function (o) { var p, a = []; for (p in o) hasOwnProperty.call(o, p) && push.call(a, p); return a; }
    LOCATION = function(callee) {
      var s = [], l = [];
      while (callee && s.indexOf(callee) === -1) {
        s.push(callee);
        callee.caller && l.unshift(callee.caller.name || '?');
        callee = callee.caller;
      }
      return l;
    },
    D = G.document,
    A = function(o, n) { return n && forEach.call(keys(n), function(p) { o[p] = n[p]; }), o; };
    N = function(n, o) { return A(reduce.call(n.split('.'), function(s, n) { return s[n] || (s[n] = {}); }, _), o); },
    I = function(n) { var s = N(n); return function(n) { var a = slice.call(arguments, 1); return (s[n] || '').replace(/(^|[^{])\{(\d+)\}([^}]|$)/g, function(_, b, i, e) { return b + a[i] + e; }); }; },
    F = function(f) { return f.call(I, _, N, G, D); },
    L = function(l, f) {
      var r = false,
        c = D.getElementsByTagName('head')[0] || D.body,
        s = D.createElement('script');
      s.src = l;
      s.type = 'text/javascript';
      s.onreadystatechange === null ? s.onreadystatechange = function() { !r && s.readyState === 'loaded' && (r = !f()); } : s.onload = function() { !r && (r = !f()); };
      c.appendChild(s);
    },
    S = function(f) {
      var a = [], r = false;
      f(function() { !r && (r = true, forEach.call(a, F)); });
      return function(f) { r ? F(f) : unshift.call(a, f); };
    },
    r = S(function(s) {
      var DCL = function() { D.readyState === 'complete' && s(); };
      DCL();
      if (D.addEventListener) {
        D.addEventListener('DOMContentLoaded', DCL, false);
        G.addEventListener('load', s, false);
      } else if (D.attachEvent) {
        D.attachEvent('onreadystatechange', DCL);
        G.attachEvent('onload', s);
      }
    }),
    l = function() {
      var G = {}, l = '', T = [E], C = {},
        i = function(l, f) { return !(!l || (C[l] || (C[l] = S(function(s) { L(l, s); })))(f)); },
        X = function(l) { G[l] && (forEach.call(G[l].i, X), G[l] = G[l].s()); },
        P = function() { T[0] === E ? window.setTimeout(function() { i(l = T.shift(), P); }, 1000) : i(l = T.shift(), P); };
      return function(i) { return S(function(s) { !i ? X(l = '') : (G[l] = { s: s, i: i }, unshift.apply(T, i), l || P()); }); };
    }();
  F.i = function() { return l(arguments[0]); };
  F.r = function() { r(arguments[0]); };
  F.l = function() { return l(map.call(arguments[0], t).concat(arguments[1] || [])); };
  G._ = F;
} (this, function (l) { return '/_/' + l.replace(/\./g, '/') + '.js'; }, '/__.js'));

