Spade

Mini Shell

Directory:~$ /home/lmsyaran/www/administrator/components/com_invoices/assets/libs/mdl/
Upload File

[Home] [System Details] [Kill Me]
Current File:~$ /home/lmsyaran/www/administrator/components/com_invoices/assets/libs/mdl/material.min.js.map

{"version":3,"sources":["material.js","mdlComponentHandler.js","tabs.js","layout.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","ripple.js"],"names":["MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","document","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","content_","IS_ACTIVE","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","getAttribute","isElementUpgraded_","upgradedList","indexOf","upgradeDomInternal","cssClass","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","ev","createEvent","initEvent","dispatchEvent","upgradeElementsInternal","Array","isArray","item","prototype","slice","call","HTMLElement","children","registerInternal","widgetMissing","newConfig","constructor","classAsString","hasOwnProperty","found","registerUpgradedCallbackInternal","regClass","upgradeAllRegisteredInternal","findCreatedComponentByNodeInternal","node","deconstructComponentInternal","downgradeMethod_","componentIndex","splice","upgrades","componentPlace","downgradeNodesInternal","downgradeNode","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","window","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","mdlDowngrade_","removeEventListener","mdlDowngrade","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","remove","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","addAnimationEndListener_","cleanup","show","transitionDuration","itemDelay","transitionDelay","parentNode","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","firstChild","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","button","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","on","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","onKeyDown_","currentRowCount","checkValidity","checkDirty","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundKeyDownHandler","invalid","MaterialTooltip","handleMouseEnter_","props","marginLeft","offsetWidth","boundMouseLeaveHandler","handleMouseLeave_","boundMouseEnterHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","scrollTop","screenSizeHandler_","screenSizeMediaQuery_","matches","drawer_","obfuscator_","drawerToggleHandler_","headerTransitionEndHandler_","headerClickHandler_","tabBar","directChildren","childNodes","numChildren","c","child","mode","drawerButton","drawerButtonIcon","textContent","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabScrollHandler","scrollWidth","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","type","firstHeader","rows","th","headerCheckbox","firstCell","td","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","size","offset","webkitTransform","msTransform","transform"],"mappings":"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","file":"material.min.js","sourcesContent":[";(function()
{\n\"use strict\";\n\n/**\n * @license\n * Copyright 2015 Google
Inc. All Rights Reserved.\n *\n * Licensed under the Apache License,
Version 2.0 (the \"License\");\n * you may not use this file
except in compliance with the License.\n * You may obtain a copy of the
License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *
Unless required by applicable law or agreed to in writing, software\n *
distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n\n/**\n * A
component handler interface using the revealing module design pattern.\n *
More details on this design pattern here:\n *
https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author
Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the
componentHandler interface, for closure documentation and\n// static
verification.\nvar componentHandler = {\n  /**\n   * Searches existing DOM
for elements of our component type and upgrades them\n   * if they have not
already been upgraded.\n   *\n   * @param {string=} optJsClass the
programatic name of the element class we\n   * need to create a new
instance of.\n   * @param {string=} optCssClass the name of the CSS class
elements of this\n   * type will have.\n   */\n  upgradeDom:
function(optJsClass, optCssClass) {},\n  /**\n   * Upgrades a specific
element rather than all in the DOM.\n   *\n   * @param {!Element} element
The element we wish to upgrade.\n   * @param {string=} optJsClass Optional
name of the class we want to upgrade\n   * the element to.\n   */\n 
upgradeElement: function(element, optJsClass) {},\n  /**\n   * Upgrades a
specific list of elements rather than all in the DOM.\n   *\n   * @param
{!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements\n   *
The elements we wish to upgrade.\n   */\n  upgradeElements:
function(elements) {},\n  /**\n   * Upgrades all registered components
found in the current DOM. This is\n   * automatically called on window
load.\n   */\n  upgradeAllRegistered: function() {},\n  /**\n   * Allows
user to be alerted to any upgrades that are performed for a given\n   *
component type\n   *\n   * @param {string} jsClass The class name of the
MDL component we wish\n   * to hook into for any upgrades performed.\n   *
@param {function(!HTMLElement)} callback The function to call upon an\n   *
upgrade. This function should expect 1 parameter - the HTMLElement which\n 
 * got upgraded.\n   */\n  registerUpgradedCallback: function(jsClass,
callback) {},\n  /**\n   * Registers a class for future use and attempts to
upgrade existing DOM.\n   *\n   * @param
{componentHandler.ComponentConfigPublic} config the registration
configuration\n   */\n  register: function(config) {},\n  /**\n   *
Downgrade either a given node, an array of nodes, or a NodeList.\n   *\n  
* @param {!Node|!Array<!Node>|!NodeList} nodes\n   */\n 
downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function()
{\n  'use strict';\n\n  /** @type
{!Array<componentHandler.ComponentConfig>} */\n  var
registeredComponents_ = [];\n\n  /** @type
{!Array<componentHandler.Component>} */\n  var createdComponents_ =
[];\n\n  var downgradeMethod_ = 'mdlDowngrade';\n  var
componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n 
/**\n   * Searches registered components for a class we are interested in
using.\n   * Optionally replaces a match with passed object if specified.\n
  *\n   * @param {string} name The name of a class we want to use.\n   *
@param {componentHandler.ComponentConfig=} optReplace Optional object to
replace match with.\n   * @return {!Object|boolean}\n   * @private\n   */\n
 function findRegisteredClass_(name, optReplace) {\n    for (var i = 0; i
< registeredComponents_.length; i++) {\n      if
(registeredComponents_[i].className === name) {\n        if (typeof
optReplace !== 'undefined') {\n          registeredComponents_[i]
= optReplace;\n        }\n        return registeredComponents_[i];\n     
}\n    }\n    return false;\n  }\n\n  /**\n   * Returns an array of the
classNames of the upgraded classes on the element.\n   *\n   * @param
{!Element} element The element to fetch data from.\n   * @return
{!Array<string>}\n   * @private\n   */\n  function
getUpgradedListOfElement_(element) {\n    var dataUpgraded =
element.getAttribute('data-upgraded');\n    // Use
`['']` as default value to conform the `,name,name...` style.\n  
 return dataUpgraded === null ? [''] :
dataUpgraded.split(',');\n  }\n\n  /**\n   * Returns true if the
given element has already been upgraded for the given\n   * class.\n   *\n 
 * @param {!Element} element The element we want to check.\n   * @param
{string} jsClass The class to check for.\n   * @returns {boolean}\n   *
@private\n   */\n  function isElementUpgraded_(element, jsClass) {\n    var
upgradedList = getUpgradedListOfElement_(element);\n    return
upgradedList.indexOf(jsClass) !== -1;\n  }\n\n  /**\n   * Searches existing
DOM for elements of our component type and upgrades them\n   * if they have
not already been upgraded.\n   *\n   * @param {string=} optJsClass the
programatic name of the element class we\n   * need to create a new
instance of.\n   * @param {string=} optCssClass the name of the CSS class
elements of this\n   * type will have.\n   */\n  function
upgradeDomInternal(optJsClass, optCssClass) {\n    if (typeof optJsClass
=== 'undefined' &&\n        typeof optCssClass ===
'undefined') {\n      for (var i = 0; i <
registeredComponents_.length; i++) {\n       
upgradeDomInternal(registeredComponents_[i].className,\n           
registeredComponents_[i].cssClass);\n      }\n    } else {\n      var
jsClass = /** @type {string} */ (optJsClass);\n      if (typeof optCssClass
=== 'undefined') {\n        var registeredClass =
findRegisteredClass_(jsClass);\n        if (registeredClass) {\n         
optCssClass = registeredClass.cssClass;\n        }\n      }\n\n      var
elements = document.querySelectorAll('.' + optCssClass);\n     
for (var n = 0; n < elements.length; n++) {\n       
upgradeElementInternal(elements[n], jsClass);\n      }\n    }\n  }\n\n 
/**\n   * Upgrades a specific element rather than all in the DOM.\n   *\n  
* @param {!Element} element The element we wish to upgrade.\n   * @param
{string=} optJsClass Optional name of the class we want to upgrade\n   *
the element to.\n   */\n  function upgradeElementInternal(element,
optJsClass) {\n    // Verify argument type.\n    if (!(typeof element ===
'object' && element instanceof Element)) {\n      throw
new Error('Invalid argument provided to upgrade MDL element.');\n
   }\n    var upgradedList = getUpgradedListOfElement_(element);\n    var
classesToUpgrade = [];\n    // If jsClass is not provided scan the
registered components to find the\n    // ones matching the element's
CSS classList.\n    if (!optJsClass) {\n      var classList =
element.classList;\n      registeredComponents_.forEach(function(component)
{\n        // Match CSS & Not to be upgraded & Not upgraded.\n     
  if (classList.contains(component.cssClass) &&\n           
classesToUpgrade.indexOf(component) === -1 &&\n           
!isElementUpgraded_(element, component.className)) {\n         
classesToUpgrade.push(component);\n        }\n      });\n    } else if
(!isElementUpgraded_(element, optJsClass)) {\n     
classesToUpgrade.push(findRegisteredClass_(optJsClass));\n    }\n\n    //
Upgrade the element for each classes.\n    for (var i = 0, n =
classesToUpgrade.length, registeredClass; i < n; i++) {\n     
registeredClass = classesToUpgrade[i];\n      if (registeredClass) {\n     
  // Mark element as upgraded.\n       
upgradedList.push(registeredClass.className);\n       
element.setAttribute('data-upgraded',
upgradedList.join(','));\n        var instance = new
registeredClass.classConstructor(element);\n       
instance[componentConfigProperty_] = registeredClass;\n       
createdComponents_.push(instance);\n        // Call any callbacks the user
has registered with this component type.\n        for (var j = 0, m =
registeredClass.callbacks.length; j < m; j++) {\n         
registeredClass.callbacks[j](element);\n        }\n\n        if
(registeredClass.widget) {\n          // Assign per element instance for
control over API\n          element[registeredClass.className] =
instance;\n        }\n      } else {\n        throw new Error(\n         
'Unable to find a registered component for the given class.');\n 
    }\n\n      var ev = document.createEvent('Events');\n     
ev.initEvent('mdl-componentupgraded', true, true);\n     
element.dispatchEvent(ev);\n    }\n  }\n\n  /**\n   * Upgrades a specific
list of elements rather than all in the DOM.\n   *\n   * @param
{!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements\n   *
The elements we wish to upgrade.\n   */\n  function
upgradeElementsInternal(elements) {\n    if (!Array.isArray(elements)) {\n 
    if (typeof elements.item === 'function') {\n        elements
= Array.prototype.slice.call(/** @type {Array} */ (elements));\n      }
else {\n        elements = [elements];\n      }\n    }\n    for (var i = 0,
n = elements.length, element; i < n; i++) {\n      element =
elements[i];\n      if (element instanceof HTMLElement) {\n       
upgradeElementInternal(element);\n        if (element.children.length >
0) {\n          upgradeElementsInternal(element.children);\n        }\n    
 }\n    }\n  }\n\n  /**\n   * Registers a class for future use and attempts
to upgrade existing DOM.\n   *\n   * @param
{componentHandler.ComponentConfigPublic} config\n   */\n  function
registerInternal(config) {\n    // In order to support both
Closure-compiled and uncompiled code accessing\n    // this method, we need
to allow for both the dot and array syntax for\n    // property access.
You'll therefore see the `foo.bar || foo['bar']`\n    //
pattern repeated across this method.\n    var widgetMissing = (typeof
config.widget === 'undefined' &&\n        typeof
config['widget'] === 'undefined');\n    var widget =
true;\n\n    if (!widgetMissing) {\n      widget = config.widget ||
config['widget'];\n    }\n\n    var newConfig = /** @type
{componentHandler.ComponentConfig} */ ({\n      classConstructor:
config.constructor || config['constructor'],\n      className:
config.classAsString || config['classAsString'],\n      cssClass:
config.cssClass || config['cssClass'],\n      widget: widget,\n  
   callbacks: []\n    });\n\n   
registeredComponents_.forEach(function(item) {\n      if (item.cssClass ===
newConfig.cssClass) {\n        throw new Error('The provided cssClass
has already been registered: ' + item.cssClass);\n      }\n      if
(item.className === newConfig.className) {\n        throw new
Error('The provided className has already been registered');\n   
  }\n    });\n\n    if (config.constructor.prototype\n       
.hasOwnProperty(componentConfigProperty_)) {\n      throw new Error(\n     
    'MDL component classes must not have ' +
componentConfigProperty_ +\n          ' defined as a
property.');\n    }\n\n    var found =
findRegisteredClass_(config.classAsString, newConfig);\n\n    if (!found)
{\n      registeredComponents_.push(newConfig);\n    }\n  }\n\n  /**\n   *
Allows user to be alerted to any upgrades that are performed for a given\n 
 * component type\n   *\n   * @param {string} jsClass The class name of the
MDL component we wish\n   * to hook into for any upgrades performed.\n   *
@param {function(!HTMLElement)} callback The function to call upon an\n   *
upgrade. This function should expect 1 parameter - the HTMLElement which\n 
 * got upgraded.\n   */\n  function
registerUpgradedCallbackInternal(jsClass, callback) {\n    var regClass =
findRegisteredClass_(jsClass);\n    if (regClass) {\n     
regClass.callbacks.push(callback);\n    }\n  }\n\n  /**\n   * Upgrades all
registered components found in the current DOM. This is\n   * automatically
called on window load.\n   */\n  function upgradeAllRegisteredInternal()
{\n    for (var n = 0; n < registeredComponents_.length; n++) {\n     
upgradeDomInternal(registeredComponents_[n].className);\n    }\n  }\n\n 
/**\n   * Finds a created component by a given DOM node.\n   *\n   * @param
{!Node} node\n   * @return {*}\n   */\n  function
findCreatedComponentByNodeInternal(node) {\n    for (var n = 0; n <
createdComponents_.length; n++) {\n      var component =
createdComponents_[n];\n      if (component.element_ === node) {\n       
return component;\n      }\n    }\n  }\n\n  /**\n   * Check the component
for the downgrade method.\n   * Execute if found.\n   * Remove component
from createdComponents list.\n   *\n   * @param {*} component\n   */\n 
function deconstructComponentInternal(component) {\n    if (component
&&\n        component[componentConfigProperty_]\n         
.classConstructor.prototype\n          .hasOwnProperty(downgradeMethod_))
{\n      component[downgradeMethod_]();\n      var componentIndex =
createdComponents_.indexOf(component);\n     
createdComponents_.splice(componentIndex, 1);\n\n      var upgrades =
component.element_.getAttribute('data-upgraded').split(',');\n
     var componentPlace = upgrades.indexOf(\n         
component[componentConfigProperty_].classAsString);\n     
upgrades.splice(componentPlace, 1);\n     
component.element_.setAttribute('data-upgraded',
upgrades.join(','));\n\n      var ev =
document.createEvent('Events');\n     
ev.initEvent('mdl-componentdowngraded', true, true);\n     
component.element_.dispatchEvent(ev);\n    }\n  }\n\n  /**\n   * Downgrade
either a given node, an array of nodes, or a NodeList.\n   *\n   * @param
{!Node|!Array<!Node>|!NodeList} nodes\n   */\n  function
downgradeNodesInternal(nodes) {\n    /**\n     * Auxiliary function to
downgrade a single node.\n     * @param  {!Node} node the node to be
downgraded\n     */\n    var downgradeNode = function(node) {\n     
deconstructComponentInternal(findCreatedComponentByNodeInternal(node));\n  
 };\n    if (nodes instanceof Array || nodes instanceof NodeList) {\n     
for (var n = 0; n < nodes.length; n++) {\n       
downgradeNode(nodes[n]);\n      }\n    } else if (nodes instanceof Node)
{\n      downgradeNode(nodes);\n    } else {\n      throw new
Error('Invalid argument provided to downgrade MDL nodes.');\n   
}\n  }\n\n  // Now return the functions that should be made public with
their publicly\n  // facing names...\n  return {\n    upgradeDom:
upgradeDomInternal,\n    upgradeElement: upgradeElementInternal,\n   
upgradeElements: upgradeElementsInternal,\n    upgradeAllRegistered:
upgradeAllRegisteredInternal,\n    registerUpgradedCallback:
registerUpgradedCallbackInternal,\n    register: registerInternal,\n   
downgradeElements: downgradeNodesInternal\n  };\n})();\n\n/**\n * Describes
the type of a registered component type managed by\n * componentHandler.
Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n *  
constructor: Function,\n *   classAsString: string,\n *   cssClass:
string,\n *   widget: (string|boolean|undefined)\n * }}\n
*/\ncomponentHandler.ComponentConfigPublic;  // jshint ignore:line\n\n/**\n
* Describes the type of a registered component type managed by\n *
componentHandler. Provided for benefit of the Closure compiler.\n *\n *
@typedef {{\n *   constructor: !Function,\n *   className: string,\n *  
cssClass: string,\n *   widget: (string|boolean),\n *   callbacks:
!Array<function(!HTMLElement)>\n * }}\n
*/\ncomponentHandler.ComponentConfig;  // jshint ignore:line\n\n/**\n *
Created component (i.e., upgraded element) type as managed by\n *
componentHandler. Provided for benefit of the Closure compiler.\n *\n *
@typedef {{\n *   element_: !HTMLElement,\n *   className: string,\n *  
classAsString: string,\n *   cssClass: string,\n *   widget: string\n *
}}\n */\ncomponentHandler.Component;  // jshint ignore:line\n\n// Export
all symbols, for the benefit of Closure compiler.\n// No effect on
uncompiled code.\ncomponentHandler['upgradeDom'] =
componentHandler.upgradeDom;\ncomponentHandler['upgradeElement']
=
componentHandler.upgradeElement;\ncomponentHandler['upgradeElements']
=
componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered']
=\n   
componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback']
=\n   
componentHandler.registerUpgradedCallback;\ncomponentHandler['register']
=
componentHandler.register;\ncomponentHandler['downgradeElements']
= componentHandler.downgradeElements;\nwindow.componentHandler =
componentHandler;\nwindow['componentHandler'] =
componentHandler;\n\nwindow.addEventListener('load', function()
{\n  'use strict';\n\n  /**\n   * Performs a \"Cutting the
mustard\" test. If the browser supports the features\n   * tested,
adds a mdl-js class to the <html> element. It then upgrades all MDL\n
  * components requiring JavaScript.\n   */\n  if ('classList' in
document.createElement('div') &&\n     
'querySelector' in document &&\n     
'addEventListener' in window && Array.prototype.forEach)
{\n    document.documentElement.classList.add('mdl-js');\n   
componentHandler.upgradeAllRegistered();\n  } else {\n    /**\n     * Dummy
function to avoid JS errors.\n     */\n    componentHandler.upgradeElement
= function() {};\n    /**\n     * Dummy function to avoid JS errors.\n    
*/\n    componentHandler.register = function() {};\n  }\n});\n\n// Source:
https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n//
Adapted from https://gist.github.com/paulirish/1579671 which derived
from\n//
http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n//
http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n//
requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish,
Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif
(!Date.now) {\n    /**\n   * Date.now polyfill.\n   * @return {number} the
current Date\n   */\n    Date.now = function () {\n        return new
Date().getTime();\n    };\n    Date['now'] = Date.now;\n}\nvar
vendors = [\n    'webkit',\n    'moz'\n];\nfor (var i =
0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n
   var vp = vendors[i];\n    window.requestAnimationFrame = window[vp +
'RequestAnimationFrame'];\n    window.cancelAnimationFrame =
window[vp + 'CancelAnimationFrame'] || window[vp +
'CancelRequestAnimationFrame'];\n   
window['requestAnimationFrame'] = window.requestAnimationFrame;\n
   window['cancelAnimationFrame'] =
window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS
6/.test(window.navigator.userAgent) || !window.requestAnimationFrame ||
!window.cancelAnimationFrame) {\n    var lastTime = 0;\n    /**\n   *
requestAnimationFrame polyfill.\n   * @param  {!Function} callback the
callback function.\n   */\n    window.requestAnimationFrame = function
(callback) {\n        var now = Date.now();\n        var nextTime =
Math.max(lastTime + 16, now);\n        return setTimeout(function () {\n   
        callback(lastTime = nextTime);\n        }, nextTime - now);\n   
};\n    window.cancelAnimationFrame = clearTimeout;\n   
window['requestAnimationFrame'] = window.requestAnimationFrame;\n
   window['cancelAnimationFrame'] =
window.cancelAnimationFrame;\n}\n/**\n * @license\n * Copyright 2015 Google
Inc. All Rights Reserved.\n *\n * Licensed under the Apache License,
Version 2.0 (the \"License\");\n * you may not use this file
except in compliance with the License.\n * You may obtain a copy of the
License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *
Unless required by applicable law or agreed to in writing, software\n *
distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Button MDL component.\n   * Implements MDL component design
pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@param {HTMLElement} element The element that will be upgraded.\n   */\nvar
MaterialButton = function MaterialButton(element) {\n    this.element_ =
element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialButton'] =
MaterialButton;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialButton.prototype.Constant_ = {};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialButton.prototype.CssClasses_ = {\n    RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_CONTAINER:
'mdl-button__ripple-container',\n    RIPPLE:
'mdl-ripple'\n};\n/**\n   * Handle blur of element.\n   *\n   *
@param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialButton.prototype.blurHandler_ = function (event) {\n    if
(event) {\n        this.element_.blur();\n    }\n};\n// Public
methods.\n/**\n   * Disable button.\n   *\n   * @public\n  
*/\nMaterialButton.prototype.disable = function () {\n   
this.element_.disabled =
true;\n};\nMaterialButton.prototype['disable'] =
MaterialButton.prototype.disable;\n/**\n   * Enable button.\n   *\n   *
@public\n   */\nMaterialButton.prototype.enable = function () {\n   
this.element_.disabled =
false;\n};\nMaterialButton.prototype['enable'] =
MaterialButton.prototype.enable;\n/**\n   * Initialize element.\n  
*/\nMaterialButton.prototype.init = function () {\n    if (this.element_)
{\n        if
(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n     
      var rippleContainer = document.createElement('span');\n    
       rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n 
          this.rippleElement_ = document.createElement('span');\n
           this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n   
        rippleContainer.appendChild(this.rippleElement_);\n           
this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n           
this.rippleElement_.addEventListener('mouseup',
this.boundRippleBlurHandler);\n           
this.element_.appendChild(rippleContainer);\n        }\n       
this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n       
this.element_.addEventListener('mouseup',
this.boundButtonBlurHandler);\n       
this.element_.addEventListener('mouseleave',
this.boundButtonBlurHandler);\n    }\n};\n/**\n   * Downgrade the
element.\n   *\n   * @private\n  
*/\nMaterialButton.prototype.mdlDowngrade_ = function () {\n    if
(this.rippleElement_) {\n       
this.rippleElement_.removeEventListener('mouseup',
this.boundRippleBlurHandler);\n    }\n   
this.element_.removeEventListener('mouseup',
this.boundButtonBlurHandler);\n   
this.element_.removeEventListener('mouseleave',
this.boundButtonBlurHandler);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n   */\nMaterialButton.prototype.mdlDowngrade =
MaterialButton.prototype.mdlDowngrade_;\nMaterialButton.prototype['mdlDowngrade']
= MaterialButton.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialButton,\n   
classAsString: 'MaterialButton',\n    cssClass:
'mdl-js-button',\n    widget: true\n});\n/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Checkbox MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialCheckbox = function MaterialCheckbox(element)
{\n    this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialCheckbox'] =
MaterialCheckbox;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n 
 * Store strings for class names defined by this component that are used
in\n   * JavaScript. This allows us to simply change it in one place should
we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   *
@private\n   */\nMaterialCheckbox.prototype.CssClasses_ = {\n    INPUT:
'mdl-checkbox__input',\n    BOX_OUTLINE:
'mdl-checkbox__box-outline',\n    FOCUS_HELPER:
'mdl-checkbox__focus-helper',\n    TICK_OUTLINE:
'mdl-checkbox__tick-outline',\n    RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER:
'mdl-checkbox__ripple-container',\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n   
IS_FOCUSED: 'is-focused',\n    IS_DISABLED:
'is-disabled',\n    IS_CHECKED: 'is-checked',\n   
IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Handle change of
state.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialCheckbox.prototype.onChange_ = function (event)
{\n    this.updateClasses_();\n};\n/**\n   * Handle focus of element.\n  
*\n   * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n   
this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle lost focus of element.\n   *\n   * @param {Event} event The event
that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onBlur_ =
function (event) {\n   
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n  
* @private\n   */\nMaterialCheckbox.prototype.onMouseUp_ = function (event)
{\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   *
@private\n   */\nMaterialCheckbox.prototype.updateClasses_ = function ()
{\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   *
Add blur.\n   *\n   * @private\n   */\nMaterialCheckbox.prototype.blur_ =
function () {\n    // TODO: figure out why there's a focus event being
fired after our blur,\n    // so that we can avoid this hack.\n   
window.setTimeout(function () {\n        this.inputElement_.blur();\n   
}.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n 
 * Check the inputs toggle state and update display.\n   *\n   * @public\n 
 */\nMaterialCheckbox.prototype.checkToggleState = function () {\n    if
(this.inputElement_.checked) {\n       
this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n  
     this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n   
}\n};\nMaterialCheckbox.prototype['checkToggleState'] =
MaterialCheckbox.prototype.checkToggleState;\n/**\n   * Check the inputs
disabled state and update display.\n   *\n   * @public\n  
*/\nMaterialCheckbox.prototype.checkDisabled = function () {\n    if
(this.inputElement_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialCheckbox.prototype['checkDisabled'] =
MaterialCheckbox.prototype.checkDisabled;\n/**\n   * Disable checkbox.\n  
*\n   * @public\n   */\nMaterialCheckbox.prototype.disable = function ()
{\n    this.inputElement_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable']
= MaterialCheckbox.prototype.disable;\n/**\n   * Enable checkbox.\n   *\n  
* @public\n   */\nMaterialCheckbox.prototype.enable = function () {\n   
this.inputElement_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable']
= MaterialCheckbox.prototype.enable;\n/**\n   * Check checkbox.\n   *\n   *
@public\n   */\nMaterialCheckbox.prototype.check = function () {\n   
this.inputElement_.checked = true;\n   
this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] =
MaterialCheckbox.prototype.check;\n/**\n   * Uncheck checkbox.\n   *\n   *
@public\n   */\nMaterialCheckbox.prototype.uncheck = function () {\n   
this.inputElement_.checked = false;\n   
this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck']
= MaterialCheckbox.prototype.uncheck;\n/**\n   * Initialize element.\n  
*/\nMaterialCheckbox.prototype.init = function () {\n    if (this.element_)
{\n        this.inputElement_ = this.element_.querySelector('.' +
this.CssClasses_.INPUT);\n        var boxOutline =
document.createElement('span');\n       
boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n        var
tickContainer = document.createElement('span');\n       
tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n        var
tickOutline = document.createElement('span');\n       
tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n       
boxOutline.appendChild(tickOutline);\n       
this.element_.appendChild(tickContainer);\n       
this.element_.appendChild(boxOutline);\n        if
(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n     
      this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n
           this.rippleContainerElement_ =
document.createElement('span');\n           
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n
           this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n         
  this.rippleContainerElement_.addEventListener('mouseup',
this.boundRippleMouseUp);\n            var ripple =
document.createElement('span');\n           
ripple.classList.add(this.CssClasses_.RIPPLE);\n           
this.rippleContainerElement_.appendChild(ripple);\n           
this.element_.appendChild(this.rippleContainerElement_);\n        }\n      
 this.boundInputOnChange = this.onChange_.bind(this);\n       
this.boundInputOnFocus = this.onFocus_.bind(this);\n       
this.boundInputOnBlur = this.onBlur_.bind(this);\n       
this.boundElementMouseUp = this.onMouseUp_.bind(this);\n       
this.inputElement_.addEventListener('change',
this.boundInputOnChange);\n       
this.inputElement_.addEventListener('focus',
this.boundInputOnFocus);\n       
this.inputElement_.addEventListener('blur',
this.boundInputOnBlur);\n       
this.element_.addEventListener('mouseup',
this.boundElementMouseUp);\n        this.updateClasses_();\n       
this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Downgrade the component.\n   *\n   * @private\n  
*/\nMaterialCheckbox.prototype.mdlDowngrade_ = function () {\n    if
(this.rippleContainerElement_) {\n       
this.rippleContainerElement_.removeEventListener('mouseup',
this.boundRippleMouseUp);\n    }\n   
this.inputElement_.removeEventListener('change',
this.boundInputOnChange);\n   
this.inputElement_.removeEventListener('focus',
this.boundInputOnFocus);\n   
this.inputElement_.removeEventListener('blur',
this.boundInputOnBlur);\n   
this.element_.removeEventListener('mouseup',
this.boundElementMouseUp);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.mdlDowngrade
=
MaterialCheckbox.prototype.mdlDowngrade_;\nMaterialCheckbox.prototype['mdlDowngrade']
= MaterialCheckbox.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialCheckbox,\n  
 classAsString: 'MaterialCheckbox',\n    cssClass:
'mdl-js-checkbox',\n    widget: true\n});\n/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for icon
toggle MDL component.\n   * Implements MDL component design pattern defined
at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n  
*\n   * @constructor\n   * @param {HTMLElement} element The element that
will be upgraded.\n   */\nvar MaterialIconToggle = function
MaterialIconToggle(element) {\n    this.element_ = element;\n    //
Initialize instance.\n   
this.init();\n};\nwindow['MaterialIconToggle'] =
MaterialIconToggle;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001
};\n/**\n   * Store strings for class names defined by this component that
are used in\n   * JavaScript. This allows us to simply change it in one
place should we\n   * decide to modify at a later date.\n   *\n   * @enum
{string}\n   * @private\n   */\nMaterialIconToggle.prototype.CssClasses_ =
{\n    INPUT: 'mdl-icon-toggle__input',\n    JS_RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER:
'mdl-icon-toggle__ripple-container',\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n   
IS_FOCUSED: 'is-focused',\n    IS_DISABLED:
'is-disabled',\n    IS_CHECKED: 'is-checked'\n};\n/**\n
  * Handle change of state.\n   *\n   * @param {Event} event The event that
fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onChange_ =
function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus
of element.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialIconToggle.prototype.onFocus_ = function (event)
{\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n
  * Handle lost focus of element.\n   *\n   * @param {Event} event The
event that fired.\n   * @private\n  
*/\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n   
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n  
* @private\n   */\nMaterialIconToggle.prototype.onMouseUp_ = function
(event) {\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n  
* @private\n   */\nMaterialIconToggle.prototype.updateClasses_ = function
() {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n  
* Add blur.\n   *\n   * @private\n   */\nMaterialIconToggle.prototype.blur_
= function () {\n    // TODO: figure out why there's a focus event
being fired after our blur,\n    // so that we can avoid this hack.\n   
window.setTimeout(function () {\n        this.inputElement_.blur();\n   
}.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n 
 * Check the inputs toggle state and update display.\n   *\n   * @public\n 
 */\nMaterialIconToggle.prototype.checkToggleState = function () {\n    if
(this.inputElement_.checked) {\n       
this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n  
     this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n   
}\n};\nMaterialIconToggle.prototype['checkToggleState'] =
MaterialIconToggle.prototype.checkToggleState;\n/**\n   * Check the inputs
disabled state and update display.\n   *\n   * @public\n  
*/\nMaterialIconToggle.prototype.checkDisabled = function () {\n    if
(this.inputElement_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialIconToggle.prototype['checkDisabled'] =
MaterialIconToggle.prototype.checkDisabled;\n/**\n   * Disable icon
toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.disable =
function () {\n    this.inputElement_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable']
= MaterialIconToggle.prototype.disable;\n/**\n   * Enable icon toggle.\n  
*\n   * @public\n   */\nMaterialIconToggle.prototype.enable = function ()
{\n    this.inputElement_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable']
= MaterialIconToggle.prototype.enable;\n/**\n   * Check icon toggle.\n  
*\n   * @public\n   */\nMaterialIconToggle.prototype.check = function ()
{\n    this.inputElement_.checked = true;\n   
this.updateClasses_();\n};\nMaterialIconToggle.prototype['check']
= MaterialIconToggle.prototype.check;\n/**\n   * Uncheck icon toggle.\n  
*\n   * @public\n   */\nMaterialIconToggle.prototype.uncheck = function ()
{\n    this.inputElement_.checked = false;\n   
this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck']
= MaterialIconToggle.prototype.uncheck;\n/**\n   * Initialize element.\n  
*/\nMaterialIconToggle.prototype.init = function () {\n    if
(this.element_) {\n        this.inputElement_ =
this.element_.querySelector('.' + this.CssClasses_.INPUT);\n     
  if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT))
{\n           
this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n      
     this.rippleContainerElement_ =
document.createElement('span');\n           
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n
           this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n         
  this.rippleContainerElement_.addEventListener('mouseup',
this.boundRippleMouseUp);\n            var ripple =
document.createElement('span');\n           
ripple.classList.add(this.CssClasses_.RIPPLE);\n           
this.rippleContainerElement_.appendChild(ripple);\n           
this.element_.appendChild(this.rippleContainerElement_);\n        }\n      
 this.boundInputOnChange = this.onChange_.bind(this);\n       
this.boundInputOnFocus = this.onFocus_.bind(this);\n       
this.boundInputOnBlur = this.onBlur_.bind(this);\n       
this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n       
this.inputElement_.addEventListener('change',
this.boundInputOnChange);\n       
this.inputElement_.addEventListener('focus',
this.boundInputOnFocus);\n       
this.inputElement_.addEventListener('blur',
this.boundInputOnBlur);\n       
this.element_.addEventListener('mouseup',
this.boundElementOnMouseUp);\n        this.updateClasses_();\n       
this.element_.classList.add('is-upgraded');\n    }\n};\n/**\n   *
Downgrade the component\n   *\n   * @private\n  
*/\nMaterialIconToggle.prototype.mdlDowngrade_ = function () {\n    if
(this.rippleContainerElement_) {\n       
this.rippleContainerElement_.removeEventListener('mouseup',
this.boundRippleMouseUp);\n    }\n   
this.inputElement_.removeEventListener('change',
this.boundInputOnChange);\n   
this.inputElement_.removeEventListener('focus',
this.boundInputOnFocus);\n   
this.inputElement_.removeEventListener('blur',
this.boundInputOnBlur);\n   
this.element_.removeEventListener('mouseup',
this.boundElementOnMouseUp);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n  
*/\nMaterialIconToggle.prototype.mdlDowngrade =
MaterialIconToggle.prototype.mdlDowngrade_;\nMaterialIconToggle.prototype['mdlDowngrade']
= MaterialIconToggle.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialIconToggle,\n
   classAsString: 'MaterialIconToggle',\n    cssClass:
'mdl-js-icon-toggle',\n    widget: true\n});\n/**\n * @license\n
* Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under
the Apache License, Version 2.0 (the \"License\");\n * you may
not use this file except in compliance with the License.\n * You may obtain
a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
dropdown MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialMenu = function MaterialMenu(element) {\n   
this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n  
* Store constants in one place so they can be updated easily.\n   *\n   *
@enum {string | number}\n   * @private\n  
*/\nMaterialMenu.prototype.Constant_ = {\n    // Total duration of the menu
animation.\n    TRANSITION_DURATION_SECONDS: 0.3,\n    // The fraction of
the total duration we want to use for menu item animations.\n   
TRANSITION_DURATION_FRACTION: 0.8,\n    // How long the menu stays open
after choosing an option (so the user can see\n    // the ripple).\n   
CLOSE_TIMEOUT: 150\n};\n/**\n   * Keycodes, for code readability.\n   *\n  
* @enum {number}\n   * @private\n   */\nMaterialMenu.prototype.Keycodes_ =
{\n    ENTER: 13,\n    ESCAPE: 27,\n    SPACE: 32,\n    UP_ARROW: 38,\n   
DOWN_ARROW: 40\n};\n/**\n   * Store strings for class names defined by this
component that are used in\n   * JavaScript. This allows us to simply
change it in one place should we\n   * decide to modify at a later date.\n 
 *\n   * @enum {string}\n   * @private\n  
*/\nMaterialMenu.prototype.CssClasses_ = {\n    CONTAINER:
'mdl-menu__container',\n    OUTLINE:
'mdl-menu__outline',\n    ITEM: 'mdl-menu__item',\n   
ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n   
RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE:
'mdl-ripple',\n    // Statuses\n    IS_UPGRADED:
'is-upgraded',\n    IS_VISIBLE: 'is-visible',\n   
IS_ANIMATING: 'is-animating',\n    // Alignment options\n   
BOTTOM_LEFT: 'mdl-menu--bottom-left',\n    // This is the
default.\n    BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n   
TOP_LEFT: 'mdl-menu--top-left',\n    TOP_RIGHT:
'mdl-menu--top-right',\n    UNALIGNED:
'mdl-menu--unaligned'\n};\n/**\n   * Initialize element.\n  
*/\nMaterialMenu.prototype.init = function () {\n    if (this.element_) {\n
       // Create container for the menu.\n        var container =
document.createElement('div');\n       
container.classList.add(this.CssClasses_.CONTAINER);\n       
this.element_.parentElement.insertBefore(container, this.element_);\n      
 this.element_.parentElement.removeChild(this.element_);\n       
container.appendChild(this.element_);\n        this.container_ =
container;\n        // Create outline for the menu (shadow and
background).\n        var outline =
document.createElement('div');\n       
outline.classList.add(this.CssClasses_.OUTLINE);\n        this.outline_ =
outline;\n        container.insertBefore(outline, this.element_);\n       
// Find the \"for\" element and bind events to it.\n        var
forElId = this.element_.getAttribute('for');\n        var forEl =
null;\n        if (forElId) {\n            forEl =
document.getElementById(forElId);\n            if (forEl) {\n              
 this.forElement_ = forEl;\n               
forEl.addEventListener('click',
this.handleForClick_.bind(this));\n               
forEl.addEventListener('keydown',
this.handleForKeyboardEvent_.bind(this));\n            }\n        }\n      
 var items = this.element_.querySelectorAll('.' +
this.CssClasses_.ITEM);\n        this.boundItemKeydown_ =
this.handleItemKeyboardEvent_.bind(this);\n        this.boundItemClick_ =
this.handleItemClick_.bind(this);\n        for (var i = 0; i <
items.length; i++) {\n            // Add a listener to each menu item.\n   
        items[i].addEventListener('click',
this.boundItemClick_);\n            // Add a tab index to each menu item.\n
           items[i].tabIndex = '-1';\n            // Add a
keyboard listener to each menu item.\n           
items[i].addEventListener('keydown', this.boundItemKeydown_);\n  
     }\n        // Add ripple classes to each item, if the user has enabled
ripples.\n        if
(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n     
      this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n
           for (i = 0; i < items.length; i++) {\n                var
item = items[i];\n                var rippleContainer =
document.createElement('span');\n               
rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n   
            var ripple = document.createElement('span');\n       
        ripple.classList.add(this.CssClasses_.RIPPLE);\n               
rippleContainer.appendChild(ripple);\n               
item.appendChild(rippleContainer);\n               
item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            }\n       
}\n        // Copy alignment classes to the container, so the outline can
use them.\n        if
(this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n       
    this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n        }\n
       if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT))
{\n           
this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n        }\n   
    if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n   
        this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n       
}\n        if
(this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n         
  this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n        }\n    
   if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n   
        this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n       
}\n        container.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Handles a click on the \"for\" element, by
positioning the menu and then\n   * toggling it.\n   *\n   * @param {Event}
evt The event that fired.\n   * @private\n  
*/\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n    if
(this.element_ && this.forElement_) {\n        var rect =
this.forElement_.getBoundingClientRect();\n        var forRect =
this.forElement_.parentElement.getBoundingClientRect();\n        if
(this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n        }
else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT))
{\n            // Position below the \"for\" element, aligned to
its right.\n            this.container_.style.right = forRect.right -
rect.right + 'px';\n            this.container_.style.top =
this.forElement_.offsetTop + this.forElement_.offsetHeight +
'px';\n        } else if
(this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n          
 // Position above the \"for\" element, aligned to its left.\n   
        this.container_.style.left = this.forElement_.offsetLeft +
'px';\n            this.container_.style.bottom = forRect.bottom
- rect.top + 'px';\n        } else if
(this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n         
  // Position above the \"for\" element, aligned to its right.\n 
          this.container_.style.right = forRect.right - rect.right +
'px';\n            this.container_.style.bottom = forRect.bottom
- rect.top + 'px';\n        } else {\n            // Default:
position below the \"for\" element, aligned to its left.\n       
    this.container_.style.left = this.forElement_.offsetLeft +
'px';\n            this.container_.style.top =
this.forElement_.offsetTop + this.forElement_.offsetHeight +
'px';\n        }\n    }\n    this.toggle(evt);\n};\n/**\n   *
Handles a keyboard event on the \"for\" element.\n   *\n   *
@param {Event} evt The event that fired.\n   * @private\n  
*/\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n   
if (this.element_ && this.container_ && this.forElement_)
{\n        var items = this.element_.querySelectorAll('.' +
this.CssClasses_.ITEM + ':not([disabled])');\n        if (items
&& items.length > 0 &&
this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n       
    if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n               
evt.preventDefault();\n                items[items.length - 1].focus();\n  
         } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n         
      evt.preventDefault();\n                items[0].focus();\n           
}\n        }\n    }\n};\n/**\n   * Handles a keyboard event on an item.\n  
*\n   * @param {Event} evt The event that fired.\n   * @private\n  
*/\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n   
if (this.element_ && this.container_) {\n        var items =
this.element_.querySelectorAll('.' + this.CssClasses_.ITEM +
':not([disabled])');\n        if (items && items.length
> 0 &&
this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n       
    var currentIndex =
Array.prototype.slice.call(items).indexOf(evt.target);\n            if
(evt.keyCode === this.Keycodes_.UP_ARROW) {\n               
evt.preventDefault();\n                if (currentIndex > 0) {\n        
           items[currentIndex - 1].focus();\n                } else {\n    
               items[items.length - 1].focus();\n                }\n       
    } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n              
 evt.preventDefault();\n                if (items.length > currentIndex
+ 1) {\n                    items[currentIndex + 1].focus();\n             
  } else {\n                    items[0].focus();\n                }\n     
      } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode ===
this.Keycodes_.ENTER) {\n                evt.preventDefault();\n           
    // Send mousedown and mouseup to trigger ripple.\n                var e
= new MouseEvent('mousedown');\n               
evt.target.dispatchEvent(e);\n                e = new
MouseEvent('mouseup');\n               
evt.target.dispatchEvent(e);\n                // Send click.\n             
  evt.target.click();\n            } else if (evt.keyCode ===
this.Keycodes_.ESCAPE) {\n                evt.preventDefault();\n          
     this.hide();\n            }\n        }\n    }\n};\n/**\n   * Handles a
click event on an item.\n   *\n   * @param {Event} evt The event that
fired.\n   * @private\n   */\nMaterialMenu.prototype.handleItemClick_ =
function (evt) {\n    if (evt.target.hasAttribute('disabled'))
{\n        evt.stopPropagation();\n    } else {\n        // Wait some time
before closing menu, so the user can see the ripple.\n        this.closing_
= true;\n        window.setTimeout(function (evt) {\n           
this.hide();\n            this.closing_ = false;\n        }.bind(this),
this.Constant_.CLOSE_TIMEOUT);\n    }\n};\n/**\n   * Calculates the initial
clip (for opening the menu) or final clip (for closing\n   * it), and
applies it. This allows us to animate from or to the correct point,\n   *
that is, the point it's aligned to in the \"for\" element.\n
  *\n   * @param {number} height Height of the clip rectangle\n   * @param
{number} width Width of the clip rectangle\n   * @private\n  
*/\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n    if
(this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n       
// Do not clip.\n        this.element_.style.clip = '';\n    }
else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT))
{\n        // Clip to the top right corner of the menu.\n       
this.element_.style.clip = 'rect(0 ' + width + 'px ' +
'0 ' + width + 'px)';\n    } else if
(this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n        //
Clip to the bottom left corner of the menu.\n       
this.element_.style.clip = 'rect(' + height + 'px 0 ' +
height + 'px 0)';\n    } else if
(this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n       
// Clip to the bottom right corner of the menu.\n       
this.element_.style.clip = 'rect(' + height + 'px ' +
width + 'px ' + height + 'px ' + width +
'px)';\n    } else {\n        // Default: do not clip (same as
clipping to the top left corner).\n        this.element_.style.clip =
'';\n    }\n};\n/**\n   * Adds an event listener to clean up
after the animation ends.\n   *\n   * @private\n  
*/\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n   
var cleanup = function () {\n       
this.element_.removeEventListener('transitionend', cleanup);\n   
    this.element_.removeEventListener('webkitTransitionEnd',
cleanup);\n       
this.element_.classList.remove(this.CssClasses_.IS_ANIMATING);\n   
}.bind(this);\n    // Remove animation class once the transition is done.\n
   this.element_.addEventListener('transitionend', cleanup);\n   
this.element_.addEventListener('webkitTransitionEnd',
cleanup);\n};\n/**\n   * Displays the menu.\n   *\n   * @public\n  
*/\nMaterialMenu.prototype.show = function (evt) {\n    if (this.element_
&& this.container_ && this.outline_) {\n        // Measure
the inner element.\n        var height =
this.element_.getBoundingClientRect().height;\n        var width =
this.element_.getBoundingClientRect().width;\n        // Apply the inner
element's size to the container and outline.\n       
this.container_.style.width = width + 'px';\n       
this.container_.style.height = height + 'px';\n       
this.outline_.style.width = width + 'px';\n       
this.outline_.style.height = height + 'px';\n        var
transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS *
this.Constant_.TRANSITION_DURATION_FRACTION;\n        // Calculate
transition delays for individual menu items, so that they fade\n        //
in one at a time.\n        var items =
this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n   
    for (var i = 0; i < items.length; i++) {\n            var itemDelay
= null;\n            if
(this.element_.classList.contains(this.CssClasses_.TOP_LEFT) ||
this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n          
     itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) /
height * transitionDuration + 's';\n            } else {\n       
        itemDelay = items[i].offsetTop / height * transitionDuration +
's';\n            }\n            items[i].style.transitionDelay =
itemDelay;\n        }\n        // Apply the initial clip to the text before
we start animating.\n        this.applyClip_(height, width);\n        //
Wait for the next frame, turn on animation, and apply the final clip.\n    
   // Also make it visible. This triggers the transitions.\n       
window.requestAnimationFrame(function () {\n           
this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n           
this.element_.style.clip = 'rect(0 ' + width + 'px ' +
height + 'px 0)';\n           
this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n       
}.bind(this));\n        // Clean up after the animation is complete.\n     
  this.addAnimationEndListener_();\n        // Add a click listener to the
document, to close the menu.\n        var callback = function (e) {\n      
     // Check to see if the document is processing the same event that\n   
        // displayed the menu in the first place. If so, do nothing.\n     
      // Also check to see if the menu is in the process of closing itself,
and\n            // do nothing in that case.\n            // Also check if
the clicked element is a menu item\n            // if so, do nothing.\n    
       if (e !== evt && !this.closing_ &&
e.target.parentNode !== this.element_) {\n               
document.removeEventListener('click', callback);\n               
this.hide();\n            }\n        }.bind(this);\n       
document.addEventListener('click', callback);\n   
}\n};\nMaterialMenu.prototype['show'] =
MaterialMenu.prototype.show;\n/**\n   * Hides the menu.\n   *\n   *
@public\n   */\nMaterialMenu.prototype.hide = function () {\n    if
(this.element_ && this.container_ && this.outline_) {\n    
   var items = this.element_.querySelectorAll('.' +
this.CssClasses_.ITEM);\n        // Remove all transition delays; menu
items fade out concurrently.\n        for (var i = 0; i < items.length;
i++) {\n            items[i].style.transitionDelay = null;\n        }\n    
   // Measure the inner element.\n        var rect =
this.element_.getBoundingClientRect();\n        var height = rect.height;\n
       var width = rect.width;\n        // Turn on animation, and apply the
final clip. Also make invisible.\n        // This triggers the
transitions.\n       
this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n       
this.applyClip_(height, width);\n       
this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n        //
Clean up after the animation is complete.\n       
this.addAnimationEndListener_();\n   
}\n};\nMaterialMenu.prototype['hide'] =
MaterialMenu.prototype.hide;\n/**\n   * Displays or hides the menu,
depending on current state.\n   *\n   * @public\n  
*/\nMaterialMenu.prototype.toggle = function (evt) {\n    if
(this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n      
 this.hide();\n    } else {\n        this.show(evt);\n   
}\n};\nMaterialMenu.prototype['toggle'] =
MaterialMenu.prototype.toggle;\n/**\n   * Downgrade the component.\n   *\n 
 * @private\n   */\nMaterialMenu.prototype.mdlDowngrade_ = function () {\n 
  var items = this.element_.querySelectorAll('.' +
this.CssClasses_.ITEM);\n    for (var i = 0; i < items.length; i++) {\n 
      items[i].removeEventListener('click',
this.boundItemClick_);\n       
items[i].removeEventListener('keydown',
this.boundItemKeydown_);\n    }\n};\n/**\n   * Public alias for the
downgrade method.\n   *\n   * @public\n  
*/\nMaterialMenu.prototype.mdlDowngrade =
MaterialMenu.prototype.mdlDowngrade_;\nMaterialMenu.prototype['mdlDowngrade']
= MaterialMenu.prototype.mdlDowngrade;\n// The component registers itself.
It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialMenu,\n   
classAsString: 'MaterialMenu',\n    cssClass:
'mdl-js-menu',\n    widget: true\n});\n/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Progress MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialProgress = function MaterialProgress(element)
{\n    this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialProgress'] =
MaterialProgress;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialProgress.prototype.Constant_ = {};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS:
'mdl-progress__indeterminate' };\n/**\n   * Set the current
progress of the progressbar.\n   *\n   * @param {number} p Percentage of
the progress (0-100)\n   * @public\n  
*/\nMaterialProgress.prototype.setProgress = function (p) {\n    if
(this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS))
{\n        return;\n    }\n    this.progressbar_.style.width = p +
'%';\n};\nMaterialProgress.prototype['setProgress'] =
MaterialProgress.prototype.setProgress;\n/**\n   * Set the current progress
of the buffer.\n   *\n   * @param {number} p Percentage of the buffer
(0-100)\n   * @public\n   */\nMaterialProgress.prototype.setBuffer =
function (p) {\n    this.bufferbar_.style.width = p + '%';\n   
this.auxbar_.style.width = 100 - p +
'%';\n};\nMaterialProgress.prototype['setBuffer'] =
MaterialProgress.prototype.setBuffer;\n/**\n   * Initialize element.\n  
*/\nMaterialProgress.prototype.init = function () {\n    if (this.element_)
{\n        var el = document.createElement('div');\n       
el.className = 'progressbar bar bar1';\n       
this.element_.appendChild(el);\n        this.progressbar_ = el;\n        el
= document.createElement('div');\n        el.className =
'bufferbar bar bar2';\n        this.element_.appendChild(el);\n  
     this.bufferbar_ = el;\n        el =
document.createElement('div');\n        el.className =
'auxbar bar bar3';\n        this.element_.appendChild(el);\n     
  this.auxbar_ = el;\n        this.progressbar_.style.width =
'0%';\n        this.bufferbar_.style.width = '100%';\n 
      this.auxbar_.style.width = '0%';\n       
this.element_.classList.add('is-upgraded');\n    }\n};\n/**\n   *
Downgrade the component\n   *\n   * @private\n  
*/\nMaterialProgress.prototype.mdlDowngrade_ = function () {\n    while
(this.element_.firstChild) {\n       
this.element_.removeChild(this.element_.firstChild);\n    }\n};\n/**\n   *
Public alias for the downgrade method.\n   *\n   * @public\n  
*/\nMaterialProgress.prototype.mdlDowngrade =
MaterialProgress.prototype.mdlDowngrade_;\nMaterialProgress.prototype['mdlDowngrade']
= MaterialProgress.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialProgress,\n  
 classAsString: 'MaterialProgress',\n    cssClass:
'mdl-js-progress',\n    widget: true\n});\n/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for Radio
MDL component.\n   * Implements MDL component design pattern defined at:\n 
 * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialRadio = function MaterialRadio(element) {\n  
 this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n
  * Store constants in one place so they can be updated easily.\n   *\n   *
@enum {string | number}\n   * @private\n  
*/\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   *
Store strings for class names defined by this component that are used in\n 
 * JavaScript. This allows us to simply change it in one place should we\n 
 * decide to modify at a later date.\n   *\n   * @enum {string}\n   *
@private\n   */\nMaterialRadio.prototype.CssClasses_ = {\n    IS_FOCUSED:
'is-focused',\n    IS_DISABLED: 'is-disabled',\n   
IS_CHECKED: 'is-checked',\n    IS_UPGRADED:
'is-upgraded',\n    JS_RADIO: 'mdl-js-radio',\n   
RADIO_BTN: 'mdl-radio__button',\n    RADIO_OUTER_CIRCLE:
'mdl-radio__outer-circle',\n    RADIO_INNER_CIRCLE:
'mdl-radio__inner-circle',\n    RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER:
'mdl-radio__ripple-container',\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE:
'mdl-ripple'\n};\n/**\n   * Handle change of state.\n   *\n   *
@param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialRadio.prototype.onChange_ = function (event) {\n    // Since
other radio buttons don't get change events, we need to look for\n   
// them to update their classes.\n    var radios =
document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n    for (var i
= 0; i < radios.length; i++) {\n        var button =
radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n     
  // Different name == different group, so no point updating those.\n      
 if (button.getAttribute('name') ===
this.btnElement_.getAttribute('name')) {\n           
radios[i]['MaterialRadio'].updateClasses_();\n        }\n   
}\n};\n/**\n   * Handle focus.\n   *\n   * @param {Event} event The event
that fired.\n   * @private\n   */\nMaterialRadio.prototype.onFocus_ =
function (event) {\n   
this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n
  * @private\n   */\nMaterialRadio.prototype.onBlur_ = function (event) {\n
   this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n 
 * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n
  * @private\n   */\nMaterialRadio.prototype.onMouseup_ = function (event)
{\n    this.blur_();\n};\n/**\n   * Update classes.\n   *\n   * @private\n 
 */\nMaterialRadio.prototype.updateClasses_ = function () {\n   
this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add
blur.\n   *\n   * @private\n   */\nMaterialRadio.prototype.blur_ = function
() {\n    // TODO: figure out why there's a focus event being fired
after our blur,\n    // so that we can avoid this hack.\n   
window.setTimeout(function () {\n        this.btnElement_.blur();\n   
}.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n 
 * Check the components disabled state.\n   *\n   * @public\n  
*/\nMaterialRadio.prototype.checkDisabled = function () {\n    if
(this.btnElement_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialRadio.prototype['checkDisabled'] =
MaterialRadio.prototype.checkDisabled;\n/**\n   * Check the components
toggled state.\n   *\n   * @public\n  
*/\nMaterialRadio.prototype.checkToggleState = function () {\n    if
(this.btnElement_.checked) {\n       
this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n  
     this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n   
}\n};\nMaterialRadio.prototype['checkToggleState'] =
MaterialRadio.prototype.checkToggleState;\n/**\n   * Disable radio.\n   *\n
  * @public\n   */\nMaterialRadio.prototype.disable = function () {\n   
this.btnElement_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] =
MaterialRadio.prototype.disable;\n/**\n   * Enable radio.\n   *\n   *
@public\n   */\nMaterialRadio.prototype.enable = function () {\n   
this.btnElement_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] =
MaterialRadio.prototype.enable;\n/**\n   * Check radio.\n   *\n   *
@public\n   */\nMaterialRadio.prototype.check = function () {\n   
this.btnElement_.checked = true;\n   
this.updateClasses_();\n};\nMaterialRadio.prototype['check'] =
MaterialRadio.prototype.check;\n/**\n   * Uncheck radio.\n   *\n   *
@public\n   */\nMaterialRadio.prototype.uncheck = function () {\n   
this.btnElement_.checked = false;\n   
this.updateClasses_();\n};\nMaterialRadio.prototype['uncheck'] =
MaterialRadio.prototype.uncheck;\n/**\n   * Initialize element.\n  
*/\nMaterialRadio.prototype.init = function () {\n    if (this.element_)
{\n        this.btnElement_ = this.element_.querySelector('.' +
this.CssClasses_.RADIO_BTN);\n        this.boundChangeHandler_ =
this.onChange_.bind(this);\n        this.boundFocusHandler_ =
this.onChange_.bind(this);\n        this.boundBlurHandler_ =
this.onBlur_.bind(this);\n        this.boundMouseUpHandler_ =
this.onMouseup_.bind(this);\n        var outerCircle =
document.createElement('span');\n       
outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n       
var innerCircle = document.createElement('span');\n       
innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n       
this.element_.appendChild(outerCircle);\n       
this.element_.appendChild(innerCircle);\n        var rippleContainer;\n    
   if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT))
{\n           
this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n      
     rippleContainer = document.createElement('span');\n         
  rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n      
     rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n      
     rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n      
     rippleContainer.addEventListener('mouseup',
this.boundMouseUpHandler_);\n            var ripple =
document.createElement('span');\n           
ripple.classList.add(this.CssClasses_.RIPPLE);\n           
rippleContainer.appendChild(ripple);\n           
this.element_.appendChild(rippleContainer);\n        }\n       
this.btnElement_.addEventListener('change',
this.boundChangeHandler_);\n       
this.btnElement_.addEventListener('focus',
this.boundFocusHandler_);\n       
this.btnElement_.addEventListener('blur',
this.boundBlurHandler_);\n       
this.element_.addEventListener('mouseup',
this.boundMouseUpHandler_);\n        this.updateClasses_();\n       
this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Downgrade the element.\n   *\n   * @private\n  
*/\nMaterialRadio.prototype.mdlDowngrade_ = function () {\n    var
rippleContainer = this.element_.querySelector('.' +
this.CssClasses_.RIPPLE_CONTAINER);\n   
this.btnElement_.removeEventListener('change',
this.boundChangeHandler_);\n   
this.btnElement_.removeEventListener('focus',
this.boundFocusHandler_);\n   
this.btnElement_.removeEventListener('blur',
this.boundBlurHandler_);\n   
this.element_.removeEventListener('mouseup',
this.boundMouseUpHandler_);\n    if (rippleContainer) {\n       
rippleContainer.removeEventListener('mouseup',
this.boundMouseUpHandler_);\n       
this.element_.removeChild(rippleContainer);\n    }\n};\n/**\n   * Public
alias for the downgrade method.\n   *\n   * @public\n  
*/\nMaterialRadio.prototype.mdlDowngrade =
MaterialRadio.prototype.mdlDowngrade_;\nMaterialRadio.prototype['mdlDowngrade']
= MaterialRadio.prototype.mdlDowngrade;\n// The component registers itself.
It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialRadio,\n   
classAsString: 'MaterialRadio',\n    cssClass:
'mdl-js-radio',\n    widget: true\n});\n/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for Slider
MDL component.\n   * Implements MDL component design pattern defined at:\n 
 * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialSlider = function MaterialSlider(element) {\n
   this.element_ = element;\n    // Browser feature detection.\n   
this.isIE_ = window.navigator.msPointerEnabled;\n    // Initialize
instance.\n    this.init();\n};\nwindow['MaterialSlider'] =
MaterialSlider;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialSlider.prototype.Constant_ = {};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialSlider.prototype.CssClasses_ = {\n    IE_CONTAINER:
'mdl-slider__ie-container',\n    SLIDER_CONTAINER:
'mdl-slider__container',\n    BACKGROUND_FLEX:
'mdl-slider__background-flex',\n    BACKGROUND_LOWER:
'mdl-slider__background-lower',\n    BACKGROUND_UPPER:
'mdl-slider__background-upper',\n    IS_LOWEST_VALUE:
'is-lowest-value',\n    IS_UPGRADED:
'is-upgraded'\n};\n/**\n   * Handle input on element.\n   *\n   *
@param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialSlider.prototype.onInput_ = function (event) {\n   
this.updateValueStyles_();\n};\n/**\n   * Handle change on element.\n   *\n
  * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialSlider.prototype.onChange_ = function (event) {\n   
this.updateValueStyles_();\n};\n/**\n   * Handle mouseup on element.\n  
*\n   * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n   
event.target.blur();\n};\n/**\n   * Handle mousedown on container
element.\n   * This handler is purpose is to not require the use to click\n
  * exactly on the 2px slider element, as FireFox seems to be very\n   *
strict about this.\n   *\n   * @param {Event} event The event that fired.\n
  * @private\n   * @suppress {missingProperties}\n  
*/\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n  
 // If this click is not on the parent element (but rather some child)\n   
// ignore. It may still bubble up.\n    if (event.target !==
this.element_.parentElement) {\n        return;\n    }\n    // Discard the
original event and create a new event that\n    // is on the slider
element.\n    event.preventDefault();\n    var newEvent = new
MouseEvent('mousedown', {\n        target: event.target,\n       
buttons: event.buttons,\n        clientX: event.clientX,\n        clientY:
this.element_.getBoundingClientRect().y\n    });\n   
this.element_.dispatchEvent(newEvent);\n};\n/**\n   * Handle updating of
values.\n   *\n   * @private\n  
*/\nMaterialSlider.prototype.updateValueStyles_ = function () {\n    //
Calculate and apply percentages to div structure behind slider.\n    var
fraction = (this.element_.value - this.element_.min) / (this.element_.max -
this.element_.min);\n    if (fraction === 0) {\n       
this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n    } else
{\n       
this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n    }\n 
  if (!this.isIE_) {\n        this.backgroundLower_.style.flex =
fraction;\n        this.backgroundLower_.style.webkitFlex = fraction;\n    
   this.backgroundUpper_.style.flex = 1 - fraction;\n       
this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n    }\n};\n//
Public methods.\n/**\n   * Disable slider.\n   *\n   * @public\n  
*/\nMaterialSlider.prototype.disable = function () {\n   
this.element_.disabled =
true;\n};\nMaterialSlider.prototype['disable'] =
MaterialSlider.prototype.disable;\n/**\n   * Enable slider.\n   *\n   *
@public\n   */\nMaterialSlider.prototype.enable = function () {\n   
this.element_.disabled =
false;\n};\nMaterialSlider.prototype['enable'] =
MaterialSlider.prototype.enable;\n/**\n   * Update slider value.\n   *\n  
* @param {number} value The value to which to set the control (optional).\n
  * @public\n   */\nMaterialSlider.prototype.change = function (value) {\n 
  if (typeof value !== 'undefined') {\n       
this.element_.value = value;\n    }\n   
this.updateValueStyles_();\n};\nMaterialSlider.prototype['change']
= MaterialSlider.prototype.change;\n/**\n   * Initialize element.\n  
*/\nMaterialSlider.prototype.init = function () {\n    if (this.element_)
{\n        if (this.isIE_) {\n            // Since we need to specify a
very large height in IE due to\n            // implementation limitations,
we add a parent here that trims it down to\n            // a reasonable
size.\n            var containerIE =
document.createElement('div');\n           
containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n           
this.element_.parentElement.insertBefore(containerIE, this.element_);\n    
       this.element_.parentElement.removeChild(this.element_);\n           
containerIE.appendChild(this.element_);\n        } else {\n            //
For non-IE browsers, we need a div structure that sits behind the\n        
   // slider and allows us to style the left and right sides of it with\n  
         // different colors.\n            var container =
document.createElement('div');\n           
container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n           
this.element_.parentElement.insertBefore(container, this.element_);\n      
     this.element_.parentElement.removeChild(this.element_);\n           
container.appendChild(this.element_);\n            var backgroundFlex =
document.createElement('div');\n           
backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n          
 container.appendChild(backgroundFlex);\n            this.backgroundLower_
= document.createElement('div');\n           
this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n  
         backgroundFlex.appendChild(this.backgroundLower_);\n           
this.backgroundUpper_ = document.createElement('div');\n         
  this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n
           backgroundFlex.appendChild(this.backgroundUpper_);\n        }\n 
      this.boundInputHandler = this.onInput_.bind(this);\n       
this.boundChangeHandler = this.onChange_.bind(this);\n       
this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n       
this.boundContainerMouseDownHandler =
this.onContainerMouseDown_.bind(this);\n       
this.element_.addEventListener('input',
this.boundInputHandler);\n       
this.element_.addEventListener('change',
this.boundChangeHandler);\n       
this.element_.addEventListener('mouseup',
this.boundMouseUpHandler);\n       
this.element_.parentElement.addEventListener('mousedown',
this.boundContainerMouseDownHandler);\n        this.updateValueStyles_();\n
       this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Downgrade the component\n   *\n   * @private\n  
*/\nMaterialSlider.prototype.mdlDowngrade_ = function () {\n   
this.element_.removeEventListener('input',
this.boundInputHandler);\n   
this.element_.removeEventListener('change',
this.boundChangeHandler);\n   
this.element_.removeEventListener('mouseup',
this.boundMouseUpHandler);\n   
this.element_.parentElement.removeEventListener('mousedown',
this.boundContainerMouseDownHandler);\n};\n/**\n   * Public alias for the
downgrade method.\n   *\n   * @public\n  
*/\nMaterialSlider.prototype.mdlDowngrade =
MaterialSlider.prototype.mdlDowngrade_;\nMaterialSlider.prototype['mdlDowngrade']
= MaterialSlider.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialSlider,\n   
classAsString: 'MaterialSlider',\n    cssClass:
'mdl-js-slider',\n    widget: true\n});\n/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Spinner MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@param {HTMLElement} element The element that will be upgraded.\n   *
@constructor\n   */\nvar MaterialSpinner = function
MaterialSpinner(element) {\n    this.element_ = element;\n    // Initialize
instance.\n    this.init();\n};\nwindow['MaterialSpinner'] =
MaterialSpinner;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4
};\n/**\n   * Store strings for class names defined by this component that
are used in\n   * JavaScript. This allows us to simply change it in one
place should we\n   * decide to modify at a later date.\n   *\n   * @enum
{string}\n   * @private\n   */\nMaterialSpinner.prototype.CssClasses_ = {\n
   MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n   
MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n   
MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n   
MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n   
MDL_SPINNER_LEFT: 'mdl-spinner__left',\n    MDL_SPINNER_RIGHT:
'mdl-spinner__right'\n};\n/**\n   * Auxiliary method to create a
spinner layer.\n   *\n   * @param {number} index Index of the layer to be
created.\n   * @public\n   */\nMaterialSpinner.prototype.createLayer =
function (index) {\n    var layer =
document.createElement('div');\n   
layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n   
layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' +
index);\n    var leftClipper = document.createElement('div');\n  
 leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n 
  leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n    var
gapPatch = document.createElement('div');\n   
gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n    var
rightClipper = document.createElement('div');\n   
rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n 
  rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n    var
circleOwners = [\n        leftClipper,\n        gapPatch,\n       
rightClipper\n    ];\n    for (var i = 0; i < circleOwners.length; i++)
{\n        var circle = document.createElement('div');\n       
circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n       
circleOwners[i].appendChild(circle);\n    }\n   
layer.appendChild(leftClipper);\n    layer.appendChild(gapPatch);\n   
layer.appendChild(rightClipper);\n   
this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer']
= MaterialSpinner.prototype.createLayer;\n/**\n   * Stops the spinner
animation.\n   * Public method for users who need to stop the spinner for
any reason.\n   *\n   * @public\n   */\nMaterialSpinner.prototype.stop =
function () {\n   
this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop']
= MaterialSpinner.prototype.stop;\n/**\n   * Starts the spinner
animation.\n   * Public method for users who need to manually start the
spinner for any reason\n   * (instead of just adding the
'is-active' class to their markup).\n   *\n   * @public\n  
*/\nMaterialSpinner.prototype.start = function () {\n   
this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start']
= MaterialSpinner.prototype.start;\n/**\n   * Initialize element.\n  
*/\nMaterialSpinner.prototype.init = function () {\n    if (this.element_)
{\n        for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT;
i++) {\n            this.createLayer(i);\n        }\n       
this.element_.classList.add('is-upgraded');\n    }\n};\n// The
component registers itself. It can assume componentHandler is available\n//
in the global scope.\ncomponentHandler.register({\n    constructor:
MaterialSpinner,\n    classAsString: 'MaterialSpinner',\n   
cssClass: 'mdl-js-spinner',\n    widget: true\n});\n/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Checkbox MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialSwitch = function MaterialSwitch(element) {\n
   this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialSwitch'] =
MaterialSwitch;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n  
* Store strings for class names defined by this component that are used
in\n   * JavaScript. This allows us to simply change it in one place should
we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   *
@private\n   */\nMaterialSwitch.prototype.CssClasses_ = {\n    INPUT:
'mdl-switch__input',\n    TRACK: 'mdl-switch__track',\n
   THUMB: 'mdl-switch__thumb',\n    FOCUS_HELPER:
'mdl-switch__focus-helper',\n    RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER:
'mdl-switch__ripple-container',\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n   
IS_FOCUSED: 'is-focused',\n    IS_DISABLED:
'is-disabled',\n    IS_CHECKED: 'is-checked'\n};\n/**\n
  * Handle change of state.\n   *\n   * @param {Event} event The event that
fired.\n   * @private\n   */\nMaterialSwitch.prototype.onChange_ = function
(event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus of
element.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n  
 this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle lost focus of element.\n   *\n   * @param {Event} event The event
that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onBlur_ =
function (event) {\n   
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n  
* @private\n   */\nMaterialSwitch.prototype.onMouseUp_ = function (event)
{\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   *
@private\n   */\nMaterialSwitch.prototype.updateClasses_ = function () {\n 
  this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add
blur.\n   *\n   * @private\n   */\nMaterialSwitch.prototype.blur_ =
function () {\n    // TODO: figure out why there's a focus event being
fired after our blur,\n    // so that we can avoid this hack.\n   
window.setTimeout(function () {\n        this.inputElement_.blur();\n   
}.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n 
 * Check the components disabled state.\n   *\n   * @public\n  
*/\nMaterialSwitch.prototype.checkDisabled = function () {\n    if
(this.inputElement_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialSwitch.prototype['checkDisabled'] =
MaterialSwitch.prototype.checkDisabled;\n/**\n   * Check the components
toggled state.\n   *\n   * @public\n  
*/\nMaterialSwitch.prototype.checkToggleState = function () {\n    if
(this.inputElement_.checked) {\n       
this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n  
     this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n   
}\n};\nMaterialSwitch.prototype['checkToggleState'] =
MaterialSwitch.prototype.checkToggleState;\n/**\n   * Disable switch.\n  
*\n   * @public\n   */\nMaterialSwitch.prototype.disable = function () {\n 
  this.inputElement_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] =
MaterialSwitch.prototype.disable;\n/**\n   * Enable switch.\n   *\n   *
@public\n   */\nMaterialSwitch.prototype.enable = function () {\n   
this.inputElement_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] =
MaterialSwitch.prototype.enable;\n/**\n   * Activate switch.\n   *\n   *
@public\n   */\nMaterialSwitch.prototype.on = function () {\n   
this.inputElement_.checked = true;\n   
this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] =
MaterialSwitch.prototype.on;\n/**\n   * Deactivate switch.\n   *\n   *
@public\n   */\nMaterialSwitch.prototype.off = function () {\n   
this.inputElement_.checked = false;\n   
this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] =
MaterialSwitch.prototype.off;\n/**\n   * Initialize element.\n  
*/\nMaterialSwitch.prototype.init = function () {\n    if (this.element_)
{\n        this.inputElement_ = this.element_.querySelector('.' +
this.CssClasses_.INPUT);\n        var track =
document.createElement('div');\n       
track.classList.add(this.CssClasses_.TRACK);\n        var thumb =
document.createElement('div');\n       
thumb.classList.add(this.CssClasses_.THUMB);\n        var focusHelper =
document.createElement('span');\n       
focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n       
thumb.appendChild(focusHelper);\n       
this.element_.appendChild(track);\n       
this.element_.appendChild(thumb);\n        this.boundMouseUpHandler =
this.onMouseUp_.bind(this);\n        if
(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n     
      this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n
           this.rippleContainerElement_ =
document.createElement('span');\n           
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n
          
this.rippleContainerElement_.addEventListener('mouseup',
this.boundMouseUpHandler);\n            var ripple =
document.createElement('span');\n           
ripple.classList.add(this.CssClasses_.RIPPLE);\n           
this.rippleContainerElement_.appendChild(ripple);\n           
this.element_.appendChild(this.rippleContainerElement_);\n        }\n      
 this.boundChangeHandler = this.onChange_.bind(this);\n       
this.boundFocusHandler = this.onFocus_.bind(this);\n       
this.boundBlurHandler = this.onBlur_.bind(this);\n       
this.inputElement_.addEventListener('change',
this.boundChangeHandler);\n       
this.inputElement_.addEventListener('focus',
this.boundFocusHandler);\n       
this.inputElement_.addEventListener('blur',
this.boundBlurHandler);\n       
this.element_.addEventListener('mouseup',
this.boundMouseUpHandler);\n        this.updateClasses_();\n       
this.element_.classList.add('is-upgraded');\n    }\n};\n/**\n   *
Downgrade the component.\n   *\n   * @private\n  
*/\nMaterialSwitch.prototype.mdlDowngrade_ = function () {\n    if
(this.rippleContainerElement_) {\n       
this.rippleContainerElement_.removeEventListener('mouseup',
this.boundMouseUpHandler);\n    }\n   
this.inputElement_.removeEventListener('change',
this.boundChangeHandler);\n   
this.inputElement_.removeEventListener('focus',
this.boundFocusHandler);\n   
this.inputElement_.removeEventListener('blur',
this.boundBlurHandler);\n   
this.element_.removeEventListener('mouseup',
this.boundMouseUpHandler);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.mdlDowngrade =
MaterialSwitch.prototype.mdlDowngrade_;\nMaterialSwitch.prototype['mdlDowngrade']
= MaterialSwitch.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialSwitch,\n   
classAsString: 'MaterialSwitch',\n    cssClass:
'mdl-js-switch',\n    widget: true\n});\n/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for Tabs
MDL component.\n   * Implements MDL component design pattern defined at:\n 
 * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialTabs = function MaterialTabs(element) {\n   
// Stores the HTML element.\n    this.element_ = element;\n    //
Initialize instance.\n   
this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n  
* Store constants in one place so they can be updated easily.\n   *\n   *
@enum {string}\n   * @private\n   */\nMaterialTabs.prototype.Constant_ =
{};\n/**\n   * Store strings for class names defined by this component that
are used in\n   * JavaScript. This allows us to simply change it in one
place should we\n   * decide to modify at a later date.\n   *\n   * @enum
{string}\n   * @private\n   */\nMaterialTabs.prototype.CssClasses_ = {\n   
TAB_CLASS: 'mdl-tabs__tab',\n    PANEL_CLASS:
'mdl-tabs__panel',\n    ACTIVE_CLASS: 'is-active',\n   
UPGRADED_CLASS: 'is-upgraded',\n    MDL_JS_RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    MDL_RIPPLE_CONTAINER:
'mdl-tabs__ripple-container',\n    MDL_RIPPLE:
'mdl-ripple',\n    MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events'\n};\n/**\n   * Handle
clicks to a tabs component\n   *\n   * @private\n  
*/\nMaterialTabs.prototype.initTabs_ = function () {\n    if
(this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT))
{\n       
this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n
   }\n    // Select element tabs, document panels\n    this.tabs_ =
this.element_.querySelectorAll('.' +
this.CssClasses_.TAB_CLASS);\n    this.panels_ =
this.element_.querySelectorAll('.' +
this.CssClasses_.PANEL_CLASS);\n    // Create new tabs for each tab
element\n    for (var i = 0; i < this.tabs_.length; i++) {\n        new
MaterialTab(this.tabs_[i], this);\n    }\n   
this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n  
* Reset tab state, dropping active classes\n   *\n   * @private\n  
*/\nMaterialTabs.prototype.resetTabState_ = function () {\n    for (var k =
0; k < this.tabs_.length; k++) {\n       
this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n   
}\n};\n/**\n   * Reset panel state, droping active classes\n   *\n   *
@private\n   */\nMaterialTabs.prototype.resetPanelState_ = function () {\n 
  for (var j = 0; j < this.panels_.length; j++) {\n       
this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n   
}\n};\n/**\n   * Initialize element.\n   */\nMaterialTabs.prototype.init =
function () {\n    if (this.element_) {\n        this.initTabs_();\n   
}\n};\n/**\n   * Constructor for an individual tab.\n   *\n   *
@constructor\n   * @param {HTMLElement} tab The HTML element for the tab.\n
  * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n 
 */\nfunction MaterialTab(tab, ctx) {\n    if (tab) {\n        if
(ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n
           var rippleContainer =
document.createElement('span');\n           
rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n     
     
rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n     
      var ripple = document.createElement('span');\n           
ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n           
rippleContainer.appendChild(ripple);\n           
tab.appendChild(rippleContainer);\n        }\n       
tab.addEventListener('click', function (e) {\n           
e.preventDefault();\n            var href =
tab.href.split('#')[1];\n            var panel =
ctx.element_.querySelector('#' + href);\n           
ctx.resetTabState_();\n            ctx.resetPanelState_();\n           
tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n           
panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n        });\n   
}\n}\n// The component registers itself. It can assume componentHandler is
available\n// in the global scope.\ncomponentHandler.register({\n   
constructor: MaterialTabs,\n    classAsString: 'MaterialTabs',\n 
  cssClass: 'mdl-js-tabs'\n});\n/**\n * @license\n * Copyright
2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache
License, Version 2.0 (the \"License\");\n * you may not use this
file except in compliance with the License.\n * You may obtain a copy of
the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n
*\n * Unless required by applicable law or agreed to in writing, software\n
* distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Textfield MDL component.\n   * Implements MDL component
design pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialTextfield = function
MaterialTextfield(element) {\n    this.element_ = element;\n   
this.maxRows = this.Constant_.NO_MAX_ROWS;\n    // Initialize instance.\n  
 this.init();\n};\nwindow['MaterialTextfield'] =
MaterialTextfield;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialTextfield.prototype.Constant_ = {\n    NO_MAX_ROWS: -1,\n   
MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialTextfield.prototype.CssClasses_ = {\n    LABEL:
'mdl-textfield__label',\n    INPUT:
'mdl-textfield__input',\n    IS_DIRTY: 'is-dirty',\n   
IS_FOCUSED: 'is-focused',\n    IS_DISABLED:
'is-disabled',\n    IS_INVALID: 'is-invalid',\n   
IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Handle input being
entered.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialTextfield.prototype.onKeyDown_ = function (event)
{\n    var currentRowCount =
event.target.value.split('\\n').length;\n    if (event.keyCode
=== 13) {\n        if (currentRowCount >= this.maxRows) {\n           
event.preventDefault();\n        }\n    }\n};\n/**\n   * Handle focus.\n  
*\n   * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialTextfield.prototype.onFocus_ = function (event) {\n   
this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n
  * @private\n   */\nMaterialTextfield.prototype.onBlur_ = function (event)
{\n   
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle class updates.\n   *\n   * @private\n  
*/\nMaterialTextfield.prototype.updateClasses_ = function () {\n   
this.checkDisabled();\n    this.checkValidity();\n   
this.checkDirty();\n};\n// Public methods.\n/**\n   * Check the disabled
state and update field accordingly.\n   *\n   * @public\n  
*/\nMaterialTextfield.prototype.checkDisabled = function () {\n    if
(this.input_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialTextfield.prototype['checkDisabled'] =
MaterialTextfield.prototype.checkDisabled;\n/**\n   * Check the validity
state and update field accordingly.\n   *\n   * @public\n  
*/\nMaterialTextfield.prototype.checkValidity = function () {\n    if
(this.input_.validity) {\n        if (this.input_.validity.valid) {\n      
     this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n       
} else {\n           
this.element_.classList.add(this.CssClasses_.IS_INVALID);\n        }\n   
}\n};\nMaterialTextfield.prototype['checkValidity'] =
MaterialTextfield.prototype.checkValidity;\n/**\n   * Check the dirty state
and update field accordingly.\n   *\n   * @public\n  
*/\nMaterialTextfield.prototype.checkDirty = function () {\n    if
(this.input_.value && this.input_.value.length > 0) {\n       
this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n    } else {\n    
   this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n   
}\n};\nMaterialTextfield.prototype['checkDirty'] =
MaterialTextfield.prototype.checkDirty;\n/**\n   * Disable text field.\n  
*\n   * @public\n   */\nMaterialTextfield.prototype.disable = function ()
{\n    this.input_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialTextfield.prototype['disable']
= MaterialTextfield.prototype.disable;\n/**\n   * Enable text field.\n  
*\n   * @public\n   */\nMaterialTextfield.prototype.enable = function ()
{\n    this.input_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialTextfield.prototype['enable']
= MaterialTextfield.prototype.enable;\n/**\n   * Update text field value.\n
  *\n   * @param {string} value The value to which to set the control
(optional).\n   * @public\n   */\nMaterialTextfield.prototype.change =
function (value) {\n    this.input_.value = value || '';\n   
this.updateClasses_();\n};\nMaterialTextfield.prototype['change']
= MaterialTextfield.prototype.change;\n/**\n   * Initialize element.\n  
*/\nMaterialTextfield.prototype.init = function () {\n    if
(this.element_) {\n        this.label_ =
this.element_.querySelector('.' + this.CssClasses_.LABEL);\n     
  this.input_ = this.element_.querySelector('.' +
this.CssClasses_.INPUT);\n        if (this.input_) {\n            if
(this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n          
     this.maxRows =
parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),
10);\n                if (isNaN(this.maxRows)) {\n                   
this.maxRows = this.Constant_.NO_MAX_ROWS;\n                }\n           
}\n            this.boundUpdateClassesHandler =
this.updateClasses_.bind(this);\n            this.boundFocusHandler =
this.onFocus_.bind(this);\n            this.boundBlurHandler =
this.onBlur_.bind(this);\n           
this.input_.addEventListener('input',
this.boundUpdateClassesHandler);\n           
this.input_.addEventListener('focus', this.boundFocusHandler);\n 
          this.input_.addEventListener('blur',
this.boundBlurHandler);\n            if (this.maxRows !==
this.Constant_.NO_MAX_ROWS) {\n                // TODO: This should handle
pasting multi line text.\n                // Currently doesn't.\n     
          this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n         
      this.input_.addEventListener('keydown',
this.boundKeyDownHandler);\n            }\n            var invalid =
this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n           
this.updateClasses_();\n           
this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n            if
(invalid) {\n               
this.element_.classList.add(this.CssClasses_.IS_INVALID);\n            }\n 
      }\n    }\n};\n/**\n   * Downgrade the component\n   *\n   *
@private\n   */\nMaterialTextfield.prototype.mdlDowngrade_ = function ()
{\n    this.input_.removeEventListener('input',
this.boundUpdateClassesHandler);\n   
this.input_.removeEventListener('focus',
this.boundFocusHandler);\n   
this.input_.removeEventListener('blur', this.boundBlurHandler);\n
   if (this.boundKeyDownHandler) {\n       
this.input_.removeEventListener('keydown',
this.boundKeyDownHandler);\n    }\n};\n/**\n   * Public alias for the
downgrade method.\n   *\n   * @public\n  
*/\nMaterialTextfield.prototype.mdlDowngrade =
MaterialTextfield.prototype.mdlDowngrade_;\nMaterialTextfield.prototype['mdlDowngrade']
= MaterialTextfield.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialTextfield,\n 
  classAsString: 'MaterialTextfield',\n    cssClass:
'mdl-js-textfield',\n    widget: true\n});\n/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Tooltip MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialTooltip = function MaterialTooltip(element)
{\n    this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialTooltip'] =
MaterialTooltip;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialTooltip.prototype.Constant_ = {};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialTooltip.prototype.CssClasses_ = { IS_ACTIVE:
'is-active' };\n/**\n   * Handle mouseenter for tooltip.\n   *\n 
 * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n   
event.stopPropagation();\n    var props =
event.target.getBoundingClientRect();\n    var left = props.left +
props.width / 2;\n    var marginLeft = -1 * (this.element_.offsetWidth /
2);\n    if (left + marginLeft < 0) {\n        this.element_.style.left
= 0;\n        this.element_.style.marginLeft = 0;\n    } else {\n       
this.element_.style.left = left + 'px';\n       
this.element_.style.marginLeft = marginLeft + 'px';\n    }\n   
this.element_.style.top = props.top + props.height + 10 + 'px';\n
   this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n   
window.addEventListener('scroll', this.boundMouseLeaveHandler,
false);\n    window.addEventListener('touchmove',
this.boundMouseLeaveHandler, false);\n};\n/**\n   * Handle mouseleave for
tooltip.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialTooltip.prototype.handleMouseLeave_ = function
(event) {\n    event.stopPropagation();\n   
this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n   
window.removeEventListener('scroll',
this.boundMouseLeaveHandler);\n   
window.removeEventListener('touchmove',
this.boundMouseLeaveHandler, false);\n};\n/**\n   * Initialize element.\n  
*/\nMaterialTooltip.prototype.init = function () {\n    if (this.element_)
{\n        var forElId = this.element_.getAttribute('for');\n    
   if (forElId) {\n            this.forElement_ =
document.getElementById(forElId);\n        }\n        if (this.forElement_)
{\n            // Tabindex needs to be set for `blur` events to be
emitted\n            if
(!this.forElement_.hasAttribute('tabindex')) {\n               
this.forElement_.setAttribute('tabindex', '0');\n      
     }\n            this.boundMouseEnterHandler =
this.handleMouseEnter_.bind(this);\n            this.boundMouseLeaveHandler
= this.handleMouseLeave_.bind(this);\n           
this.forElement_.addEventListener('mouseenter',
this.boundMouseEnterHandler, false);\n           
this.forElement_.addEventListener('click',
this.boundMouseEnterHandler, false);\n           
this.forElement_.addEventListener('blur',
this.boundMouseLeaveHandler);\n           
this.forElement_.addEventListener('touchstart',
this.boundMouseEnterHandler, false);\n           
this.forElement_.addEventListener('mouseleave',
this.boundMouseLeaveHandler);\n        }\n    }\n};\n/**\n   * Downgrade
the component\n   *\n   * @private\n  
*/\nMaterialTooltip.prototype.mdlDowngrade_ = function () {\n    if
(this.forElement_) {\n       
this.forElement_.removeEventListener('mouseenter',
this.boundMouseEnterHandler, false);\n       
this.forElement_.removeEventListener('click',
this.boundMouseEnterHandler, false);\n       
this.forElement_.removeEventListener('touchstart',
this.boundMouseEnterHandler, false);\n       
this.forElement_.removeEventListener('mouseleave',
this.boundMouseLeaveHandler);\n    }\n};\n/**\n   * Public alias for the
downgrade method.\n   *\n   * @public\n  
*/\nMaterialTooltip.prototype.mdlDowngrade =
MaterialTooltip.prototype.mdlDowngrade_;\nMaterialTooltip.prototype['mdlDowngrade']
= MaterialTooltip.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialTooltip,\n   
classAsString: 'MaterialTooltip',\n    cssClass:
'mdl-tooltip'\n});\n/**\n * @license\n * Copyright 2015 Google
Inc. All Rights Reserved.\n *\n * Licensed under the Apache License,
Version 2.0 (the \"License\");\n * you may not use this file
except in compliance with the License.\n * You may obtain a copy of the
License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *
Unless required by applicable law or agreed to in writing, software\n *
distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Layout MDL component.\n   * Implements MDL component design
pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialLayout = function MaterialLayout(element) {\n
   this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialLayout'] =
MaterialLayout;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialLayout.prototype.Constant_ = {\n    MAX_WIDTH:
'(max-width: 1024px)',\n    TAB_SCROLL_PIXELS: 100,\n   
MENU_ICON: 'menu',\n    CHEVRON_LEFT: 'chevron_left',\n
   CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n   * Modes.\n   *\n  
* @enum {number}\n   * @private\n   */\nMaterialLayout.prototype.Mode_ =
{\n    STANDARD: 0,\n    SEAMED: 1,\n    WATERFALL: 2,\n    SCROLL:
3\n};\n/**\n   * Store strings for class names defined by this component
that are used in\n   * JavaScript. This allows us to simply change it in
one place should we\n   * decide to modify at a later date.\n   *\n   *
@enum {string}\n   * @private\n   */\nMaterialLayout.prototype.CssClasses_
= {\n    CONTAINER: 'mdl-layout__container',\n    HEADER:
'mdl-layout__header',\n    DRAWER:
'mdl-layout__drawer',\n    CONTENT:
'mdl-layout__content',\n    DRAWER_BTN:
'mdl-layout__drawer-button',\n    ICON:
'material-icons',\n    JS_RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_CONTAINER:
'mdl-layout__tab-ripple-container',\n    RIPPLE:
'mdl-ripple',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    HEADER_SEAMED:
'mdl-layout__header--seamed',\n    HEADER_WATERFALL:
'mdl-layout__header--waterfall',\n    HEADER_SCROLL:
'mdl-layout__header--scroll',\n    FIXED_HEADER:
'mdl-layout--fixed-header',\n    OBFUSCATOR:
'mdl-layout__obfuscator',\n    TAB_BAR:
'mdl-layout__tab-bar',\n    TAB_CONTAINER:
'mdl-layout__tab-bar-container',\n    TAB:
'mdl-layout__tab',\n    TAB_BAR_BUTTON:
'mdl-layout__tab-bar-button',\n    TAB_BAR_LEFT_BUTTON:
'mdl-layout__tab-bar-left-button',\n    TAB_BAR_RIGHT_BUTTON:
'mdl-layout__tab-bar-right-button',\n    PANEL:
'mdl-layout__tab-panel',\n    HAS_DRAWER:
'has-drawer',\n    HAS_TABS: 'has-tabs',\n   
HAS_SCROLLING_HEADER: 'has-scrolling-header',\n   
CASTING_SHADOW: 'is-casting-shadow',\n    IS_COMPACT:
'is-compact',\n    IS_SMALL_SCREEN:
'is-small-screen',\n    IS_DRAWER_OPEN: 'is-visible',\n
   IS_ACTIVE: 'is-active',\n    IS_UPGRADED:
'is-upgraded',\n    IS_ANIMATING: 'is-animating',\n   
ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n   
ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n   *
Handles scrolling on the content.\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n    if
(this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n       
return;\n    }\n    if (this.content_.scrollTop > 0 &&
!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n       
this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n       
this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n       
this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n    } else if
(this.content_.scrollTop <= 0 &&
this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n       
this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n       
this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n       
this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n   
}\n};\n/**\n   * Handles changes in screen size.\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n    if
(this.screenSizeMediaQuery_.matches) {\n       
this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n    } else
{\n       
this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n       
// Collapse drawer (if any) when moving to a large screen size.\n        if
(this.drawer_) {\n           
this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n          
 this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n     
  }\n    }\n};\n/**\n   * Handles toggling of the drawer.\n   *\n   *
@private\n   */\nMaterialLayout.prototype.drawerToggleHandler_ = function
() {\n    this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n
  
this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n};\n/**\n
  * Handles (un)setting the `is-animating` class\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n 
  this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n 
 * Handles expanding the header on click\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.headerClickHandler_ = function () {\n    if
(this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n       
this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n       
this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n   
}\n};\n/**\n   * Reset tab state, dropping active classes\n   *\n   *
@private\n   */\nMaterialLayout.prototype.resetTabState_ = function
(tabBar) {\n    for (var k = 0; k < tabBar.length; k++) {\n       
tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n    }\n};\n/**\n  
* Reset panel state, droping active classes\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n   
for (var j = 0; j < panels.length; j++) {\n       
panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n    }\n};\n/**\n  
* Initialize element.\n   */\nMaterialLayout.prototype.init = function ()
{\n    if (this.element_) {\n        var container =
document.createElement('div');\n       
container.classList.add(this.CssClasses_.CONTAINER);\n       
this.element_.parentElement.insertBefore(container, this.element_);\n      
 this.element_.parentElement.removeChild(this.element_);\n       
container.appendChild(this.element_);\n        var directChildren =
this.element_.childNodes;\n        var numChildren =
directChildren.length;\n        for (var c = 0; c < numChildren; c++)
{\n            var child = directChildren[c];\n            if
(child.classList &&
child.classList.contains(this.CssClasses_.HEADER)) {\n               
this.header_ = child;\n            }\n            if (child.classList
&& child.classList.contains(this.CssClasses_.DRAWER)) {\n          
     this.drawer_ = child;\n            }\n            if (child.classList
&& child.classList.contains(this.CssClasses_.CONTENT)) {\n         
      this.content_ = child;\n            }\n        }\n        if
(this.header_) {\n            this.tabBar_ =
this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n    
   }\n        var mode = this.Mode_.STANDARD;\n        if (this.header_)
{\n            if
(this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n      
         mode = this.Mode_.SEAMED;\n            } else if
(this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n   
            mode = this.Mode_.WATERFALL;\n               
this.header_.addEventListener('transitionend',
this.headerTransitionEndHandler_.bind(this));\n               
this.header_.addEventListener('click',
this.headerClickHandler_.bind(this));\n            } else if
(this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n      
         mode = this.Mode_.SCROLL;\n               
container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n          
 }\n            if (mode === this.Mode_.STANDARD) {\n               
this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n             
  if (this.tabBar_) {\n                   
this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n             
  }\n            } else if (mode === this.Mode_.SEAMED || mode ===
this.Mode_.SCROLL) {\n               
this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n          
     if (this.tabBar_) {\n                   
this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n          
     }\n            } else if (mode === this.Mode_.WATERFALL) {\n          
     // Add and remove shadows depending on scroll position.\n             
  // Also add/remove auxiliary class for styling of the compact version
of\n                // the header.\n               
this.content_.addEventListener('scroll',
this.contentScrollHandler_.bind(this));\n               
this.contentScrollHandler_();\n            }\n        }\n        // Add
drawer toggling button to our layout, if we have an openable drawer.\n     
  if (this.drawer_) {\n            var drawerButton =
this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n
           if (!drawerButton) {\n                drawerButton =
document.createElement('div');\n               
drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n               
var drawerButtonIcon = document.createElement('i');\n            
   drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n               
drawerButtonIcon.textContent = this.Constant_.MENU_ICON;\n               
drawerButton.appendChild(drawerButtonIcon);\n            }\n            if
(this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n    
           //If drawer has ON_LARGE_SCREEN class then add it to the drawer
toggle button as well.\n               
drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n           
} else if
(this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n    
           //If drawer has ON_SMALL_SCREEN class then add it to the drawer
toggle button as well.\n               
drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n           
}\n            drawerButton.addEventListener('click',
this.drawerToggleHandler_.bind(this));\n            // Add a class if the
layout has a drawer, for altering the left padding.\n            // Adds
the HAS_DRAWER to the elements since this.header_ may or may\n           
// not be present.\n           
this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n            //
If we have a fixed header, add the button to the header rather than\n      
     // the layout.\n            if
(this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n      
         this.header_.insertBefore(drawerButton,
this.header_.firstChild);\n            } else {\n               
this.element_.insertBefore(drawerButton, this.content_);\n            }\n  
         var obfuscator = document.createElement('div');\n       
    obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n           
this.element_.appendChild(obfuscator);\n           
obfuscator.addEventListener('click',
this.drawerToggleHandler_.bind(this));\n            this.obfuscator_ =
obfuscator;\n        }\n        // Keep an eye on screen size, and
add/remove auxiliary class for styling\n        // of small screens.\n     
  this.screenSizeMediaQuery_ =
window.matchMedia(this.Constant_.MAX_WIDTH);\n       
this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n
       this.screenSizeHandler_();\n        // Initialize tabs, if any.\n   
    if (this.header_ && this.tabBar_) {\n           
this.element_.classList.add(this.CssClasses_.HAS_TABS);\n            var
tabContainer = document.createElement('div');\n           
tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n           
this.header_.insertBefore(tabContainer, this.tabBar_);\n           
this.header_.removeChild(this.tabBar_);\n            var leftButton =
document.createElement('div');\n           
leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n           
leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n          
 var leftButtonIcon = document.createElement('i');\n           
leftButtonIcon.classList.add(this.CssClasses_.ICON);\n           
leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n           
leftButton.appendChild(leftButtonIcon);\n           
leftButton.addEventListener('click', function () {\n             
  this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n           
}.bind(this));\n            var rightButton =
document.createElement('div');\n           
rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n           
rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n        
   var rightButtonIcon = document.createElement('i');\n          
 rightButtonIcon.classList.add(this.CssClasses_.ICON);\n           
rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n           
rightButton.appendChild(rightButtonIcon);\n           
rightButton.addEventListener('click', function () {\n            
   this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n          
 }.bind(this));\n            tabContainer.appendChild(leftButton);\n       
    tabContainer.appendChild(this.tabBar_);\n           
tabContainer.appendChild(rightButton);\n            // Add and remove
buttons depending on scroll position.\n            var tabScrollHandler =
function () {\n                if (this.tabBar_.scrollLeft > 0) {\n     
              leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n      
         } else {\n                   
leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n               
}\n                if (this.tabBar_.scrollLeft <
this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n                   
rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n                }
else {\n                   
rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n               
}\n            }.bind(this);\n           
this.tabBar_.addEventListener('scroll', tabScrollHandler);\n     
      tabScrollHandler();\n            if
(this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n   
           
this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n       
    }\n            // Select element tabs, document panels\n            var
tabs = this.tabBar_.querySelectorAll('.' +
this.CssClasses_.TAB);\n            var panels =
this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n  
         // Create new tabs for each tab element\n            for (var i =
0; i < tabs.length; i++) {\n                new
MaterialLayoutTab(tabs[i], tabs, panels, this);\n            }\n        }\n
       this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Constructor for an individual tab.\n   *\n   *
@constructor\n   * @param {HTMLElement} tab The HTML element for the tab.\n
  * @param {!Array<HTMLElement>} tabs Array with HTML elements for
all tabs.\n   * @param {!Array<HTMLElement>} panels Array with HTML
elements for all panels.\n   * @param {MaterialLayout} layout The
MaterialLayout object that owns the tab.\n   */\nfunction
MaterialLayoutTab(tab, tabs, panels, layout) {\n    if
(layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT))
{\n        var rippleContainer =
document.createElement('span');\n       
rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n      
 rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n     
  var ripple = document.createElement('span');\n       
ripple.classList.add(layout.CssClasses_.RIPPLE);\n       
rippleContainer.appendChild(ripple);\n       
tab.appendChild(rippleContainer);\n    }\n   
tab.addEventListener('click', function (e) {\n       
e.preventDefault();\n        var href = tab.href.split('#')[1];\n
       var panel = layout.content_.querySelector('#' + href);\n  
     layout.resetTabState_(tabs);\n       
layout.resetPanelState_(panels);\n       
tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n       
panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n    });\n}\n// The
component registers itself. It can assume componentHandler is available\n//
in the global scope.\ncomponentHandler.register({\n    constructor:
MaterialLayout,\n    classAsString: 'MaterialLayout',\n   
cssClass: 'mdl-js-layout'\n});\n/**\n * @license\n * Copyright
2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache
License, Version 2.0 (the \"License\");\n * you may not use this
file except in compliance with the License.\n * You may obtain a copy of
the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n
*\n * Unless required by applicable law or agreed to in writing, software\n
* distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Data Table Card MDL component.\n   * Implements MDL
component design pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialDataTable = function
MaterialDataTable(element) {\n    this.element_ = element;\n    //
Initialize instance.\n   
this.init();\n};\nwindow['MaterialDataTable'] =
MaterialDataTable;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialDataTable.prototype.Constant_ = {};\n/**\n   * Store strings
for class names defined by this component that are used in\n   *
JavaScript. This allows us to simply change it in one place should we\n   *
decide to modify at a later date.\n   *\n   * @enum {string}\n   *
@private\n   */\nMaterialDataTable.prototype.CssClasses_ = {\n   
DATA_TABLE: 'mdl-data-table',\n    SELECTABLE:
'mdl-data-table--selectable',\n    SELECT_ELEMENT:
'mdl-data-table__select',\n    IS_SELECTED:
'is-selected',\n    IS_UPGRADED:
'is-upgraded'\n};\n/**\n   * Generates and returns a function
that toggles the selection state of a\n   * single row (or multiple
rows).\n   *\n   * @param {Element} checkbox Checkbox that toggles the
selection state.\n   * @param {HTMLElement} row Row to toggle when checkbox
changes.\n   * @param {(Array<Object>|NodeList)=} opt_rows Rows to
toggle when checkbox changes.\n   * @private\n  
*/\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row,
opt_rows) {\n    if (row) {\n        return function () {\n            if
(checkbox.checked) {\n               
row.classList.add(this.CssClasses_.IS_SELECTED);\n            } else {\n   
            row.classList.remove(this.CssClasses_.IS_SELECTED);\n          
 }\n        }.bind(this);\n    }\n    if (opt_rows) {\n        return
function () {\n            var i;\n            var el;\n            if
(checkbox.checked) {\n                for (i = 0; i < opt_rows.length;
i++) {\n                    el =
opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n
                   el['MaterialCheckbox'].check();\n             
      opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n           
    }\n            } else {\n                for (i = 0; i <
opt_rows.length; i++) {\n                    el =
opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n
                   el['MaterialCheckbox'].uncheck();\n           
        opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n      
         }\n            }\n        }.bind(this);\n    }\n};\n/**\n   *
Creates a checkbox for a single or or multiple rows and hooks up the\n   *
event handling.\n   *\n   * @param {HTMLElement} row Row to toggle when
checkbox changes.\n   * @param {(Array<Object>|NodeList)=} opt_rows
Rows to toggle when checkbox changes.\n   * @private\n  
*/\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows)
{\n    var label = document.createElement('label');\n    var
labelClasses = [\n        'mdl-checkbox',\n       
'mdl-js-checkbox',\n        'mdl-js-ripple-effect',\n  
     this.CssClasses_.SELECT_ELEMENT\n    ];\n    label.className =
labelClasses.join(' ');\n    var checkbox =
document.createElement('input');\n    checkbox.type =
'checkbox';\n   
checkbox.classList.add('mdl-checkbox__input');\n   
checkbox.addEventListener('change', this.selectRow_(checkbox,
row, opt_rows));\n    label.appendChild(checkbox);\n   
componentHandler.upgradeElement(label, 'MaterialCheckbox');\n   
return label;\n};\n/**\n   * Initialize element.\n  
*/\nMaterialDataTable.prototype.init = function () {\n    if
(this.element_) {\n        var firstHeader =
this.element_.querySelector('th');\n        var rows =
this.element_.querySelector('tbody').querySelectorAll('tr');\n
       if (this.element_.classList.contains(this.CssClasses_.SELECTABLE))
{\n            var th = document.createElement('th');\n          
 var headerCheckbox = this.createCheckbox_(null, rows);\n           
th.appendChild(headerCheckbox);\n           
firstHeader.parentElement.insertBefore(th, firstHeader);\n            for
(var i = 0; i < rows.length; i++) {\n                var firstCell =
rows[i].querySelector('td');\n                if (firstCell) {\n 
                  var td = document.createElement('td');\n       
            var rowCheckbox = this.createCheckbox_(rows[i]);\n             
      td.appendChild(rowCheckbox);\n                   
rows[i].insertBefore(td, firstCell);\n                }\n            }\n   
    }\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n
   }\n};\n// The component registers itself. It can assume componentHandler
is available\n// in the global scope.\ncomponentHandler.register({\n   
constructor: MaterialDataTable,\n    classAsString:
'MaterialDataTable',\n    cssClass:
'mdl-js-data-table'\n});\n/**\n * @license\n * Copyright 2015
Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License,
Version 2.0 (the \"License\");\n * you may not use this file
except in compliance with the License.\n * You may obtain a copy of the
License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *
Unless required by applicable law or agreed to in writing, software\n *
distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Ripple MDL component.\n   * Implements MDL component design
pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialRipple = function MaterialRipple(element) {\n
   this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialRipple'] =
MaterialRipple;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialRipple.prototype.Constant_ = {\n    INITIAL_SCALE:
'scale(0.0001, 0.0001)',\n    INITIAL_SIZE: '1px',\n   
INITIAL_OPACITY: '0.4',\n    FINAL_OPACITY: '0',\n   
FINAL_SCALE: ''\n};\n/**\n   * Store strings for class names
defined by this component that are used in\n   * JavaScript. This allows us
to simply change it in one place should we\n   * decide to modify at a
later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialRipple.prototype.CssClasses_ = {\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE_EFFECT_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE:
'mdl-ripple',\n    IS_ANIMATING: 'is-animating',\n   
IS_VISIBLE: 'is-visible'\n};\n/**\n   * Handle mouse / finger
down on element.\n   *\n   * @param {Event} event The event that fired.\n  
* @private\n   */\nMaterialRipple.prototype.downHandler_ = function (event)
{\n    if (!this.rippleElement_.style.width &&
!this.rippleElement_.style.height) {\n        var rect =
this.element_.getBoundingClientRect();\n        this.boundHeight =
rect.height;\n        this.boundWidth = rect.width;\n       
this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height *
rect.height) * 2 + 2;\n        this.rippleElement_.style.width =
this.rippleSize_ + 'px';\n       
this.rippleElement_.style.height = this.rippleSize_ + 'px';\n   
}\n    this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n   
if (event.type === 'mousedown' &&
this.ignoringMouseDown_) {\n        this.ignoringMouseDown_ = false;\n    }
else {\n        if (event.type === 'touchstart') {\n           
this.ignoringMouseDown_ = true;\n        }\n        var frameCount =
this.getFrameCount();\n        if (frameCount > 0) {\n           
return;\n        }\n        this.setFrameCount(1);\n        var bound =
event.currentTarget.getBoundingClientRect();\n        var x;\n        var
y;\n        // Check if we are handling a keyboard click.\n        if
(event.clientX === 0 && event.clientY === 0) {\n            x =
Math.round(bound.width / 2);\n            y = Math.round(bound.height /
2);\n        } else {\n            var clientX = event.clientX ?
event.clientX : event.touches[0].clientX;\n            var clientY =
event.clientY ? event.clientY : event.touches[0].clientY;\n            x =
Math.round(clientX - bound.left);\n            y = Math.round(clientY -
bound.top);\n        }\n        this.setRippleXY(x, y);\n       
this.setRippleStyles(true);\n       
window.requestAnimationFrame(this.animFrameHandler.bind(this));\n   
}\n};\n/**\n   * Handle mouse / finger up on element.\n   *\n   * @param
{Event} event The event that fired.\n   * @private\n  
*/\nMaterialRipple.prototype.upHandler_ = function (event) {\n    //
Don't fire for the artificial \"mouseup\" generated by a
double-click.\n    if (event && event.detail !== 2) {\n       
this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n    }\n
   // Allow a repaint to occur before removing this class, so the
animation\n    // shows for tap events, which seem to trigger a mouseup too
soon after\n    // mousedown.\n    window.setTimeout(function () {\n       
this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n   
}.bind(this), 0);\n};\n/**\n   * Initialize element.\n  
*/\nMaterialRipple.prototype.init = function () {\n    if (this.element_)
{\n        var recentering =
this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n       
if
(!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS))
{\n            this.rippleElement_ =
this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n    
       this.frameCount_ = 0;\n            this.rippleSize_ = 0;\n          
 this.x_ = 0;\n            this.y_ = 0;\n            // Touch start
produces a compat mouse down event, which would cause a\n            //
second ripples. To avoid that, we use this property to ignore the first\n  
         // mouse down after a touch start.\n           
this.ignoringMouseDown_ = false;\n            this.boundDownHandler =
this.downHandler_.bind(this);\n           
this.element_.addEventListener('mousedown',
this.boundDownHandler);\n           
this.element_.addEventListener('touchstart',
this.boundDownHandler);\n            this.boundUpHandler =
this.upHandler_.bind(this);\n           
this.element_.addEventListener('mouseup', this.boundUpHandler);\n
           this.element_.addEventListener('mouseleave',
this.boundUpHandler);\n           
this.element_.addEventListener('touchend',
this.boundUpHandler);\n           
this.element_.addEventListener('blur', this.boundUpHandler);\n   
        /**\n         * Getter for frameCount_.\n         * @return
{number} the frame count.\n         */\n            this.getFrameCount =
function () {\n                return this.frameCount_;\n            };\n  
         /**\n         * Setter for frameCount_.\n         * @param
{number} fC the frame count.\n         */\n            this.setFrameCount =
function (fC) {\n                this.frameCount_ = fC;\n            };\n  
         /**\n         * Getter for rippleElement_.\n         * @return
{Element} the ripple element.\n         */\n           
this.getRippleElement = function () {\n                return
this.rippleElement_;\n            };\n            /**\n         * Sets the
ripple X and Y coordinates.\n         * @param  {number} newX the new X
coordinate\n         * @param  {number} newY the new Y coordinate\n        
*/\n            this.setRippleXY = function (newX, newY) {\n               
this.x_ = newX;\n                this.y_ = newY;\n            };\n         
  /**\n         * Sets the ripple styles.\n         * @param  {boolean}
start whether or not this is the start frame.\n         */\n           
this.setRippleStyles = function (start) {\n                if
(this.rippleElement_ !== null) {\n                    var
transformString;\n                    var scale;\n                    var
size;\n                    var offset = 'translate(' + this.x_ +
'px, ' + this.y_ + 'px)';\n                    if
(start) {\n                        scale = this.Constant_.INITIAL_SCALE;\n 
                      size = this.Constant_.INITIAL_SIZE;\n                
   } else {\n                        scale = this.Constant_.FINAL_SCALE;\n 
                      size = this.rippleSize_ + 'px';\n          
             if (recentering) {\n                            offset =
'translate(' + this.boundWidth / 2 + 'px, ' +
this.boundHeight / 2 + 'px)';\n                        }\n       
            }\n                    transformString = 'translate(-50%,
-50%) ' + offset + scale;\n                   
this.rippleElement_.style.webkitTransform = transformString;\n             
      this.rippleElement_.style.msTransform = transformString;\n           
        this.rippleElement_.style.transform = transformString;\n           
        if (start) {\n                       
this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n     
              } else {\n                       
this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n        
           }\n                }\n            };\n            /**\n        
* Handles an animation frame.\n         */\n           
this.animFrameHandler = function () {\n                if
(this.frameCount_-- > 0) {\n                   
window.requestAnimationFrame(this.animFrameHandler.bind(this));\n          
     } else {\n                    this.setRippleStyles(false);\n          
     }\n            };\n        }\n    }\n};\n/**\n   * Downgrade the
component\n   *\n   * @private\n  
*/\nMaterialRipple.prototype.mdlDowngrade_ = function () {\n   
this.element_.removeEventListener('mousedown',
this.boundDownHandler);\n   
this.element_.removeEventListener('touchstart',
this.boundDownHandler);\n   
this.element_.removeEventListener('mouseup',
this.boundUpHandler);\n   
this.element_.removeEventListener('mouseleave',
this.boundUpHandler);\n   
this.element_.removeEventListener('touchend',
this.boundUpHandler);\n   
this.element_.removeEventListener('blur',
this.boundUpHandler);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n   */\nMaterialRipple.prototype.mdlDowngrade =
MaterialRipple.prototype.mdlDowngrade_;\nMaterialRipple.prototype['mdlDowngrade']
= MaterialRipple.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialRipple,\n   
classAsString: 'MaterialRipple',\n    cssClass:
'mdl-js-ripple-effect',\n    widget:
false\n});\n}());\n","/**\n * @license\n * Copyright 2015 Google
Inc. All Rights Reserved.\n *\n * Licensed under the Apache License,
Version 2.0 (the \"License\");\n * you may not use this file
except in compliance with the License.\n * You may obtain a copy of the
License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *
Unless required by applicable law or agreed to in writing, software\n *
distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n\n/**\n * A
component handler interface using the revealing module design pattern.\n *
More details on this design pattern here:\n *
https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author
Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the
componentHandler interface, for closure documentation and\n// static
verification.\nvar componentHandler = {\n  /**\n   * Searches existing DOM
for elements of our component type and upgrades them\n   * if they have not
already been upgraded.\n   *\n   * @param {string=} optJsClass the
programatic name of the element class we\n   * need to create a new
instance of.\n   * @param {string=} optCssClass the name of the CSS class
elements of this\n   * type will have.\n   */\n  upgradeDom:
function(optJsClass, optCssClass) {},\n  /**\n   * Upgrades a specific
element rather than all in the DOM.\n   *\n   * @param {!Element} element
The element we wish to upgrade.\n   * @param {string=} optJsClass Optional
name of the class we want to upgrade\n   * the element to.\n   */\n 
upgradeElement: function(element, optJsClass) {},\n  /**\n   * Upgrades a
specific list of elements rather than all in the DOM.\n   *\n   * @param
{!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements\n   *
The elements we wish to upgrade.\n   */\n  upgradeElements:
function(elements) {},\n  /**\n   * Upgrades all registered components
found in the current DOM. This is\n   * automatically called on window
load.\n   */\n  upgradeAllRegistered: function() {},\n  /**\n   * Allows
user to be alerted to any upgrades that are performed for a given\n   *
component type\n   *\n   * @param {string} jsClass The class name of the
MDL component we wish\n   * to hook into for any upgrades performed.\n   *
@param {function(!HTMLElement)} callback The function to call upon an\n   *
upgrade. This function should expect 1 parameter - the HTMLElement which\n 
 * got upgraded.\n   */\n  registerUpgradedCallback: function(jsClass,
callback) {},\n  /**\n   * Registers a class for future use and attempts to
upgrade existing DOM.\n   *\n   * @param
{componentHandler.ComponentConfigPublic} config the registration
configuration\n   */\n  register: function(config) {},\n  /**\n   *
Downgrade either a given node, an array of nodes, or a NodeList.\n   *\n  
* @param {!Node|!Array<!Node>|!NodeList} nodes\n   */\n 
downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function()
{\n  'use strict';\n\n  /** @type
{!Array<componentHandler.ComponentConfig>} */\n  var
registeredComponents_ = [];\n\n  /** @type
{!Array<componentHandler.Component>} */\n  var createdComponents_ =
[];\n\n  var downgradeMethod_ = 'mdlDowngrade';\n  var
componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n 
/**\n   * Searches registered components for a class we are interested in
using.\n   * Optionally replaces a match with passed object if specified.\n
  *\n   * @param {string} name The name of a class we want to use.\n   *
@param {componentHandler.ComponentConfig=} optReplace Optional object to
replace match with.\n   * @return {!Object|boolean}\n   * @private\n   */\n
 function findRegisteredClass_(name, optReplace) {\n    for (var i = 0; i
< registeredComponents_.length; i++) {\n      if
(registeredComponents_[i].className === name) {\n        if (typeof
optReplace !== 'undefined') {\n          registeredComponents_[i]
= optReplace;\n        }\n        return registeredComponents_[i];\n     
}\n    }\n    return false;\n  }\n\n  /**\n   * Returns an array of the
classNames of the upgraded classes on the element.\n   *\n   * @param
{!Element} element The element to fetch data from.\n   * @return
{!Array<string>}\n   * @private\n   */\n  function
getUpgradedListOfElement_(element) {\n    var dataUpgraded =
element.getAttribute('data-upgraded');\n    // Use
`['']` as default value to conform the `,name,name...` style.\n  
 return dataUpgraded === null ? [''] :
dataUpgraded.split(',');\n  }\n\n  /**\n   * Returns true if the
given element has already been upgraded for the given\n   * class.\n   *\n 
 * @param {!Element} element The element we want to check.\n   * @param
{string} jsClass The class to check for.\n   * @returns {boolean}\n   *
@private\n   */\n  function isElementUpgraded_(element, jsClass) {\n    var
upgradedList = getUpgradedListOfElement_(element);\n    return
upgradedList.indexOf(jsClass) !== -1;\n  }\n\n  /**\n   * Searches existing
DOM for elements of our component type and upgrades them\n   * if they have
not already been upgraded.\n   *\n   * @param {string=} optJsClass the
programatic name of the element class we\n   * need to create a new
instance of.\n   * @param {string=} optCssClass the name of the CSS class
elements of this\n   * type will have.\n   */\n  function
upgradeDomInternal(optJsClass, optCssClass) {\n    if (typeof optJsClass
=== 'undefined' &&\n        typeof optCssClass ===
'undefined') {\n      for (var i = 0; i <
registeredComponents_.length; i++) {\n       
upgradeDomInternal(registeredComponents_[i].className,\n           
registeredComponents_[i].cssClass);\n      }\n    } else {\n      var
jsClass = /** @type {string} */ (optJsClass);\n      if (typeof optCssClass
=== 'undefined') {\n        var registeredClass =
findRegisteredClass_(jsClass);\n        if (registeredClass) {\n         
optCssClass = registeredClass.cssClass;\n        }\n      }\n\n      var
elements = document.querySelectorAll('.' + optCssClass);\n     
for (var n = 0; n < elements.length; n++) {\n       
upgradeElementInternal(elements[n], jsClass);\n      }\n    }\n  }\n\n 
/**\n   * Upgrades a specific element rather than all in the DOM.\n   *\n  
* @param {!Element} element The element we wish to upgrade.\n   * @param
{string=} optJsClass Optional name of the class we want to upgrade\n   *
the element to.\n   */\n  function upgradeElementInternal(element,
optJsClass) {\n    // Verify argument type.\n    if (!(typeof element ===
'object' && element instanceof Element)) {\n      throw
new Error('Invalid argument provided to upgrade MDL element.');\n
   }\n    var upgradedList = getUpgradedListOfElement_(element);\n    var
