You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2014/01/28 00:21:21 UTC

[03/61] [abbrv] [partial] updated to latest Angular-based admin portal

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/508ef2f7/portal/js/libs/bootstrap/js/bootstrap.min.js
----------------------------------------------------------------------
diff --git a/portal/js/libs/bootstrap/js/bootstrap.min.js b/portal/js/libs/bootstrap/js/bootstrap.min.js
new file mode 100644
index 0000000..d50de77
--- /dev/null
+++ b/portal/js/libs/bootstrap/js/bootstrap.min.js
@@ -0,0 +1,644 @@
+/*!
+ * Bootstrap.js by @fat & @mdo
+ * Copyright 2012 Twitter, Inc.
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ */
+!function (e) {
+  "use strict";
+  e(function () {
+    e.support.transition = function () {
+      var e = function () {
+        var e = document.createElement("bootstrap"), t = {WebkitTransition: "webkitTransitionEnd", MozTransition: "transitionend", OTransition: "oTransitionEnd otransitionend", transition: "transitionend"}, n;
+        for (n in t)if (e.style[n] !== undefined)return t[n]
+      }();
+      return e && {end: e}
+    }()
+  })
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = '[data-dismiss="alert"]', n = function (n) {
+    e(n).on("click", t, this.close)
+  };
+  n.prototype.close = function (t) {
+    function s() {
+      i.trigger("closed").remove()
+    }
+
+    var n = e(this), r = n.attr("data-target"), i;
+    r || (r = n.attr("href"), r = r && r.replace(/.*(?=#[^\s]*$)/, "")), i = e(r), t && t.preventDefault(), i.length || (i = n.hasClass("alert") ? n : n.parent()), i.trigger(t = e.Event("close"));
+    if (t.isDefaultPrevented())return;
+    i.removeClass("in"), e.support.transition && i.hasClass("fade") ? i.on(e.support.transition.end, s) : s()
+  };
+  var r = e.fn.alert;
+  e.fn.alert = function (t) {
+    return this.each(function () {
+      var r = e(this), i = r.data("alert");
+      i || r.data("alert", i = new n(this)), typeof t == "string" && i[t].call(r)
+    })
+  }, e.fn.alert.Constructor = n, e.fn.alert.noConflict = function () {
+    return e.fn.alert = r, this
+  }, e(document).on("click.alert.data-api", t, n.prototype.close)
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (t, n) {
+    this.$element = e(t), this.options = e.extend({}, e.fn.button.defaults, n)
+  };
+  t.prototype.setState = function (e) {
+    var t = "disabled", n = this.$element, r = n.data(), i = n.is("input") ? "val" : "html";
+    e += "Text", r.resetText || n.data("resetText", n[i]()), n[i](r[e] || this.options[e]), setTimeout(function () {
+      e == "loadingText" ? n.addClass(t).attr(t, t) : n.removeClass(t).removeAttr(t)
+    }, 0)
+  }, t.prototype.toggle = function () {
+    var e = this.$element.closest('[data-toggle="buttons-radio"]');
+    e && e.find(".active").removeClass("active"), this.$element.toggleClass("active")
+  };
+  var n = e.fn.button;
+  e.fn.button = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("button"), s = typeof n == "object" && n;
+      i || r.data("button", i = new t(this, s)), n == "toggle" ? i.toggle() : n && i.setState(n)
+    })
+  }, e.fn.button.defaults = {loadingText: "loading..."}, e.fn.button.Constructor = t, e.fn.button.noConflict = function () {
+    return e.fn.button = n, this
+  }, e(document).on("click.button.data-api", "[data-toggle^=button]", function (t) {
+    var n = e(t.target);
+    n.hasClass("btn") || (n = n.closest(".btn")), n.button("toggle")
+  })
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (t, n) {
+    this.$element = e(t), this.$indicators = this.$element.find(".carousel-indicators"), this.options = n, this.options.pause == "hover" && this.$element.on("mouseenter", e.proxy(this.pause, this)).on("mouseleave", e.proxy(this.cycle, this))
+  };
+  t.prototype = {cycle: function (t) {
+    return t || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(e.proxy(this.next, this), this.options.interval)), this
+  }, getActiveIndex: function () {
+    return this.$active = this.$element.find(".item.active"), this.$items = this.$active.parent().children(), this.$items.index(this.$active)
+  }, to: function (t) {
+    var n = this.getActiveIndex(), r = this;
+    if (t > this.$items.length - 1 || t < 0)return;
+    return this.sliding ? this.$element.one("slid", function () {
+      r.to(t)
+    }) : n == t ? this.pause().cycle() : this.slide(t > n ? "next" : "prev", e(this.$items[t]))
+  }, pause: function (t) {
+    return t || (this.paused = !0), this.$element.find(".next, .prev").length && e.support.transition.end && (this.$element.trigger(e.support.transition.end), this.cycle(!0)), clearInterval(this.interval), this.interval = null, this
+  }, next: function () {
+    if (this.sliding)return;
+    return this.slide("next")
+  }, prev: function () {
+    if (this.sliding)return;
+    return this.slide("prev")
+  }, slide: function (t, n) {
+    var r = this.$element.find(".item.active"), i = n || r[t](), s = this.interval, o = t == "next" ? "left" : "right", u = t == "next" ? "first" : "last", a = this, f;
+    this.sliding = !0, s && this.pause(), i = i.length ? i : this.$element.find(".item")[u](), f = e.Event("slide", {relatedTarget: i[0], direction: o});
+    if (i.hasClass("active"))return;
+    this.$indicators.length && (this.$indicators.find(".active").removeClass("active"), this.$element.one("slid", function () {
+      var t = e(a.$indicators.children()[a.getActiveIndex()]);
+      t && t.addClass("active")
+    }));
+    if (e.support.transition && this.$element.hasClass("slide")) {
+      this.$element.trigger(f);
+      if (f.isDefaultPrevented())return;
+      i.addClass(t), i[0].offsetWidth, r.addClass(o), i.addClass(o), this.$element.one(e.support.transition.end, function () {
+        i.removeClass([t, o].join(" ")).addClass("active"), r.removeClass(["active", o].join(" ")), a.sliding = !1, setTimeout(function () {
+          a.$element.trigger("slid")
+        }, 0)
+      })
+    } else {
+      this.$element.trigger(f);
+      if (f.isDefaultPrevented())return;
+      r.removeClass("active"), i.addClass("active"), this.sliding = !1, this.$element.trigger("slid")
+    }
+    return s && this.cycle(), this
+  }};
+  var n = e.fn.carousel;
+  e.fn.carousel = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("carousel"), s = e.extend({}, e.fn.carousel.defaults, typeof n == "object" && n), o = typeof n == "string" ? n : s.slide;
+      i || r.data("carousel", i = new t(this, s)), typeof n == "number" ? i.to(n) : o ? i[o]() : s.interval && i.pause().cycle()
+    })
+  }, e.fn.carousel.defaults = {interval: 5e3, pause: "hover"}, e.fn.carousel.Constructor = t, e.fn.carousel.noConflict = function () {
+    return e.fn.carousel = n, this
+  }, e(document).on("click.carousel.data-api", "[data-slide], [data-slide-to]", function (t) {
+    var n = e(this), r, i = e(n.attr("data-target") || (r = n.attr("href")) && r.replace(/.*(?=#[^\s]+$)/, "")), s = e.extend({}, i.data(), n.data()), o;
+    i.carousel(s), (o = n.attr("data-slide-to")) && i.data("carousel").pause().to(o).cycle(), t.preventDefault()
+  })
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (t, n) {
+    this.$element = e(t), this.options = e.extend({}, e.fn.collapse.defaults, n), this.options.parent && (this.$parent = e(this.options.parent)), this.options.toggle && this.toggle()
+  };
+  t.prototype = {constructor: t, dimension: function () {
+    var e = this.$element.hasClass("width");
+    return e ? "width" : "height"
+  }, show: function () {
+    var t, n, r, i;
+    if (this.transitioning || this.$element.hasClass("in"))return;
+    t = this.dimension(), n = e.camelCase(["scroll", t].join("-")), r = this.$parent && this.$parent.find("> .accordion-group > .in");
+    if (r && r.length) {
+      i = r.data("collapse");
+      if (i && i.transitioning)return;
+      r.collapse("hide"), i || r.data("collapse", null)
+    }
+    this.$element[t](0), this.transition("addClass", e.Event("show"), "shown"), e.support.transition && this.$element[t](this.$element[0][n])
+  }, hide: function () {
+    var t;
+    if (this.transitioning || !this.$element.hasClass("in"))return;
+    t = this.dimension(), this.reset(this.$element[t]()), this.transition("removeClass", e.Event("hide"), "hidden"), this.$element[t](0)
+  }, reset: function (e) {
+    var t = this.dimension();
+    return this.$element.removeClass("collapse")[t](e || "auto")[0].offsetWidth, this.$element[e !== null ? "addClass" : "removeClass"]("collapse"), this
+  }, transition: function (t, n, r) {
+    var i = this, s = function () {
+      n.type == "show" && i.reset(), i.transitioning = 0, i.$element.trigger(r)
+    };
+    this.$element.trigger(n);
+    if (n.isDefaultPrevented())return;
+    this.transitioning = 1, this.$element[t]("in"), e.support.transition && this.$element.hasClass("collapse") ? this.$element.one(e.support.transition.end, s) : s()
+  }, toggle: function () {
+    this[this.$element.hasClass("in") ? "hide" : "show"]()
+  }};
+  var n = e.fn.collapse;
+  e.fn.collapse = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("collapse"), s = e.extend({}, e.fn.collapse.defaults, r.data(), typeof n == "object" && n);
+      i || r.data("collapse", i = new t(this, s)), typeof n == "string" && i[n]()
+    })
+  }, e.fn.collapse.defaults = {toggle: !0}, e.fn.collapse.Constructor = t, e.fn.collapse.noConflict = function () {
+    return e.fn.collapse = n, this
+  }, e(document).on("click.collapse.data-api", "[data-toggle=collapse]", function (t) {
+    var n = e(this), r, i = n.attr("data-target") || t.preventDefault() || (r = n.attr("href")) && r.replace(/.*(?=#[^\s]+$)/, ""), s = e(i).data("collapse") ? "toggle" : n.data();
+    n[e(i).hasClass("in") ? "addClass" : "removeClass"]("collapsed"), e(i).collapse(s)
+  })
+}(window.jQuery), !function (e) {
+  "use strict";
+  function r() {
+    e(t).each(function () {
+      i(e(this)).removeClass("open")
+    })
+  }
+
+  function i(t) {
+    var n = t.attr("data-target"), r;
+    n || (n = t.attr("href"), n = n && /#/.test(n) && n.replace(/.*(?=#[^\s]*$)/, "")), r = n && e(n);
+    if (!r || !r.length)r = t.parent();
+    return r
+  }
+
+  var t = "[data-toggle=dropdown]", n = function (t) {
+    var n = e(t).on("click.dropdown.data-api", this.toggle);
+    e("html").on("click.dropdown.data-api", function () {
+      n.parent().removeClass("open")
+    })
+  };
+  n.prototype = {constructor: n, toggle: function (t) {
+    var n = e(this), s, o;
+    if (n.is(".disabled, :disabled"))return;
+    return s = i(n), o = s.hasClass("open"), r(), o || s.toggleClass("open"), n.focus(), !1
+  }, keydown: function (n) {
+    var r, s, o, u, a, f;
+    if (!/(38|40|27)/.test(n.keyCode))return;
+    r = e(this), n.preventDefault(), n.stopPropagation();
+    if (r.is(".disabled, :disabled"))return;
+    u = i(r), a = u.hasClass("open");
+    if (!a || a && n.keyCode == 27)return n.which == 27 && u.find(t).focus(), r.click();
+    s = e("[role=menu] li:not(.divider):visible a", u);
+    if (!s.length)return;
+    f = s.index(s.filter(":focus")), n.keyCode == 38 && f > 0 && f--, n.keyCode == 40 && f < s.length - 1 && f++, ~f || (f = 0), s.eq(f).focus()
+  }};
+  var s = e.fn.dropdown;
+  e.fn.dropdown = function (t) {
+    return this.each(function () {
+      var r = e(this), i = r.data("dropdown");
+      i || r.data("dropdown", i = new n(this)), typeof t == "string" && i[t].call(r)
+    })
+  }, e.fn.dropdown.Constructor = n, e.fn.dropdown.noConflict = function () {
+    return e.fn.dropdown = s, this
+  }, e(document).on("click.dropdown.data-api", r).on("click.dropdown.data-api", ".dropdown form",function (e) {
+    e.stopPropagation()
+  }).on("click.dropdown-menu",function (e) {
+    e.stopPropagation()
+  }).on("click.dropdown.data-api", t, n.prototype.toggle).on("keydown.dropdown.data-api", t + ", [role=menu]", n.prototype.keydown)
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (t, n) {
+    this.options = n, this.$element = e(t).delegate('[data-dismiss="modal"]', "click.dismiss.modal", e.proxy(this.hide, this)), this.options.remote && this.$element.find(".modal-body").load(this.options.remote)
+  };
+  t.prototype = {constructor: t, toggle: function () {
+    return this[this.isShown ? "hide" : "show"]()
+  }, show: function () {
+    var t = this, n = e.Event("show");
+    this.$element.trigger(n);
+    if (this.isShown || n.isDefaultPrevented())return;
+    this.isShown = !0, this.escape(), this.backdrop(function () {
+      var n = e.support.transition && t.$element.hasClass("fade");
+      t.$element.parent().length || t.$element.appendTo(document.body), t.$element.show(), n && t.$element[0].offsetWidth, t.$element.addClass("in").attr("aria-hidden", !1), t.enforceFocus(), n ? t.$element.one(e.support.transition.end, function () {
+        t.$element.focus().trigger("shown")
+      }) : t.$element.focus().trigger("shown")
+    })
+  }, hide: function (t) {
+    t && t.preventDefault();
+    var n = this;
+    t = e.Event("hide"), this.$element.trigger(t);
+    if (!this.isShown || t.isDefaultPrevented())return;
+    this.isShown = !1, this.escape(), e(document).off("focusin.modal"), this.$element.removeClass("in").attr("aria-hidden", !0), e.support.transition && this.$element.hasClass("fade") ? this.hideWithTransition() : this.hideModal()
+  }, enforceFocus: function () {
+    var t = this;
+    e(document).on("focusin.modal", function (e) {
+      t.$element[0] !== e.target && !t.$element.has(e.target).length && t.$element.focus()
+    })
+  }, escape: function () {
+    var e = this;
+    this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.modal", function (t) {
+      t.which == 27 && e.hide()
+    }) : this.isShown || this.$element.off("keyup.dismiss.modal")
+  }, hideWithTransition: function () {
+    var t = this, n = setTimeout(function () {
+      t.$element.off(e.support.transition.end), t.hideModal()
+    }, 500);
+    this.$element.one(e.support.transition.end, function () {
+      clearTimeout(n), t.hideModal()
+    })
+  }, hideModal: function () {
+    var e = this;
+    this.$element.hide(), this.backdrop(function () {
+      e.removeBackdrop(), e.$element.trigger("hidden")
+    })
+  }, removeBackdrop: function () {
+    this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
+  }, backdrop: function (t) {
+    var n = this, r = this.$element.hasClass("fade") ? "fade" : "";
+    if (this.isShown && this.options.backdrop) {
+      var i = e.support.transition && r;
+      this.$backdrop = e('<div class="modal-backdrop ' + r + '" />').appendTo(document.body), this.$backdrop.click(this.options.backdrop == "static" ? e.proxy(this.$element[0].focus, this.$element[0]) : e.proxy(this.hide, this)), i && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in");
+      if (!t)return;
+      i ? this.$backdrop.one(e.support.transition.end, t) : t()
+    } else!this.isShown && this.$backdrop ? (this.$backdrop.removeClass("in"), e.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one(e.support.transition.end, t) : t()) : t && t()
+  }};
+  var n = e.fn.modal;
+  e.fn.modal = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("modal"), s = e.extend({}, e.fn.modal.defaults, r.data(), typeof n == "object" && n);
+      i || r.data("modal", i = new t(this, s)), typeof n == "string" ? i[n]() : s.show && i.show()
+    })
+  }, e.fn.modal.defaults = {backdrop: !0, keyboard: !0, show: !0}, e.fn.modal.Constructor = t, e.fn.modal.noConflict = function () {
+    return e.fn.modal = n, this
+  }, e(document).on("click.modal.data-api", '[data-toggle="modal"]', function (t) {
+    var n = e(this), r = n.attr("href"), i = e(n.attr("data-target") || r && r.replace(/.*(?=#[^\s]+$)/, "")), s = i.data("modal") ? "toggle" : e.extend({remote: !/#/.test(r) && r}, i.data(), n.data());
+    t.preventDefault(), i.modal(s).one("hide", function () {
+      n.focus()
+    })
+  })
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (e, t) {
+    this.init("tooltip", e, t)
+  };
+  t.prototype = {constructor: t, init: function (t, n, r) {
+    var i, s, o, u, a;
+    this.type = t, this.$element = e(n), this.options = this.getOptions(r), this.enabled = !0, o = this.options.trigger.split(" ");
+    for (a = o.length; a--;)u = o[a], u == "click" ? this.$element.on("click." + this.type, this.options.selector, e.proxy(this.toggle, this)) : u != "manual" && (i = u == "hover" ? "mouseenter" : "focus", s = u == "hover" ? "mouseleave" : "blur", this.$element.on(i + "." + this.type, this.options.selector, e.proxy(this.enter, this)), this.$element.on(s + "." + this.type, this.options.selector, e.proxy(this.leave, this)));
+    this.options.selector ? this._options = e.extend({}, this.options, {trigger: "manual", selector: ""}) : this.fixTitle()
+  }, getOptions: function (t) {
+    return t = e.extend({}, e.fn[this.type].defaults, this.$element.data(), t), t.delay && typeof t.delay == "number" && (t.delay = {show: t.delay, hide: t.delay}), t
+  }, enter: function (t) {
+    var n = e.fn[this.type].defaults, r = {}, i;
+    this._options && e.each(this._options, function (e, t) {
+      n[e] != t && (r[e] = t)
+    }, this), i = e(t.currentTarget)[this.type](r).data(this.type);
+    if (!i.options.delay || !i.options.delay.show)return i.show();
+    clearTimeout(this.timeout), i.hoverState = "in", this.timeout = setTimeout(function () {
+      i.hoverState == "in" && i.show()
+    }, i.options.delay.show)
+  }, leave: function (t) {
+    var n = e(t.currentTarget)[this.type](this._options).data(this.type);
+    this.timeout && clearTimeout(this.timeout);
+    if (!n.options.delay || !n.options.delay.hide)return n.hide();
+    n.hoverState = "out", this.timeout = setTimeout(function () {
+      n.hoverState == "out" && n.hide()
+    }, n.options.delay.hide)
+  }, show: function () {
+    var t, n, r, i, s, o, u = e.Event("show");
+    if (this.hasContent() && this.enabled) {
+      this.$element.trigger(u);
+      if (u.isDefaultPrevented())return;
+      t = this.tip(), this.setContent(), this.options.animation && t.addClass("fade"), s = typeof this.options.placement == "function" ? this.options.placement.call(this, t[0], this.$element[0]) : this.options.placement, t.detach().css({top: 0, left: 0, display: "block"}), this.options.container ? t.appendTo(this.options.container) : t.insertAfter(this.$element), n = this.getPosition(), r = t[0].offsetWidth, i = t[0].offsetHeight;
+      switch (s) {
+        case"bottom":
+          o = {top: n.top + n.height, left: n.left + n.width / 2 - r / 2};
+          break;
+        case"top":
+          o = {top: n.top - i, left: n.left + n.width / 2 - r / 2};
+          break;
+        case"left":
+          o = {top: n.top + n.height / 2 - i / 2, left: n.left - r};
+          break;
+        case"right":
+          o = {top: n.top + n.height / 2 - i / 2, left: n.left + n.width}
+      }
+      this.applyPlacement(o, s), this.$element.trigger("shown")
+    }
+  }, applyPlacement: function (e, t) {
+    var n = this.tip(), r = n[0].offsetWidth, i = n[0].offsetHeight, s, o, u, a;
+    n.offset(e).addClass(t).addClass("in"), s = n[0].offsetWidth, o = n[0].offsetHeight, t == "top" && o != i && (e.top = e.top + i - o, a = !0), t == "bottom" || t == "top" ? (u = 0, e.left < 0 && (u = e.left * -2, e.left = 0, n.offset(e), s = n[0].offsetWidth, o = n[0].offsetHeight), this.replaceArrow(u - r + s, s, "left")) : this.replaceArrow(o - i, o, "top"), a && n.offset(e)
+  }, replaceArrow: function (e, t, n) {
+    this.arrow().css(n, e ? 50 * (1 - e / t) + "%" : "")
+  }, setContent: function () {
+    var e = this.tip(), t = this.getTitle();
+    e.find(".tooltip-inner")[this.options.html ? "html" : "text"](t), e.removeClass("fade in top bottom left right")
+  }, hide: function () {
+    function i() {
+      var t = setTimeout(function () {
+        n.off(e.support.transition.end).detach()
+      }, 500);
+      n.one(e.support.transition.end, function () {
+        clearTimeout(t), n.detach()
+      })
+    }
+
+    var t = this, n = this.tip(), r = e.Event("hide");
+    this.$element.trigger(r);
+    if (r.isDefaultPrevented())return;
+    return n.removeClass("in"), e.support.transition && this.$tip.hasClass("fade") ? i() : n.detach(), this.$element.trigger("hidden"), this
+  }, fixTitle: function () {
+    var e = this.$element;
+    (e.attr("title") || typeof e.attr("data-original-title") != "string") && e.attr("data-original-title", e.attr("title") || "").attr("title", "")
+  }, hasContent: function () {
+    return this.getTitle()
+  }, getPosition: function () {
+    var t = this.$element[0];
+    return e.extend({}, typeof t.getBoundingClientRect == "function" ? t.getBoundingClientRect() : {width: t.offsetWidth, height: t.offsetHeight}, this.$element.offset())
+  }, getTitle: function () {
+    var e, t = this.$element, n = this.options;
+    return e = t.attr("data-original-title") || (typeof n.title == "function" ? n.title.call(t[0]) : n.title), e
+  }, tip: function () {
+    return this.$tip = this.$tip || e(this.options.template)
+  }, arrow: function () {
+    return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
+  }, validate: function () {
+    this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
+  }, enable: function () {
+    this.enabled = !0
+  }, disable: function () {
+    this.enabled = !1
+  }, toggleEnabled: function () {
+    this.enabled = !this.enabled
+  }, toggle: function (t) {
+    var n = t ? e(t.currentTarget)[this.type](this._options).data(this.type) : this;
+    n.tip().hasClass("in") ? n.hide() : n.show()
+  }, destroy: function () {
+    this.hide().$element.off("." + this.type).removeData(this.type)
+  }};
+  var n = e.fn.tooltip;
+  e.fn.tooltip = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("tooltip"), s = typeof n == "object" && n;
+      i || r.data("tooltip", i = new t(this, s)), typeof n == "string" && i[n]()
+    })
+  }, e.fn.tooltip.Constructor = t, e.fn.tooltip.defaults = {animation: !0, placement: "top", selector: !1, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', trigger: "hover focus", title: "", delay: 0, html: !1, container: !1}, e.fn.tooltip.noConflict = function () {
+    return e.fn.tooltip = n, this
+  }
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (e, t) {
+    this.init("popover", e, t)
+  };
+  t.prototype = e.extend({}, e.fn.tooltip.Constructor.prototype, {constructor: t, setContent: function () {
+    var e = this.tip(), t = this.getTitle(), n = this.getContent();
+    e.find(".popover-title")[this.options.html ? "html" : "text"](t), e.find(".popover-content")[this.options.html ? "html" : "text"](n), e.removeClass("fade top bottom left right in")
+  }, hasContent: function () {
+    return this.getTitle() || this.getContent()
+  }, getContent: function () {
+    var e, t = this.$element, n = this.options;
+    return e = (typeof n.content == "function" ? n.content.call(t[0]) : n.content) || t.attr("data-content"), e
+  }, tip: function () {
+    return this.$tip || (this.$tip = e(this.options.template)), this.$tip
+  }, destroy: function () {
+    this.hide().$element.off("." + this.type).removeData(this.type)
+  }});
+  var n = e.fn.popover;
+  e.fn.popover = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("popover"), s = typeof n == "object" && n;
+      i || r.data("popover", i = new t(this, s)), typeof n == "string" && i[n]()
+    })
+  }, e.fn.popover.Constructor = t, e.fn.popover.defaults = e.extend({}, e.fn.tooltip.defaults, {placement: "right", trigger: "click", content: "", template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}), e.fn.popover.noConflict = function () {
+    return e.fn.popover = n, this
+  }
+}(window.jQuery), !function (e) {
+  "use strict";
+  function t(t, n) {
+    var r = e.proxy(this.process, this), i = e(t).is("body") ? e(window) : e(t), s;
+    this.options = e.extend({}, e.fn.scrollspy.defaults, n), this.$scrollElement = i.on("scroll.scroll-spy.data-api", r), this.selector = (this.options.target || (s = e(t).attr("href")) && s.replace(/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a", this.$body = e("body"), this.refresh(), this.process()
+  }
+
+  t.prototype = {constructor: t, refresh: function () {
+    var t = this, n;
+    this.offsets = e([]), this.targets = e([]), n = this.$body.find(this.selector).map(function () {
+      var n = e(this), r = n.data("target") || n.attr("href"), i = /^#\w/.test(r) && e(r);
+      return i && i.length && [
+        [i.position().top + (!e.isWindow(t.$scrollElement.get(0)) && t.$scrollElement.scrollTop()), r]
+      ] || null
+    }).sort(function (e, t) {
+      return e[0] - t[0]
+    }).each(function () {
+      t.offsets.push(this[0]), t.targets.push(this[1])
+    })
+  }, process: function () {
+    var e = this.$scrollElement.scrollTop() + this.options.offset, t = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight, n = t - this.$scrollElement.height(), r = this.offsets, i = this.targets, s = this.activeTarget, o;
+    if (e >= n)return s != (o = i.last()[0]) && this.activate(o);
+    for (o = r.length; o--;)s != i[o] && e >= r[o] && (!r[o + 1] || e <= r[o + 1]) && this.activate(i[o])
+  }, activate: function (t) {
+    var n, r;
+    this.activeTarget = t, e(this.selector).parent(".active").removeClass("active"), r = this.selector + '[data-target="' + t + '"],' + this.selector + '[href="' + t + '"]', n = e(r).parent("li").addClass("active"), n.parent(".dropdown-menu").length && (n = n.closest("li.dropdown").addClass("active")), n.trigger("activate")
+  }};
+  var n = e.fn.scrollspy;
+  e.fn.scrollspy = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("scrollspy"), s = typeof n == "object" && n;
+      i || r.data("scrollspy", i = new t(this, s)), typeof n == "string" && i[n]()
+    })
+  }, e.fn.scrollspy.Constructor = t, e.fn.scrollspy.defaults = {offset: 10}, e.fn.scrollspy.noConflict = function () {
+    return e.fn.scrollspy = n, this
+  }, e(window).on("load", function () {
+    e('[data-spy="scroll"]').each(function () {
+      var t = e(this);
+      t.scrollspy(t.data())
+    })
+  })
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (t) {
+    this.element = e(t)
+  };
+  t.prototype = {constructor: t, show: function () {
+    var t = this.element, n = t.closest("ul:not(.dropdown-menu)"), r = t.attr("data-target"), i, s, o;
+    r || (r = t.attr("href"), r = r && r.replace(/.*(?=#[^\s]*$)/, ""));
+    if (t.parent("li").hasClass("active"))return;
+    i = n.find(".active:last a")[0], o = e.Event("show", {relatedTarget: i}), t.trigger(o);
+    if (o.isDefaultPrevented())return;
+    s = e(r), this.activate(t.parent("li"), n), this.activate(s, s.parent(), function () {
+      t.trigger({type: "shown", relatedTarget: i})
+    })
+  }, activate: function (t, n, r) {
+    function o() {
+      i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"), t.addClass("active"), s ? (t[0].offsetWidth, t.addClass("in")) : t.removeClass("fade"), t.parent(".dropdown-menu") && t.closest("li.dropdown").addClass("active"), r && r()
+    }
+
+    var i = n.find("> .active"), s = r && e.support.transition && i.hasClass("fade");
+    s ? i.one(e.support.transition.end, o) : o(), i.removeClass("in")
+  }};
+  var n = e.fn.tab;
+  e.fn.tab = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("tab");
+      i || r.data("tab", i = new t(this)), typeof n == "string" && i[n]()
+    })
+  }, e.fn.tab.Constructor = t, e.fn.tab.noConflict = function () {
+    return e.fn.tab = n, this
+  }, e(document).on("click.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function (t) {
+    t.preventDefault(), e(this).tab("show")
+  })
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (t, n) {
+    this.$element = e(t), this.options = e.extend({}, e.fn.typeahead.defaults, n), this.matcher = this.options.matcher || this.matcher, this.sorter = this.options.sorter || this.sorter, this.highlighter = this.options.highlighter || this.highlighter, this.updater = this.options.updater || this.updater, this.source = this.options.source, this.$menu = e(this.options.menu), this.shown = !1, this.listen()
+  };
+  t.prototype = {constructor: t, select: function () {
+    var e = this.$menu.find(".active").attr("data-value");
+    return this.$element.val(this.updater(e)).change(), this.hide()
+  }, updater: function (e) {
+    return e
+  }, show: function () {
+    var t = e.extend({}, this.$element.position(), {height: this.$element[0].offsetHeight});
+    return this.$menu.insertAfter(this.$element).css({top: t.top + t.height, left: t.left}).show(), this.shown = !0, this
+  }, hide: function () {
+    return this.$menu.hide(), this.shown = !1, this
+  }, lookup: function (t) {
+    var n;
+    return this.query = this.$element.val(), !this.query || this.query.length < this.options.minLength ? this.shown ? this.hide() : this : (n = e.isFunction(this.source) ? this.source(this.query, e.proxy(this.process, this)) : this.source, n ? this.process(n) : this)
+  }, process: function (t) {
+    var n = this;
+    return t = e.grep(t, function (e) {
+      return n.matcher(e)
+    }), t = this.sorter(t), t.length ? this.render(t.slice(0, this.options.items)).show() : this.shown ? this.hide() : this
+  }, matcher: function (e) {
+    return~e.toLowerCase().indexOf(this.query.toLowerCase())
+  }, sorter: function (e) {
+    var t = [], n = [], r = [], i;
+    while (i = e.shift())i.toLowerCase().indexOf(this.query.toLowerCase()) ? ~i.indexOf(this.query) ? n.push(i) : r.push(i) : t.push(i);
+    return t.concat(n, r)
+  }, highlighter: function (e) {
+    var t = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+    return e.replace(new RegExp("(" + t + ")", "ig"), function (e, t) {
+      return"<strong>" + t + "</strong>"
+    })
+  }, render: function (t) {
+    var n = this;
+    return t = e(t).map(function (t, r) {
+      return t = e(n.options.item).attr("data-value", r), t.find("a").html(n.highlighter(r)), t[0]
+    }), t.first().addClass("active"), this.$menu.html(t), this
+  }, next: function (t) {
+    var n = this.$menu.find(".active").removeClass("active"), r = n.next();
+    r.length || (r = e(this.$menu.find("li")[0])), r.addClass("active")
+  }, prev: function (e) {
+    var t = this.$menu.find(".active").removeClass("active"), n = t.prev();
+    n.length || (n = this.$menu.find("li").last()), n.addClass("active")
+  }, listen: function () {
+    this.$element.on("focus", e.proxy(this.focus, this)).on("blur", e.proxy(this.blur, this)).on("keypress", e.proxy(this.keypress, this)).on("keyup", e.proxy(this.keyup, this)), this.eventSupported("keydown") && this.$element.on("keydown", e.proxy(this.keydown, this)), this.$menu.on("click", e.proxy(this.click, this)).on("mouseenter", "li", e.proxy(this.mouseenter, this)).on("mouseleave", "li", e.proxy(this.mouseleave, this))
+  }, eventSupported: function (e) {
+    var t = e in this.$element;
+    return t || (this.$element.setAttribute(e, "return;"), t = typeof this.$element[e] == "function"), t
+  }, move: function (e) {
+    if (!this.shown)return;
+    switch (e.keyCode) {
+      case 9:
+      case 13:
+      case 27:
+        e.preventDefault();
+        break;
+      case 38:
+        e.preventDefault(), this.prev();
+        break;
+      case 40:
+        e.preventDefault(), this.next()
+    }
+    e.stopPropagation()
+  }, keydown: function (t) {
+    this.suppressKeyPressRepeat = ~e.inArray(t.keyCode, [40, 38, 9, 13, 27]), this.move(t)
+  }, keypress: function (e) {
+    if (this.suppressKeyPressRepeat)return;
+    this.move(e)
+  }, keyup: function (e) {
+    switch (e.keyCode) {
+      case 40:
+      case 38:
+      case 16:
+      case 17:
+      case 18:
+        break;
+      case 9:
+      case 13:
+        if (!this.shown)return;
+        this.select();
+        break;
+      case 27:
+        if (!this.shown)return;
+        this.hide();
+        break;
+      default:
+        this.lookup()
+    }
+    e.stopPropagation(), e.preventDefault()
+  }, focus: function (e) {
+    this.focused = !0
+  }, blur: function (e) {
+    this.focused = !1, !this.mousedover && this.shown && this.hide()
+  }, click: function (e) {
+    e.stopPropagation(), e.preventDefault(), this.select(), this.$element.focus()
+  }, mouseenter: function (t) {
+    this.mousedover = !0, this.$menu.find(".active").removeClass("active"), e(t.currentTarget).addClass("active")
+  }, mouseleave: function (e) {
+    this.mousedover = !1, !this.focused && this.shown && this.hide()
+  }};
+  var n = e.fn.typeahead;
+  e.fn.typeahead = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("typeahead"), s = typeof n == "object" && n;
+      i || r.data("typeahead", i = new t(this, s)), typeof n == "string" && i[n]()
+    })
+  }, e.fn.typeahead.defaults = {source: [], items: 8, menu: '<ul class="typeahead dropdown-menu"></ul>', item: '<li><a href="#"></a></li>', minLength: 1}, e.fn.typeahead.Constructor = t, e.fn.typeahead.noConflict = function () {
+    return e.fn.typeahead = n, this
+  }, e(document).on("focus.typeahead.data-api", '[data-provide="typeahead"]', function (t) {
+    var n = e(this);
+    if (n.data("typeahead"))return;
+    n.typeahead(n.data())
+  })
+}(window.jQuery), !function (e) {
+  "use strict";
+  var t = function (t, n) {
+    this.options = e.extend({}, e.fn.affix.defaults, n), this.$window = e(window).on("scroll.affix.data-api", e.proxy(this.checkPosition, this)).on("click.affix.data-api", e.proxy(function () {
+      setTimeout(e.proxy(this.checkPosition, this), 1)
+    }, this)), this.$element = e(t), this.checkPosition()
+  };
+  t.prototype.checkPosition = function () {
+    if (!this.$element.is(":visible"))return;
+    var t = e(document).height(), n = this.$window.scrollTop(), r = this.$element.offset(), i = this.options.offset, s = i.bottom, o = i.top, u = "affix affix-top affix-bottom", a;
+    typeof i != "object" && (s = o = i), typeof o == "function" && (o = i.top()), typeof s == "function" && (s = i.bottom()), a = this.unpin != null && n + this.unpin <= r.top ? !1 : s != null && r.top + this.$element.height() >= t - s ? "bottom" : o != null && n <= o ? "top" : !1;
+    if (this.affixed === a)return;
+    this.affixed = a, this.unpin = a == "bottom" ? r.top - n : null, this.$element.removeClass(u).addClass("affix" + (a ? "-" + a : ""))
+  };
+  var n = e.fn.affix;
+  e.fn.affix = function (n) {
+    return this.each(function () {
+      var r = e(this), i = r.data("affix"), s = typeof n == "object" && n;
+      i || r.data("affix", i = new t(this, s)), typeof n == "string" && i[n]()
+    })
+  }, e.fn.affix.Constructor = t, e.fn.affix.defaults = {offset: 0}, e.fn.affix.noConflict = function () {
+    return e.fn.affix = n, this
+  }, e(window).on("load", function () {
+    e('[data-spy="affix"]').each(function () {
+      var t = e(this), n = t.data();
+      n.offset = n.offset || {}, n.offsetBottom && (n.offset.bottom = n.offsetBottom), n.offsetTop && (n.offset.top = n.offsetTop), t.affix(n)
+    })
+  })
+}(window.jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/508ef2f7/portal/js/libs/google-viz-api.js
----------------------------------------------------------------------
diff --git a/portal/js/libs/google-viz-api.js b/portal/js/libs/google-viz-api.js
new file mode 100644
index 0000000..b4cea3e
--- /dev/null
+++ b/portal/js/libs/google-viz-api.js
@@ -0,0 +1,49 @@
+if(!window['googleLT_']){window['googleLT_']=(new Date()).getTime();}if (!window['google']) {
+  window['google'] = {};
+}
+if (!window['google']['loader']) {
+  window['google']['loader'] = {};
+  google.loader.ServiceBase = 'https://www.google.com/uds';
+  google.loader.GoogleApisBase = 'https://ajax.googleapis.com/ajax';
+  google.loader.ApiKey = 'notsupplied';
+  google.loader.KeyVerified = true;
+  google.loader.LoadFailure = false;
+  google.loader.Secure = true;
+  google.loader.GoogleLocale = 'www.google.com';
+  google.loader.ClientLocation = {"latitude":34.12,"longitude":-84.465,"address":{"city":"Woodstock","region":"GA","country":"USA","country_code":"US"}};
+  google.loader.AdditionalParams = '';
+  (function() {var d=encodeURIComponent,g=window,h=document;function l(a,b){return a.load=b}var m="push",n="replace",q="charAt",r="indexOf",t="ServiceBase",u="name",v="getTime",w="length",x="prototype",y="setTimeout",z="loader",A="substring",B="join",C="toLowerCase";function D(a){return a in E?E[a]:E[a]=-1!=navigator.userAgent[C]()[r](a)}var E={};function F(a,b){var c=function(){};c.prototype=b[x];a.U=b[x];a.prototype=new c}
+    function G(a,b,c){var e=Array[x].slice.call(arguments,2)||[];return function(){var c=e.concat(Array[x].slice.call(arguments));return a.apply(b,c)}}function H(a){a=Error(a);a.toString=function(){return this.message};return a}function I(a,b){for(var c=a.split(/\./),e=g,f=0;f<c[w]-1;f++)e[c[f]]||(e[c[f]]={}),e=e[c[f]];e[c[c[w]-1]]=b}function J(a,b,c){a[b]=c}if(!K)var K=I;if(!L)var L=J;google[z].v={};K("google.loader.callbacks",google[z].v);var M={},N={};google[z].eval={};K("google.loader.eval",google[z].eval);
+    l(google,function(a,b,c){function e(a){var b=a.split(".");if(2<b[w])throw H("Module: '"+a+"' not found!");"undefined"!=typeof b[1]&&(f=b[0],c.packages=c.packages||[],c.packages[m](b[1]))}var f=a;c=c||{};if(a instanceof Array||a&&"object"==typeof a&&"function"==typeof a[B]&&"function"==typeof a.reverse)for(var k=0;k<a[w];k++)e(a[k]);else e(a);if(a=M[":"+f]){c&&(!c.language&&c.locale)&&(c.language=c.locale);c&&"string"==typeof c.callback&&(k=c.callback,k.match(/^[[\]A-Za-z0-9._]+$/)&&(k=g.eval(k),c.callback=
+      k));if((k=c&&null!=c.callback)&&!a.s(b))throw H("Module: '"+f+"' must be loaded before DOM onLoad!");k?a.m(b,c)?g[y](c.callback,0):a.load(b,c):a.m(b,c)||a.load(b,c)}else throw H("Module: '"+f+"' not found!");});K("google.load",google.load);
+    google.T=function(a,b){b?(0==O[w]&&(P(g,"load",Q),!D("msie")&&!D("safari")&&!D("konqueror")&&D("mozilla")||g.opera?g.addEventListener("DOMContentLoaded",Q,!1):D("msie")?h.write("<script defer onreadystatechange='google.loader.domReady()' src=//:>\x3c/script>"):(D("safari")||D("konqueror"))&&g[y](S,10)),O[m](a)):P(g,"load",a)};K("google.setOnLoadCallback",google.T);
+    function P(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent("on"+b,c);else{var e=a["on"+b];a["on"+b]=null!=e?aa([c,e]):c}}function aa(a){return function(){for(var b=0;b<a[w];b++)a[b]()}}var O=[];google[z].P=function(){var a=g.event.srcElement;"complete"==a.readyState&&(a.onreadystatechange=null,a.parentNode.removeChild(a),Q())};K("google.loader.domReady",google[z].P);var ba={loaded:!0,complete:!0};function S(){ba[h.readyState]?Q():0<O[w]&&g[y](S,10)}
+    function Q(){for(var a=0;a<O[w];a++)O[a]();O.length=0}google[z].d=function(a,b,c){if(c){var e;"script"==a?(e=h.createElement("script"),e.type="text/javascript",e.src=b):"css"==a&&(e=h.createElement("link"),e.type="text/css",e.href=b,e.rel="stylesheet");(a=h.getElementsByTagName("head")[0])||(a=h.body.parentNode.appendChild(h.createElement("head")));a.appendChild(e)}else"script"==a?h.write('<script src="'+b+'" type="text/javascript">\x3c/script>'):"css"==a&&h.write('<link href="'+b+'" type="text/css" rel="stylesheet"></link>')};
+    K("google.loader.writeLoadTag",google[z].d);google[z].Q=function(a){N=a};K("google.loader.rfm",google[z].Q);google[z].S=function(a){for(var b in a)"string"==typeof b&&(b&&":"==b[q](0)&&!M[b])&&(M[b]=new T(b[A](1),a[b]))};K("google.loader.rpl",google[z].S);google[z].R=function(a){if((a=a.specs)&&a[w])for(var b=0;b<a[w];++b){var c=a[b];"string"==typeof c?M[":"+c]=new U(c):(c=new V(c[u],c.baseSpec,c.customSpecs),M[":"+c[u]]=c)}};K("google.loader.rm",google[z].R);google[z].loaded=function(a){M[":"+a.module].l(a)};
+    K("google.loader.loaded",google[z].loaded);google[z].O=function(){return"qid="+((new Date)[v]().toString(16)+Math.floor(1E7*Math.random()).toString(16))};K("google.loader.createGuidArg_",google[z].O);I("google_exportSymbol",I);I("google_exportProperty",J);google[z].a={};K("google.loader.themes",google[z].a);google[z].a.I="//www.google.com/cse/style/look/bubblegum.css";L(google[z].a,"BUBBLEGUM",google[z].a.I);google[z].a.K="//www.google.com/cse/style/look/greensky.css";L(google[z].a,"GREENSKY",google[z].a.K);
+    google[z].a.J="//www.google.com/cse/style/look/espresso.css";L(google[z].a,"ESPRESSO",google[z].a.J);google[z].a.M="//www.google.com/cse/style/look/shiny.css";L(google[z].a,"SHINY",google[z].a.M);google[z].a.L="//www.google.com/cse/style/look/minimalist.css";L(google[z].a,"MINIMALIST",google[z].a.L);google[z].a.N="//www.google.com/cse/style/look/v2/default.css";L(google[z].a,"V2_DEFAULT",google[z].a.N);function U(a){this.b=a;this.o=[];this.n={};this.e={};this.f={};this.j=!0;this.c=-1}
+    U[x].g=function(a,b){var c="";void 0!=b&&(void 0!=b.language&&(c+="&hl="+d(b.language)),void 0!=b.nocss&&(c+="&output="+d("nocss="+b.nocss)),void 0!=b.nooldnames&&(c+="&nooldnames="+d(b.nooldnames)),void 0!=b.packages&&(c+="&packages="+d(b.packages)),null!=b.callback&&(c+="&async=2"),void 0!=b.style&&(c+="&style="+d(b.style)),void 0!=b.noexp&&(c+="&noexp=true"),void 0!=b.other_params&&(c+="&"+b.other_params));if(!this.j){google[this.b]&&google[this.b].JSHash&&(c+="&sig="+d(google[this.b].JSHash));
+      var e=[],f;for(f in this.n)":"==f[q](0)&&e[m](f[A](1));for(f in this.e)":"==f[q](0)&&this.e[f]&&e[m](f[A](1));c+="&have="+d(e[B](","))}return google[z][t]+"/?file="+this.b+"&v="+a+google[z].AdditionalParams+c};U[x].t=function(a){var b=null;a&&(b=a.packages);var c=null;if(b)if("string"==typeof b)c=[a.packages];else if(b[w])for(c=[],a=0;a<b[w];a++)"string"==typeof b[a]&&c[m](b[a][n](/^\s*|\s*$/,"")[C]());c||(c=["default"]);b=[];for(a=0;a<c[w];a++)this.n[":"+c[a]]||b[m](c[a]);return b};
+    l(U[x],function(a,b){var c=this.t(b),e=b&&null!=b.callback;if(e)var f=new W(b.callback);for(var k=[],p=c[w]-1;0<=p;p--){var s=c[p];e&&f.B(s);if(this.e[":"+s])c.splice(p,1),e&&this.f[":"+s][m](f);else k[m](s)}if(c[w]){b&&b.packages&&(b.packages=c.sort()[B](","));for(p=0;p<k[w];p++)s=k[p],this.f[":"+s]=[],e&&this.f[":"+s][m](f);if(b||null==N[":"+this.b]||null==N[":"+this.b].versions[":"+a]||google[z].AdditionalParams||!this.j)b&&b.autoloaded||google[z].d("script",this.g(a,b),e);else{c=N[":"+this.b];
+      google[this.b]=google[this.b]||{};for(var R in c.properties)R&&":"==R[q](0)&&(google[this.b][R[A](1)]=c.properties[R]);google[z].d("script",google[z][t]+c.path+c.js,e);c.css&&google[z].d("css",google[z][t]+c.path+c.css,e)}this.j&&(this.j=!1,this.c=(new Date)[v](),1!=this.c%100&&(this.c=-1));for(p=0;p<k[w];p++)s=k[p],this.e[":"+s]=!0}});
+    U[x].l=function(a){-1!=this.c&&(X("al_"+this.b,"jl."+((new Date)[v]()-this.c),!0),this.c=-1);this.o=this.o.concat(a.components);google[z][this.b]||(google[z][this.b]={});google[z][this.b].packages=this.o.slice(0);for(var b=0;b<a.components[w];b++){this.n[":"+a.components[b]]=!0;this.e[":"+a.components[b]]=!1;var c=this.f[":"+a.components[b]];if(c){for(var e=0;e<c[w];e++)c[e].C(a.components[b]);delete this.f[":"+a.components[b]]}}};U[x].m=function(a,b){return 0==this.t(b)[w]};U[x].s=function(){return!0};
+    function W(a){this.F=a;this.q={};this.r=0}W[x].B=function(a){this.r++;this.q[":"+a]=!0};W[x].C=function(a){this.q[":"+a]&&(this.q[":"+a]=!1,this.r--,0==this.r&&g[y](this.F,0))};function V(a,b,c){this.name=a;this.D=b;this.p=c;this.u=this.h=!1;this.k=[];google[z].v[this[u]]=G(this.l,this)}F(V,U);l(V[x],function(a,b){var c=b&&null!=b.callback;c?(this.k[m](b.callback),b.callback="google.loader.callbacks."+this[u]):this.h=!0;b&&b.autoloaded||google[z].d("script",this.g(a,b),c)});V[x].m=function(a,b){return b&&null!=b.callback?this.u:this.h};V[x].l=function(){this.u=!0;for(var a=0;a<this.k[w];a++)g[y](this.k[a],0);this.k=[]};
+    var Y=function(a,b){return a.string?d(a.string)+"="+d(b):a.regex?b[n](/(^.*$)/,a.regex):""};V[x].g=function(a,b){return this.G(this.w(a),a,b)};
+    V[x].G=function(a,b,c){var e="";a.key&&(e+="&"+Y(a.key,google[z].ApiKey));a.version&&(e+="&"+Y(a.version,b));b=google[z].Secure&&a.ssl?a.ssl:a.uri;if(null!=c)for(var f in c)a.params[f]?e+="&"+Y(a.params[f],c[f]):"other_params"==f?e+="&"+c[f]:"base_domain"==f&&(b="http://"+c[f]+a.uri[A](a.uri[r]("/",7)));google[this[u]]={};-1==b[r]("?")&&e&&(e="?"+e[A](1));return b+e};V[x].s=function(a){return this.w(a).deferred};V[x].w=function(a){if(this.p)for(var b=0;b<this.p[w];++b){var c=this.p[b];if(RegExp(c.pattern).test(a))return c}return this.D};function T(a,b){this.b=a;this.i=b;this.h=!1}F(T,U);l(T[x],function(a,b){this.h=!0;google[z].d("script",this.g(a,b),!1)});T[x].m=function(){return this.h};T[x].l=function(){};T[x].g=function(a,b){if(!this.i.versions[":"+a]){if(this.i.aliases){var c=this.i.aliases[":"+a];c&&(a=c)}if(!this.i.versions[":"+a])throw H("Module: '"+this.b+"' with version '"+a+"' not found!");}return google[z].GoogleApisBase+"/libs/"+this.b+"/"+a+"/"+this.i.versions[":"+a
 ][b&&b.uncompressed?"uncompressed":"compressed"]};
+    T[x].s=function(){return!1};var ca=!1,Z=[],da=(new Date)[v](),fa=function(){ca||(P(g,"unload",ea),ca=!0)},ga=function(a,b){fa();if(!(google[z].Secure||google[z].Options&&!1!==google[z].Options.csi)){for(var c=0;c<a[w];c++)a[c]=d(a[c][C]()[n](/[^a-z0-9_.]+/g,"_"));for(c=0;c<b[w];c++)b[c]=d(b[c][C]()[n](/[^a-z0-9_.]+/g,"_"));g[y](G($,null,"//gg.google.com/csi?s=uds&v=2&action="+a[B](",")+"&it="+b[B](",")),1E4)}},X=function(a,b,c){c?ga([a],[b]):(fa(),Z[m]("r"+Z[w]+"="+d(a+(b?"|"+b:""))),g[y](ea,5<Z[w]?0:15E3))},ea=function(){if(Z[w]){var a=
+      google[z][t];0==a[r]("http:")&&(a=a[n](/^http:/,"https:"));$(a+"/stats?"+Z[B]("&")+"&nc="+(new Date)[v]()+"_"+((new Date)[v]()-da));Z.length=0}},$=function(a){var b=new Image,c=$.H++;$.A[c]=b;b.onload=b.onerror=function(){delete $.A[c]};b.src=a;b=null};$.A={};$.H=0;I("google.loader.recordCsiStat",ga);I("google.loader.recordStat",X);I("google.loader.createImageForLogging",$);
+
+  }) ();google.loader.rm({"specs":["feeds","spreadsheets","gdata","visualization",{"name":"sharing","baseSpec":{"uri":"http://www.google.com/s2/sharing/js","ssl":null,"key":{"string":"key"},"version":{"string":"v"},"deferred":false,"params":{"language":{"string":"hl"}}}},"search","orkut","ads","elements",{"name":"books","baseSpec":{"uri":"http://books.google.com/books/api.js","ssl":"https://encrypted.google.com/books/api.js","key":{"string":"key"},"version":{"string":"v"},"deferred":true,"params":{"callback":{"string":"callback"},"language":{"string":"hl"}}}},{"name":"friendconnect","baseSpec":{"uri":"http://www.google.com/friendconnect/script/friendconnect.js","ssl":null,"key":{"string":"key"},"version":{"string":"v"},"deferred":false,"params":{}}},"identitytoolkit","ima",{"name":"maps","baseSpec":{"uri":"http://maps.google.com/maps?file\u003dgoogleapi","ssl":"https://maps-api-ssl.google.com/maps?file\u003dgoogleapi","key":{"string":"key"},"version":{"string":"v"},"deferred":true,"
 params":{"callback":{"regex":"callback\u003d$1\u0026async\u003d2"},"language":{"string":"hl"}}},"customSpecs":[{"uri":"http://maps.googleapis.com/maps/api/js","ssl":"https://maps.googleapis.com/maps/api/js","version":{"string":"v"},"deferred":true,"params":{"callback":{"string":"callback"},"language":{"string":"hl"}},"pattern":"^(3|3..*)$"}]},"payments","wave","annotations_v2","earth","language",{"name":"annotations","baseSpec":{"uri":"http://www.google.com/reviews/scripts/annotations_bootstrap.js","ssl":null,"key":{"string":"key"},"version":{"string":"v"},"deferred":true,"params":{"callback":{"string":"callback"},"language":{"string":"hl"},"country":{"string":"gl"}}}},"picker"]});
+  google.loader.rfm({":search":{"versions":{":1":"1",":1.0":"1"},"path":"/api/search/1.0/351077565dad05b6847b1f7d41e36949/","js":"default+en.I.js","css":"default+en.css","properties":{":JSHash":"351077565dad05b6847b1f7d41e36949",":NoOldNames":false,":Version":"1.0"}},":language":{"versions":{":1":"1",":1.0":"1"},"path":"/api/language/1.0/72dfd738bc1b18a14ab936bb2690a4f0/","js":"default+en.I.js","properties":{":JSHash":"72dfd738bc1b18a14ab936bb2690a4f0",":Version":"1.0"}},":feeds":{"versions":{":1":"1",":1.0":"1"},"path":"/api/feeds/1.0/e658fb253c8b588196cf534cc43ab319/","js":"default+en.I.js","css":"default+en.css","properties":{":JSHash":"e658fb253c8b588196cf534cc43ab319",":Version":"1.0"}},":spreadsheets":{"versions":{":0":"1",":0.4":"1"},"path":"/api/spreadsheets/0.4/87ff7219e9f8a8164006cbf28d5e911a/","js":"default.I.js","properties":{":JSHash":"87ff7219e9f8a8164006cbf28d5e911a",":Version":"0.4"}},":ima":{"versions":{":3":"1",":3.0":"1"},"path":"/api/ima/3.0/28a914332232c9a8ac0ae
 8da68b1006e/","js":"default.I.js","properties":{":JSHash":"28a914332232c9a8ac0ae8da68b1006e",":Version":"3.0"}},":wave":{"versions":{":1":"1",":1.0":"1"},"path":"/api/wave/1.0/3b6f7573ff78da6602dda5e09c9025bf/","js":"default.I.js","properties":{":JSHash":"3b6f7573ff78da6602dda5e09c9025bf",":Version":"1.0"}},":annotations":{"versions":{":1":"1",":1.0":"1"},"path":"/api/annotations/1.0/bacce7b6155a1bbadda3c05d65391b22/","js":"default+en.I.js","properties":{":JSHash":"bacce7b6155a1bbadda3c05d65391b22",":Version":"1.0"}},":earth":{"versions":{":1":"1",":1.0":"1"},"path":"/api/earth/1.0/109c7b2bae7fe6cc34ea875176165d81/","js":"default.I.js","properties":{":JSHash":"109c7b2bae7fe6cc34ea875176165d81",":Version":"1.0"}},":picker":{"versions":{":1":"1",":1.0":"1"},"path":"/api/picker/1.0/27b625d21ca34b09c89dcd3d22f65143/","js":"default.I.js","css":"default.css","properties":{":JSHash":"27b625d21ca34b09c89dcd3d22f65143",":Version":"1.0"}}});
+  google.loader.rpl({":scriptaculous":{"versions":{":1.8.3":{"uncompressed":"scriptaculous.js","compressed":"scriptaculous.js"},":1.9.0":{"uncompressed":"scriptaculous.js","compressed":"scriptaculous.js"},":1.8.2":{"uncompressed":"scriptaculous.js","compressed":"scriptaculous.js"},":1.8.1":{"uncompressed":"scriptaculous.js","compressed":"scriptaculous.js"}},"aliases":{":1.8":"1.8.3",":1":"1.9.0",":1.9":"1.9.0"}},":yui":{"versions":{":2.6.0":{"uncompressed":"build/yuiloader/yuiloader.js","compressed":"build/yuiloader/yuiloader-min.js"},":2.9.0":{"uncompressed":"build/yuiloader/yuiloader.js","compressed":"build/yuiloader/yuiloader-min.js"},":2.7.0":{"uncompressed":"build/yuiloader/yuiloader.js","compressed":"build/yuiloader/yuiloader-min.js"},":2.8.0r4":{"uncompressed":"build/yuiloader/yuiloader.js","compressed":"build/yuiloader/yuiloader-min.js"},":2.8.2r1":{"uncompressed":"build/yuiloader/yuiloader.js","compressed":"build/yuiloader/yuiloader-min.js"},":2.8.1":{"uncompressed":"build/
 yuiloader/yuiloader.js","compressed":"build/yuiloader/yuiloader-min.js"},":3.3.0":{"uncompressed":"build/yui/yui.js","compressed":"build/yui/yui-min.js"}},"aliases":{":3":"3.3.0",":2":"2.9.0",":2.7":"2.7.0",":2.8.2":"2.8.2r1",":2.6":"2.6.0",":2.9":"2.9.0",":2.8":"2.8.2r1",":2.8.0":"2.8.0r4",":3.3":"3.3.0"}},":swfobject":{"versions":{":2.1":{"uncompressed":"swfobject_src.js","compressed":"swfobject.js"},":2.2":{"uncompressed":"swfobject_src.js","compressed":"swfobject.js"}},"aliases":{":2":"2.2"}},":webfont":{"versions":{":1.0.28":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.27":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.29":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.12":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.13":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.14":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.15":{"uncompressed":"webfont_debu
 g.js","compressed":"webfont.js"},":1.0.10":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.11":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.2":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.1":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.0":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.6":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.19":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.5":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.18":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.4":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.17":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.3":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.16":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.9":{"uncompressed":"webfont_d
 ebug.js","compressed":"webfont.js"},":1.0.21":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.22":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.25":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.26":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.23":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"},":1.0.24":{"uncompressed":"webfont_debug.js","compressed":"webfont.js"}},"aliases":{":1":"1.0.29",":1.0":"1.0.29"}},":ext-core":{"versions":{":3.1.0":{"uncompressed":"ext-core-debug.js","compressed":"ext-core.js"},":3.0.0":{"uncompressed":"ext-core-debug.js","compressed":"ext-core.js"}},"aliases":{":3":"3.1.0",":3.0":"3.0.0",":3.1":"3.1.0"}},":mootools":{"versions":{":1.3.1":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.1.1":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.3.0":{"uncompressed":"mootools.js","compressed":"mootools-yui-co
 mpressed.js"},":1.3.2":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.1.2":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.2.3":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.2.4":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.2.1":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.2.2":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.2.5":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.4.0":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.4.1":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"},":1.4.2":{"uncompressed":"mootools.js","compressed":"mootools-yui-compressed.js"}},"aliases":{":1":"1.1.2",":1.11":"1.1.1",":1.4":"1.4.2",":1.3":"1.3.2",":1.2":"1.2.5",":1.1":"1.1.2"}},":jqueryui":{"versions":{":1.8.0":{"uncompressed":"jquery-ui
 .js","compressed":"jquery-ui.min.js"},":1.8.2":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.1":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.15":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.14":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.13":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.12":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.11":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.10":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.17":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.16":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.6.0":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.9":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.7":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":
 1.8.8":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.7.2":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.5":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.7.3":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.6":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.7.0":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.7.1":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.8.4":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.5.3":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"},":1.5.2":{"uncompressed":"jquery-ui.js","compressed":"jquery-ui.min.js"}},"aliases":{":1.8":"1.8.17",":1.7":"1.7.3",":1.6":"1.6.0",":1":"1.8.17",":1.5":"1.5.3",":1.8.3":"1.8.4"}},":chrome-frame":{"versions":{":1.0.2":{"uncompressed":"CFInstall.js","compressed":"CFInstall.min.js"},":1.0.1":{"uncompressed":"CFInstall.js","compressed":"CFInsta
 ll.min.js"},":1.0.0":{"uncompressed":"CFInstall.js","compressed":"CFInstall.min.js"}},"aliases":{":1":"1.0.2",":1.0":"1.0.2"}},":prototype":{"versions":{":1.7.0.0":{"uncompressed":"prototype.js","compressed":"prototype.js"},":1.6.0.2":{"uncompressed":"prototype.js","compressed":"prototype.js"},":1.6.1.0":{"uncompressed":"prototype.js","compressed":"prototype.js"},":1.6.0.3":{"uncompressed":"prototype.js","compressed":"prototype.js"}},"aliases":{":1.7":"1.7.0.0",":1.6.1":"1.6.1.0",":1":"1.7.0.0",":1.6":"1.6.1.0",":1.7.0":"1.7.0.0",":1.6.0":"1.6.0.3"}},":jquery":{"versions":{":1.6.2":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.3.1":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.6.1":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.3.0":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.6.4":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.6.3":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.3.2":{"unco
 mpressed":"jquery.js","compressed":"jquery.min.js"},":1.6.0":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.2.3":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.7.0":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.7.1":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.2.6":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.4.3":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.4.4":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.5.1":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.5.0":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.4.0":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.5.2":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.4.1":{"uncompressed":"jquery.js","compressed":"jquery.min.js"},":1.4.2":{"uncompressed":"jquery.js","compressed":"jquery.min.js"}},"aliases":{":1.7":"1.7.1",":1.6":"1.6.4",":1":"1.7.1",":1.5":"1.5.2",":1.
 4":"1.4.4",":1.3":"1.3.2",":1.2":"1.2.6"}},":dojo":{"versions":{":1.3.1":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.3.0":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.6.1":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.1.1":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.3.2":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.6.0":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.2.3":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.7.2":{"uncompressed":"dojo/dojo.js.uncompressed.js","compressed":"dojo/dojo.js"},":1.7.0":{"uncompressed":"dojo/dojo.js.uncompressed.js","compressed":"dojo/dojo.js"},":1.7.1":{"uncompressed":"dojo/dojo.js.uncompressed.js","compressed":"dojo/dojo.js"},":1.4.3":{"uncompressed":"dojo/dojo.xd.js
 .uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.5.1":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.5.0":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.2.0":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.4.0":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"},":1.4.1":{"uncompressed":"dojo/dojo.xd.js.uncompressed.js","compressed":"dojo/dojo.xd.js"}},"aliases":{":1.7":"1.7.2",":1":"1.6.1",":1.6":"1.6.1",":1.5":"1.5.1",":1.4":"1.4.3",":1.3":"1.3.2",":1.2":"1.2.3",":1.1":"1.1.1"}}});
+}
+google.load("visualization","1.0",{"autoloaded":true,"packages":["corechart"]});
+if (window['google'] != undefined && window['google']['loader'] != undefined) {
+  if (!window['google']['visualization']) {
+    window['google']['visualization'] = {};
+    google.visualization.Version = '1.0';
+    google.visualization.JSHash = '00133a5412d5113dfca30a1ffd3afe93';
+    google.visualization.LoadArgs = 'file\75visualization\46v\0751.0\46packages\75corechart';
+  }
+  google.loader.writeLoadTag("script", google.loader.ServiceBase + "/api/visualization/1.0/00133a5412d5113dfca30a1ffd3afe93/format+en,default,corechart.I.js", false);
+}
\ No newline at end of file