classesToUpgrade = [];\n    // If jsClass is not provided scan the
registered components to find the\n    // ones matching the element's
CSS classList.\n    if (!optJsClass) {\n      var classList =
element.classList;\n      registeredComponents_.forEach(function(component)
{\n        // Match CSS & Not to be upgraded & Not upgraded.\n     
  if (classList.contains(component.cssClass) &&\n           
classesToUpgrade.indexOf(component) === -1 &&\n           
!isElementUpgraded_(element, component.className)) {\n         
classesToUpgrade.push(component);\n        }\n      });\n    } else if
(!isElementUpgraded_(element, optJsClass)) {\n     
classesToUpgrade.push(findRegisteredClass_(optJsClass));\n    }\n\n    //
Upgrade the element for each classes.\n    for (var i = 0, n =
classesToUpgrade.length, registeredClass; i < n; i++) {\n     
registeredClass = classesToUpgrade[i];\n      if (registeredClass) {\n     
  // Mark element as upgraded.\n       
upgradedList.push(registeredClass.className);\n       
element.setAttribute('data-upgraded',
upgradedList.join(','));\n        var instance = new
registeredClass.classConstructor(element);\n       
instance[componentConfigProperty_] = registeredClass;\n       
createdComponents_.push(instance);\n        // Call any callbacks the user
has registered with this component type.\n        for (var j = 0, m =
registeredClass.callbacks.length; j < m; j++) {\n         
registeredClass.callbacks[j](element);\n        }\n\n        if
(registeredClass.widget) {\n          // Assign per element instance for
control over API\n          element[registeredClass.className] =
instance;\n        }\n      } else {\n        throw new Error(\n         
'Unable to find a registered component for the given class.');\n 
    }\n\n      var ev = document.createEvent('Events');\n     
ev.initEvent('mdl-componentupgraded', true, true);\n     
element.dispatchEvent(ev);\n    }\n  }\n\n  /**\n   * Upgrades a specific
list of elements rather than all in the DOM.\n   *\n   * @param
{!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements\n   *
The elements we wish to upgrade.\n   */\n  function
upgradeElementsInternal(elements) {\n    if (!Array.isArray(elements)) {\n 
    if (typeof elements.item === 'function') {\n        elements
= Array.prototype.slice.call(/** @type {Array} */ (elements));\n      }
else {\n        elements = [elements];\n      }\n    }\n    for (var i = 0,
n = elements.length, element; i < n; i++) {\n      element =
elements[i];\n      if (element instanceof HTMLElement) {\n       
upgradeElementInternal(element);\n        if (element.children.length >
0) {\n          upgradeElementsInternal(element.children);\n        }\n    
 }\n    }\n  }\n\n  /**\n   * Registers a class for future use and attempts
to upgrade existing DOM.\n   *\n   * @param
{componentHandler.ComponentConfigPublic} config\n   */\n  function
registerInternal(config) {\n    // In order to support both
Closure-compiled and uncompiled code accessing\n    // this method, we need
to allow for both the dot and array syntax for\n    // property access.
You'll therefore see the `foo.bar || foo['bar']`\n    //
pattern repeated across this method.\n    var widgetMissing = (typeof
config.widget === 'undefined' &&\n        typeof
config['widget'] === 'undefined');\n    var widget =
true;\n\n    if (!widgetMissing) {\n      widget = config.widget ||
config['widget'];\n    }\n\n    var newConfig = /** @type
{componentHandler.ComponentConfig} */ ({\n      classConstructor:
config.constructor || config['constructor'],\n      className:
config.classAsString || config['classAsString'],\n      cssClass:
config.cssClass || config['cssClass'],\n      widget: widget,\n  
   callbacks: []\n    });\n\n   
registeredComponents_.forEach(function(item) {\n      if (item.cssClass ===
newConfig.cssClass) {\n        throw new Error('The provided cssClass
has already been registered: ' + item.cssClass);\n      }\n      if
(item.className === newConfig.className) {\n        throw new
Error('The provided className has already been registered');\n   
  }\n    });\n\n    if (config.constructor.prototype\n       
.hasOwnProperty(componentConfigProperty_)) {\n      throw new Error(\n     
    'MDL component classes must not have ' +
componentConfigProperty_ +\n          ' defined as a
property.');\n    }\n\n    var found =
findRegisteredClass_(config.classAsString, newConfig);\n\n    if (!found)
{\n      registeredComponents_.push(newConfig);\n    }\n  }\n\n  /**\n   *
Allows user to be alerted to any upgrades that are performed for a given\n 
 * component type\n   *\n   * @param {string} jsClass The class name of the
MDL component we wish\n   * to hook into for any upgrades performed.\n   *
@param {function(!HTMLElement)} callback The function to call upon an\n   *
upgrade. This function should expect 1 parameter - the HTMLElement which\n 
 * got upgraded.\n   */\n  function
registerUpgradedCallbackInternal(jsClass, callback) {\n    var regClass =
findRegisteredClass_(jsClass);\n    if (regClass) {\n     
regClass.callbacks.push(callback);\n    }\n  }\n\n  /**\n   * Upgrades all
registered components found in the current DOM. This is\n   * automatically
called on window load.\n   */\n  function upgradeAllRegisteredInternal()
{\n    for (var n = 0; n < registeredComponents_.length; n++) {\n     
upgradeDomInternal(registeredComponents_[n].className);\n    }\n  }\n\n 
/**\n   * Finds a created component by a given DOM node.\n   *\n   * @param
{!Node} node\n   * @return {*}\n   */\n  function
findCreatedComponentByNodeInternal(node) {\n    for (var n = 0; n <
createdComponents_.length; n++) {\n      var component =
createdComponents_[n];\n      if (component.element_ === node) {\n       
return component;\n      }\n    }\n  }\n\n  /**\n   * Check the component
for the downgrade method.\n   * Execute if found.\n   * Remove component
from createdComponents list.\n   *\n   * @param {*} component\n   */\n 
function deconstructComponentInternal(component) {\n    if (component
&&\n        component[componentConfigProperty_]\n         
.classConstructor.prototype\n          .hasOwnProperty(downgradeMethod_))
{\n      component[downgradeMethod_]();\n      var componentIndex =
createdComponents_.indexOf(component);\n     
createdComponents_.splice(componentIndex, 1);\n\n      var upgrades =
component.element_.getAttribute('data-upgraded').split(',');\n
     var componentPlace = upgrades.indexOf(\n         
component[componentConfigProperty_].classAsString);\n     
upgrades.splice(componentPlace, 1);\n     
component.element_.setAttribute('data-upgraded',
upgrades.join(','));\n\n      var ev =
document.createEvent('Events');\n     
ev.initEvent('mdl-componentdowngraded', true, true);\n     
component.element_.dispatchEvent(ev);\n    }\n  }\n\n  /**\n   * Downgrade
either a given node, an array of nodes, or a NodeList.\n   *\n   * @param
{!Node|!Array<!Node>|!NodeList} nodes\n   */\n  function
downgradeNodesInternal(nodes) {\n    /**\n     * Auxiliary function to
downgrade a single node.\n     * @param  {!Node} node the node to be
downgraded\n     */\n    var downgradeNode = function(node) {\n     
deconstructComponentInternal(findCreatedComponentByNodeInternal(node));\n  
 };\n    if (nodes instanceof Array || nodes instanceof NodeList) {\n     
for (var n = 0; n < nodes.length; n++) {\n       
downgradeNode(nodes[n]);\n      }\n    } else if (nodes instanceof Node)
{\n      downgradeNode(nodes);\n    } else {\n      throw new
Error('Invalid argument provided to downgrade MDL nodes.');\n   
}\n  }\n\n  // Now return the functions that should be made public with
their publicly\n  // facing names...\n  return {\n    upgradeDom:
upgradeDomInternal,\n    upgradeElement: upgradeElementInternal,\n   
upgradeElements: upgradeElementsInternal,\n    upgradeAllRegistered:
upgradeAllRegisteredInternal,\n    registerUpgradedCallback:
registerUpgradedCallbackInternal,\n    register: registerInternal,\n   
downgradeElements: downgradeNodesInternal\n  };\n})();\n\n/**\n * Describes
the type of a registered component type managed by\n * componentHandler.
Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n *  
constructor: Function,\n *   classAsString: string,\n *   cssClass:
string,\n *   widget: (string|boolean|undefined)\n * }}\n
*/\ncomponentHandler.ComponentConfigPublic;  // jshint ignore:line\n\n/**\n
* Describes the type of a registered component type managed by\n *
componentHandler. Provided for benefit of the Closure compiler.\n *\n *
@typedef {{\n *   constructor: !Function,\n *   className: string,\n *  
cssClass: string,\n *   widget: (string|boolean),\n *   callbacks:
!Array<function(!HTMLElement)>\n * }}\n
*/\ncomponentHandler.ComponentConfig;  // jshint ignore:line\n\n/**\n *
Created component (i.e., upgraded element) type as managed by\n *
componentHandler. Provided for benefit of the Closure compiler.\n *\n *
@typedef {{\n *   element_: !HTMLElement,\n *   className: string,\n *  
classAsString: string,\n *   cssClass: string,\n *   widget: string\n *
}}\n */\ncomponentHandler.Component;  // jshint ignore:line\n\n// Export
all symbols, for the benefit of Closure compiler.\n// No effect on
uncompiled code.\ncomponentHandler['upgradeDom'] =
componentHandler.upgradeDom;\ncomponentHandler['upgradeElement']
=
componentHandler.upgradeElement;\ncomponentHandler['upgradeElements']
=
componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered']
=\n   
componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback']
=\n   
componentHandler.registerUpgradedCallback;\ncomponentHandler['register']
=
componentHandler.register;\ncomponentHandler['downgradeElements']
= componentHandler.downgradeElements;\nwindow.componentHandler =
componentHandler;\nwindow['componentHandler'] =
componentHandler;\n\nwindow.addEventListener('load', function()
{\n  'use strict';\n\n  /**\n   * Performs a \"Cutting the
mustard\" test. If the browser supports the features\n   * tested,
adds a mdl-js class to the <html> element. It then upgrades all MDL\n
  * components requiring JavaScript.\n   */\n  if ('classList' in
document.createElement('div') &&\n     
'querySelector' in document &&\n     
'addEventListener' in window && Array.prototype.forEach)
{\n    document.documentElement.classList.add('mdl-js');\n   
componentHandler.upgradeAllRegistered();\n  } else {\n    /**\n     * Dummy
function to avoid JS errors.\n     */\n    componentHandler.upgradeElement
= function() {};\n    /**\n     * Dummy function to avoid JS errors.\n    
*/\n    componentHandler.register = function() {};\n 
}\n});\n","/**\n * @license\n * Copyright 2015 Google Inc. All
Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0
(the \"License\");\n * you may not use this file except in
compliance with the License.\n * You may obtain a copy of the License at\n
*\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless
required by applicable law or agreed to in writing, software\n *
distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Tabs MDL component.\n   * Implements MDL component design
pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialTabs = function MaterialTabs(element) {\n   
// Stores the HTML element.\n    this.element_ = element;\n    //
Initialize instance.\n   
this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n  
* Store constants in one place so they can be updated easily.\n   *\n   *
@enum {string}\n   * @private\n   */\nMaterialTabs.prototype.Constant_ =
{};\n/**\n   * Store strings for class names defined by this component that
are used in\n   * JavaScript. This allows us to simply change it in one
place should we\n   * decide to modify at a later date.\n   *\n   * @enum
{string}\n   * @private\n   */\nMaterialTabs.prototype.CssClasses_ = {\n   
TAB_CLASS: 'mdl-tabs__tab',\n    PANEL_CLASS:
'mdl-tabs__panel',\n    ACTIVE_CLASS: 'is-active',\n   
UPGRADED_CLASS: 'is-upgraded',\n    MDL_JS_RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    MDL_RIPPLE_CONTAINER:
'mdl-tabs__ripple-container',\n    MDL_RIPPLE:
'mdl-ripple',\n    MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events'\n};\n/**\n   * Handle
clicks to a tabs component\n   *\n   * @private\n  
*/\nMaterialTabs.prototype.initTabs_ = function () {\n    if
(this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT))
{\n       
this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n
   }\n    // Select element tabs, document panels\n    this.tabs_ =
this.element_.querySelectorAll('.' +
this.CssClasses_.TAB_CLASS);\n    this.panels_ =
this.element_.querySelectorAll('.' +
this.CssClasses_.PANEL_CLASS);\n    // Create new tabs for each tab
element\n    for (var i = 0; i < this.tabs_.length; i++) {\n        new
MaterialTab(this.tabs_[i], this);\n    }\n   
this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n  
* Reset tab state, dropping active classes\n   *\n   * @private\n  
*/\nMaterialTabs.prototype.resetTabState_ = function () {\n    for (var k =
0; k < this.tabs_.length; k++) {\n       
this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n   
}\n};\n/**\n   * Reset panel state, droping active classes\n   *\n   *
@private\n   */\nMaterialTabs.prototype.resetPanelState_ = function () {\n 
  for (var j = 0; j < this.panels_.length; j++) {\n       
this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n   
}\n};\n/**\n   * Initialize element.\n   */\nMaterialTabs.prototype.init =
function () {\n    if (this.element_) {\n        this.initTabs_();\n   
}\n};\n/**\n   * Constructor for an individual tab.\n   *\n   *
@constructor\n   * @param {HTMLElement} tab The HTML element for the tab.\n
  * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n 
 */\nfunction MaterialTab(tab, ctx) {\n    if (tab) {\n        if
(ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n
           var rippleContainer =
document.createElement('span');\n           
rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n     
     
rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n     
      var ripple = document.createElement('span');\n           
ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n           
rippleContainer.appendChild(ripple);\n           
tab.appendChild(rippleContainer);\n        }\n       
tab.addEventListener('click', function (e) {\n           
e.preventDefault();\n            var href =
tab.href.split('#')[1];\n            var panel =
ctx.element_.querySelector('#' + href);\n           
ctx.resetTabState_();\n            ctx.resetPanelState_();\n           
tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n           
panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n        });\n   
}\n}\n// The component registers itself. It can assume componentHandler is
available\n// in the global scope.\ncomponentHandler.register({\n   
constructor: MaterialTabs,\n    classAsString: 'MaterialTabs',\n 
  cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for Layout
MDL component.\n   * Implements MDL component design pattern defined at:\n 
 * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialLayout = function MaterialLayout(element) {\n
   this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialLayout'] =
MaterialLayout;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialLayout.prototype.Constant_ = {\n    MAX_WIDTH:
'(max-width: 1024px)',\n    TAB_SCROLL_PIXELS: 100,\n   
MENU_ICON: 'menu',\n    CHEVRON_LEFT: 'chevron_left',\n
   CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n   * Modes.\n   *\n  
* @enum {number}\n   * @private\n   */\nMaterialLayout.prototype.Mode_ =
{\n    STANDARD: 0,\n    SEAMED: 1,\n    WATERFALL: 2,\n    SCROLL:
3\n};\n/**\n   * Store strings for class names defined by this component
that are used in\n   * JavaScript. This allows us to simply change it in
one place should we\n   * decide to modify at a later date.\n   *\n   *
@enum {string}\n   * @private\n   */\nMaterialLayout.prototype.CssClasses_
= {\n    CONTAINER: 'mdl-layout__container',\n    HEADER:
'mdl-layout__header',\n    DRAWER:
'mdl-layout__drawer',\n    CONTENT:
'mdl-layout__content',\n    DRAWER_BTN:
'mdl-layout__drawer-button',\n    ICON:
'material-icons',\n    JS_RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_CONTAINER:
'mdl-layout__tab-ripple-container',\n    RIPPLE:
'mdl-ripple',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    HEADER_SEAMED:
'mdl-layout__header--seamed',\n    HEADER_WATERFALL:
'mdl-layout__header--waterfall',\n    HEADER_SCROLL:
'mdl-layout__header--scroll',\n    FIXED_HEADER:
'mdl-layout--fixed-header',\n    OBFUSCATOR:
'mdl-layout__obfuscator',\n    TAB_BAR:
'mdl-layout__tab-bar',\n    TAB_CONTAINER:
'mdl-layout__tab-bar-container',\n    TAB:
'mdl-layout__tab',\n    TAB_BAR_BUTTON:
'mdl-layout__tab-bar-button',\n    TAB_BAR_LEFT_BUTTON:
'mdl-layout__tab-bar-left-button',\n    TAB_BAR_RIGHT_BUTTON:
'mdl-layout__tab-bar-right-button',\n    PANEL:
'mdl-layout__tab-panel',\n    HAS_DRAWER:
'has-drawer',\n    HAS_TABS: 'has-tabs',\n   
HAS_SCROLLING_HEADER: 'has-scrolling-header',\n   
CASTING_SHADOW: 'is-casting-shadow',\n    IS_COMPACT:
'is-compact',\n    IS_SMALL_SCREEN:
'is-small-screen',\n    IS_DRAWER_OPEN: 'is-visible',\n
   IS_ACTIVE: 'is-active',\n    IS_UPGRADED:
'is-upgraded',\n    IS_ANIMATING: 'is-animating',\n   
ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n   
ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n   *
Handles scrolling on the content.\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n    if
(this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n       
return;\n    }\n    if (this.content_.scrollTop > 0 &&
!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n       
this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n       
this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n       
this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n    } else if
(this.content_.scrollTop <= 0 &&
this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n       
this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n       
this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n       
this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n   
}\n};\n/**\n   * Handles changes in screen size.\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n    if
(this.screenSizeMediaQuery_.matches) {\n       
this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n    } else
{\n       
this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n       
// Collapse drawer (if any) when moving to a large screen size.\n        if
(this.drawer_) {\n           
this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n          
 this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n     
  }\n    }\n};\n/**\n   * Handles toggling of the drawer.\n   *\n   *
@private\n   */\nMaterialLayout.prototype.drawerToggleHandler_ = function
() {\n    this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n
  
this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n};\n/**\n
  * Handles (un)setting the `is-animating` class\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n 
  this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n 
 * Handles expanding the header on click\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.headerClickHandler_ = function () {\n    if
(this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n       
this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n       
this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n   
}\n};\n/**\n   * Reset tab state, dropping active classes\n   *\n   *
@private\n   */\nMaterialLayout.prototype.resetTabState_ = function
(tabBar) {\n    for (var k = 0; k < tabBar.length; k++) {\n       
tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n    }\n};\n/**\n  
* Reset panel state, droping active classes\n   *\n   * @private\n  
*/\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n   
for (var j = 0; j < panels.length; j++) {\n       
panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n    }\n};\n/**\n  
* Initialize element.\n   */\nMaterialLayout.prototype.init = function ()
{\n    if (this.element_) {\n        var container =
document.createElement('div');\n       
container.classList.add(this.CssClasses_.CONTAINER);\n       
this.element_.parentElement.insertBefore(container, this.element_);\n      
 this.element_.parentElement.removeChild(this.element_);\n       
container.appendChild(this.element_);\n        var directChildren =
this.element_.childNodes;\n        var numChildren =
directChildren.length;\n        for (var c = 0; c < numChildren; c++)
{\n            var child = directChildren[c];\n            if
(child.classList &&
child.classList.contains(this.CssClasses_.HEADER)) {\n               
this.header_ = child;\n            }\n            if (child.classList
&& child.classList.contains(this.CssClasses_.DRAWER)) {\n          
     this.drawer_ = child;\n            }\n            if (child.classList
&& child.classList.contains(this.CssClasses_.CONTENT)) {\n         
      this.content_ = child;\n            }\n        }\n        if
(this.header_) {\n            this.tabBar_ =
this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n    
   }\n        var mode = this.Mode_.STANDARD;\n        if (this.header_)
{\n            if
(this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n      
         mode = this.Mode_.SEAMED;\n            } else if
(this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n   
            mode = this.Mode_.WATERFALL;\n               
this.header_.addEventListener('transitionend',
this.headerTransitionEndHandler_.bind(this));\n               
this.header_.addEventListener('click',
this.headerClickHandler_.bind(this));\n            } else if
(this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n      
         mode = this.Mode_.SCROLL;\n               
container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n          
 }\n            if (mode === this.Mode_.STANDARD) {\n               
this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n             
  if (this.tabBar_) {\n                   
this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n             
  }\n            } else if (mode === this.Mode_.SEAMED || mode ===
this.Mode_.SCROLL) {\n               
this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n          
     if (this.tabBar_) {\n                   
this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n          
     }\n            } else if (mode === this.Mode_.WATERFALL) {\n          
     // Add and remove shadows depending on scroll position.\n             
  // Also add/remove auxiliary class for styling of the compact version
of\n                // the header.\n               
this.content_.addEventListener('scroll',
this.contentScrollHandler_.bind(this));\n               
this.contentScrollHandler_();\n            }\n        }\n        // Add
drawer toggling button to our layout, if we have an openable drawer.\n     
  if (this.drawer_) {\n            var drawerButton =
this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n
           if (!drawerButton) {\n                drawerButton =
document.createElement('div');\n               
drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n               
var drawerButtonIcon = document.createElement('i');\n            
   drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n               
drawerButtonIcon.textContent = this.Constant_.MENU_ICON;\n               
drawerButton.appendChild(drawerButtonIcon);\n            }\n            if
(this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n    
           //If drawer has ON_LARGE_SCREEN class then add it to the drawer
toggle button as well.\n               
drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n           
} else if
(this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n    
           //If drawer has ON_SMALL_SCREEN class then add it to the drawer
toggle button as well.\n               
drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n           
}\n            drawerButton.addEventListener('click',
this.drawerToggleHandler_.bind(this));\n            // Add a class if the
layout has a drawer, for altering the left padding.\n            // Adds
the HAS_DRAWER to the elements since this.header_ may or may\n           
// not be present.\n           
this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n            //
If we have a fixed header, add the button to the header rather than\n      
     // the layout.\n            if
(this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n      
         this.header_.insertBefore(drawerButton,
this.header_.firstChild);\n            } else {\n               
this.element_.insertBefore(drawerButton, this.content_);\n            }\n  
         var obfuscator = document.createElement('div');\n       
    obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n           
this.element_.appendChild(obfuscator);\n           
obfuscator.addEventListener('click',
this.drawerToggleHandler_.bind(this));\n            this.obfuscator_ =
obfuscator;\n        }\n        // Keep an eye on screen size, and
add/remove auxiliary class for styling\n        // of small screens.\n     
  this.screenSizeMediaQuery_ =
window.matchMedia(this.Constant_.MAX_WIDTH);\n       
this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n
       this.screenSizeHandler_();\n        // Initialize tabs, if any.\n   
    if (this.header_ && this.tabBar_) {\n           
this.element_.classList.add(this.CssClasses_.HAS_TABS);\n            var
tabContainer = document.createElement('div');\n           
tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n           
this.header_.insertBefore(tabContainer, this.tabBar_);\n           
this.header_.removeChild(this.tabBar_);\n            var leftButton =
document.createElement('div');\n           
leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n           
leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n          
 var leftButtonIcon = document.createElement('i');\n           
leftButtonIcon.classList.add(this.CssClasses_.ICON);\n           
leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n           
leftButton.appendChild(leftButtonIcon);\n           
leftButton.addEventListener('click', function () {\n             
  this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n           
}.bind(this));\n            var rightButton =
document.createElement('div');\n           
rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n           
rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n        
   var rightButtonIcon = document.createElement('i');\n          
 rightButtonIcon.classList.add(this.CssClasses_.ICON);\n           
rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n           
rightButton.appendChild(rightButtonIcon);\n           
rightButton.addEventListener('click', function () {\n            
   this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n          
 }.bind(this));\n            tabContainer.appendChild(leftButton);\n       
    tabContainer.appendChild(this.tabBar_);\n           
tabContainer.appendChild(rightButton);\n            // Add and remove
buttons depending on scroll position.\n            var tabScrollHandler =
function () {\n                if (this.tabBar_.scrollLeft > 0) {\n     
              leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n      
         } else {\n                   
leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n               
}\n                if (this.tabBar_.scrollLeft <
this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n                   
rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n                }
else {\n                   
rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n               
}\n            }.bind(this);\n           
this.tabBar_.addEventListener('scroll', tabScrollHandler);\n     
      tabScrollHandler();\n            if
(this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n   
           
this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n       
    }\n            // Select element tabs, document panels\n            var
tabs = this.tabBar_.querySelectorAll('.' +
this.CssClasses_.TAB);\n            var panels =
this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n  
         // Create new tabs for each tab element\n            for (var i =
0; i < tabs.length; i++) {\n                new
MaterialLayoutTab(tabs[i], tabs, panels, this);\n            }\n        }\n
       this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Constructor for an individual tab.\n   *\n   *
@constructor\n   * @param {HTMLElement} tab The HTML element for the tab.\n
  * @param {!Array<HTMLElement>} tabs Array with HTML elements for
all tabs.\n   * @param {!Array<HTMLElement>} panels Array with HTML
elements for all panels.\n   * @param {MaterialLayout} layout The
MaterialLayout object that owns the tab.\n   */\nfunction
MaterialLayoutTab(tab, tabs, panels, layout) {\n    if
(layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT))
{\n        var rippleContainer =
document.createElement('span');\n       
rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n      
 rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n     
  var ripple = document.createElement('span');\n       
ripple.classList.add(layout.CssClasses_.RIPPLE);\n       
rippleContainer.appendChild(ripple);\n       
tab.appendChild(rippleContainer);\n    }\n   
tab.addEventListener('click', function (e) {\n       
e.preventDefault();\n        var href = tab.href.split('#')[1];\n
       var panel = layout.content_.querySelector('#' + href);\n  
     layout.resetTabState_(tabs);\n       
layout.resetPanelState_(panels);\n       
tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n       
panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n    });\n}\n// The
component registers itself. It can assume componentHandler is available\n//
in the global scope.\ncomponentHandler.register({\n    constructor:
MaterialLayout,\n    classAsString: 'MaterialLayout',\n   
cssClass: 'mdl-js-layout'\n});","// Source:
https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n//
Adapted from https://gist.github.com/paulirish/1579671 which derived
from\n//
http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n//
http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n//
requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish,
Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif
(!Date.now) {\n    /**\n   * Date.now polyfill.\n   * @return {number} the
current Date\n   */\n    Date.now = function () {\n        return new
Date().getTime();\n    };\n    Date['now'] = Date.now;\n}\nvar
vendors = [\n    'webkit',\n    'moz'\n];\nfor (var i =
0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n
   var vp = vendors[i];\n    window.requestAnimationFrame = window[vp +
'RequestAnimationFrame'];\n    window.cancelAnimationFrame =
window[vp + 'CancelAnimationFrame'] || window[vp +
'CancelRequestAnimationFrame'];\n   
window['requestAnimationFrame'] = window.requestAnimationFrame;\n
   window['cancelAnimationFrame'] =
window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS
6/.test(window.navigator.userAgent) || !window.requestAnimationFrame ||
!window.cancelAnimationFrame) {\n    var lastTime = 0;\n    /**\n   *
requestAnimationFrame polyfill.\n   * @param  {!Function} callback the
callback function.\n   */\n    window.requestAnimationFrame = function
(callback) {\n        var now = Date.now();\n        var nextTime =
Math.max(lastTime + 16, now);\n        return setTimeout(function () {\n   
        callback(lastTime = nextTime);\n        }, nextTime - now);\n   
};\n    window.cancelAnimationFrame = clearTimeout;\n   
window['requestAnimationFrame'] = window.requestAnimationFrame;\n
   window['cancelAnimationFrame'] =
window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright
2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache
License, Version 2.0 (the \"License\");\n * you may not use this
file except in compliance with the License.\n * You may obtain a copy of
the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n
*\n * Unless required by applicable law or agreed to in writing, software\n
* distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Button MDL component.\n   * Implements MDL component design
pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@param {HTMLElement} element The element that will be upgraded.\n   */\nvar
MaterialButton = function MaterialButton(element) {\n    this.element_ =
element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialButton'] =
MaterialButton;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialButton.prototype.Constant_ = {};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialButton.prototype.CssClasses_ = {\n    RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_CONTAINER:
'mdl-button__ripple-container',\n    RIPPLE:
'mdl-ripple'\n};\n/**\n   * Handle blur of element.\n   *\n   *
@param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialButton.prototype.blurHandler_ = function (event) {\n    if
(event) {\n        this.element_.blur();\n    }\n};\n// Public
methods.\n/**\n   * Disable button.\n   *\n   * @public\n  
*/\nMaterialButton.prototype.disable = function () {\n   
this.element_.disabled =
true;\n};\nMaterialButton.prototype['disable'] =
MaterialButton.prototype.disable;\n/**\n   * Enable button.\n   *\n   *
@public\n   */\nMaterialButton.prototype.enable = function () {\n   
this.element_.disabled =
false;\n};\nMaterialButton.prototype['enable'] =
MaterialButton.prototype.enable;\n/**\n   * Initialize element.\n  
*/\nMaterialButton.prototype.init = function () {\n    if (this.element_)
{\n        if
(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n     
      var rippleContainer = document.createElement('span');\n    
       rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n 
          this.rippleElement_ = document.createElement('span');\n
           this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n   
        rippleContainer.appendChild(this.rippleElement_);\n           
this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n           
this.rippleElement_.addEventListener('mouseup',
this.boundRippleBlurHandler);\n           
this.element_.appendChild(rippleContainer);\n        }\n       
this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n       
this.element_.addEventListener('mouseup',
this.boundButtonBlurHandler);\n       
this.element_.addEventListener('mouseleave',
this.boundButtonBlurHandler);\n    }\n};\n/**\n   * Downgrade the
element.\n   *\n   * @private\n  
*/\nMaterialButton.prototype.mdlDowngrade_ = function () {\n    if
(this.rippleElement_) {\n       
this.rippleElement_.removeEventListener('mouseup',
this.boundRippleBlurHandler);\n    }\n   
this.element_.removeEventListener('mouseup',
this.boundButtonBlurHandler);\n   
this.element_.removeEventListener('mouseleave',
this.boundButtonBlurHandler);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n   */\nMaterialButton.prototype.mdlDowngrade =
MaterialButton.prototype.mdlDowngrade_;\nMaterialButton.prototype['mdlDowngrade']
= MaterialButton.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialButton,\n   
classAsString: 'MaterialButton',\n    cssClass:
'mdl-js-button',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Checkbox MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialCheckbox = function MaterialCheckbox(element)
{\n    this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialCheckbox'] =
MaterialCheckbox;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n 
 * Store strings for class names defined by this component that are used
in\n   * JavaScript. This allows us to simply change it in one place should
we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   *
@private\n   */\nMaterialCheckbox.prototype.CssClasses_ = {\n    INPUT:
'mdl-checkbox__input',\n    BOX_OUTLINE:
'mdl-checkbox__box-outline',\n    FOCUS_HELPER:
'mdl-checkbox__focus-helper',\n    TICK_OUTLINE:
'mdl-checkbox__tick-outline',\n    RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER:
'mdl-checkbox__ripple-container',\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n   
IS_FOCUSED: 'is-focused',\n    IS_DISABLED:
'is-disabled',\n    IS_CHECKED: 'is-checked',\n   
IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Handle change of
state.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialCheckbox.prototype.onChange_ = function (event)
{\n    this.updateClasses_();\n};\n/**\n   * Handle focus of element.\n  
*\n   * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n   
this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle lost focus of element.\n   *\n   * @param {Event} event The event
that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onBlur_ =
function (event) {\n   
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n  
* @private\n   */\nMaterialCheckbox.prototype.onMouseUp_ = function (event)
{\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   *
@private\n   */\nMaterialCheckbox.prototype.updateClasses_ = function ()
{\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   *
Add blur.\n   *\n   * @private\n   */\nMaterialCheckbox.prototype.blur_ =
function () {\n    // TODO: figure out why there's a focus event being
fired after our blur,\n    // so that we can avoid this hack.\n   
window.setTimeout(function () {\n        this.inputElement_.blur();\n   
}.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n 
 * Check the inputs toggle state and update display.\n   *\n   * @public\n 
 */\nMaterialCheckbox.prototype.checkToggleState = function () {\n    if
(this.inputElement_.checked) {\n       
this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n  
     this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n   
}\n};\nMaterialCheckbox.prototype['checkToggleState'] =
MaterialCheckbox.prototype.checkToggleState;\n/**\n   * Check the inputs
disabled state and update display.\n   *\n   * @public\n  
*/\nMaterialCheckbox.prototype.checkDisabled = function () {\n    if
(this.inputElement_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialCheckbox.prototype['checkDisabled'] =
MaterialCheckbox.prototype.checkDisabled;\n/**\n   * Disable checkbox.\n  
*\n   * @public\n   */\nMaterialCheckbox.prototype.disable = function ()
{\n    this.inputElement_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable']
= MaterialCheckbox.prototype.disable;\n/**\n   * Enable checkbox.\n   *\n  
* @public\n   */\nMaterialCheckbox.prototype.enable = function () {\n   
this.inputElement_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable']
= MaterialCheckbox.prototype.enable;\n/**\n   * Check checkbox.\n   *\n   *
@public\n   */\nMaterialCheckbox.prototype.check = function () {\n   
this.inputElement_.checked = true;\n   
this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] =
MaterialCheckbox.prototype.check;\n/**\n   * Uncheck checkbox.\n   *\n   *
@public\n   */\nMaterialCheckbox.prototype.uncheck = function () {\n   
this.inputElement_.checked = false;\n   
this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck']
= MaterialCheckbox.prototype.uncheck;\n/**\n   * Initialize element.\n  
*/\nMaterialCheckbox.prototype.init = function () {\n    if (this.element_)
{\n        this.inputElement_ = this.element_.querySelector('.' +
this.CssClasses_.INPUT);\n        var boxOutline =
document.createElement('span');\n       
boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n        var
tickContainer = document.createElement('span');\n       
tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n        var
tickOutline = document.createElement('span');\n       
tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n       
boxOutline.appendChild(tickOutline);\n       
this.element_.appendChild(tickContainer);\n       
this.element_.appendChild(boxOutline);\n        if
(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n     
      this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n
           this.rippleContainerElement_ =
document.createElement('span');\n           
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n
           this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n         
  this.rippleContainerElement_.addEventListener('mouseup',
this.boundRippleMouseUp);\n            var ripple =
document.createElement('span');\n           
ripple.classList.add(this.CssClasses_.RIPPLE);\n           
this.rippleContainerElement_.appendChild(ripple);\n           
this.element_.appendChild(this.rippleContainerElement_);\n        }\n      
 this.boundInputOnChange = this.onChange_.bind(this);\n       
this.boundInputOnFocus = this.onFocus_.bind(this);\n       
this.boundInputOnBlur = this.onBlur_.bind(this);\n       
this.boundElementMouseUp = this.onMouseUp_.bind(this);\n       
this.inputElement_.addEventListener('change',
this.boundInputOnChange);\n       
this.inputElement_.addEventListener('focus',
this.boundInputOnFocus);\n       
this.inputElement_.addEventListener('blur',
this.boundInputOnBlur);\n       
this.element_.addEventListener('mouseup',
this.boundElementMouseUp);\n        this.updateClasses_();\n       
this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Downgrade the component.\n   *\n   * @private\n  
*/\nMaterialCheckbox.prototype.mdlDowngrade_ = function () {\n    if
(this.rippleContainerElement_) {\n       
this.rippleContainerElement_.removeEventListener('mouseup',
this.boundRippleMouseUp);\n    }\n   
this.inputElement_.removeEventListener('change',
this.boundInputOnChange);\n   
this.inputElement_.removeEventListener('focus',
this.boundInputOnFocus);\n   
this.inputElement_.removeEventListener('blur',
this.boundInputOnBlur);\n   
this.element_.removeEventListener('mouseup',
this.boundElementMouseUp);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.mdlDowngrade
=
MaterialCheckbox.prototype.mdlDowngrade_;\nMaterialCheckbox.prototype['mdlDowngrade']
= MaterialCheckbox.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialCheckbox,\n  
 classAsString: 'MaterialCheckbox',\n    cssClass:
'mdl-js-checkbox',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for icon
toggle MDL component.\n   * Implements MDL component design pattern defined
at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n  
*\n   * @constructor\n   * @param {HTMLElement} element The element that
will be upgraded.\n   */\nvar MaterialIconToggle = function
MaterialIconToggle(element) {\n    this.element_ = element;\n    //
Initialize instance.\n   
this.init();\n};\nwindow['MaterialIconToggle'] =
MaterialIconToggle;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001
};\n/**\n   * Store strings for class names defined by this component that
are used in\n   * JavaScript. This allows us to simply change it in one
place should we\n   * decide to modify at a later date.\n   *\n   * @enum
{string}\n   * @private\n   */\nMaterialIconToggle.prototype.CssClasses_ =
{\n    INPUT: 'mdl-icon-toggle__input',\n    JS_RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER:
'mdl-icon-toggle__ripple-container',\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n   
IS_FOCUSED: 'is-focused',\n    IS_DISABLED:
'is-disabled',\n    IS_CHECKED: 'is-checked'\n};\n/**\n
  * Handle change of state.\n   *\n   * @param {Event} event The event that
fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onChange_ =
function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus
of element.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialIconToggle.prototype.onFocus_ = function (event)
{\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n
  * Handle lost focus of element.\n   *\n   * @param {Event} event The
event that fired.\n   * @private\n  
*/\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n   
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n  
* @private\n   */\nMaterialIconToggle.prototype.onMouseUp_ = function
(event) {\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n  
* @private\n   */\nMaterialIconToggle.prototype.updateClasses_ = function
() {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n  
* Add blur.\n   *\n   * @private\n   */\nMaterialIconToggle.prototype.blur_
= function () {\n    // TODO: figure out why there's a focus event
being fired after our blur,\n    // so that we can avoid this hack.\n   
window.setTimeout(function () {\n        this.inputElement_.blur();\n   
}.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n 
 * Check the inputs toggle state and update display.\n   *\n   * @public\n 
 */\nMaterialIconToggle.prototype.checkToggleState = function () {\n    if
(this.inputElement_.checked) {\n       
this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n  
     this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n   
}\n};\nMaterialIconToggle.prototype['checkToggleState'] =
MaterialIconToggle.prototype.checkToggleState;\n/**\n   * Check the inputs
disabled state and update display.\n   *\n   * @public\n  
*/\nMaterialIconToggle.prototype.checkDisabled = function () {\n    if
(this.inputElement_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialIconToggle.prototype['checkDisabled'] =
MaterialIconToggle.prototype.checkDisabled;\n/**\n   * Disable icon
toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.disable =
function () {\n    this.inputElement_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable']
= MaterialIconToggle.prototype.disable;\n/**\n   * Enable icon toggle.\n  
*\n   * @public\n   */\nMaterialIconToggle.prototype.enable = function ()
{\n    this.inputElement_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable']
= MaterialIconToggle.prototype.enable;\n/**\n   * Check icon toggle.\n  
*\n   * @public\n   */\nMaterialIconToggle.prototype.check = function ()
{\n    this.inputElement_.checked = true;\n   
this.updateClasses_();\n};\nMaterialIconToggle.prototype['check']
= MaterialIconToggle.prototype.check;\n/**\n   * Uncheck icon toggle.\n  
*\n   * @public\n   */\nMaterialIconToggle.prototype.uncheck = function ()
{\n    this.inputElement_.checked = false;\n   
this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck']
= MaterialIconToggle.prototype.uncheck;\n/**\n   * Initialize element.\n  
*/\nMaterialIconToggle.prototype.init = function () {\n    if
(this.element_) {\n        this.inputElement_ =
this.element_.querySelector('.' + this.CssClasses_.INPUT);\n     
  if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT))
{\n           
this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n      
     this.rippleContainerElement_ =
document.createElement('span');\n           
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n
           this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n         
  this.rippleContainerElement_.addEventListener('mouseup',
this.boundRippleMouseUp);\n            var ripple =
document.createElement('span');\n           
ripple.classList.add(this.CssClasses_.RIPPLE);\n           
this.rippleContainerElement_.appendChild(ripple);\n           
this.element_.appendChild(this.rippleContainerElement_);\n        }\n      
 this.boundInputOnChange = this.onChange_.bind(this);\n       
this.boundInputOnFocus = this.onFocus_.bind(this);\n       
this.boundInputOnBlur = this.onBlur_.bind(this);\n       
this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n       
this.inputElement_.addEventListener('change',
this.boundInputOnChange);\n       
this.inputElement_.addEventListener('focus',
this.boundInputOnFocus);\n       
this.inputElement_.addEventListener('blur',
this.boundInputOnBlur);\n       
this.element_.addEventListener('mouseup',
this.boundElementOnMouseUp);\n        this.updateClasses_();\n       
this.element_.classList.add('is-upgraded');\n    }\n};\n/**\n   *
Downgrade the component\n   *\n   * @private\n  
*/\nMaterialIconToggle.prototype.mdlDowngrade_ = function () {\n    if
(this.rippleContainerElement_) {\n       
this.rippleContainerElement_.removeEventListener('mouseup',
this.boundRippleMouseUp);\n    }\n   
this.inputElement_.removeEventListener('change',
this.boundInputOnChange);\n   
this.inputElement_.removeEventListener('focus',
this.boundInputOnFocus);\n   
this.inputElement_.removeEventListener('blur',
this.boundInputOnBlur);\n   
this.element_.removeEventListener('mouseup',
this.boundElementOnMouseUp);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n  
*/\nMaterialIconToggle.prototype.mdlDowngrade =
MaterialIconToggle.prototype.mdlDowngrade_;\nMaterialIconToggle.prototype['mdlDowngrade']
= MaterialIconToggle.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialIconToggle,\n
   classAsString: 'MaterialIconToggle',\n    cssClass:
'mdl-js-icon-toggle',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
dropdown MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialMenu = function MaterialMenu(element) {\n   
this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n  
* Store constants in one place so they can be updated easily.\n   *\n   *
@enum {string | number}\n   * @private\n  
*/\nMaterialMenu.prototype.Constant_ = {\n    // Total duration of the menu
animation.\n    TRANSITION_DURATION_SECONDS: 0.3,\n    // The fraction of
the total duration we want to use for menu item animations.\n   
TRANSITION_DURATION_FRACTION: 0.8,\n    // How long the menu stays open
after choosing an option (so the user can see\n    // the ripple).\n   
CLOSE_TIMEOUT: 150\n};\n/**\n   * Keycodes, for code readability.\n   *\n  
* @enum {number}\n   * @private\n   */\nMaterialMenu.prototype.Keycodes_ =
{\n    ENTER: 13,\n    ESCAPE: 27,\n    SPACE: 32,\n    UP_ARROW: 38,\n   
DOWN_ARROW: 40\n};\n/**\n   * Store strings for class names defined by this
component that are used in\n   * JavaScript. This allows us to simply
change it in one place should we\n   * decide to modify at a later date.\n 
 *\n   * @enum {string}\n   * @private\n  
*/\nMaterialMenu.prototype.CssClasses_ = {\n    CONTAINER:
'mdl-menu__container',\n    OUTLINE:
'mdl-menu__outline',\n    ITEM: 'mdl-menu__item',\n   
ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n   
RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE:
'mdl-ripple',\n    // Statuses\n    IS_UPGRADED:
'is-upgraded',\n    IS_VISIBLE: 'is-visible',\n   
IS_ANIMATING: 'is-animating',\n    // Alignment options\n   
BOTTOM_LEFT: 'mdl-menu--bottom-left',\n    // This is the
default.\n    BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n   
TOP_LEFT: 'mdl-menu--top-left',\n    TOP_RIGHT:
'mdl-menu--top-right',\n    UNALIGNED:
'mdl-menu--unaligned'\n};\n/**\n   * Initialize element.\n  
*/\nMaterialMenu.prototype.init = function () {\n    if (this.element_) {\n
       // Create container for the menu.\n        var container =
document.createElement('div');\n       
container.classList.add(this.CssClasses_.CONTAINER);\n       
this.element_.parentElement.insertBefore(container, this.element_);\n      
 this.element_.parentElement.removeChild(this.element_);\n       
container.appendChild(this.element_);\n        this.container_ =
container;\n        // Create outline for the menu (shadow and
background).\n        var outline =
document.createElement('div');\n       
outline.classList.add(this.CssClasses_.OUTLINE);\n        this.outline_ =
outline;\n        container.insertBefore(outline, this.element_);\n       
// Find the \"for\" element and bind events to it.\n        var
forElId = this.element_.getAttribute('for');\n        var forEl =
null;\n        if (forElId) {\n            forEl =
document.getElementById(forElId);\n            if (forEl) {\n              
 this.forElement_ = forEl;\n               
forEl.addEventListener('click',
this.handleForClick_.bind(this));\n               
forEl.addEventListener('keydown',
this.handleForKeyboardEvent_.bind(this));\n            }\n        }\n      
 var items = this.element_.querySelectorAll('.' +
this.CssClasses_.ITEM);\n        this.boundItemKeydown_ =
this.handleItemKeyboardEvent_.bind(this);\n        this.boundItemClick_ =
this.handleItemClick_.bind(this);\n        for (var i = 0; i <
items.length; i++) {\n            // Add a listener to each menu item.\n   
        items[i].addEventListener('click',
this.boundItemClick_);\n            // Add a tab index to each menu item.\n
           items[i].tabIndex = '-1';\n            // Add a
keyboard listener to each menu item.\n           
items[i].addEventListener('keydown', this.boundItemKeydown_);\n  
     }\n        // Add ripple classes to each item, if the user has enabled
ripples.\n        if
(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n     
      this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n
           for (i = 0; i < items.length; i++) {\n                var
item = items[i];\n                var rippleContainer =
document.createElement('span');\n               
rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n   
            var ripple = document.createElement('span');\n       
        ripple.classList.add(this.CssClasses_.RIPPLE);\n               
rippleContainer.appendChild(ripple);\n               
item.appendChild(rippleContainer);\n               
item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            }\n       
}\n        // Copy alignment classes to the container, so the outline can
use them.\n        if
(this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n       
    this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n        }\n
       if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT))
{\n           
this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n        }\n   
    if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n   
        this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n       
}\n        if
(this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n         
  this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n        }\n    
   if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n   
        this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n       
}\n        container.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Handles a click on the \"for\" element, by
positioning the menu and then\n   * toggling it.\n   *\n   * @param {Event}
evt The event that fired.\n   * @private\n  
*/\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n    if
(this.element_ && this.forElement_) {\n        var rect =
this.forElement_.getBoundingClientRect();\n        var forRect =
this.forElement_.parentElement.getBoundingClientRect();\n        if
(this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n        }
else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT))
{\n            // Position below the \"for\" element, aligned to
its right.\n            this.container_.style.right = forRect.right -
rect.right + 'px';\n            this.container_.style.top =
this.forElement_.offsetTop + this.forElement_.offsetHeight +
'px';\n        } else if
(this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n          
 // Position above the \"for\" element, aligned to its left.\n   
        this.container_.style.left = this.forElement_.offsetLeft +
'px';\n            this.container_.style.bottom = forRect.bottom
- rect.top + 'px';\n        } else if
(this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n         
  // Position above the \"for\" element, aligned to its right.\n 
          this.container_.style.right = forRect.right - rect.right +
'px';\n            this.container_.style.bottom = forRect.bottom
- rect.top + 'px';\n        } else {\n            // Default:
position below the \"for\" element, aligned to its left.\n       
    this.container_.style.left = this.forElement_.offsetLeft +
'px';\n            this.container_.style.top =
this.forElement_.offsetTop + this.forElement_.offsetHeight +
'px';\n        }\n    }\n    this.toggle(evt);\n};\n/**\n   *
Handles a keyboard event on the \"for\" element.\n   *\n   *
@param {Event} evt The event that fired.\n   * @private\n  
*/\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n   
if (this.element_ && this.container_ && this.forElement_)
{\n        var items = this.element_.querySelectorAll('.' +
this.CssClasses_.ITEM + ':not([disabled])');\n        if (items
&& items.length > 0 &&
this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n       
    if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n               
evt.preventDefault();\n                items[items.length - 1].focus();\n  
         } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n         
      evt.preventDefault();\n                items[0].focus();\n           
}\n        }\n    }\n};\n/**\n   * Handles a keyboard event on an item.\n  
*\n   * @param {Event} evt The event that fired.\n   * @private\n  
*/\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n   
if (this.element_ && this.container_) {\n        var items =
this.element_.querySelectorAll('.' + this.CssClasses_.ITEM +
':not([disabled])');\n        if (items && items.length
> 0 &&
this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n       
    var currentIndex =
Array.prototype.slice.call(items).indexOf(evt.target);\n            if
(evt.keyCode === this.Keycodes_.UP_ARROW) {\n               
evt.preventDefault();\n                if (currentIndex > 0) {\n        
           items[currentIndex - 1].focus();\n                } else {\n    
               items[items.length - 1].focus();\n                }\n       
    } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n              
 evt.preventDefault();\n                if (items.length > currentIndex
+ 1) {\n                    items[currentIndex + 1].focus();\n             
  } else {\n                    items[0].focus();\n                }\n     
      } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode ===
this.Keycodes_.ENTER) {\n                evt.preventDefault();\n           
    // Send mousedown and mouseup to trigger ripple.\n                var e
= new MouseEvent('mousedown');\n               
evt.target.dispatchEvent(e);\n                e = new
MouseEvent('mouseup');\n               
evt.target.dispatchEvent(e);\n                // Send click.\n             
  evt.target.click();\n            } else if (evt.keyCode ===
this.Keycodes_.ESCAPE) {\n                evt.preventDefault();\n          
     this.hide();\n            }\n        }\n    }\n};\n/**\n   * Handles a
click event on an item.\n   *\n   * @param {Event} evt The event that
fired.\n   * @private\n   */\nMaterialMenu.prototype.handleItemClick_ =
function (evt) {\n    if (evt.target.hasAttribute('disabled'))
{\n        evt.stopPropagation();\n    } else {\n        // Wait some time
before closing menu, so the user can see the ripple.\n        this.closing_
= true;\n        window.setTimeout(function (evt) {\n           
this.hide();\n            this.closing_ = false;\n        }.bind(this),
this.Constant_.CLOSE_TIMEOUT);\n    }\n};\n/**\n   * Calculates the initial
clip (for opening the menu) or final clip (for closing\n   * it), and
applies it. This allows us to animate from or to the correct point,\n   *
that is, the point it's aligned to in the \"for\" element.\n
  *\n   * @param {number} height Height of the clip rectangle\n   * @param
{number} width Width of the clip rectangle\n   * @private\n  
*/\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n    if
(this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n       
// Do not clip.\n        this.element_.style.clip = '';\n    }
else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT))
{\n        // Clip to the top right corner of the menu.\n       
this.element_.style.clip = 'rect(0 ' + width + 'px ' +
'0 ' + width + 'px)';\n    } else if
(this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n        //
Clip to the bottom left corner of the menu.\n       
this.element_.style.clip = 'rect(' + height + 'px 0 ' +
height + 'px 0)';\n    } else if
(this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n       
// Clip to the bottom right corner of the menu.\n       
this.element_.style.clip = 'rect(' + height + 'px ' +
width + 'px ' + height + 'px ' + width +
'px)';\n    } else {\n        // Default: do not clip (same as
clipping to the top left corner).\n        this.element_.style.clip =
'';\n    }\n};\n/**\n   * Adds an event listener to clean up
after the animation ends.\n   *\n   * @private\n  
*/\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n   
var cleanup = function () {\n       
this.element_.removeEventListener('transitionend', cleanup);\n   
    this.element_.removeEventListener('webkitTransitionEnd',
cleanup);\n       
this.element_.classList.remove(this.CssClasses_.IS_ANIMATING);\n   
}.bind(this);\n    // Remove animation class once the transition is done.\n
   this.element_.addEventListener('transitionend', cleanup);\n   
this.element_.addEventListener('webkitTransitionEnd',
cleanup);\n};\n/**\n   * Displays the menu.\n   *\n   * @public\n  
*/\nMaterialMenu.prototype.show = function (evt) {\n    if (this.element_
&& this.container_ && this.outline_) {\n        // Measure
the inner element.\n        var height =
this.element_.getBoundingClientRect().height;\n        var width =
this.element_.getBoundingClientRect().width;\n        // Apply the inner
element's size to the container and outline.\n       
this.container_.style.width = width + 'px';\n       
this.container_.style.height = height + 'px';\n       
this.outline_.style.width = width + 'px';\n       
this.outline_.style.height = height + 'px';\n        var
transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS *
this.Constant_.TRANSITION_DURATION_FRACTION;\n        // Calculate
transition delays for individual menu items, so that they fade\n        //
in one at a time.\n        var items =
this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n   
    for (var i = 0; i < items.length; i++) {\n            var itemDelay
= null;\n            if
(this.element_.classList.contains(this.CssClasses_.TOP_LEFT) ||
this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n          
     itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) /
height * transitionDuration + 's';\n            } else {\n       
        itemDelay = items[i].offsetTop / height * transitionDuration +
's';\n            }\n            items[i].style.transitionDelay =
itemDelay;\n        }\n        // Apply the initial clip to the text before
we start animating.\n        this.applyClip_(height, width);\n        //
Wait for the next frame, turn on animation, and apply the final clip.\n    
   // Also make it visible. This triggers the transitions.\n       
window.requestAnimationFrame(function () {\n           
this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n           
this.element_.style.clip = 'rect(0 ' + width + 'px ' +
height + 'px 0)';\n           
this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n       
}.bind(this));\n        // Clean up after the animation is complete.\n     
  this.addAnimationEndListener_();\n        // Add a click listener to the
document, to close the menu.\n        var callback = function (e) {\n      
     // Check to see if the document is processing the same event that\n   
        // displayed the menu in the first place. If so, do nothing.\n     
      // Also check to see if the menu is in the process of closing itself,
and\n            // do nothing in that case.\n            // Also check if
the clicked element is a menu item\n            // if so, do nothing.\n    
       if (e !== evt && !this.closing_ &&
e.target.parentNode !== this.element_) {\n               
document.removeEventListener('click', callback);\n               
this.hide();\n            }\n        }.bind(this);\n       
document.addEventListener('click', callback);\n   
}\n};\nMaterialMenu.prototype['show'] =
MaterialMenu.prototype.show;\n/**\n   * Hides the menu.\n   *\n   *
@public\n   */\nMaterialMenu.prototype.hide = function () {\n    if
(this.element_ && this.container_ && this.outline_) {\n    
   var items = this.element_.querySelectorAll('.' +
this.CssClasses_.ITEM);\n        // Remove all transition delays; menu
items fade out concurrently.\n        for (var i = 0; i < items.length;
i++) {\n            items[i].style.transitionDelay = null;\n        }\n    
   // Measure the inner element.\n        var rect =
this.element_.getBoundingClientRect();\n        var height = rect.height;\n
       var width = rect.width;\n        // Turn on animation, and apply the
final clip. Also make invisible.\n        // This triggers the
transitions.\n       
this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n       
this.applyClip_(height, width);\n       
this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n        //
Clean up after the animation is complete.\n       
this.addAnimationEndListener_();\n   
}\n};\nMaterialMenu.prototype['hide'] =
MaterialMenu.prototype.hide;\n/**\n   * Displays or hides the menu,
depending on current state.\n   *\n   * @public\n  
*/\nMaterialMenu.prototype.toggle = function (evt) {\n    if
(this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n      
 this.hide();\n    } else {\n        this.show(evt);\n   
}\n};\nMaterialMenu.prototype['toggle'] =
MaterialMenu.prototype.toggle;\n/**\n   * Downgrade the component.\n   *\n 
 * @private\n   */\nMaterialMenu.prototype.mdlDowngrade_ = function () {\n 
  var items = this.element_.querySelectorAll('.' +
this.CssClasses_.ITEM);\n    for (var i = 0; i < items.length; i++) {\n 
      items[i].removeEventListener('click',
this.boundItemClick_);\n       
items[i].removeEventListener('keydown',
this.boundItemKeydown_);\n    }\n};\n/**\n   * Public alias for the
downgrade method.\n   *\n   * @public\n  
*/\nMaterialMenu.prototype.mdlDowngrade =
MaterialMenu.prototype.mdlDowngrade_;\nMaterialMenu.prototype['mdlDowngrade']
= MaterialMenu.prototype.mdlDowngrade;\n// The component registers itself.
It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialMenu,\n   
classAsString: 'MaterialMenu',\n    cssClass:
'mdl-js-menu',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Progress MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialProgress = function MaterialProgress(element)
{\n    this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialProgress'] =
MaterialProgress;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialProgress.prototype.Constant_ = {};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS:
'mdl-progress__indeterminate' };\n/**\n   * Set the current
progress of the progressbar.\n   *\n   * @param {number} p Percentage of
the progress (0-100)\n   * @public\n  
*/\nMaterialProgress.prototype.setProgress = function (p) {\n    if
(this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS))
{\n        return;\n    }\n    this.progressbar_.style.width = p +
'%';\n};\nMaterialProgress.prototype['setProgress'] =
MaterialProgress.prototype.setProgress;\n/**\n   * Set the current progress
of the buffer.\n   *\n   * @param {number} p Percentage of the buffer
(0-100)\n   * @public\n   */\nMaterialProgress.prototype.setBuffer =
function (p) {\n    this.bufferbar_.style.width = p + '%';\n   
this.auxbar_.style.width = 100 - p +
'%';\n};\nMaterialProgress.prototype['setBuffer'] =
MaterialProgress.prototype.setBuffer;\n/**\n   * Initialize element.\n  
*/\nMaterialProgress.prototype.init = function () {\n    if (this.element_)
{\n        var el = document.createElement('div');\n       
el.className = 'progressbar bar bar1';\n       
this.element_.appendChild(el);\n        this.progressbar_ = el;\n        el
= document.createElement('div');\n        el.className =
'bufferbar bar bar2';\n        this.element_.appendChild(el);\n  
     this.bufferbar_ = el;\n        el =
document.createElement('div');\n        el.className =
'auxbar bar bar3';\n        this.element_.appendChild(el);\n     
  this.auxbar_ = el;\n        this.progressbar_.style.width =
'0%';\n        this.bufferbar_.style.width = '100%';\n 
      this.auxbar_.style.width = '0%';\n       
this.element_.classList.add('is-upgraded');\n    }\n};\n/**\n   *
Downgrade the component\n   *\n   * @private\n  
*/\nMaterialProgress.prototype.mdlDowngrade_ = function () {\n    while
(this.element_.firstChild) {\n       
this.element_.removeChild(this.element_.firstChild);\n    }\n};\n/**\n   *
Public alias for the downgrade method.\n   *\n   * @public\n  
*/\nMaterialProgress.prototype.mdlDowngrade =
MaterialProgress.prototype.mdlDowngrade_;\nMaterialProgress.prototype['mdlDowngrade']
= MaterialProgress.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialProgress,\n  
 classAsString: 'MaterialProgress',\n    cssClass:
'mdl-js-progress',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for Radio
MDL component.\n   * Implements MDL component design pattern defined at:\n 
 * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialRadio = function MaterialRadio(element) {\n  
 this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n
  * Store constants in one place so they can be updated easily.\n   *\n   *
@enum {string | number}\n   * @private\n  
*/\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   *
Store strings for class names defined by this component that are used in\n 
 * JavaScript. This allows us to simply change it in one place should we\n 
 * decide to modify at a later date.\n   *\n   * @enum {string}\n   *
@private\n   */\nMaterialRadio.prototype.CssClasses_ = {\n    IS_FOCUSED:
'is-focused',\n    IS_DISABLED: 'is-disabled',\n   
IS_CHECKED: 'is-checked',\n    IS_UPGRADED:
'is-upgraded',\n    JS_RADIO: 'mdl-js-radio',\n   
RADIO_BTN: 'mdl-radio__button',\n    RADIO_OUTER_CIRCLE:
'mdl-radio__outer-circle',\n    RADIO_INNER_CIRCLE:
'mdl-radio__inner-circle',\n    RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER:
'mdl-radio__ripple-container',\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE:
'mdl-ripple'\n};\n/**\n   * Handle change of state.\n   *\n   *
@param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialRadio.prototype.onChange_ = function (event) {\n    // Since
other radio buttons don't get change events, we need to look for\n   
// them to update their classes.\n    var radios =
document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n    for (var i
= 0; i < radios.length; i++) {\n        var button =
radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n     
  // Different name == different group, so no point updating those.\n      
 if (button.getAttribute('name') ===
this.btnElement_.getAttribute('name')) {\n           
radios[i]['MaterialRadio'].updateClasses_();\n        }\n   
}\n};\n/**\n   * Handle focus.\n   *\n   * @param {Event} event The event
that fired.\n   * @private\n   */\nMaterialRadio.prototype.onFocus_ =
function (event) {\n   
this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n
  * @private\n   */\nMaterialRadio.prototype.onBlur_ = function (event) {\n
   this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n 
 * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n
  * @private\n   */\nMaterialRadio.prototype.onMouseup_ = function (event)
{\n    this.blur_();\n};\n/**\n   * Update classes.\n   *\n   * @private\n 
 */\nMaterialRadio.prototype.updateClasses_ = function () {\n   
this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add
blur.\n   *\n   * @private\n   */\nMaterialRadio.prototype.blur_ = function
() {\n    // TODO: figure out why there's a focus event being fired
after our blur,\n    // so that we can avoid this hack.\n   
window.setTimeout(function () {\n        this.btnElement_.blur();\n   
}.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n 
 * Check the components disabled state.\n   *\n   * @public\n  
*/\nMaterialRadio.prototype.checkDisabled = function () {\n    if
(this.btnElement_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialRadio.prototype['checkDisabled'] =
MaterialRadio.prototype.checkDisabled;\n/**\n   * Check the components
toggled state.\n   *\n   * @public\n  
*/\nMaterialRadio.prototype.checkToggleState = function () {\n    if
(this.btnElement_.checked) {\n       
this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n  
     this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n   
}\n};\nMaterialRadio.prototype['checkToggleState'] =
MaterialRadio.prototype.checkToggleState;\n/**\n   * Disable radio.\n   *\n
  * @public\n   */\nMaterialRadio.prototype.disable = function () {\n   
this.btnElement_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] =
MaterialRadio.prototype.disable;\n/**\n   * Enable radio.\n   *\n   *
@public\n   */\nMaterialRadio.prototype.enable = function () {\n   
this.btnElement_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] =
MaterialRadio.prototype.enable;\n/**\n   * Check radio.\n   *\n   *
@public\n   */\nMaterialRadio.prototype.check = function () {\n   
this.btnElement_.checked = true;\n   
this.updateClasses_();\n};\nMaterialRadio.prototype['check'] =
MaterialRadio.prototype.check;\n/**\n   * Uncheck radio.\n   *\n   *
@public\n   */\nMaterialRadio.prototype.uncheck = function () {\n   
this.btnElement_.checked = false;\n   
this.updateClasses_();\n};\nMaterialRadio.prototype['uncheck'] =
MaterialRadio.prototype.uncheck;\n/**\n   * Initialize element.\n  
*/\nMaterialRadio.prototype.init = function () {\n    if (this.element_)
{\n        this.btnElement_ = this.element_.querySelector('.' +
this.CssClasses_.RADIO_BTN);\n        this.boundChangeHandler_ =
this.onChange_.bind(this);\n        this.boundFocusHandler_ =
this.onChange_.bind(this);\n        this.boundBlurHandler_ =
this.onBlur_.bind(this);\n        this.boundMouseUpHandler_ =
this.onMouseup_.bind(this);\n        var outerCircle =
document.createElement('span');\n       
outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n       
var innerCircle = document.createElement('span');\n       
innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n       
this.element_.appendChild(outerCircle);\n       
this.element_.appendChild(innerCircle);\n        var rippleContainer;\n    
   if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT))
{\n           
this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n      
     rippleContainer = document.createElement('span');\n         
  rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n      
     rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n      
     rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n      
     rippleContainer.addEventListener('mouseup',
this.boundMouseUpHandler_);\n            var ripple =
document.createElement('span');\n           
ripple.classList.add(this.CssClasses_.RIPPLE);\n           
rippleContainer.appendChild(ripple);\n           
this.element_.appendChild(rippleContainer);\n        }\n       
this.btnElement_.addEventListener('change',
this.boundChangeHandler_);\n       
this.btnElement_.addEventListener('focus',
this.boundFocusHandler_);\n       
this.btnElement_.addEventListener('blur',
this.boundBlurHandler_);\n       
this.element_.addEventListener('mouseup',
this.boundMouseUpHandler_);\n        this.updateClasses_();\n       
this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Downgrade the element.\n   *\n   * @private\n  
*/\nMaterialRadio.prototype.mdlDowngrade_ = function () {\n    var
rippleContainer = this.element_.querySelector('.' +
this.CssClasses_.RIPPLE_CONTAINER);\n   
this.btnElement_.removeEventListener('change',
this.boundChangeHandler_);\n   
this.btnElement_.removeEventListener('focus',
this.boundFocusHandler_);\n   
this.btnElement_.removeEventListener('blur',
this.boundBlurHandler_);\n   
this.element_.removeEventListener('mouseup',
this.boundMouseUpHandler_);\n    if (rippleContainer) {\n       
rippleContainer.removeEventListener('mouseup',
this.boundMouseUpHandler_);\n       
this.element_.removeChild(rippleContainer);\n    }\n};\n/**\n   * Public
alias for the downgrade method.\n   *\n   * @public\n  
*/\nMaterialRadio.prototype.mdlDowngrade =
MaterialRadio.prototype.mdlDowngrade_;\nMaterialRadio.prototype['mdlDowngrade']
= MaterialRadio.prototype.mdlDowngrade;\n// The component registers itself.
It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialRadio,\n   
classAsString: 'MaterialRadio',\n    cssClass:
'mdl-js-radio',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for Slider
MDL component.\n   * Implements MDL component design pattern defined at:\n 
 * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialSlider = function MaterialSlider(element) {\n
   this.element_ = element;\n    // Browser feature detection.\n   
this.isIE_ = window.navigator.msPointerEnabled;\n    // Initialize
instance.\n    this.init();\n};\nwindow['MaterialSlider'] =
MaterialSlider;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialSlider.prototype.Constant_ = {};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialSlider.prototype.CssClasses_ = {\n    IE_CONTAINER:
'mdl-slider__ie-container',\n    SLIDER_CONTAINER:
'mdl-slider__container',\n    BACKGROUND_FLEX:
'mdl-slider__background-flex',\n    BACKGROUND_LOWER:
'mdl-slider__background-lower',\n    BACKGROUND_UPPER:
'mdl-slider__background-upper',\n    IS_LOWEST_VALUE:
'is-lowest-value',\n    IS_UPGRADED:
'is-upgraded'\n};\n/**\n   * Handle input on element.\n   *\n   *
@param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialSlider.prototype.onInput_ = function (event) {\n   
this.updateValueStyles_();\n};\n/**\n   * Handle change on element.\n   *\n
  * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialSlider.prototype.onChange_ = function (event) {\n   
this.updateValueStyles_();\n};\n/**\n   * Handle mouseup on element.\n  
*\n   * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n   
event.target.blur();\n};\n/**\n   * Handle mousedown on container
element.\n   * This handler is purpose is to not require the use to click\n
  * exactly on the 2px slider element, as FireFox seems to be very\n   *
strict about this.\n   *\n   * @param {Event} event The event that fired.\n
  * @private\n   * @suppress {missingProperties}\n  
*/\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n  
 // If this click is not on the parent element (but rather some child)\n   
// ignore. It may still bubble up.\n    if (event.target !==
this.element_.parentElement) {\n        return;\n    }\n    // Discard the
original event and create a new event that\n    // is on the slider
element.\n    event.preventDefault();\n    var newEvent = new
MouseEvent('mousedown', {\n        target: event.target,\n       
buttons: event.buttons,\n        clientX: event.clientX,\n        clientY:
this.element_.getBoundingClientRect().y\n    });\n   
this.element_.dispatchEvent(newEvent);\n};\n/**\n   * Handle updating of
values.\n   *\n   * @private\n  
*/\nMaterialSlider.prototype.updateValueStyles_ = function () {\n    //
Calculate and apply percentages to div structure behind slider.\n    var
fraction = (this.element_.value - this.element_.min) / (this.element_.max -
this.element_.min);\n    if (fraction === 0) {\n       
this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n    } else
{\n       
this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n    }\n 
  if (!this.isIE_) {\n        this.backgroundLower_.style.flex =
fraction;\n        this.backgroundLower_.style.webkitFlex = fraction;\n    
   this.backgroundUpper_.style.flex = 1 - fraction;\n       
this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n    }\n};\n//
Public methods.\n/**\n   * Disable slider.\n   *\n   * @public\n  
*/\nMaterialSlider.prototype.disable = function () {\n   
this.element_.disabled =
true;\n};\nMaterialSlider.prototype['disable'] =
MaterialSlider.prototype.disable;\n/**\n   * Enable slider.\n   *\n   *
@public\n   */\nMaterialSlider.prototype.enable = function () {\n   
this.element_.disabled =
false;\n};\nMaterialSlider.prototype['enable'] =
MaterialSlider.prototype.enable;\n/**\n   * Update slider value.\n   *\n  
* @param {number} value The value to which to set the control (optional).\n
  * @public\n   */\nMaterialSlider.prototype.change = function (value) {\n 
  if (typeof value !== 'undefined') {\n       
this.element_.value = value;\n    }\n   
this.updateValueStyles_();\n};\nMaterialSlider.prototype['change']
= MaterialSlider.prototype.change;\n/**\n   * Initialize element.\n  
*/\nMaterialSlider.prototype.init = function () {\n    if (this.element_)
{\n        if (this.isIE_) {\n            // Since we need to specify a
very large height in IE due to\n            // implementation limitations,
we add a parent here that trims it down to\n            // a reasonable
size.\n            var containerIE =
document.createElement('div');\n           
containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n           
this.element_.parentElement.insertBefore(containerIE, this.element_);\n    
       this.element_.parentElement.removeChild(this.element_);\n           
containerIE.appendChild(this.element_);\n        } else {\n            //
For non-IE browsers, we need a div structure that sits behind the\n        
   // slider and allows us to style the left and right sides of it with\n  
         // different colors.\n            var container =
document.createElement('div');\n           
container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n           
this.element_.parentElement.insertBefore(container, this.element_);\n      
     this.element_.parentElement.removeChild(this.element_);\n           
container.appendChild(this.element_);\n            var backgroundFlex =
document.createElement('div');\n           
backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n          
 container.appendChild(backgroundFlex);\n            this.backgroundLower_
= document.createElement('div');\n           
this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n  
         backgroundFlex.appendChild(this.backgroundLower_);\n           
this.backgroundUpper_ = document.createElement('div');\n         
  this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n
           backgroundFlex.appendChild(this.backgroundUpper_);\n        }\n 
      this.boundInputHandler = this.onInput_.bind(this);\n       
this.boundChangeHandler = this.onChange_.bind(this);\n       
this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n       
this.boundContainerMouseDownHandler =
this.onContainerMouseDown_.bind(this);\n       
this.element_.addEventListener('input',
this.boundInputHandler);\n       
this.element_.addEventListener('change',
this.boundChangeHandler);\n       
this.element_.addEventListener('mouseup',
this.boundMouseUpHandler);\n       
this.element_.parentElement.addEventListener('mousedown',
this.boundContainerMouseDownHandler);\n        this.updateValueStyles_();\n
       this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n   
}\n};\n/**\n   * Downgrade the component\n   *\n   * @private\n  
*/\nMaterialSlider.prototype.mdlDowngrade_ = function () {\n   
this.element_.removeEventListener('input',
this.boundInputHandler);\n   
this.element_.removeEventListener('change',
this.boundChangeHandler);\n   
this.element_.removeEventListener('mouseup',
this.boundMouseUpHandler);\n   
this.element_.parentElement.removeEventListener('mousedown',
this.boundContainerMouseDownHandler);\n};\n/**\n   * Public alias for the
downgrade method.\n   *\n   * @public\n  
*/\nMaterialSlider.prototype.mdlDowngrade =
MaterialSlider.prototype.mdlDowngrade_;\nMaterialSlider.prototype['mdlDowngrade']
= MaterialSlider.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialSlider,\n   
classAsString: 'MaterialSlider',\n    cssClass:
'mdl-js-slider',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Spinner MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@param {HTMLElement} element The element that will be upgraded.\n   *
@constructor\n   */\nvar MaterialSpinner = function
MaterialSpinner(element) {\n    this.element_ = element;\n    // Initialize
instance.\n    this.init();\n};\nwindow['MaterialSpinner'] =
MaterialSpinner;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4
};\n/**\n   * Store strings for class names defined by this component that
are used in\n   * JavaScript. This allows us to simply change it in one
place should we\n   * decide to modify at a later date.\n   *\n   * @enum
{string}\n   * @private\n   */\nMaterialSpinner.prototype.CssClasses_ = {\n
   MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n   
MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n   
MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n   
MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n   
MDL_SPINNER_LEFT: 'mdl-spinner__left',\n    MDL_SPINNER_RIGHT:
'mdl-spinner__right'\n};\n/**\n   * Auxiliary method to create a
spinner layer.\n   *\n   * @param {number} index Index of the layer to be
created.\n   * @public\n   */\nMaterialSpinner.prototype.createLayer =
function (index) {\n    var layer =
document.createElement('div');\n   
layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n   
layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' +
index);\n    var leftClipper = document.createElement('div');\n  
 leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n 
  leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n    var
gapPatch = document.createElement('div');\n   
gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n    var
rightClipper = document.createElement('div');\n   
rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n 
  rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n    var
circleOwners = [\n        leftClipper,\n        gapPatch,\n       
rightClipper\n    ];\n    for (var i = 0; i < circleOwners.length; i++)
{\n        var circle = document.createElement('div');\n       
circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n       
circleOwners[i].appendChild(circle);\n    }\n   
layer.appendChild(leftClipper);\n    layer.appendChild(gapPatch);\n   
layer.appendChild(rightClipper);\n   
this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer']
= MaterialSpinner.prototype.createLayer;\n/**\n   * Stops the spinner
animation.\n   * Public method for users who need to stop the spinner for
any reason.\n   *\n   * @public\n   */\nMaterialSpinner.prototype.stop =
function () {\n   
this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop']
= MaterialSpinner.prototype.stop;\n/**\n   * Starts the spinner
animation.\n   * Public method for users who need to manually start the
spinner for any reason\n   * (instead of just adding the
'is-active' class to their markup).\n   *\n   * @public\n  
*/\nMaterialSpinner.prototype.start = function () {\n   
this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start']
= MaterialSpinner.prototype.start;\n/**\n   * Initialize element.\n  
*/\nMaterialSpinner.prototype.init = function () {\n    if (this.element_)
{\n        for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT;
i++) {\n            this.createLayer(i);\n        }\n       
this.element_.classList.add('is-upgraded');\n    }\n};\n// The
component registers itself. It can assume componentHandler is available\n//
in the global scope.\ncomponentHandler.register({\n    constructor:
MaterialSpinner,\n    classAsString: 'MaterialSpinner',\n   
cssClass: 'mdl-js-spinner',\n    widget:
true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All
Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0
(the \"License\");\n * you may not use this file except in
compliance with the License.\n * You may obtain a copy of the License at\n
*\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless
required by applicable law or agreed to in writing, software\n *
distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Checkbox MDL component.\n   * Implements MDL component
design pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialSwitch = function MaterialSwitch(element) {\n
   this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialSwitch'] =
MaterialSwitch;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n  
* Store strings for class names defined by this component that are used
in\n   * JavaScript. This allows us to simply change it in one place should
we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   *
@private\n   */\nMaterialSwitch.prototype.CssClasses_ = {\n    INPUT:
'mdl-switch__input',\n    TRACK: 'mdl-switch__track',\n
   THUMB: 'mdl-switch__thumb',\n    FOCUS_HELPER:
'mdl-switch__focus-helper',\n    RIPPLE_EFFECT:
'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER:
'mdl-switch__ripple-container',\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n   
IS_FOCUSED: 'is-focused',\n    IS_DISABLED:
'is-disabled',\n    IS_CHECKED: 'is-checked'\n};\n/**\n
  * Handle change of state.\n   *\n   * @param {Event} event The event that
fired.\n   * @private\n   */\nMaterialSwitch.prototype.onChange_ = function
(event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus of
element.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n  
 this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle lost focus of element.\n   *\n   * @param {Event} event The event
that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onBlur_ =
function (event) {\n   
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n  
* @private\n   */\nMaterialSwitch.prototype.onMouseUp_ = function (event)
{\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   *
@private\n   */\nMaterialSwitch.prototype.updateClasses_ = function () {\n 
  this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add
blur.\n   *\n   * @private\n   */\nMaterialSwitch.prototype.blur_ =
function () {\n    // TODO: figure out why there's a focus event being
fired after our blur,\n    // so that we can avoid this hack.\n   
window.setTimeout(function () {\n        this.inputElement_.blur();\n   
}.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n 
 * Check the components disabled state.\n   *\n   * @public\n  
*/\nMaterialSwitch.prototype.checkDisabled = function () {\n    if
(this.inputElement_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialSwitch.prototype['checkDisabled'] =
MaterialSwitch.prototype.checkDisabled;\n/**\n   * Check the components
toggled state.\n   *\n   * @public\n  
*/\nMaterialSwitch.prototype.checkToggleState = function () {\n    if
(this.inputElement_.checked) {\n       
this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n  
     this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n   
}\n};\nMaterialSwitch.prototype['checkToggleState'] =
MaterialSwitch.prototype.checkToggleState;\n/**\n   * Disable switch.\n  
*\n   * @public\n   */\nMaterialSwitch.prototype.disable = function () {\n 
  this.inputElement_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] =
MaterialSwitch.prototype.disable;\n/**\n   * Enable switch.\n   *\n   *
@public\n   */\nMaterialSwitch.prototype.enable = function () {\n   
this.inputElement_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] =
MaterialSwitch.prototype.enable;\n/**\n   * Activate switch.\n   *\n   *
@public\n   */\nMaterialSwitch.prototype.on = function () {\n   
this.inputElement_.checked = true;\n   
this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] =
MaterialSwitch.prototype.on;\n/**\n   * Deactivate switch.\n   *\n   *
@public\n   */\nMaterialSwitch.prototype.off = function () {\n   
this.inputElement_.checked = false;\n   
this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] =
MaterialSwitch.prototype.off;\n/**\n   * Initialize element.\n  
*/\nMaterialSwitch.prototype.init = function () {\n    if (this.element_)
{\n        this.inputElement_ = this.element_.querySelector('.' +
this.CssClasses_.INPUT);\n        var track =
document.createElement('div');\n       
track.classList.add(this.CssClasses_.TRACK);\n        var thumb =
document.createElement('div');\n       
thumb.classList.add(this.CssClasses_.THUMB);\n        var focusHelper =
document.createElement('span');\n       
focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n       
thumb.appendChild(focusHelper);\n       
this.element_.appendChild(track);\n       
this.element_.appendChild(thumb);\n        this.boundMouseUpHandler =
this.onMouseUp_.bind(this);\n        if
(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n     
      this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n
           this.rippleContainerElement_ =
document.createElement('span');\n           
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n
          
this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n
          
this.rippleContainerElement_.addEventListener('mouseup',
this.boundMouseUpHandler);\n            var ripple =
document.createElement('span');\n           
ripple.classList.add(this.CssClasses_.RIPPLE);\n           
this.rippleContainerElement_.appendChild(ripple);\n           
this.element_.appendChild(this.rippleContainerElement_);\n        }\n      
 this.boundChangeHandler = this.onChange_.bind(this);\n       
this.boundFocusHandler = this.onFocus_.bind(this);\n       
this.boundBlurHandler = this.onBlur_.bind(this);\n       
this.inputElement_.addEventListener('change',
this.boundChangeHandler);\n       
this.inputElement_.addEventListener('focus',
this.boundFocusHandler);\n       
this.inputElement_.addEventListener('blur',
this.boundBlurHandler);\n       
this.element_.addEventListener('mouseup',
this.boundMouseUpHandler);\n        this.updateClasses_();\n       
this.element_.classList.add('is-upgraded');\n    }\n};\n/**\n   *
Downgrade the component.\n   *\n   * @private\n  
*/\nMaterialSwitch.prototype.mdlDowngrade_ = function () {\n    if
(this.rippleContainerElement_) {\n       
this.rippleContainerElement_.removeEventListener('mouseup',
this.boundMouseUpHandler);\n    }\n   
this.inputElement_.removeEventListener('change',
this.boundChangeHandler);\n   
this.inputElement_.removeEventListener('focus',
this.boundFocusHandler);\n   
this.inputElement_.removeEventListener('blur',
this.boundBlurHandler);\n   
this.element_.removeEventListener('mouseup',
this.boundMouseUpHandler);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.mdlDowngrade =
MaterialSwitch.prototype.mdlDowngrade_;\nMaterialSwitch.prototype['mdlDowngrade']
= MaterialSwitch.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialSwitch,\n   
classAsString: 'MaterialSwitch',\n    cssClass:
'mdl-js-switch',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Textfield MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialTextfield = function
MaterialTextfield(element) {\n    this.element_ = element;\n   
this.maxRows = this.Constant_.NO_MAX_ROWS;\n    // Initialize instance.\n  
 this.init();\n};\nwindow['MaterialTextfield'] =
MaterialTextfield;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialTextfield.prototype.Constant_ = {\n    NO_MAX_ROWS: -1,\n   
MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialTextfield.prototype.CssClasses_ = {\n    LABEL:
'mdl-textfield__label',\n    INPUT:
'mdl-textfield__input',\n    IS_DIRTY: 'is-dirty',\n   
IS_FOCUSED: 'is-focused',\n    IS_DISABLED:
'is-disabled',\n    IS_INVALID: 'is-invalid',\n   
IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Handle input being
entered.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialTextfield.prototype.onKeyDown_ = function (event)
{\n    var currentRowCount =
event.target.value.split('\\n').length;\n    if (event.keyCode
=== 13) {\n        if (currentRowCount >= this.maxRows) {\n           
event.preventDefault();\n        }\n    }\n};\n/**\n   * Handle focus.\n  
*\n   * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialTextfield.prototype.onFocus_ = function (event) {\n   
this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n
  * @private\n   */\nMaterialTextfield.prototype.onBlur_ = function (event)
{\n   
this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   *
Handle class updates.\n   *\n   * @private\n  
*/\nMaterialTextfield.prototype.updateClasses_ = function () {\n   
this.checkDisabled();\n    this.checkValidity();\n   
this.checkDirty();\n};\n// Public methods.\n/**\n   * Check the disabled
state and update field accordingly.\n   *\n   * @public\n  
*/\nMaterialTextfield.prototype.checkDisabled = function () {\n    if
(this.input_.disabled) {\n       
this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n 
      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n   
}\n};\nMaterialTextfield.prototype['checkDisabled'] =
MaterialTextfield.prototype.checkDisabled;\n/**\n   * Check the validity
state and update field accordingly.\n   *\n   * @public\n  
*/\nMaterialTextfield.prototype.checkValidity = function () {\n    if
(this.input_.validity) {\n        if (this.input_.validity.valid) {\n      
     this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n       
} else {\n           
this.element_.classList.add(this.CssClasses_.IS_INVALID);\n        }\n   
}\n};\nMaterialTextfield.prototype['checkValidity'] =
MaterialTextfield.prototype.checkValidity;\n/**\n   * Check the dirty state
and update field accordingly.\n   *\n   * @public\n  
*/\nMaterialTextfield.prototype.checkDirty = function () {\n    if
(this.input_.value && this.input_.value.length > 0) {\n       
this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n    } else {\n    
   this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n   
}\n};\nMaterialTextfield.prototype['checkDirty'] =
MaterialTextfield.prototype.checkDirty;\n/**\n   * Disable text field.\n  
*\n   * @public\n   */\nMaterialTextfield.prototype.disable = function ()
{\n    this.input_.disabled = true;\n   
this.updateClasses_();\n};\nMaterialTextfield.prototype['disable']
= MaterialTextfield.prototype.disable;\n/**\n   * Enable text field.\n  
*\n   * @public\n   */\nMaterialTextfield.prototype.enable = function ()
{\n    this.input_.disabled = false;\n   
this.updateClasses_();\n};\nMaterialTextfield.prototype['enable']
= MaterialTextfield.prototype.enable;\n/**\n   * Update text field value.\n
  *\n   * @param {string} value The value to which to set the control
(optional).\n   * @public\n   */\nMaterialTextfield.prototype.change =
function (value) {\n    this.input_.value = value || '';\n   
this.updateClasses_();\n};\nMaterialTextfield.prototype['change']
= MaterialTextfield.prototype.change;\n/**\n   * Initialize element.\n  
*/\nMaterialTextfield.prototype.init = function () {\n    if
(this.element_) {\n        this.label_ =
this.element_.querySelector('.' + this.CssClasses_.LABEL);\n     
  this.input_ = this.element_.querySelector('.' +
this.CssClasses_.INPUT);\n        if (this.input_) {\n            if
(this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n          
     this.maxRows =
parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),
10);\n                if (isNaN(this.maxRows)) {\n                   
this.maxRows = this.Constant_.NO_MAX_ROWS;\n                }\n           
}\n            this.boundUpdateClassesHandler =
this.updateClasses_.bind(this);\n            this.boundFocusHandler =
this.onFocus_.bind(this);\n            this.boundBlurHandler =
this.onBlur_.bind(this);\n           
this.input_.addEventListener('input',
this.boundUpdateClassesHandler);\n           
this.input_.addEventListener('focus', this.boundFocusHandler);\n 
          this.input_.addEventListener('blur',
this.boundBlurHandler);\n            if (this.maxRows !==
this.Constant_.NO_MAX_ROWS) {\n                // TODO: This should handle
pasting multi line text.\n                // Currently doesn't.\n     
          this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n         
      this.input_.addEventListener('keydown',
this.boundKeyDownHandler);\n            }\n            var invalid =
this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n           
this.updateClasses_();\n           
this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n            if
(invalid) {\n               
this.element_.classList.add(this.CssClasses_.IS_INVALID);\n            }\n 
      }\n    }\n};\n/**\n   * Downgrade the component\n   *\n   *
@private\n   */\nMaterialTextfield.prototype.mdlDowngrade_ = function ()
{\n    this.input_.removeEventListener('input',
this.boundUpdateClassesHandler);\n   
this.input_.removeEventListener('focus',
this.boundFocusHandler);\n   
this.input_.removeEventListener('blur', this.boundBlurHandler);\n
   if (this.boundKeyDownHandler) {\n       
this.input_.removeEventListener('keydown',
this.boundKeyDownHandler);\n    }\n};\n/**\n   * Public alias for the
downgrade method.\n   *\n   * @public\n  
*/\nMaterialTextfield.prototype.mdlDowngrade =
MaterialTextfield.prototype.mdlDowngrade_;\nMaterialTextfield.prototype['mdlDowngrade']
= MaterialTextfield.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialTextfield,\n 
  classAsString: 'MaterialTextfield',\n    cssClass:
'mdl-js-textfield',\n    widget: true\n});","/**\n *
@license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n *
Licensed under the Apache License, Version 2.0 (the
\"License\");\n * you may not use this file except in compliance
with the License.\n * You may obtain a copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for
Tooltip MDL component.\n   * Implements MDL component design pattern
defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialTooltip = function MaterialTooltip(element)
{\n    this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialTooltip'] =
MaterialTooltip;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialTooltip.prototype.Constant_ = {};\n/**\n   * Store strings for
class names defined by this component that are used in\n   * JavaScript.
This allows us to simply change it in one place should we\n   * decide to
modify at a later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialTooltip.prototype.CssClasses_ = { IS_ACTIVE:
'is-active' };\n/**\n   * Handle mouseenter for tooltip.\n   *\n 
 * @param {Event} event The event that fired.\n   * @private\n  
*/\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n   
event.stopPropagation();\n    var props =
event.target.getBoundingClientRect();\n    var left = props.left +
props.width / 2;\n    var marginLeft = -1 * (this.element_.offsetWidth /
2);\n    if (left + marginLeft < 0) {\n        this.element_.style.left
= 0;\n        this.element_.style.marginLeft = 0;\n    } else {\n       
this.element_.style.left = left + 'px';\n       
this.element_.style.marginLeft = marginLeft + 'px';\n    }\n   
this.element_.style.top = props.top + props.height + 10 + 'px';\n
   this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n   
window.addEventListener('scroll', this.boundMouseLeaveHandler,
false);\n    window.addEventListener('touchmove',
this.boundMouseLeaveHandler, false);\n};\n/**\n   * Handle mouseleave for
tooltip.\n   *\n   * @param {Event} event The event that fired.\n   *
@private\n   */\nMaterialTooltip.prototype.handleMouseLeave_ = function
(event) {\n    event.stopPropagation();\n   
this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n   
window.removeEventListener('scroll',
this.boundMouseLeaveHandler);\n   
window.removeEventListener('touchmove',
this.boundMouseLeaveHandler, false);\n};\n/**\n   * Initialize element.\n  
*/\nMaterialTooltip.prototype.init = function () {\n    if (this.element_)
{\n        var forElId = this.element_.getAttribute('for');\n    
   if (forElId) {\n            this.forElement_ =
document.getElementById(forElId);\n        }\n        if (this.forElement_)
{\n            // Tabindex needs to be set for `blur` events to be
emitted\n            if
(!this.forElement_.hasAttribute('tabindex')) {\n               
this.forElement_.setAttribute('tabindex', '0');\n      
     }\n            this.boundMouseEnterHandler =
this.handleMouseEnter_.bind(this);\n            this.boundMouseLeaveHandler
= this.handleMouseLeave_.bind(this);\n           
this.forElement_.addEventListener('mouseenter',
this.boundMouseEnterHandler, false);\n           
this.forElement_.addEventListener('click',
this.boundMouseEnterHandler, false);\n           
this.forElement_.addEventListener('blur',
this.boundMouseLeaveHandler);\n           
this.forElement_.addEventListener('touchstart',
this.boundMouseEnterHandler, false);\n           
this.forElement_.addEventListener('mouseleave',
this.boundMouseLeaveHandler);\n        }\n    }\n};\n/**\n   * Downgrade
the component\n   *\n   * @private\n  
*/\nMaterialTooltip.prototype.mdlDowngrade_ = function () {\n    if
(this.forElement_) {\n       
this.forElement_.removeEventListener('mouseenter',
this.boundMouseEnterHandler, false);\n       
this.forElement_.removeEventListener('click',
this.boundMouseEnterHandler, false);\n       
this.forElement_.removeEventListener('touchstart',
this.boundMouseEnterHandler, false);\n       
this.forElement_.removeEventListener('mouseleave',
this.boundMouseLeaveHandler);\n    }\n};\n/**\n   * Public alias for the
downgrade method.\n   *\n   * @public\n  
*/\nMaterialTooltip.prototype.mdlDowngrade =
MaterialTooltip.prototype.mdlDowngrade_;\nMaterialTooltip.prototype['mdlDowngrade']
= MaterialTooltip.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialTooltip,\n   
classAsString: 'MaterialTooltip',\n    cssClass:
'mdl-tooltip'\n});","/**\n * @license\n * Copyright
2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache
License, Version 2.0 (the \"License\");\n * you may not use this
file except in compliance with the License.\n * You may obtain a copy of
the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n
*\n * Unless required by applicable law or agreed to in writing, software\n
* distributed under the License is distributed on an \"AS IS\"
BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n * See the License for the specific language governing
permissions and\n * limitations under the License.\n */\n/**\n   * Class
constructor for Data Table Card MDL component.\n   * Implements MDL
component design pattern defined at:\n   *
https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialDataTable = function
MaterialDataTable(element) {\n    this.element_ = element;\n    //
Initialize instance.\n   
this.init();\n};\nwindow['MaterialDataTable'] =
MaterialDataTable;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialDataTable.prototype.Constant_ = {};\n/**\n   * Store strings
for class names defined by this component that are used in\n   *
JavaScript. This allows us to simply change it in one place should we\n   *
decide to modify at a later date.\n   *\n   * @enum {string}\n   *
@private\n   */\nMaterialDataTable.prototype.CssClasses_ = {\n   
DATA_TABLE: 'mdl-data-table',\n    SELECTABLE:
'mdl-data-table--selectable',\n    SELECT_ELEMENT:
'mdl-data-table__select',\n    IS_SELECTED:
'is-selected',\n    IS_UPGRADED:
'is-upgraded'\n};\n/**\n   * Generates and returns a function
that toggles the selection state of a\n   * single row (or multiple
rows).\n   *\n   * @param {Element} checkbox Checkbox that toggles the
selection state.\n   * @param {HTMLElement} row Row to toggle when checkbox
changes.\n   * @param {(Array<Object>|NodeList)=} opt_rows Rows to
toggle when checkbox changes.\n   * @private\n  
*/\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row,
opt_rows) {\n    if (row) {\n        return function () {\n            if
(checkbox.checked) {\n               
row.classList.add(this.CssClasses_.IS_SELECTED);\n            } else {\n   
            row.classList.remove(this.CssClasses_.IS_SELECTED);\n          
 }\n        }.bind(this);\n    }\n    if (opt_rows) {\n        return
function () {\n            var i;\n            var el;\n            if
(checkbox.checked) {\n                for (i = 0; i < opt_rows.length;
i++) {\n                    el =
opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n
                   el['MaterialCheckbox'].check();\n             
      opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n           
    }\n            } else {\n                for (i = 0; i <
opt_rows.length; i++) {\n                    el =
opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n
                   el['MaterialCheckbox'].uncheck();\n           
        opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n      
         }\n            }\n        }.bind(this);\n    }\n};\n/**\n   *
Creates a checkbox for a single or or multiple rows and hooks up the\n   *
event handling.\n   *\n   * @param {HTMLElement} row Row to toggle when
checkbox changes.\n   * @param {(Array<Object>|NodeList)=} opt_rows
Rows to toggle when checkbox changes.\n   * @private\n  
*/\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows)
{\n    var label = document.createElement('label');\n    var
labelClasses = [\n        'mdl-checkbox',\n       
'mdl-js-checkbox',\n        'mdl-js-ripple-effect',\n  
     this.CssClasses_.SELECT_ELEMENT\n    ];\n    label.className =
labelClasses.join(' ');\n    var checkbox =
document.createElement('input');\n    checkbox.type =
'checkbox';\n   
checkbox.classList.add('mdl-checkbox__input');\n   
checkbox.addEventListener('change', this.selectRow_(checkbox,
row, opt_rows));\n    label.appendChild(checkbox);\n   
componentHandler.upgradeElement(label, 'MaterialCheckbox');\n   
return label;\n};\n/**\n   * Initialize element.\n  
*/\nMaterialDataTable.prototype.init = function () {\n    if
(this.element_) {\n        var firstHeader =
this.element_.querySelector('th');\n        var rows =
this.element_.querySelector('tbody').querySelectorAll('tr');\n
       if (this.element_.classList.contains(this.CssClasses_.SELECTABLE))
{\n            var th = document.createElement('th');\n          
 var headerCheckbox = this.createCheckbox_(null, rows);\n           
th.appendChild(headerCheckbox);\n           
firstHeader.parentElement.insertBefore(th, firstHeader);\n            for
(var i = 0; i < rows.length; i++) {\n                var firstCell =
rows[i].querySelector('td');\n                if (firstCell) {\n 
                  var td = document.createElement('td');\n       
            var rowCheckbox = this.createCheckbox_(rows[i]);\n             
      td.appendChild(rowCheckbox);\n                   
rows[i].insertBefore(td, firstCell);\n                }\n            }\n   
    }\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n
   }\n};\n// The component registers itself. It can assume componentHandler
is available\n// in the global scope.\ncomponentHandler.register({\n   
constructor: MaterialDataTable,\n    classAsString:
'MaterialDataTable',\n    cssClass:
'mdl-js-data-table'\n});","/**\n * @license\n *
Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the
Apache License, Version 2.0 (the \"License\");\n * you may not
use this file except in compliance with the License.\n * You may obtain a
copy of the License at\n *\n *     
http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by
applicable law or agreed to in writing, software\n * distributed under the
License is distributed on an \"AS IS\" BASIS,\n * WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See
the License for the specific language governing permissions and\n *
limitations under the License.\n */\n/**\n   * Class constructor for Ripple
MDL component.\n   * Implements MDL component design pattern defined at:\n 
 * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   *
@constructor\n   * @param {HTMLElement} element The element that will be
upgraded.\n   */\nvar MaterialRipple = function MaterialRipple(element) {\n
   this.element_ = element;\n    // Initialize instance.\n   
this.init();\n};\nwindow['MaterialRipple'] =
MaterialRipple;\n/**\n   * Store constants in one place so they can be
updated easily.\n   *\n   * @enum {string | number}\n   * @private\n  
*/\nMaterialRipple.prototype.Constant_ = {\n    INITIAL_SCALE:
'scale(0.0001, 0.0001)',\n    INITIAL_SIZE: '1px',\n   
INITIAL_OPACITY: '0.4',\n    FINAL_OPACITY: '0',\n   
FINAL_SCALE: ''\n};\n/**\n   * Store strings for class names
defined by this component that are used in\n   * JavaScript. This allows us
to simply change it in one place should we\n   * decide to modify at a
later date.\n   *\n   * @enum {string}\n   * @private\n  
*/\nMaterialRipple.prototype.CssClasses_ = {\n    RIPPLE_CENTER:
'mdl-ripple--center',\n    RIPPLE_EFFECT_IGNORE_EVENTS:
'mdl-js-ripple-effect--ignore-events',\n    RIPPLE:
'mdl-ripple',\n    IS_ANIMATING: 'is-animating',\n   
IS_VISIBLE: 'is-visible'\n};\n/**\n   * Handle mouse / finger
down on element.\n   *\n   * @param {Event} event The event that fired.\n  
* @private\n   */\nMaterialRipple.prototype.downHandler_ = function (event)
{\n    if (!this.rippleElement_.style.width &&
!this.rippleElement_.style.height) {\n        var rect =
this.element_.getBoundingClientRect();\n        this.boundHeight =
rect.height;\n        this.boundWidth = rect.width;\n       
this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height *
rect.height) * 2 + 2;\n        this.rippleElement_.style.width =
this.rippleSize_ + 'px';\n       
this.rippleElement_.style.height = this.rippleSize_ + 'px';\n   
}\n    this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n   
if (event.type === 'mousedown' &&
this.ignoringMouseDown_) {\n        this.ignoringMouseDown_ = false;\n    }
else {\n        if (event.type === 'touchstart') {\n           
this.ignoringMouseDown_ = true;\n        }\n        var frameCount =
this.getFrameCount();\n        if (frameCount > 0) {\n           
return;\n        }\n        this.setFrameCount(1);\n        var bound =
event.currentTarget.getBoundingClientRect();\n        var x;\n        var
y;\n        // Check if we are handling a keyboard click.\n        if
(event.clientX === 0 && event.clientY === 0) {\n            x =
Math.round(bound.width / 2);\n            y = Math.round(bound.height /
2);\n        } else {\n            var clientX = event.clientX ?
event.clientX : event.touches[0].clientX;\n            var clientY =
event.clientY ? event.clientY : event.touches[0].clientY;\n            x =
Math.round(clientX - bound.left);\n            y = Math.round(clientY -
bound.top);\n        }\n        this.setRippleXY(x, y);\n       
this.setRippleStyles(true);\n       
window.requestAnimationFrame(this.animFrameHandler.bind(this));\n   
}\n};\n/**\n   * Handle mouse / finger up on element.\n   *\n   * @param
{Event} event The event that fired.\n   * @private\n  
*/\nMaterialRipple.prototype.upHandler_ = function (event) {\n    //
Don't fire for the artificial \"mouseup\" generated by a
double-click.\n    if (event && event.detail !== 2) {\n       
this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n    }\n
   // Allow a repaint to occur before removing this class, so the
animation\n    // shows for tap events, which seem to trigger a mouseup too
soon after\n    // mousedown.\n    window.setTimeout(function () {\n       
this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n   
}.bind(this), 0);\n};\n/**\n   * Initialize element.\n  
*/\nMaterialRipple.prototype.init = function () {\n    if (this.element_)
{\n        var recentering =
this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n       
if
(!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS))
{\n            this.rippleElement_ =
this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n    
       this.frameCount_ = 0;\n            this.rippleSize_ = 0;\n          
 this.x_ = 0;\n            this.y_ = 0;\n            // Touch start
produces a compat mouse down event, which would cause a\n            //
second ripples. To avoid that, we use this property to ignore the first\n  
         // mouse down after a touch start.\n           
this.ignoringMouseDown_ = false;\n            this.boundDownHandler =
this.downHandler_.bind(this);\n           
this.element_.addEventListener('mousedown',
this.boundDownHandler);\n           
this.element_.addEventListener('touchstart',
this.boundDownHandler);\n            this.boundUpHandler =
this.upHandler_.bind(this);\n           
this.element_.addEventListener('mouseup', this.boundUpHandler);\n
           this.element_.addEventListener('mouseleave',
this.boundUpHandler);\n           
this.element_.addEventListener('touchend',
this.boundUpHandler);\n           
this.element_.addEventListener('blur', this.boundUpHandler);\n   
        /**\n         * Getter for frameCount_.\n         * @return
{number} the frame count.\n         */\n            this.getFrameCount =
function () {\n                return this.frameCount_;\n            };\n  
         /**\n         * Setter for frameCount_.\n         * @param
{number} fC the frame count.\n         */\n            this.setFrameCount =
function (fC) {\n                this.frameCount_ = fC;\n            };\n  
         /**\n         * Getter for rippleElement_.\n         * @return
{Element} the ripple element.\n         */\n           
this.getRippleElement = function () {\n                return
this.rippleElement_;\n            };\n            /**\n         * Sets the
ripple X and Y coordinates.\n         * @param  {number} newX the new X
coordinate\n         * @param  {number} newY the new Y coordinate\n        
*/\n            this.setRippleXY = function (newX, newY) {\n               
this.x_ = newX;\n                this.y_ = newY;\n            };\n         
  /**\n         * Sets the ripple styles.\n         * @param  {boolean}
start whether or not this is the start frame.\n         */\n           
this.setRippleStyles = function (start) {\n                if
(this.rippleElement_ !== null) {\n                    var
transformString;\n                    var scale;\n                    var
size;\n                    var offset = 'translate(' + this.x_ +
'px, ' + this.y_ + 'px)';\n                    if
(start) {\n                        scale = this.Constant_.INITIAL_SCALE;\n 
                      size = this.Constant_.INITIAL_SIZE;\n                
   } else {\n                        scale = this.Constant_.FINAL_SCALE;\n 
                      size = this.rippleSize_ + 'px';\n          
             if (recentering) {\n                            offset =
'translate(' + this.boundWidth / 2 + 'px, ' +
this.boundHeight / 2 + 'px)';\n                        }\n       
            }\n                    transformString = 'translate(-50%,
-50%) ' + offset + scale;\n                   
this.rippleElement_.style.webkitTransform = transformString;\n             
      this.rippleElement_.style.msTransform = transformString;\n           
        this.rippleElement_.style.transform = transformString;\n           
        if (start) {\n                       
this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n     
              } else {\n                       
this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n        
           }\n                }\n            };\n            /**\n        
* Handles an animation frame.\n         */\n           
this.animFrameHandler = function () {\n                if
(this.frameCount_-- > 0) {\n                   
window.requestAnimationFrame(this.animFrameHandler.bind(this));\n          
     } else {\n                    this.setRippleStyles(false);\n          
     }\n            };\n        }\n    }\n};\n/**\n   * Downgrade the
component\n   *\n   * @private\n  
*/\nMaterialRipple.prototype.mdlDowngrade_ = function () {\n   
this.element_.removeEventListener('mousedown',
this.boundDownHandler);\n   
this.element_.removeEventListener('touchstart',
this.boundDownHandler);\n   
this.element_.removeEventListener('mouseup',
this.boundUpHandler);\n   
this.element_.removeEventListener('mouseleave',
this.boundUpHandler);\n   
this.element_.removeEventListener('touchend',
this.boundUpHandler);\n   
this.element_.removeEventListener('blur',
this.boundUpHandler);\n};\n/**\n   * Public alias for the downgrade
method.\n   *\n   * @public\n   */\nMaterialRipple.prototype.mdlDowngrade =
MaterialRipple.prototype.mdlDowngrade_;\nMaterialRipple.prototype['mdlDowngrade']
= MaterialRipple.prototype.mdlDowngrade;\n// The component registers
itself. It can assume componentHandler is available\n// in the global
scope.\ncomponentHandler.register({\n    constructor: MaterialRipple,\n   
classAsString: 'MaterialRipple',\n    cssClass:
'mdl-js-ripple-effect',\n    widget:
false\n});"],"sourceRoot":"/source/"}