{"version":3,"sources":["../main.js"],"names":["window","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","callback","setTimeout","app","doc","undefined","$","expr","context","querySelector","$$","querySelectorAll","addScript","src","parent","async","onload","script","createElement","appendChild","self","Promise","fetch","forEach","elements","fn","i","len","console","log","String","length","forEachElement","addEvent","evt","el","addEventListener","e","findUp","startEl","selector","attr","endTag","rspObj","body","moveUp","matches","val","getAttribute","parentNode","mq","mediaQuery","matchMedia","eqHeight","row","cols","imagePromises","classList","contains","img","push","resolve","reject","complete","all","then","setColumnHeights","warn","col","add","h","offsetHeight","style","height","url","options","type","callbackFn","opts","headers","util","extend","method","JSON","stringify","rsp","json","data","d","parse","text","elm","_matches","document","ownerDocument","item","CustomEvent","event","params","bubbles","cancelable","detail","createEvent","initCustomEvent","prototype","Event","noop","methods","activeAlert","cssClasses","ALERT_ACTIVE","ALERT_EL","ALERT_HDR","ALERT_INFO","BTN","BTN_CONFIRM","BTN_CONTAINER","BTN_DISMISS","CONTAINER","keys","ESCAPE","Alert","alertContainer","createAlertElements","onConfirm","onDismiss","promptAlert","bind","updateButtons","showAlert","handleKeyDown","dismissAlert","addEventListeners","alertEl","alertHeader","alertInfo","btnContainer","btnDismiss","textContent","btnConfirm","hdr","content","btnConfirmText","btnDismissText","fnConfirm","fnDismiss","innerHTML","MaterialButton","removeEventListener","keyCode","remove","handleKeyPress","element","element_","init","cssClasses_","RIPPLE_BUTTON","RIPPLE_CONTAINER","RIPPLE","RIPPLE_CENTER","RIPPLE_IS_ANIMATING","RIPPLE_IS_VISIBLE","RippleConstant","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","initRipple","recentering","addRippleElements","frameCount_","rippleSize_","x_","y_","ignoringMouseDown_","boundDownHandler","downHandler_","boundUpHandler","upHandler_","getFrameCount","setFrameCount","fC","getRippleElement","rippleElement_","setRippleXY","newX","newY","setRippleStyles","start","transformString","scale","size","offset","boundWidth","boundHeight","webkitTransform","msTransform","transform","animFrameHandler","container","boundRippleBlurHandler","blurHandler_","blur","disable","disabled","bound","x","y","clientX","clientY","width","rect","getBoundingClientRect","Math","sqrt","frameCount","currentTarget","round","touches","left","top","enable","btn","ContentBox","imgEl","imgLoaded","copy","addEvents","imgLoad","checkPosition","getWindowScrollPosition","wh","innerHeight","ContentCards","ckEditorSettings","allowedContent","toolbar","formCssClasses","chosenSelect","ckeditor","errorLabel","hidden","inputField","invalid","mediumEditor","required","tinyMCE","Form","fields","reqFields","inputFields","initFormElements","initEditors","checkActiveInputs","validateFields","collectData","setFieldValues","clearForm","select","input","Select","tag","tagName","toLowerCase","TextBox","field","MediumEditor","placeholder","CKEDITOR","replace","id","CKFinder","setupCKEditor","instances","tinymce","lbl","checkForValue","isValid","getData","trim","getValue","selectedIndex","value","key","checked","parseInt","parseFloat","obj","setData","setValue","moment","format","multiple","opt","selected","jQuery","trigger","removeChild","config","apiKey","defaults","center","lat","lng","scrollwheel","zoom","markerIcons","path","default","mapStyles","Gmap","loadCallback","mapEl","map","markers","activeMarkerIndex","setConfigs","initMap","addMarker","clearMarkers","triggerResize","triggerMarkerClick","split","google","maps","Map","mapTypeControl","setOptions","styles","index","clickFn","me","marker","Marker","icon","anchor","Point","Size","position","addListener","m","setMap","setCenter","markerIndex","ACTIVE","BTN_CLOSE","CONTENT_CONTAINER","AdminModal","close","show","hide","setContent","ParallaxBanner","mblSrc","hasAttribute","medSrc","addImage","setImageAndPosition","existingDiv","div","backgroundImage","offsetTop","diff","banners","banner","ERROR_LABEL","INVALID_REQ_FIELD","MD_MENU","MENU","MENU_OPEN","LIST_ITEM","LIST_ITEM_HOVER","REQUIRED_FIELD","documentElement","label","menu","open","currentIndex","listItems","createMenu","setMenuPosition","showMenu","hideMenu","changeHandler","focusHanlder","blurHandler","keyDownHandler","bodyClickHandler","checkIfRequired","onChange","children","listItem","li","ListItem","bottom","offsetWidth","scrollTop","disableWindowScroll","enableWindowScroll","menuScrollTop","menuHeight","preventDefault","selectItem","target","errorLbl","setAttribute","removeAttribute","stopPropagation","ANIMATABLE","NAV_IN","SideNav","btnShow","sideNav","sideNavContainer","sideNavClose","showSideNav","hideSideNav","onTouchStart","onTouchMove","onTouchEnd","onTransitionEnd","update","startX","currentX","touchingSideNav","blockClicks","pageX","translateX","min","ACTIVE_FIELD_CLASS","DATE_SELECTOR","regExpressions","EMAIL","TEL","DATE","initDatePicker","focusHandler","validateField","picker","Pikaday","onSelect","getMoment","valid","minChars","prevError","msg","test","TOAST","Toast","createToastElement","duration","defaultDuration","hideTimeout","clearTimeout","now","scroll","getElementById","links","lastY","SCROLL_TIME","link","linkClick","page","scrollToYCoord","scrollToY","scrollTargetY","scrollY","speed","easing","currentTime","time","max","abs","PI_D2","PI","easingEquations","easeOutSine","pos","sin","easeInOutSine","cos","easeInOutQuint","pow","tick","p","t","scrollTo","cloneObj","obj1","obj2","callBackFn","instance","fnName","apply","arguments","btnNavTrigger","nav","URL","linkFound","href","indexOf","navigator","serviceWorker","register","registration","scope","catch","err"],"mappings":"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","file":"main.js","sourcesContent":["window.requestAnimationFrame = (function() {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n function( callback ){\r\n window.setTimeout(callback, 1000 / 60);\r\n };\r\n}());\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\nvar app = {};\r\n///\r\n/**\t\r\n * SI JavaScript library\r\n *\r\n * @author Jeremy Burton - jeremy@select-interactive.com\r\n * @version 0.1.1\r\n *\r\n * @description To provide crossbrowser support for Select Interactive\r\n * projects without relying on jQuery.\r\n * \r\n * Featured detection and polyfill for\r\n * Promises\r\n * Fetch\r\n * \r\n * Targeting features such as:\r\n * forEach\r\n * .matchMedia support\r\n * equal height columns\r\n * fetch\r\n */\r\n( function( window, doc, undefined ) {\r\n\r\n\t// $ - maps to querySelector to return an element\r\n\t// @elements - a node list of elements or selector\r\n\t// @contenxt - optional - the parent container of the elements. Defaults to document.\r\n\tvar $ = function( expr, context ) {\r\n\t\treturn typeof expr === 'string' ? ( context || doc ).querySelector( expr ) : expr || null;\r\n\t};\r\n\r\n\t// $$ - maps to querySelectorAll to return a node list of elements\r\n\t// @expr - the selector expression to search for\r\n\t// @contenxt - optional - the parent container of the elements. Defaults to document.\r\n\tvar $$ = function( expr, context ) {\r\n\t\treturn typeof expr === 'string' ? ( context || doc ).querySelectorAll( expr ) : expr || null;\r\n\t};\r\n\r\n\t// $.addScript - helper function to load scripts\r\n\t// @src - String - the source of the script to load\r\n\t// @parent - Element - the element that the script should be appended to\r\n\t// @async - Boolean - should the script be loaded async\r\n\t$.addScript = function( src, parent, async, onload ) {\r\n\t\tvar script = doc.createElement( 'script' );\r\n\t\tscript.src = src;\r\n\t\tscript.async = async;\r\n\r\n\t\tif ( onload ) {\r\n\t\t\tscript.onload = onload;\r\n\t\t}\r\n\r\n\t\tparent.appendChild( script );\r\n\t};\r\n\r\n\t// if we need to polyfill promises\r\n\tif ( typeof self.Promise === 'undefined' || !self.Promise ) {\r\n\t\t$.addScript( '/bower_components/es6-promise/promise.min.js', doc.querySelector( 'head' ), true );\r\n\t}\r\n\r\n\t// If we need to polyfill fetch\r\n\tif ( typeof self.fetch === 'undefined' || !self.fetch ) {\r\n\t\t$.addScript( '/bower_components/fetch/fetch.min.js', doc.querySelector( 'head' ), true );\r\n\t}\r\n\r\n\t// $.forEach / window.forEachElement = traverses a node list of elements and executes a function over them\r\n\t// @elements - a node list of elements or selector\r\n\t// @fn - the function to execute over the list of elements\r\n\t// @contenxt - optional - the parent container of the elements. Defaults to document.\r\n\t$.forEach = function( elements, fn, context ) {\r\n\t\tvar i = 0,\r\n len;\r\n\r\n\t\tif ( !elements || typeof elements === 'function' ) {\r\n\t\t\tconsole.log( 'elements is not a valid node list.' );\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( typeof elements === 'string' || elements instanceof String ) {\r\n\t\t\telements = $$( elements, context );\r\n\t\t}\r\n\r\n\t\tlen = elements.length;\r\n\r\n\t\tfor ( ; i < len; i++ ) {\r\n\t\t\tif ( fn( elements[i], i ) ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// keep backwards compatibility for forEachElement\r\n\twindow.forEachElement = $.forEach;\r\n\r\n\t// $.addEvent - traverses a node list of elements and attaches and event handler to them\r\n\t// @elements - a node list of elements or selector \r\n\t// @evt - the event to watch for (i.e. 'click', 'mouseenter')\r\n\t// @fn - the function to execute when the event is raised\r\n\t// @contenxt - optional - the parent container of the elements. Defaults to document.\r\n\t$.addEvent = function( elements, evt, fn, context ) {\r\n\t\tif ( !elements || typeof elements === 'function' ) {\r\n\t\t\tconsole.log( 'elements is not a valid node list.' );\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( typeof elements === 'string' || elements instanceof String ) {\r\n\t\t\telements = $$( elements, context );\r\n\t\t}\r\n\r\n\t\t$.forEach( elements, function( el ) {\r\n\t\t\tel.addEventListener( evt, function( e ) {\r\n\t\t\t\tfn( e, el );\r\n\t\t\t}, false );\r\n\t\t} );\r\n\t};\r\n\r\n\t// $.findUp - helper function to recursively traverse up the DOM to find a specified element \r\n\t// @startEl - the element that we start at and move up from\r\n\t// @selector - the selector of the element we are looking for\r\n\t// @attr - optional - the data attribute of the element we may want a value for\r\n\t// @endTag - optional - the selector of the end tag to stop at. Defaults to the body tag.\r\n\t// @fn - optional - a function to run once the element has been found\r\n\t$.findUp = function( startEl, selector, attr, endTag, fn ) {\r\n\t\tvar el = startEl,\r\n\t\t\trspObj = {};\r\n\r\n\t\tif ( !endTag ) {\r\n\t\t\tendTag = doc.body;\r\n\t\t}\r\n\r\n\t\tfunction moveUp() {\r\n\t\t\tif ( $.matches( el, selector ) ) {\r\n\t\t\t\trspObj = {\r\n\t\t\t\t\tel: el,\r\n\t\t\t\t\tval: attr && attr.length ? el.getAttribute( attr ) : ''\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif ( fn ) {\r\n\t\t\t\t\tfn( rspObj );\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn rspObj;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tel = el.parentNode;\r\n\r\n\t\t\t\tif ( el === endTag || $.matches( el, endTag ) ) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn moveUp();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn moveUp();\r\n\t};\r\n\r\n\t// $.mq - helper function to check for mediaquery\r\n\t// @mediaQuery - the mediaquery to test for (i.e. '(min-width:1024px)')\r\n\t$.mq = function( mediaQuery ) {\r\n\t\treturn !( window.matchMedia ) || ( window.matchMedia && window.matchMedia( mediaQuery ).matches );\r\n\t};\r\n\r\n\t// keep backwards compatibility for mq\r\n\twindow.mq = $.mq;\r\n\r\n\t// $.eqHeight - Helper function to set columns to the same height\r\n\t// @context - Optional - Element - the parent element to find rows in. Defaults to body.\r\n\t$.eqHeight = function( context ) {\r\n\t\tif ( !context || !context.querySelector ) {\r\n\t\t\tcontext = doc;\r\n\t\t}\r\n\r\n\t\t// if the promise polyfill hasn't loaded for browsers that need it\r\n\t\tif ( typeof self.Promise === 'undefined' || !self.Promise ) {\r\n\t\t\tsetTimeout( function() {\r\n\t\t\t\t$.eqHeight( context );\r\n\t\t\t}, 10 );\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// collect all of the rows\r\n\t\t$.forEach( '.eq-height', function( row ) {\r\n\t\t\tvar cols = $$( '.eq-height-item', row ),\r\n\r\n\t\t\t\t// keep all the image promises as an array\r\n\t\t\t\timagePromises = [];\r\n\r\n\t\t\t// only if we are over a mq of 768px or the row has class .mbl-eq-height\r\n\t\t\tif ( $.mq( '(min-width:768px)' ) || row.classList.contains( 'mbl-eq-height' ) ) {\r\n\r\n\t\t\t\t// check if this is large item only\r\n\t\t\t\tif ( !row.classList.contains( 'eq-height-item-lg' ) || $.mq( '(min-width:1024px)' ) ) {\r\n\t\t\t\t\t// loop through any images, create a promise for them and add to the imagePromises array\r\n\t\t\t\t\t$.forEach( 'img', function( img ) {\r\n\t\t\t\t\t\timagePromises.push( new Promise( function( resolve, reject ) {\r\n\t\t\t\t\t\t\t// the image is cached (or has already loaded?)\r\n\t\t\t\t\t\t\tif ( img.complete ) {\r\n\t\t\t\t\t\t\t\tresolve( this );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t// image has loaded\r\n\t\t\t\t\t\t\t\timg.addEventListener( 'load', function() {\r\n\t\t\t\t\t\t\t\t\tconsole.log( 'image loaded' );\r\n\t\t\t\t\t\t\t\t\tresolve( this );\r\n\t\t\t\t\t\t\t\t}, false );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} ) );\r\n\t\t\t\t\t}, row );\r\n\r\n\t\t\t\t\t// if there are images, wait for them to all load before setting the column height\r\n\t\t\t\t\tif ( imagePromises.length ) {\r\n\t\t\t\t\t\tPromise.all( imagePromises ).then( function() {\r\n\t\t\t\t\t\t\t// all images have been loaded\r\n\t\t\t\t\t\t\tsetColumnHeights( cols );\r\n\t\t\t\t\t\t}, function() {\r\n\t\t\t\t\t\t\tconsole.warn( 'An image has failed to load.' );\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// if no images in the container/row, set the column heights now\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tsetColumnHeights( cols );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t$.forEach( cols, function( col ) {\r\n\t\t\t\t\t\tcol.classList.add( 'in' );\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t$.forEach( cols, function( col ) {\r\n\t\t\t\t\tcol.classList.add( 'in' );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t}, context );\r\n\r\n\t\tfunction setColumnHeights( cols ) {\r\n\t\t\tvar h = 0;\r\n\r\n\t\t\t// find the tallest column\r\n\t\t\t$.forEach( cols, function( col ) {\r\n\t\t\t\tif ( col.offsetHeight > h ) {\r\n\t\t\t\t\th = col.offsetHeight;\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\t// set the height of all the columns to the tallest one\r\n\t\t\t$.forEach( cols, function( col ) {\r\n\t\t\t\tcol.style.height = h + 'px';\r\n\t\t\t\tcol.classList.add( 'in' );\r\n\t\t\t} );\r\n\t\t}\r\n\t};\r\n\r\n\t// on load let's run eqHeight\r\n\twindow.addEventListener( 'load', $.eqHeight );\r\n\r\n\t// $.fetch - Replacing Ajax\r\n\t// url - String - the url to fetch\r\n\t// options - JSON object - options such as data, method, etc...\r\n\t// type - optional - String - the method type. Set to 'GET' to perform a GET request\r\n\t$.fetch = function( url, options, type, callbackFn ) {\r\n\t\tvar opts, headers;\r\n\r\n\t\t// if no url was passed in break now\r\n\t\tif ( !url ) {\r\n\t\t\tconsole.warn( 'No url provided to fetch' );\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// if the promise polyfill hasn't loaded yet\r\n\t\t// overwrite .then and wait 100 milliseconds then try again.\r\n\t\tif ( typeof self.Promise === 'undefined' || !self.Promise ) {\r\n\t\t\treturn {\r\n\t\t\t\tthen: function( fn ) {\r\n\t\t\t\t\tsetTimeout( function() {\r\n\t\t\t\t\t\treturn $.fetch( url, options, type, fn );\r\n\t\t\t\t\t}, 100 );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t// if the fetch polyfill hasn't loaded yet\r\n\t\t// overwrite .then and wait 100 milliseconds then try again.\r\n\t\tif ( !self.fetch ) {\r\n\t\t\treturn {\r\n\t\t\t\tthen: function( fn ) {\r\n\t\t\t\t\tsetTimeout( function() {\r\n\t\t\t\t\t\treturn $.fetch( url, options, type, fn );\r\n\t\t\t\t\t}, 100 );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// init options to empty object if none were passed in\r\n\t\t\tif ( !options ) {\r\n\t\t\t\toptions = {};\r\n\t\t\t}\r\n\r\n\t\t\t// check fetch request type -- assuming this would a POST request\r\n\t\t\tif ( !type || type !== 'GET' ) {\r\n\t\t\t\t// if additional headers need to be added\r\n\t\t\t\theaders = app.util.extend( {\r\n\t\t\t\t\t'Accept': 'application/json',\r\n\t\t\t\t\t'Content-type': 'application/json'\r\n\t\t\t\t}, options.headers || {} );\r\n\r\n\t\t\t\t// setup some default options for a POST request\r\n\t\t\t\t// and extend to include any options that were passed in\r\n\t\t\t\t// specifically the body property for webservice parameters\r\n\t\t\t\topts = app.util.extend( {\r\n\t\t\t\t\turl: url,\r\n\t\t\t\t\tbody: '',\r\n\t\t\t\t\tmethod: 'POST'\r\n\t\t\t\t}, options );\r\n\r\n\t\t\t\t// make sure we include all of the needed headers\r\n\t\t\t\topts.headers = headers;\r\n\r\n\t\t\t\t// make sure the body property has been stringified\r\n\t\t\t\tif ( opts.body && typeof opts.body !== 'string' && opts.body !== {} ) {\r\n\t\t\t\t\topts.body = JSON.stringify( opts.body );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// make the fetch call\r\n\t\t\t\treturn fetch( url, opts ).then( function( rsp ) {\r\n\t\t\t\t\treturn rsp.json();\r\n\t\t\t\t} ).then( function( data ) {\r\n\t\t\t\t\tif ( callbackFn ) {\r\n\t\t\t\t\t\tcallbackFn( data.d );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\treturn data.d;\r\n\t\t\t\t\t}\r\n\t\t\t\t} ).then( function( rsp ) {\r\n\t\t\t\t\treturn JSON.parse( rsp );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// if additional headers need to be added\r\n\t\t\t\theaders = app.util.extend( {\r\n\t\t\t\t\t'Content-Type': 'text/plain'\r\n\t\t\t\t}, options.headers || {} );\r\n\t\t\t\t\r\n\t\t\t\t// setup default options for a GET request\r\n\t\t\t\t// expecting text/plain content type by default\r\n\t\t\t\topts = app.util.extend( {\r\n\t\t\t\t\tmethod: 'GET'\r\n\t\t\t\t}, options );\r\n\r\n\t\t\t\t// make sure we include all of the needed headers\r\n\t\t\t\topts.headers = headers;\r\n\r\n\t\t\t\t// make the fetch call\r\n\t\t\t\treturn fetch( url, opts ).then( function( rsp ) {\r\n\t\t\t\t\treturn rsp.text();\r\n\t\t\t\t} ).then( function( rsp ) {\r\n\t\t\t\t\tif ( callbackFn ) {\r\n\t\t\t\t\t\tcallbackFn( rsp );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\treturn rsp;\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$.matches = function( elm, selector ) {\r\n\t\tvar _matches = ( elm.document || elm.ownerDocument ).querySelectorAll( selector ),\r\n\t\t\ti = _matches.length;\r\n\t\twhile ( --i >= 0 && _matches.item( i ) !== elm ) { }\r\n\t\treturn i > -1;\r\n\t};\r\n\r\n\tapp.$ = $;\r\n\tapp.$$ = $$;\r\n}( window, window.document, undefined ) );\r\n\r\n// Polyfill for CustomEvent\r\n( function() {\r\n\r\n\tif ( typeof window.CustomEvent === 'function' ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction CustomEvent( event, params ) {\r\n\t\tparams = params || { bubbles: false, cancelable: false, detail: undefined };\r\n\t\tvar evt = document.createEvent( 'CustomEvent' );\r\n\t\tevt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\r\n\t\treturn evt;\r\n\t}\r\n\r\n\tCustomEvent.prototype = window.Event.prototype;\r\n\r\n\twindow.CustomEvent = CustomEvent;\r\n} )();\r\n\r\n// Avoid 'console' errors in browsers that lack a console\r\n( function() {\r\n\tvar method;\r\n\tvar noop = function() { };\r\n\tvar methods = [\r\n 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',\r\n 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',\r\n 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',\r\n 'timeStamp', 'trace', 'warn'\r\n\t];\r\n\tvar length = methods.length;\r\n\tvar console = ( window.console = window.console || {} );\r\n\r\n\twhile ( length-- ) {\r\n\t\tmethod = methods[length];\r\n\r\n\t\t// Only stub undefined methods.\r\n\t\tif ( !console[method] ) {\r\n\t\t\tconsole[method] = noop;\r\n\t\t}\r\n\t}\r\n}() );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tlet activeAlert = null;\r\n\r\n\tconst cssClasses = {\r\n\t\tALERT_ACTIVE: 'alert-active',\r\n\t\tALERT_EL: 'alert-el',\r\n\t\tALERT_HDR: 'alert-header',\r\n\t\tALERT_INFO: 'alert-info',\r\n\t\tBTN: 'alert-btn',\r\n\t\tBTN_CONFIRM: 'alert-btn-confirm',\r\n\t\tBTN_CONTAINER: 'alert-btn-container',\r\n\t\tBTN_DISMISS: 'alert-btn-dismiss',\r\n\t\tCONTAINER: 'alert-container'\r\n\t};\r\n\r\n\tconst keys = {\r\n\t\tESCAPE: 27\r\n\t};\r\n\r\n\tclass Alert {\r\n\t\tconstructor() {\r\n\t\t\tif ( activeAlert ) {\r\n\t\t\t\tconsole.log( 'An alert already exists.' );\r\n\t\t\t\treturn activeAlert;\r\n\t\t\t}\r\n\r\n\t\t\tthis.alertContainer = this.createAlertElements();\r\n\r\n\t\t\tthis.onConfirm = function() { };\r\n\t\t\tthis.onDismiss = function() { };\r\n\r\n\t\t\tthis.promptAlert = this.promptAlert.bind( this );\r\n\t\t\tthis.updateButtons = this.updateButtons.bind( this );\r\n\t\t\tthis.showAlert = this.showAlert.bind( this );\r\n\t\t\tthis.handleKeyDown = this.handleKeyDown.bind( this );\r\n\t\t\tthis.dismissAlert = this.dismissAlert.bind( this );\r\n\r\n\t\t\tthis.addEventListeners();\r\n\r\n\t\t\tactiveAlert = this;\r\n\t\t}\r\n\r\n\t\tcreateAlertElements() {\r\n\t\t\t// if an existing alert is on the page,\r\n\t\t\t// use the same alert element instead of \r\n\t\t\t// adding a second one\r\n\t\t\t//if ( app.$( '.' + cssClasses.CONTAINER ) ) {\r\n\t\t\t//\treturn app.$( '.' + cssClasses.CONTAINER );\r\n\t\t\t//}\r\n\t\t\t//else {\r\n\t\t\tlet el = doc.createElement( 'div' );\r\n\t\t\tel.classList.add( cssClasses.CONTAINER );\r\n\t\t\tdoc.body.appendChild( el );\r\n\r\n\t\t\tthis.alertEl = doc.createElement( 'div' );\r\n\t\t\tthis.alertEl.classList.add( cssClasses.ALERT_EL );\r\n\r\n\t\t\tthis.alertHeader = doc.createElement( 'h3' );\r\n\t\t\tthis.alertHeader.classList.add( cssClasses.ALERT_HDR );\r\n\r\n\t\t\tthis.alertInfo = doc.createElement( 'div' );\r\n\t\t\tthis.alertInfo.classList.add( cssClasses.ALERT_INFO );\r\n\r\n\t\t\tlet btnContainer = doc.createElement( 'div' );\r\n\t\t\tbtnContainer.classList.add( cssClasses.BTN_CONTAINER );\r\n\r\n\t\t\tthis.btnDismiss = doc.createElement( 'button' );\r\n\t\t\tthis.btnDismiss.classList.add( cssClasses.BTN );\r\n\t\t\tthis.btnDismiss.classList.add( cssClasses.BTN_CONFIRM );\r\n\t\t\tthis.btnDismiss.classList.add( 'btn-ripple' );\r\n\t\t\tthis.btnDismiss.textContent = 'Dismiss';\r\n\r\n\t\t\tthis.btnConfirm = doc.createElement( 'button' );\r\n\t\t\tthis.btnConfirm.classList.add( cssClasses.BTN );\r\n\t\t\tthis.btnConfirm.classList.add( cssClasses.BTN_CONFIRM );\r\n\t\t\tthis.btnConfirm.classList.add( 'btn-ripple' );\r\n\t\t\tthis.btnConfirm.textContent = 'Confirm';\r\n\r\n\t\t\tbtnContainer.appendChild( this.btnDismiss );\r\n\t\t\tbtnContainer.appendChild( this.btnConfirm );\r\n\r\n\t\t\tel.appendChild( this.alertEl );\r\n\t\t\tthis.alertEl.appendChild( this.alertHeader );\r\n\t\t\tthis.alertEl.appendChild( this.alertInfo );\r\n\t\t\tthis.alertEl.appendChild( btnContainer );\r\n\r\n\t\t\treturn el;\r\n\t\t\t//}\r\n\t\t}\r\n\r\n\t\taddEventListeners() {\r\n\t\t\tthis.btnConfirm.addEventListener( 'click', this.onConfirm, false );\r\n\t\t\tthis.btnDismiss.addEventListener( 'click', this.onDismiss, false );\r\n\t\t}\r\n\r\n\t\tpromptAlert( hdr, content, btnConfirmText, btnDismissText, fnConfirm, fnDismiss ) {\r\n\t\t\tthis.alertHeader.textContent = hdr;\r\n\t\t\tthis.alertInfo.innerHTML = content;\r\n\t\t\tthis.updateButtons( btnConfirmText, btnDismissText, fnConfirm, fnDismiss );\r\n\t\t\tthis.showAlert();\r\n\r\n\t\t\tdoc.body.addEventListener( 'keydown', this.handleKeyDown, false );\r\n\t\t}\r\n\r\n\t\tupdateButtons( btnConfirmText, btnDismissText, fnConfirm, fnDismiss ) {\r\n\t\t\tthis.btnConfirm.textContent = btnConfirmText;\r\n\t\t\tthis.btnDismiss.textContent = btnDismissText;\r\n\r\n\t\t\tthis.btnDismiss.MaterialButton = new MaterialButton( this.btnDismiss );\r\n\t\t\tthis.btnConfirm.MaterialButton = new MaterialButton( this.btnConfirm );\r\n\r\n\t\t\tthis.btnConfirm.removeEventListener( 'click', this.onConfirm, false );\r\n\t\t\tthis.btnDismiss.removeEventListener( 'click', this.onDismiss, false );\r\n\r\n\t\t\tthis.onConfirm = fnConfirm;\r\n\t\t\tthis.onDismiss = fnDismiss;\r\n\r\n\t\t\tthis.btnConfirm.addEventListener( 'click', this.onConfirm, false );\r\n\t\t\tthis.btnDismiss.addEventListener( 'click', this.onDismiss, false );\r\n\t\t}\r\n\r\n\t\tshowAlert() {\r\n\t\t\tdoc.body.classList.add( cssClasses.ALERT_ACTIVE );\r\n\t\t}\r\n\r\n\t\thandleKeyDown( e ) {\r\n\t\t\tif ( e.keyCode === keys.ESCAPE ) {\r\n\t\t\t\tthis.onDismiss();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdismissAlert() {\r\n\t\t\tdoc.body.classList.remove( cssClasses.ALERT_ACTIVE );\r\n\t\t\tdoc.body.removeEventListener( 'keydown', this.handleKeyPress, false );\r\n\t\t}\r\n\t}\r\n\r\n\tapp.Alert = Alert;\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2015 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tvar MaterialButton = function MaterialButton( element ) {\r\n\t\tthis.element_ = element;\r\n\t\tthis.init();\r\n\t};\r\n\r\n\twindow.MaterialButton = MaterialButton;\r\n\r\n\t// Definte css classes\r\n\tMaterialButton.prototype.cssClasses_ = {\r\n\t\tRIPPLE_BUTTON: 'btn-ripple',\r\n\t\tRIPPLE_CONTAINER: 'btn-ripple-container',\r\n\t\tRIPPLE: 'btn-ripple-element',\r\n\t\tRIPPLE_CENTER: 'btn-ripple-center',\r\n\t\tRIPPLE_IS_ANIMATING: 'is-animating',\r\n\t\tRIPPLE_IS_VISIBLE: 'is-visible'\r\n\t};\r\n\r\n\tMaterialButton.prototype.RippleConstant = {\r\n\t\tINITIAL_SCALE: 'scale(0.0001, 0.0001)',\r\n\t\tINITIAL_SIZE: '1px',\r\n\t\tINITIAL_OPACITY: '0.4',\r\n\t\tFINAL_OPACITY: '0',\r\n\t\tFINAL_SCALE: ''\r\n\t};\r\n\r\n\t// initialize the element\r\n\tMaterialButton.prototype.init = function() {\r\n\t\tif ( this.element_ ) {\r\n\t\t\t\r\n\t\t\t// if this button needs the ripple effect\r\n\t\t\t// add the necessary ripple elements and events\r\n\t\t\tif ( this.element_.classList.contains( this.cssClasses_.RIPPLE_BUTTON ) ) {\r\n\t\t\t\tthis.initRipple();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tMaterialButton.prototype.initRipple = function() {\r\n\t\tvar recentering;\r\n\r\n\t\t// first add the elements\r\n\t\tthis.addRippleElements();\r\n\r\n\t\t// set defaults and add event handlers\r\n\t\trecentering = this.element_.classList.contains( this.cssClasses_.RIPPLE_CENTER );\r\n\t\tthis.frameCount_ = 0;\r\n\t\tthis.rippleSize_ = 0;\r\n\t\tthis.x_ = 0;\r\n\t\tthis.y_ = 0;\r\n\r\n\t\t// Touch start produces a compat mouse down event, which would cause a\r\n\t\t// second ripple. To avoid that, we use this property to ignore the first\r\n\t\t// mouse down after a touch start.\r\n\t\tthis.ignoringMouseDown_ = false;\r\n\r\n\t\tthis.boundDownHandler = this.downHandler_.bind( this );\r\n\t\tthis.element_.addEventListener( 'mousedown', this.boundDownHandler, false );\r\n\t\tthis.element_.addEventListener( 'touchstart', this.boundDownHandler, false );\r\n\r\n\t\tthis.boundUpHandler = this.upHandler_.bind( this );\r\n\t\tthis.element_.addEventListener( 'mouseup', this.boundUpHandler, false );\r\n\t\tthis.element_.addEventListener( 'mouseleave', this.boundUpHandler, false );\r\n\t\tthis.element_.addEventListener( 'touchend', this.boundUpHandler, false );\r\n\t\tthis.element_.addEventListener( 'blur', this.boundUpHandler, false );\r\n\r\n\t\t// helpers\r\n\t\tthis.getFrameCount = function() {\r\n\t\t\treturn this.frameCount_;\r\n\t\t};\r\n\r\n\t\tthis.setFrameCount = function( fC ) {\r\n\t\t\tthis.frameCount_ = fC;\r\n\t\t};\r\n\r\n\t\tthis.getRippleElement = function() {\r\n\t\t\treturn this.rippleElement_;\r\n\t\t};\r\n\r\n\t\tthis.setRippleXY = function( newX, newY ) {\r\n\t\t\tthis.x_ = newX;\r\n\t\t\tthis.y_ = newY;\r\n\t\t};\r\n\r\n\t\t// styles\r\n\t\tthis.setRippleStyles = function( start ) {\r\n\t\t\tif ( this.rippleElement_ !== null ) {\r\n\t\t\t\tvar transformString, scale, size,\r\n\t\t\t\t\toffset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\r\n\r\n\t\t\t\tif ( start ) {\r\n\t\t\t\t\tscale = this.RippleConstant.INITIAL_SCALE;\r\n\t\t\t\t\tsize = this.RippleConstant.INITIAL_SIZE;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tscale = this.RippleConstant.FINAL_SCALE;\r\n\t\t\t\t\tsize = this.rippleSize_ + 'px';\r\n\r\n\t\t\t\t\tif ( recentering ) {\r\n\t\t\t\t\t\toffset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttransformString = 'translate(-50%, -50%) ' + offset + scale;\r\n\r\n\t\t\t\tthis.rippleElement_.style.webkitTransform = transformString;\r\n\t\t\t\tthis.rippleElement_.style.msTransform = transformString;\r\n\t\t\t\tthis.rippleElement_.style.transform = transformString;\r\n\r\n\t\t\t\tif ( start ) {\r\n\t\t\t\t\tthis.rippleElement_.classList.remove( this.cssClasses_.RIPPLE_IS_ANIMATING );\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.rippleElement_.classList.add( this.cssClasses_.RIPPLE_IS_ANIMATING );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// RAF\r\n\t\tthis.animFrameHandler = function() {\r\n\t\t\tif ( this.frameCount_-- > 0 ) {\r\n\t\t\t\trequestAnimationFrame( this.animFrameHandler.bind( this ) );\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.setRippleStyles( false );\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\tMaterialButton.prototype.addRippleElements = function() {\r\n\t\tvar container = doc.createElement( 'span' );\r\n\t\tcontainer.classList.add( this.cssClasses_.RIPPLE_CONTAINER );\r\n\r\n\t\tthis.rippleElement_ = doc.createElement( 'span' );\r\n\t\tthis.rippleElement_.classList.add( this.cssClasses_.RIPPLE );\r\n\r\n\t\tcontainer.appendChild( this.rippleElement_ );\r\n\r\n\t\tthis.boundRippleBlurHandler = this.blurHandler_.bind( this );\r\n\t\tthis.rippleElement_.addEventListener( 'mouseup', this.boundRippleBlurHandler );\r\n\t\tthis.element_.appendChild( container );\r\n\t};\r\n\r\n\t// blur event handler\r\n\tMaterialButton.prototype.blurHandler_ = function( e ) {\r\n\t\tif ( e ) {\r\n\t\t\tthis.element_.blur();\r\n\t\t}\r\n\t};\r\n\r\n\t// disable the button\r\n\tMaterialButton.prototype.disable = function() {\r\n\t\tthis.element_.disabled = true;\r\n\t};\r\n\r\n\t// button downHandler\r\n\tMaterialButton.prototype.downHandler_ = function( e ) {\r\n\t\tvar bound, x, y, clientX, clientY;\r\n\r\n\t\tif ( !this.rippleElement_.style.width && !this.rippleElement_.style.height ) {\r\n\t\t\tvar rect = this.element_.getBoundingClientRect();\r\n\t\t\tthis.boundHeight = rect.height;\r\n\t\t\tthis.boundWidth = rect.width;\r\n\t\t\tthis.rippleSize_ = Math.sqrt( rect.width * rect.width + rect.height * rect.height ) * 2 + 2;\r\n\t\t\tthis.rippleElement_.style.width = this.rippleSize_ + 'px';\r\n\t\t\tthis.rippleElement_.style.height = this.rippleSize_ + 'px';\r\n\t\t}\r\n\r\n\t\tthis.rippleElement_.classList.add( this.cssClasses_.RIPPLE_IS_VISIBLE );\r\n\r\n\t\tif ( e.type === 'mousedown' && this.ignoringMouseDown_ ) {\r\n\t\t\tthis.ignoringMouseDown_ = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif ( e.type === 'touchstart' ) {\r\n\t\t\t\tthis.ignoringMouseDown_ = true;\r\n\t\t\t}\r\n\r\n\t\t\tvar frameCount = this.getFrameCount();\r\n\t\t\tif ( frameCount > 0 ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setFrameCount( 1 );\r\n\r\n\t\t\tbound = e.currentTarget.getBoundingClientRect();\r\n\r\n\t\t\t// Check if we are handling a keyboard click.\r\n\t\t\tif ( e.clientX === 0 && e.clientY === 0 ) {\r\n\t\t\t\tx = Math.round( bound.width / 2 );\r\n\t\t\t\ty = Math.round( bound.height / 2 );\r\n\t\t\t} else {\r\n\t\t\t\tclientX = e.clientX ? e.clientX : e.touches[0].clientX;\r\n\t\t\t\tclientY = e.clientY ? e.clientY : e.touches[0].clientY;\r\n\t\t\t\tx = Math.round( clientX - bound.left );\r\n\t\t\t\ty = Math.round( clientY - bound.top );\r\n\t\t\t}\r\n\r\n\t\t\tthis.setRippleXY( x, y );\r\n\t\t\tthis.setRippleStyles( true );\r\n\r\n\t\t\twindow.requestAnimationFrame( this.animFrameHandler.bind( this ) );\r\n\t\t}\r\n\t};\r\n\r\n\t// button upHandler\r\n\tMaterialButton.prototype.upHandler_ = function( e ) {\r\n\t\t// Don't fire for the artificial \"mouseup\" generated by a double-click.\r\n\t\tif ( e && e.detail !== 2 ) {\r\n\t\t\tthis.rippleElement_.classList.remove( this.cssClasses_.RIPPLE_IS_VISIBLE );\r\n\t\t}\r\n\r\n\t\t// Allow a repaint to occur before removing this class, so the animation\r\n\t\t// shows for tap events, which seem to trigger a mouseup too soon after mousedown.\r\n\t\twindow.setTimeout( function() {\r\n\t\t\tthis.rippleElement_.classList.remove( this.cssClasses_.RIPPLE_IS_VISIBLE );\r\n\t\t}.bind( this ), 0 );\r\n\t};\r\n\r\n\t// enable the button\r\n\tMaterialButton.prototype.enable = function() {\r\n\t\tthis.element_.disabled = false;\r\n\t};\r\n\r\n\tapp.$.forEach( '.btn-ripple', function( btn ) {\r\n\t\tbtn.MaterialButton = new MaterialButton( btn );\r\n\t} );\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tclass ContentBox {\r\n\t\tconstructor( el ) {\r\n\t\t\tthis.container = el;\r\n\t\t\tthis.img = el.querySelector( '.content-box-img' );\r\n\t\t\tthis.imgEl = this.img.querySelector( 'img' );\r\n\t\t\tthis.imgLoaded = false;\r\n\t\t\tthis.copy = el.querySelector( '.content-box-copy' );\r\n\r\n\t\t\tthis.top = this.container.getBoundingClientRect().top;\r\n\t\t\t\r\n\t\t\tthis.addEvents = this.addEvents.bind( this );\r\n\t\t\tthis.imgLoad = this.imgLoad.bind( this );\r\n\t\t\tthis.checkPosition = this.checkPosition.bind( this );\r\n\r\n\t\t\tthis.addEvents();\r\n\t\t}\r\n\r\n\t\taddEvents() {\r\n\t\t\tif ( this.imgEl ) {\r\n\t\t\t\tif ( this.imgEl.complete ) {\r\n\t\t\t\t\tthis.imgLoaded = true;\r\n\t\t\t\t\tthis.checkPosition();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.imgEl.addEventListener( 'load', this.imgLoad );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\twindow.addEventListener( 'scroll', this.checkPosition );\r\n\t\t\twindow.addEventListener( 'touchmove', this.checkPosition );\r\n\t\t}\r\n\r\n\t\timgLoad() {\r\n\t\t\tthis.top = this.container.getBoundingClientRect().top;\r\n\t\t\tthis.imgLoaded = true;\r\n\t\t\tthis.checkPosition();\r\n\t\t}\r\n\r\n\t\tcheckPosition() {\r\n\t\t\tif ( app.$.mq( '(min-width:1024px)' ) ) {\r\n\t\t\t\tlet y = app.util.getWindowScrollPosition();\r\n\t\t\t\tlet wh = window.innerHeight;\r\n\r\n\t\t\t\tif ( y + wh - 120 >= this.top && this.imgLoaded ) {\r\n\t\t\t\t\tthis.container.classList.add( 'in' );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclass ContentCards {\r\n\t\tconstructor( el ) {\r\n\t\t\tthis.container = el;\r\n\t\t\tthis.top = this.container.getBoundingClientRect().top;\r\n\r\n\t\t\tthis.addEvents = this.addEvents.bind( this );\r\n\t\t\tthis.checkPosition = this.checkPosition.bind( this );\r\n\r\n\t\t\tthis.addEvents();\r\n\t\t}\r\n\r\n\t\taddEvents() {\r\n\t\t\twindow.addEventListener( 'scroll', this.checkPosition );\r\n\t\t\twindow.addEventListener( 'touchmove', this.checkPosition );\r\n\t\t}\r\n\r\n\t\tcheckPosition() {\r\n\t\t\tif ( app.$.mq( '(min-width:1024px)' ) ) {\r\n\t\t\t\tlet y = app.util.getWindowScrollPosition();\r\n\t\t\t\tlet wh = window.innerHeight;\r\n\r\n\t\t\t\tif ( y + wh - 50 >= this.top ) {\r\n\t\t\t\t\tthis.container.classList.add( 'in' );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twindow.addEventListener( 'DOMContentLoaded', () => {\r\n\t\tapp.$.forEach( '.content-box', el => {\r\n\t\t\tnew ContentBox( el );\r\n\t\t} );\r\n\r\n\t\tapp.$.forEach( '.content-cards', el => {\r\n\t\t\tnew ContentCards( el );\r\n\t\t} );\r\n\t} );\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tconst ckEditorSettings = {\r\n\t\tallowedContent: true,\r\n\t\theight: 350,\r\n\t\ttoolbar: 'Simple'\r\n\t};\r\n\r\n\tconst formCssClasses = {\r\n\t\tchosenSelect: 'chosen-select',\r\n\t\tckeditor: 'use-ckeditor',\r\n\t\terrorLabel: 'error-label',\r\n\t\thidden: 'hidden',\r\n\t\tinputField: 'input-field',\r\n\t\tinvalid: 'invalid',\r\n\t\tmediumEditor: 'use-medium-editor',\r\n\t\trequired: 'req',\r\n\t\ttinyMCE: 'use-tinymce'\r\n\t};\r\n\r\n\tclass Form {\r\n\t\t// When creating a new Form, we can pass in a selected element (i.e. doc.querySelect( '#form' ))\r\n\t\t// or we can pass in a selector (i.e. '#form' )\r\n\t\tconstructor( el ) {\r\n\t\t\tif ( typeof el === 'string' ) {\r\n\t\t\t\tel = app.$( el );\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.container = el;\r\n\t\t\tthis.fields = el.querySelectorAll( 'input:not([type=\"file\"]),textarea,select' );\r\n\t\t\tthis.reqFields = el.querySelectorAll( '.' + formCssClasses.required );\r\n\t\t\tthis.inputFields = el.querySelectorAll( '.' + formCssClasses.inputField );\r\n\r\n\t\t\tthis.initFormElements = this.initFormElements.bind( this );\r\n\t\t\tthis.initEditors = this.initEditors.bind( this );\r\n\t\t\tthis.checkActiveInputs = this.checkActiveInputs.bind( this );\r\n\t\t\tthis.validateFields = this.validateFields.bind( this );\r\n\t\t\tthis.collectData = this.collectData.bind( this );\r\n\t\t\tthis.setFieldValues = this.setFieldValues.bind( this );\r\n\t\t\tthis.clearForm = this.clearForm.bind( this );\r\n\r\n\t\t\tthis.initFormElements();\r\n\t\t\tthis.initEditors();\r\n\t\t}\r\n\r\n\t\t// This function will loop through all input field elements to check for\r\n\t\t// inputs and select elements to create our custom TextBox or Select objects\r\n\t\tinitFormElements() {\r\n\t\t\tapp.$.forEach( this.inputFields, container => {\r\n\t\t\t\tlet select = container.querySelector( 'select' );\r\n\t\t\t\tlet input = container.querySelector( 'input' );\r\n\t\t\t\t\r\n\t\t\t\tif ( select && !select.Select ) {\r\n\t\t\t\t\tselect.Select = new app.Select( select );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !input ) {\r\n\t\t\t\t\tinput = container.querySelector( 'textarea' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !input ) {\r\n\t\t\t\t\tinput = container.querySelector( '.' + formCssClasses.mediumEditor );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( input ) {\r\n\t\t\t\t\tlet tag = input.tagName.toLowerCase();\r\n\t\t\t\t\tlet type = input.type.toLowerCase();\r\n\r\n\t\t\t\t\tif ( !input.TextBox && type !== 'checkbox' && type !== 'radio' ) {\r\n\t\t\t\t\t\tinput.TextBox = new app.TextBox( input );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Helper functions to initialize textareas with MediumEditor or CKEDITOR\r\n\t\t// depending on specified class\r\n\t\tinitEditors() {\r\n\t\t\tapp.$.forEach( this.fields, field => {\r\n\t\t\t\tif ( field.classList.contains( formCssClasses.mediumEditor ) ) {\r\n\t\t\t\t\tif ( !window.MediumEditor ) {\r\n\t\t\t\t\t\tconsole.warn( 'MediumEditor source not found. Unable to use MediumEditor.' );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tnew MediumEditor( field, {\r\n\t\t\t\t\t\t\tplaceholder: {\r\n\t\t\t\t\t\t\t\ttext: ''\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if ( field.classList.contains( formCssClasses.ckeditor ) ) {\r\n\t\t\t\t\tif ( !window.CKEDITOR ) {\r\n\t\t\t\t\t\tconsole.warn( 'CKEDITOR source not found. Unable to use CKEDITOR' );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tCKEDITOR.replace( field.id, ckEditorSettings );\r\n\r\n\t\t\t\t\t\tif ( field.classList.contains( 'ckfinder' ) ) {\r\n\t\t\t\t\t\t\tCKFinder.setupCKEditor( CKEDITOR.instances[field.id], '/ckfinder/' );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif ( app.$( '.' + formCssClasses.tinyMCE ) ) {\r\n\t\t\t\t\ttinymce.init( {\r\n\t\t\t\t\t\tselector: '.' + formCssClasses.tinyMCE\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Check if inputs/selects have values to set or remove active class\r\n\t\t// on the sibling label\r\n\t\tcheckActiveInputs() {\r\n\t\t\tapp.$.forEach( this.inputFields, container => {\r\n\t\t\t\tlet lbl = container.querySelector( 'label' );\r\n\t\t\t\tlet select = container.querySelector( 'select' );\r\n\t\t\t\tlet input = container.querySelector( 'input' );\r\n\r\n\t\t\t\tif ( lbl ) {\r\n\t\t\t\t\tlbl.classList.remove( 'active' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( select && select.Select ) {\r\n\t\t\t\t\tselect.Select.checkForValue();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !input ) {\r\n\t\t\t\t\tinput = container.querySelector( 'textarea' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !input ) {\r\n\t\t\t\t\tinput = container.querySelector( '.' + formCssClasses.mediumEditor );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( input && input.TextBox ) {\r\n\t\t\t\t\tinput.TextBox.checkForValue();\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// Helper function to check if required fields have valid data\r\n\t\tvalidateFields() {\r\n\t\t\tlet isValid = true;\r\n\r\n\t\t\tapp.$.forEach( this.reqFields, field => {\r\n\t\t\t\tlet val = '';\r\n\t\t\t\tlet tag = field.tagName.toLowerCase();\r\n\r\n\t\t\t\tif ( field.classList.contains( formCssClasses.mediumEditor ) ) {\r\n\t\t\t\t\tval = field.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t\telse if ( field.classList.contains( formCssClasses.ckeditor ) ) {\r\n\t\t\t\t\tval = CKEDITOR.instances[field.id].getData().trim();\r\n\t\t\t\t}\r\n\t\t\t\telse if ( tag === 'select' ) {\r\n\t\t\t\t\tif ( field.Select ) {\r\n\t\t\t\t\t\tval = field.Select.getValue();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( !field.classList.contains( formCssClasses.chosenSelect ) ) {\r\n\t\t\t\t\t\tval = field.options[field.selectedIndex].value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tval = field.value.trim();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( val === '' || val === '-1' || val === -1 ) {\r\n\t\t\t\t\tfield.classList.add( formCssClasses.invalid );\r\n\t\t\t\t\tisValid = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfield.value = val;\r\n\t\t\t\t\tfield.classList.remove( formCssClasses.invalid );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\treturn isValid;\r\n\t\t}\r\n\r\n\t\t// Helper function to collect data from form fields and return as\r\n\t\t// JSON key/value pair object. Uses the element's name attribute as the key.\r\n\t\tcollectData() {\r\n\t\t\tlet params = {};\r\n\r\n\t\t\tapp.$.forEach( this.fields, field => {\r\n\t\t\t\tlet key = field.getAttribute( 'name' );\r\n\t\t\t\tlet val = '';\r\n\t\t\t\tlet tag = field.tagName.toLowerCase();\r\n\t\t\t\tlet type = field.type ? field.type.toLowerCase() : '';\r\n\r\n\t\t\t\tif ( type === 'checkbox' ) {\r\n\t\t\t\t\tval = field.checked;\r\n\t\t\t\t}\r\n\t\t\t\telse if ( field.classList.contains( formCssClasses.mediumEditor ) ) {\r\n\t\t\t\t\tval = field.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t\telse if ( field.classList.contains( formCssClasses.ckeditor ) ) {\r\n\t\t\t\t\tval = CKEDITOR.instances[field.id].getData().trim();\r\n\t\t\t\t}\r\n\t\t\t\telse if ( tag === 'select' ) {\r\n\t\t\t\t\tif ( field.Select ) {\r\n\t\t\t\t\t\tval = field.Select.getValue();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( !field.classList.contains( formCssClasses.chosenSelect ) ) {\r\n\t\t\t\t\t\tval = field.options[field.selectedIndex].value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tval = field.value.trim();\r\n\r\n\t\t\t\t\tif ( field.classList.contains( 'integer' ) ) {\r\n\t\t\t\t\t\tval = parseInt( val, 10 );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( field.classList.contains( 'decimal' ) ) {\r\n\t\t\t\t\t\tval = parseFloat( val );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tparams[key] = val;\r\n\t\t\t} );\r\n\r\n\t\t\treturn params;\r\n\t\t}\r\n\r\n\t\t// Helper function to set the values of form fields. Will use the \r\n\t\t// name attribute of each field element to select the respective value\r\n\t\t// from the obj parameter.\r\n\t\tsetFieldValues( obj ) {\r\n\t\t\tapp.$.forEach( this.fields, field => {\r\n\t\t\t\tlet val = obj[field.getAttribute( 'name' )];\r\n\t\t\t\tlet type = field.type ? field.type.toLowerCase() : '';\r\n\t\t\t\tlet tag = field.tagName.toLowerCase();\r\n\r\n\t\t\t\tif ( !obj ) {\r\n\t\t\t\t\tconsole.warn( 'Property does not exist for key ' + field.getAttribute( 'name' ) );\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif ( type === 'checkbox' ) {\r\n\t\t\t\t\t\tfield.checked = val;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( field.classList.contains( formCssClasses.mediumEditor ) ) {\r\n\t\t\t\t\t\tfield.innerHTML = val;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( field.classList.contains( formCssClasses.ckeditor ) ) {\r\n\t\t\t\t\t\tval = CKEDITOR.instances[field.id].setData( val );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( tag === 'select' && field.Select ) {\r\n\t\t\t\t\t\tfield.Select.setValue( val );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif ( field.classList.contains( 'input-date' ) ) {\r\n\t\t\t\t\t\t\tif ( obj[field.getAttribute( 'name' ) + 'Str'] ) {\r\n\t\t\t\t\t\t\t\tval = obj[field.getAttribute( 'name' ) + 'Str'];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tval = moment( val ).format( 'MM/DD/YYYY' );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfield.value = val;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\tthis.checkActiveInputs();\r\n\t\t}\r\n\r\n\t\t// Helper function to clear out the values of a form. Will additionally\r\n\t\t// remove all HTML from containers with class .row-preview and hide\r\n\t\t// all elements with class .btn-item-upload-delete. It will then\r\n\t\t// run checkActiveInputs to reset the labels.\r\n\t\tclearForm() {\r\n\t\t\tapp.$.forEach( this.fields, field => {\r\n\t\t\t\tlet lbl = field.querySelector( '.' + formCssClasses.errorLabel );\r\n\t\t\t\tlet type = field.type ? field.type.toLowerCase() : '';\r\n\t\t\t\tlet tag = field.tagName.toLowerCase();\r\n\r\n\t\t\t\tif ( type === 'checkbox' ) {\r\n\t\t\t\t\tfield.checked = false;\r\n\t\t\t\t}\r\n\t\t\t\telse if ( field.classList.contains( formCssClasses.mediumEditor ) ) {\r\n\t\t\t\t\tfield.innerHTML = '';\r\n\t\t\t\t}\r\n\t\t\t\telse if ( tag === 'textarea' ) {\r\n\t\t\t\t\tif ( field.classList.contains( formCssClasses.ckeditor ) ) {\r\n\t\t\t\t\t\tCKEDITOR.instances[field.id].setData( '' );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tfield.value = '';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse if ( tag === 'select' ) {\r\n\t\t\t\t\tif ( field.Select ) {\r\n\t\t\t\t\t\tfield.Select.setValue( '-1' );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( field.multiple && field.classList.contains( formCssClasses.chosenSelect ) ) {\r\n\t\t\t\t\t\tapp.$.forEach( field.querySelectorAll( 'option' ), function( opt ) {\r\n\t\t\t\t\t\t\topt.selected = false;\r\n\t\t\t\t\t\t} );\r\n\r\n\t\t\t\t\t\tjQuery( field ).trigger( 'chosen:updated' );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tfield.value = '-1';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfield.value = '';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfield.classList.remove( formCssClasses.invalid );\r\n\r\n\t\t\t\tif ( lbl ) {\r\n\t\t\t\t\tfield.parentNode.removeChild( lbl );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\tapp.$.forEach( '.row-preview', row => {\r\n\t\t\t\trow.innerHTML = '';\r\n\t\t\t}, this.container );\r\n\r\n\t\t\tapp.$.forEach( '.btn-item-upload-delete', btn => {\r\n\t\t\t\tbtn.classList.add( 'hidden' );\r\n\t\t\t}, this.container );\r\n\r\n\t\t\tthis.checkActiveInputs();\r\n\t\t}\r\n\r\n\t\thide() {\r\n\t\t\tthis.container.classList.add( formCssClasses.hidden );\r\n\t\t}\r\n\r\n\t\tshow() {\r\n\t\t\tthis.checkActiveInputs();\r\n\t\t\tthis.container.classList.remove( formCssClasses.hidden );\r\n\t\t}\r\n\t}\r\n\r\n\t// Expose the Form object to the rest of the project\r\n\tapp.Form = Form;\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tconst config = {\r\n\t\tapiKey: 'AIzaSyAqOORoiVf7epac7Dl0IMxNqBjvkavQRwo'\r\n\t};\r\n\r\n\tlet defaults = {\r\n\t\tcenter: {\r\n\t\t lat: 32.781769,\r\n\t\t lng: -96.796817\r\n\t\t},\r\n\t\tscrollwheel: false,\r\n\t\tzoom: 12\r\n\t};\r\n\r\n\tconst markerIcons = {\r\n\t\tpath: '/img/contact/',\r\n\t\tdefault: 'marker.v1.png'\r\n\t};\r\n\r\n\tlet mapStyles = [{ 'featureType': 'water', 'elementType': 'geometry', 'stylers': [{ 'color': '#e9e9e9' }, { 'lightness': 17 }] }, { 'featureType': 'landscape', 'elementType': 'geometry', 'stylers': [{ 'color': '#f5f5f5' }, { 'lightness': 20 }] }, { 'featureType': 'road.highway', 'elementType': 'geometry.fill', 'stylers': [{ 'color': '#ffffff' }, { 'lightness': 17 }] }, { 'featureType': 'road.highway', 'elementType': 'geometry.stroke', 'stylers': [{ 'color': '#ffffff' }, { 'lightness': 29 }, { 'weight': 0.2 }] }, { 'featureType': 'road.arterial', 'elementType': 'geometry', 'stylers': [{ 'color': '#ffffff' }, { 'lightness': 18 }] }, { 'featureType': 'road.local', 'elementType': 'geometry', 'stylers': [{ 'color': '#ffffff' }, { 'lightness': 16 }] }, { 'featureType': 'poi', 'elementType': 'geometry', 'stylers': [{ 'color': '#f5f5f5' }, { 'lightness': 21 }] }, { 'featureType': 'poi.park', 'elementType': 'geometry', 'stylers': [{ 'color': '#dedede' }, { 'lightness': 21 }] }, { 'elementType': 'labels.text.stroke', 'stylers': [{ 'visibility': 'on' }, { 'color': '#ffffff' }, { 'lightness': 16 }] }, { 'elementType': 'labels.text.fill', 'stylers': [{ 'saturation': 36 }, { 'color': '#333333' }, { 'lightness': 40 }] }, { 'elementType': 'labels.icon', 'stylers': [{ 'visibility': 'off' }] }, { 'featureType': 'transit', 'elementType': 'geometry', 'stylers': [{ 'color': '#f2f2f2' }, { 'lightness': 19 }] }, { 'featureType': 'administrative', 'elementType': 'geometry.fill', 'stylers': [{ 'color': '#fefefe' }, { 'lightness': 20 }] }, { 'featureType': 'administrative', 'elementType': 'geometry.stroke', 'stylers': [{ 'color': '#fefefe' }, { 'lightness': 17 }, { 'weight': 1.2 }] }];\r\n\r\n\tclass Gmap {\r\n\t\tconstructor( el, loadCallback ) {\r\n\t\t\tthis.mapEl = el;\r\n\t\t\tthis.map = null;\r\n\t\t\t\r\n\t\t\tthis.markers = [];\r\n\t\t\tthis.activeMarkerIndex = -1;\r\n\r\n\t\t\tthis.loadCallback = loadCallback;\r\n\r\n\t\t\tthis.setConfigs = this.setConfigs.bind( this );\r\n\t\t\tthis.addScript = this.addScript.bind( this );\r\n\t\t\tthis.initMap = this.initMap.bind( this );\r\n\t\t\tthis.addMarker = this.addMarker.bind( this );\r\n\t\t\tthis.clearMarkers = this.clearMarkers.bind( this );\r\n\t\t\tthis.triggerResize = this.triggerResize.bind( this );\r\n\t\t\tthis.triggerMarkerClick = this.triggerMarkerClick.bind( this );\r\n\r\n\t\t\tthis.setConfigs();\r\n\t\t\tthis.addScript();\r\n\t\t}\r\n\r\n\t\tsetConfigs() {\r\n\t\t\tlet center = this.mapEl.getAttribute( 'data-map-center' );\r\n\r\n\t\t\tif ( center ) {\r\n\t\t\t\tcenter = center.split( ',' );\r\n\t\t\t\tdefaults.center.lat = parseFloat( center[0] );\r\n\t\t\t\tdefaults.center.lng = parseFloat( center[1] );\r\n\t\t\t}\r\n\r\n\t\t\tlet zoom = this.mapEl.getAttribute( 'data-map-zoom' );\r\n\r\n\t\t\tif ( zoom ) {\r\n\t\t\t\tdefaults.zoom = parseInt( zoom, 10 );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\taddScript() {\r\n\t\t\tapp.$.addScript( 'https://maps.googleapis.com/maps/api/js?key=' + config.apiKey, doc.body, true, this.initMap );\r\n\t\t}\r\n\r\n\t\tinitMap() {\r\n\t\t\tthis.map = new google.maps.Map( this.mapEl, {\r\n\t\t\t\tcenter: defaults.center,\r\n\t\t\t\tmapTypeControl: false,\r\n\t\t\t\tscrollwheel: defaults.scrollwheel,\r\n\t\t\t\tzoom: defaults.zoom\r\n\t\t\t} );\r\n\t\t\t\r\n\t\t\tthis.map.setOptions( { styles: mapStyles } );\r\n\r\n\t\t\tif ( this.mapEl.getAttribute( 'data-map-marker' ) ) {\r\n\t\t\t\tthis.addMarker( {\r\n\t\t\t\t\tlat: defaults.center.lat,\r\n\t\t\t\t\tlng: defaults.center.lng\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\r\n\t\t\tif ( this.loadCallback && typeof this.loadCallback === 'function' ) {\r\n\t\t\t\tthis.loadCallback( this.map );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\taddMarker( data, index, clickFn ) {\r\n\t\t\tconst me = this;\r\n\r\n\t\t\tlet marker = new google.maps.Marker( {\r\n\t\t\t\tdata: data,\r\n\t\t\t\ticon: {\r\n\t\t\t\t\tanchor: new google.maps.Point( 13, 36 ),\r\n\t\t\t\t\tsize: new google.maps.Size( 26, 36 ),\r\n\t\t\t\t\turl: markerIcons.path + markerIcons.default\r\n\t\t\t\t},\r\n\t\t\t\tindex: index,\r\n\t\t\t\tmap: this.map,\r\n\t\t\t\tposition: {\r\n\t\t\t\t\tlat: data.lat,\r\n\t\t\t\t\tlng: data.lng\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\tif ( clickFn && typeof clickFn === 'function' ) {\r\n\t\t\t\tmarker.addListener( 'click', e => {\r\n\t\t\t\t\tclickFn( data, index, marker );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\r\n\t\t\tthis.markers.push( marker );\r\n\t\t}\r\n\r\n\t\tclearMarkers() {\r\n\t\t\tthis.markers.forEach( m => {\r\n\t\t\t\tm.setMap( null );\r\n\t\t\t} );\r\n\r\n\t\t\tthis.markers = [];\r\n\t\t\tthis.activeMarkerIndex = -1;\r\n\t\t}\r\n\r\n\t\ttriggerResize() {\r\n\t\t\tgoogle.maps.event.trigger( this.map, 'resize' );\r\n\t\t\tthis.map.setCenter( defaults.center );\r\n\t\t}\r\n\r\n\t\ttriggerMarkerClick( markerIndex ) {\r\n\t\t\tnew google.maps.event.trigger( this.markers[markerIndex], 'click' );\r\n\t\t}\r\n\t}\r\n\r\n\tapp.Gmap = Gmap;\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tconst cssClasses = {\r\n\t\tACTIVE: 'admin-modal-in',\r\n\t\tBTN_CLOSE: 'admin-modal-close',\r\n\t\tCONTENT_CONTAINER: 'admin-modal-content'\r\n\t};\r\n\r\n\tclass AdminModal {\r\n\t\tconstructor( el ) {\r\n\t\t\tthis.container = el;\r\n\t\t\tthis.close = el.querySelector( '.' + cssClasses.BTN_CLOSE );\r\n\t\t\tthis.content = el.querySelector( '.' + cssClasses.CONTENT_CONTAINER );\r\n\r\n\t\t\tthis.show = this.show.bind( this );\r\n\t\t\tthis.hide = this.hide.bind( this );\r\n\t\t\tthis.setContent = this.setContent.bind( this );\r\n\r\n\t\t\tthis.addEventListeners();\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\taddEventListeners() {\r\n\t\t\tthis.close.addEventListener( 'click', this.hide, false );\r\n\t\t}\r\n\r\n\t\tshow() {\r\n\t\t\tdoc.body.classList.add( cssClasses.ACTIVE );\r\n\t\t}\r\n\r\n\t\thide() {\r\n\t\t\tdoc.body.classList.remove( cssClasses.ACTIVE );\r\n\t\t}\r\n\r\n\t\tsetContent( content ) {\r\n\t\t\tthis.content.innerHTML = content;\r\n\t\t}\r\n\t}\r\n\r\n\tapp.AdminModal = AdminModal;\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tclass ParallaxBanner {\r\n\t\tconstructor( el ) {\r\n\t\t\tthis.container = el;\r\n\t\t\tthis.src = el.getAttribute( 'data-src' );\r\n\t\t\tthis.mblSrc = el.hasAttribute( 'data-src-mbl' ) ? el.getAttribute( 'data-src-mbl' ) : null;\r\n\t\t\tthis.medSrc = el.hasAttribute( 'data-src-med' ) ? el.getAttribute( 'data-src-med' ) : null;\r\n\r\n\t\t\tif ( !this.src || this.src === '' ) {\r\n\t\t\t\tconsole.warn( 'No source provided.' );\r\n\t\t\t\tthis.container.classList.add( 'hidden' );\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.addImage = this.addImage.bind( this );\r\n\t\t\tthis.addEvents = this.addEvents.bind( this );\r\n\t\t\tthis.checkPosition = this.checkPosition.bind( this );\r\n\t\t\tthis.setImageAndPosition = this.setImageAndPosition.bind( this );\r\n\t\t\t\r\n\t\t\tthis.setImageAndPosition();\r\n\t\t}\r\n\r\n\t\tsetImageAndPosition() {\r\n\t\t\tthis.addImage();\r\n\t\t\t\r\n\t\t\tif ( app.$.mq( '(min-width:1025px)' ) ) {\r\n\t\t\t\tthis.addEvents();\r\n\t\t\t\tthis.checkPosition();\r\n\t\t\t}\r\n\t\t\telse if ( app.$.mq( '(max-width:767px)' ) && this.mblSrc ) {\r\n\t\t\t\tthis.img.style.transform = 'translateY(-22%)';\r\n\t\t\t}\r\n\t\t\telse if ( app.$.mq( '(max-width:1023px)' ) && this.mblSrc ) {\r\n\t\t\t\tthis.img.style.transform = 'translateY(-8.75%)';\r\n\t\t\t}\r\n\t\t\telse if ( app.$.mq( '(max-width:1199px)' ) && this.medSrc ) {\r\n\t\t\t\tthis.img.style.transform = 'translateY(-23%)';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.img.style.transform = 'translateY(-32%)';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\taddImage() {\r\n\t\t\tlet existingDiv = this.container.querySelector( 'div' );\r\n\t\t\tif ( existingDiv ) {\r\n\t\t\t\tthis.container.removeChild( existingDiv );\r\n\t\t\t}\r\n\r\n\t\t\tlet div = doc.createElement( 'div' );\r\n\t\t\tdiv.classList.add( 'parallax-banner-img' );\r\n\r\n\t\t\tif ( app.$.mq( '(max-width:1023px)' ) && this.mblSrc ) {\r\n\t\t\t\tdiv.style.backgroundImage = 'url(' + this.mblSrc + ')';\r\n\t\t\t}\r\n\t\t\telse if ( app.$.mq( '(max-width:1199px)' ) && this.medSrc ) {\r\n\t\t\t\tdiv.style.backgroundImage = 'url(' + this.medSrc + ')';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdiv.style.backgroundImage = 'url(' + this.src + ')';\r\n\t\t\t}\r\n\r\n\t\t\tthis.img = div;\r\n\t\t\tthis.container.appendChild( this.img );\r\n\t\t}\r\n\r\n\t\taddEvents() {\r\n\t\t\twindow.addEventListener( 'scroll', this.checkPosition );\r\n\t\t}\r\n\r\n\t\tcheckPosition() {\r\n\t\t\tlet y = app.util.getWindowScrollPosition();\r\n\t\t\tlet wh = window.innerHeight;\r\n\t\t\tlet top = this.container.offsetTop;\r\n\r\n\t\t\tif ( this.container.classList.contains( 'log' ) ) {\r\n\t\t\t\tconsole.log( y, wh, top );\r\n\t\t\t}\r\n\r\n\t\t\t// determine if the picture is at the bottom of the viewport\r\n\t\t\tif ( y + wh >= top ) {\r\n\t\t\t\t// determine the percentage up the screen the container is\r\n\t\t\t\tlet diff = 35 - ( ( ( y + wh ) - top ) / wh ) * 100 * 0.225;\r\n\r\n\t\t\t\tif ( this.container.classList.contains( 'log' ) ) {\r\n\t\t\t\t\tconsole.log( 'Diff: ' + diff );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.img.style.transform = 'translateY(-' + diff + '%)';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlet banners = [];\r\n\r\n\twindow.addEventListener( 'DOMContentLoaded', () => {\r\n\t\tapp.$.forEach( '.parallax-banner-container', el => {\r\n\t\t\tbanners.push( new ParallaxBanner( el ) );\r\n\t\t} );\r\n\t} );\r\n\r\n\twindow.addEventListener( 'resize', () => {\r\n\t\tbanners.forEach( banner => {\r\n\t\t\tbanner.setImageAndPosition();\r\n\t\t} );\r\n\t} );\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tconst cssClasses = {\r\n\t\tERROR_LABEL: 'error-label',\r\n\t\tINVALID_REQ_FIELD: 'invalid',\r\n\t\tMD_MENU: 'md-select',\r\n\t\tMENU: 'md-select-menu',\r\n\t\tMENU_OPEN: 'active',\r\n\t\tLIST_ITEM: 'md-select-menu-item',\r\n\t\tLIST_ITEM_HOVER: 'keyover',\r\n\t\tREQUIRED_FIELD: 'req'\r\n\t};\r\n\r\n\tclass Select {\r\n\t\tconstructor( select ) {\r\n\t\t\t// if on a touch device, default to native select\r\n\t\t\tif ( 'ontouchstart' in doc.documentElement && app.$.mq( '(max-width:1024px)' ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// elements\r\n\t\t\tthis.select = select;\r\n\t\t\tthis.select.classList.add( cssClasses.MD_MENU );\r\n\t\t\tthis.container = this.select.parentNode;\r\n\t\t\tthis.label = this.container.querySelector( 'label' );\r\n\t\t\tthis.menu = null;\r\n\r\n\t\t\t// if this is a multiple select\r\n\t\t\tthis.multiple = this.select.multiple;\r\n\r\n\t\t\tthis.open = false;\r\n\t\t\tthis.currentIndex = 0;\r\n\r\n\t\t\tthis.listItems = [];\r\n\r\n\t\t\t//this.onChange = function() { };\r\n\r\n\t\t\tthis.createMenu = this.createMenu.bind( this );\r\n\t\t\tthis.setMenuPosition = this.setMenuPosition.bind( this );\r\n\t\t\tthis.showMenu = this.showMenu.bind( this );\r\n\t\t\tthis.hideMenu = this.hideMenu.bind( this );\r\n\t\t\tthis.changeHandler = this.changeHandler.bind( this );\r\n\t\t\tthis.focusHanlder = this.focusHanlder.bind( this );\r\n\t\t\tthis.blurHandler = this.blurHandler.bind( this );\r\n\t\t\tthis.keyDownHandler = this.keyDownHandler.bind( this );\r\n\t\t\tthis.bodyClickHandler = this.bodyClickHandler.bind( this );\r\n\t\t\tthis.checkIfRequired = this.checkIfRequired.bind( this );\r\n\r\n\t\t\tthis.createMenu();\r\n\t\t\tthis.addEventListeners();\r\n\t\t}\r\n\r\n\t\taddEventListeners() {\r\n\t\t\tthis.select.addEventListener( 'focus', this.focusHanlder, false );\r\n\t\t\tthis.select.addEventListener( 'blur', this.blurHandler, false );\r\n\t\t}\r\n\r\n\t\t// add change event\r\n\t\tsetChangeEvent( fn ) {\r\n\t\t\tthis.onChange = fn;\r\n\t\t}\r\n\r\n\t\t// create the drop down\r\n\t\tcreateMenu() {\r\n\t\t\tlet opts = this.select.children;\r\n\t\t\tlet len = opts.length;\r\n\t\t\tlet i;\r\n\t\t\tlet opt;\r\n\t\t\tlet listItem;\r\n\t\t\tlet li;\r\n\r\n\t\t\tthis.menu = doc.createElement( 'ul' );\r\n\t\t\tthis.menu.classList.add( cssClasses.MENU );\r\n\r\n\t\t\t// loop through all of the options and create the ListItems\r\n\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\topt = opts[i];\r\n\r\n\t\t\t\tlistItem = new ListItem( opt, i, this );\r\n\t\t\t\tthis.listItems.push( listItem );\r\n\t\t\t\tthis.menu.appendChild( listItem.listItem );\r\n\t\t\t}\r\n\r\n\t\t\tdoc.body.appendChild( this.menu );\r\n\r\n\t\t\tthis.setMenuPosition();\r\n\t\t}\r\n\r\n\t\t// reset the menu\r\n\t\treloadMenu() {\r\n\t\t\tlet container;\r\n\r\n\t\t\tif ( this.menu ) {\r\n\t\t\t\tcontainer = this.menu.parentNode;\r\n\t\t\t\tcontainer.removeChild( this.menu );\r\n\t\t\t\tthis.listItems = [];\r\n\t\t\t\tthis.createMenu();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// set the menu position on the page\r\n\t\tsetMenuPosition() {\r\n\t\t\tconst rect = this.select.getBoundingClientRect();\r\n\t\t\tthis.menu.style.top = rect.bottom + app.util.getWindowScrollPosition() + 'px';\r\n\t\t\tthis.menu.style.left = rect.left + 'px';\r\n\t\t\tthis.menu.style.width = this.select.offsetWidth + 'px';\r\n\t\t}\r\n\r\n\t\t// show the menu\r\n\t\tshowMenu() {\r\n\t\t\tlet me = this;\r\n\r\n\t\t\t// always start at the top of the list\r\n\t\t\tthis.menu.scrollTop = 0;\r\n\r\n\t\t\tthis.currentIndex = -1;\r\n\t\t\tthis.menu.classList.add( cssClasses.MENU_OPEN );\r\n\t\t\tthis.open = true;\r\n\r\n\t\t\tsetTimeout( function() {\r\n\t\t\t\tdoc.body.addEventListener( 'keydown', me.keyDownHandler, false );\r\n\t\t\t\tdoc.body.addEventListener( 'click', me.bodyClickHandler, false );\r\n\r\n\t\t\t\tme.select.blur();\r\n\t\t\t}, 100 );\r\n\t\t\t\t\t\t\r\n\t\t\t// disable window from scrolling\r\n\t\t\tapp.util.disableWindowScroll();\r\n\t\t}\r\n\r\n\t\t// hide the menu\r\n\t\thideMenu() {\r\n\t\t\tlet item;\r\n\r\n\t\t\tthis.menu.classList.remove( cssClasses.MENU_OPEN );\r\n\t\t\tthis.open = false;\r\n\r\n\t\t\t// make sure no listItems ahve the keyover class\r\n\t\t\titem = this.menu.querySelector( '.' + cssClasses.LIST_ITEM_HOVER );\r\n\r\n\t\t\tif ( item ) {\r\n\t\t\t\titem.classList.remove( cssClasses.LIST_ITEM_HOVER );\r\n\t\t\t}\r\n\r\n\t\t\t// remove event listeners\r\n\t\t\tdoc.body.removeEventListener( 'keydown', this.keyDownHandler, false );\r\n\t\t\tdoc.body.removeEventListener( 'click', this.bodyClickHandler, false );\r\n\r\n\t\t\t// re-enable window scrolling\r\n\t\t\tapp.util.enableWindowScroll();\r\n\t\t}\r\n\r\n\t\tfocusHanlder( e ) {\r\n\t\t\tthis.setMenuPosition();\r\n\t\t\tthis.showMenu();\r\n\t\t}\r\n\r\n\t\tblurHandler( e ) {\r\n\t\t\t\r\n\t\t}\r\n\r\n\t\tkeyDownHandler( e ) {\r\n\t\t\tlet index = this.currentIndex;\r\n\t\t\tlet keyCode = -1;\r\n\t\t\tlet menuScrollTop = this.menu.scrollTop;\r\n\t\t\tlet menuHeight = this.menu.offsetHeight;\r\n\t\t\tlet li;\r\n\r\n\t\t\tif ( e && e.keyCode ) {\r\n\t\t\t\tkeyCode = e.keyCode;\r\n\t\t\t\t\r\n\t\t\t\tif ( keyCode === 9 ) {\r\n\t\t\t\t\tthis.hideMenu();\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// move down the list\r\n\t\t\t\telse if ( keyCode === 40 ) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tthis.currentIndex++;\r\n\r\n\t\t\t\t\tif ( this.currentIndex === this.listItems.length ) {\r\n\t\t\t\t\t\tthis.currentIndex--;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( index >= 0 ) {\r\n\t\t\t\t\t\tthis.listItems[index].listItem.classList.remove( cssClasses.LIST_ITEM_HOVER );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tli = this.listItems[this.currentIndex].listItem;\r\n\t\t\t\t\tli.classList.add( cssClasses.LIST_ITEM_HOVER );\r\n\r\n\t\t\t\t\t// check scroll top\r\n\t\t\t\t\tif ( li.offsetTop + li.offsetHeight > menuScrollTop + menuHeight ) {\r\n\t\t\t\t\t\tthis.menu.scrollTop = menuScrollTop + li.offsetHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// move up the list\r\n\t\t\t\telse if ( keyCode === 38 ) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tthis.currentIndex--;\r\n\r\n\t\t\t\t\tif ( this.currentIndex < 0 ) {\r\n\t\t\t\t\t\tthis.currentIndex = -1;\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( index >= 0 ) {\r\n\t\t\t\t\t\tthis.listItems[index].listItem.classList.remove( cssClasses.LIST_ITEM_HOVER );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( this.currentIndex >= 0 ) {\r\n\t\t\t\t\t\tli = this.listItems[this.currentIndex].listItem;\r\n\t\t\t\t\t\tli.classList.add( cssClasses.LIST_ITEM_HOVER );\r\n\r\n\t\t\t\t\t\t// check scroll top\r\n\t\t\t\t\t\tif ( li.offsetTop < menuScrollTop ) {\r\n\t\t\t\t\t\t\tthis.menu.scrollTop = menuScrollTop - li.offsetHeight;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// enter key is clicked\r\n\t\t\t\telse if ( keyCode === 13 ) {\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif ( this.currentIndex === -1 ) {\r\n\t\t\t\t\t\tthis.currentIndex = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// trigger list item click\r\n\t\t\t\t\tthis.listItems[this.currentIndex].selectItem();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if escape key is clicked\r\n\t\t\t\telse if ( keyCode === 27 ) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tthis.hideMenu();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tchangeHandler( e ) {\r\n\t\t\tif ( this.onChange && typeof this.onChange === 'function' ) {\r\n\t\t\t\tthis.onChange();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbodyClickHandler( e ) {\r\n\t\t\tif ( e && e.target && ( e.target === this.select || e.target.classList.contains( cssClasses.LIST_ITEM ) || e.target.classList.contains( 'btn-ripple-container' ) || e.target.classList.contains( 'btn-ripple-element' ) ) ) {\r\n\t\t\t\t// let the list item click event handle this\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// clicked outside of the menu, hide the menu\r\n\t\t\t\tthis.hideMenu();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcheckForValue() {\r\n\r\n\t\t}\r\n\r\n\t\tcheckIfRequired() {\r\n\t\t\tlet selected = this.menu.querySelector( '[selected=\"true\"]' );\r\n\t\t\tlet errorLbl = this.container.querySelector( '.' + cssClasses.ERROR_LABEL );\r\n\t\t\tlet lbl;\r\n\r\n\t\t\t// remove any previous error messages\r\n\t\t\tif ( errorLbl ) {\r\n\t\t\t\tthis.container.removeChild( errorLbl );\r\n\t\t\t}\r\n\r\n\t\t\t// if we don't have a selected option and this is a required field\r\n\t\t\tif ( !selected && this.select.classList.contains( cssClasses.REQUIRED_FIELD ) ) {\r\n\t\t\t\tlbl = doc.createElement( 'span ' );\r\n\t\t\t\tlbl.classList.add( cssClasses.ERROR_LABEL );\r\n\t\t\t\tlbl.textContent = 'Required field.';\r\n\t\t\t\tthis.container.appendChild( lbl );\r\n\t\t\t\tthis.select.classList.add( cssClasses.INVALID_REQ_FIELD );\r\n\t\t\t}\r\n\r\n\t\t\t// if we're all good, rmeove the invalid class\r\n\t\t\telse {\r\n\t\t\t\tthis.select.classList.remove( cssClasses.INVALID_REQ_FIELD );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsetValue( value ) {\r\n\t\t\tlet li = this.menu.querySelector( '[data-val=\"' + value + '\"]' );\r\n\t\t\tlet i = 0;\r\n\t\t\tlet len = this.listItems.length;\r\n\t\t\tlet listItem = null;\r\n\r\n\t\t\tif ( li ) {\r\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\t\tlistItem = this.listItems[i];\r\n\r\n\t\t\t\t\tif ( listItem.listItem === li ) {\r\n\t\t\t\t\t\tif ( !listItem.listItem.getAttribute( 'selected' ) ) {\r\n\t\t\t\t\t\t\tlistItem.selectItem();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tgetValue() {\r\n\t\t\tif ( !this.multiple ) {\r\n\t\t\t\treturn this.select.options[this.select.selectedIndex].value;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tgetTextValue() {\r\n\t\t\tif ( !this.multiple ) {\r\n\t\t\t\treturn this.select.options[this.selectedIndex].text;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclass ListItem {\r\n\t\tconstructor( opt, index, select ) {\r\n\t\t\tthis.listItem = doc.createElement( 'li' );\r\n\t\t\tthis.select = select;\r\n\t\t\tthis.index = index;\r\n\r\n\t\t\tthis.listItem.classList.add( cssClasses.LIST_ITEM );\r\n\t\t\tthis.listItem.classList.add( 'btn-ripple' );\r\n\t\t\tthis.listItem.textContent = opt.textContent;\r\n\t\t\tthis.listItem.setAttribute( 'data-val', opt.value );\r\n\r\n\t\t\tif ( opt.selected ) {\r\n\t\t\t\tthis.listItem.setAttribute( 'selected', 'true' );\r\n\t\t\t}\r\n\r\n\t\t\tthis.selectItem = this.selectItem.bind( this );\r\n\r\n\t\t\tthis.addEventListeners();\r\n\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\taddEventListeners() {\r\n\t\t\tthis.listItem.addEventListener( 'click', this.selectItem, false );\r\n\t\t}\r\n\r\n\t\tselectItem( e ) {\r\n\t\t\tlet selected;\r\n\t\t\t\r\n\t\t\t// if clicking the currently selected item\r\n\t\t\tif ( this.listItem.getAttribute( 'selected' ) === 'true' ) {\r\n\t\t\t\tthis.listItem.removeAttribute( 'selected' );\r\n\r\n\t\t\t\tif ( !this.select.multiple ) {\r\n\t\t\t\t\tthis.select.select.value = '';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.select.checkIfRequired();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// check if an item is already selected\r\n\t\t\t\tselected = this.select.menu.querySelector( '[selected=\"true\"]' );\r\n\r\n\t\t\t\t// unselect a previously selected item if this is not a multiple select\r\n\t\t\t\tif ( selected && !this.select.multiple ) {\r\n\t\t\t\t\tselected.removeAttribute( 'selected' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// select the selected item\r\n\t\t\t\tthis.listItem.setAttribute( 'selected', 'true' );\r\n\r\n\t\t\t\t// update the selected element\r\n\t\t\t\tif ( !this.select.multiple ) {\r\n\t\t\t\t\tthis.select.select.value = this.listItem.getAttribute( 'data-val' );\r\n\t\t\t\t\tthis.select.checkIfRequired();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.select.select.classList.remove( cssClasses.INVALID_REQ_FIELD );\r\n\r\n\t\t\t\t// hide the menu if this ins not a multiple select\r\n\t\t\t\tif ( !this.select.multiple ) {\r\n\t\t\t\t\tthis.select.hideMenu();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.select.changeHandler();\r\n\r\n\t\t\tif ( e ) {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tapp.Select = Select;\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tconst cssClasses = {\r\n\t\tANIMATABLE: 'animatable',\r\n\t\tNAV_IN: 'side-nav-in'\r\n\t};\r\n\r\n\tclass SideNav {\r\n\t\tconstructor() {\r\n\t\t\tthis.btnShow = app.$( '.hdr-nav-trigger' );\r\n\t\t\tthis.sideNav = app.$( '.side-nav' );\r\n\t\t\tthis.sideNavContainer = app.$( '.side-nav-container' );\r\n\t\t\tthis.sideNavClose = app.$( '.side-nav-close' );\r\n\r\n\t\t\tthis.showSideNav = this.showSideNav.bind( this );\r\n\t\t\tthis.hideSideNav = this.hideSideNav.bind( this );\r\n\t\t\tthis.onTouchStart = this.onTouchStart.bind( this );\r\n\t\t\tthis.onTouchMove = this.onTouchMove.bind( this );\r\n\t\t\tthis.onTouchEnd = this.onTouchEnd.bind( this );\r\n\t\t\tthis.onTransitionEnd = this.onTransitionEnd.bind( this );\r\n\t\t\tthis.update = this.update.bind( this );\r\n\r\n\t\t\tthis.startX = 0;\r\n\t\t\tthis.currentX = 0;\r\n\t\t\tthis.touchingSideNav = false;\r\n\r\n\t\t\tthis.addEventListeners();\r\n\t\t}\r\n\r\n\t\taddEventListeners() {\r\n\t\t\tthis.btnShow.addEventListener( 'click', this.showSideNav );\r\n\t\t\tthis.sideNav.addEventListener( 'click', this.hideSideNav );\r\n\t\t\tthis.sideNavContainer.addEventListener( 'click', this.blockClicks );\r\n\t\t\tthis.sideNavClose.addEventListener( 'click', this.hideSideNav );\r\n\t\t\tthis.sideNav.addEventListener( 'touchstart', this.onTouchStart );\r\n\r\n\t\t\tthis.sideNav.addEventListener( 'touchmove', this.onTouchMove );\r\n\t\t\tthis.sideNav.addEventListener( 'touchend', this.onTouchEnd );\r\n\t\t}\r\n\r\n\t\tshowSideNav( e ) {\r\n\t\t\tthis.sideNav.classList.add( cssClasses.ANIMATABLE );\r\n\t\t\tdoc.body.classList.add( cssClasses.NAV_IN );\r\n\t\t\tthis.sideNav.addEventListener( 'transitionend', this.onTransitionEnd );\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\thideSideNav( e ) {\r\n\t\t\tthis.sideNav.classList.add( 'animatable' );\r\n\t\t\tdoc.body.classList.remove( cssClasses.NAV_IN );\r\n\t\t\tthis.sideNav.addEventListener( 'transitionend', this.onTransitionEnd );\r\n\r\n\t\t\tif ( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tblockClicks( e ) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\tonTouchStart( e ) {\r\n\t\t\tif ( !doc.body.classList.contains( cssClasses.NAV_IN ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.startX = e.touches[0].pageX;\r\n\t\t\tthis.currentX = this.startX;\r\n\r\n\t\t\tthis.touchingSideNav = true;\r\n\t\t\trequestAnimationFrame( this.update );\r\n\t\t}\r\n\r\n\t\tonTouchMove( e ) {\r\n\t\t\tif ( !this.touchingSideNav ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.currentX = e.touches[0].pageX;\r\n\t\t\tconst translateX = Math.min( 0, this.currentX - this.startX );\r\n\r\n\t\t\tif ( translateX < 0 ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tonTouchEnd( e ) {\r\n\t\t\tif ( !this.touchingSideNav ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.touchingSideNav = false;\r\n\r\n\t\t\tconst translateX = Math.min( 0, this.currentX - this.startX );\r\n\t\t\tthis.sideNavContainer.style.transform = '';\r\n\r\n\t\t\tif ( translateX < 0 ) {\r\n\t\t\t\tthis.hideSideNav();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tupdate() {\r\n\t\t\tif ( !this.touchingSideNav ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\trequestAnimationFrame( this.update );\r\n\r\n\t\t\tconst translateX = Math.min( 0, this.currentX - this.startX );\r\n\t\t\tthis.sideNavContainer.style.transform = 'translateX(' + translateX + 'px)';\r\n\t\t}\r\n\r\n\t\tonTransitionEnd( e ) {\r\n\t\t\tthis.sideNav.classList.remove( cssClasses.ANIMATABLE );\r\n\t\t\tthis.sideNav.removeEventListener( 'transitionend', this.onTransitionEnd );\r\n\t\t}\r\n\t}\r\n\r\n\tif ( app.$( '.side-nav' ) ) {\r\n\t\tnew SideNav();\r\n\t}\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n * \r\n * Corresponding HTML should follow:\r\n * \r\n *
\r\n * \r\n * \r\n *
\r\n * \r\n * To make a field required, add class=\"req\"\r\n * To make a field use a datepicker, add class=\"input-date\"\r\n * \r\n * To autovalidate email, set type=\"email\"\r\n * To auotvalidate phone numbers, set type=\"tel\" \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tconst cssClasses = {\r\n\t\tACTIVE_FIELD_CLASS: 'active',\r\n\t\tDATE_SELECTOR: 'input-date',\r\n\t\tERROR_LABEL: 'error-label',\r\n\t\tINVALID_REQ_FIELD: 'invalid',\r\n\t\tREQUIRED_FIELD: 'req'\r\n\t};\r\n\r\n\t// Regex's for validating field data\r\n\tconst regExpressions = {\r\n\t\tEMAIL: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/,\r\n\t\tTEL: /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/,\r\n\t\tDATE: /^(0[1-9]|1[0-2])\\/(0[1-9]|1\\d|2\\d|3[01])\\/(19|20)\\d{2}$/\r\n\t};\r\n\r\n\tclass TextBox {\r\n\t\t// Provide the input element for this TextBox\r\n\t\tconstructor( input ) {\r\n\t\t\t// elements\r\n\t\t\tthis.input = input;\r\n\t\t\tthis.container = input.parentNode;\r\n\t\t\tthis.label = this.container.querySelector( 'label' );\r\n\r\n\t\t\t// check for date\r\n\t\t\tif ( this.input.classList.contains( cssClasses.DATE_SELECTOR ) ) {\r\n\t\t\t\tthis.initDatePicker();\r\n\t\t\t}\r\n\r\n\t\t\t// check for initial value\r\n\t\t\tthis.checkForValue();\r\n\r\n\t\t\tthis.initDatePicker = this.initDatePicker.bind( this );\r\n\t\t\tthis.focusHandler = this.focusHandler.bind( this );\r\n\t\t\tthis.blurHandler = this.blurHandler.bind( this );\r\n\t\t\tthis.validateField = this.validateField.bind( this );\r\n\t\t\tthis.checkForValue = this.checkForValue.bind( this );\r\n\t\t\tthis.setValue = this.setValue.bind( this );\r\n\t\t\tthis.getValue = this.getValue.bind( this );\r\n\r\n\t\t\tthis.addEventListeners();\r\n\t\t}\r\n\r\n\t\t// Add the event listeners\r\n\t\taddEventListeners() {\r\n\t\t\tthis.input.addEventListener( 'focus', this.focusHandler, false );\r\n\t\t\tthis.input.addEventListener( 'blur', this.blurHandler, false );\r\n\t\t\tthis.input.addEventListener( 'change', this.checkForValue, false );\r\n\t\t}\r\n\r\n\t\t// Initialize the date picker if the input has class .input-date\r\n\t\tinitDatePicker() {\r\n\t\t\tlet field = this.input;\r\n\t\t\tlet picker;\r\n\r\n\t\t\t// make sure it is a text input\r\n\t\t\tfield.type = 'text';\r\n\r\n\t\t\t// if touch device use default date picker\r\n\t\t\tif ( 'ontouchstart' in doc.documentElement ) {\r\n\t\t\t\tfield.type = 'date';\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tpicker = new Pikaday( {\r\n\t\t\t\tfield: field,\r\n\t\t\t\tformat: 'MM/DD/YYYY',\r\n\t\t\t\tonSelect: function() {\r\n\t\t\t\t\tfield.value = this.getMoment().format( 'MM/DD/YYYY' );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// OnFocus event handler\r\n\t\tfocusHandler() {\r\n\t\t\tthis.label.classList.add( cssClasses.ACTIVE_FIELD_CLASS );\r\n\t\t}\r\n\r\n\t\t// OnBlur event handler\r\n\t\tblurHandler() {\r\n\t\t\tthis.checkForValue();\r\n\t\t\tthis.validateField();\r\n\t\t}\r\n\r\n\t\t// Helper function to check for a value and handle the active class of the label\r\n\t\tcheckForValue() {\r\n\t\t\tif ( this.getValue() !== '' ) {\r\n\t\t\t\tthis.label.classList.add( cssClasses.ACTIVE_FIELD_CLASS );\r\n\t\t\t\tthis.validateField();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.label.classList.remove( cssClasses.ACTIVE_FIELD_CLASS );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Helper function to provide validation of field data based on input type and classes\r\n\t\tvalidateField() {\r\n\t\t\tlet field = this.input;\r\n\t\t\tlet type = field.type.toLowerCase();\r\n\t\t\tlet valid = true;\r\n\t\t\tlet val = this.getValue();\r\n\t\t\tlet minChars = field.getAttribute( 'min-chars' );\r\n\t\t\tlet prevError = this.container.querySelector( '.' + cssClasses.ERROR_LABEL );\r\n\t\t\tlet lbl;\r\n\t\t\tlet msg = '';\r\n\r\n\t\t\t// check for a value in a required field\r\n\t\t\tif ( field.classList.contains( cssClasses.REQUIRED_FIELD ) && val === '' ) {\r\n\t\t\t\tvalid = false;\r\n\t\t\t\tmsg = 'Required field.';\r\n\t\t\t}\r\n\r\n\t\t\t// check for min characters\r\n\t\t\telse if ( minChars && val.length < parseInt( minChars, 10 ) ) {\r\n\t\t\t\tvalid = false;\r\n\t\t\t\tmsg = minChars + ' characters required.';\r\n\t\t\t}\r\n\r\n\t\t\t// check for valid email address\r\n\t\t\telse if ( type === 'email' && !regExpressions.EMAIL.test( val ) ) {\r\n\t\t\t\tvalid = false;\r\n\t\t\t\tmsg = 'Invalid email address.';\r\n\t\t\t}\r\n\r\n\t\t\t// check for valid phone number\r\n\t\t\telse if ( type === 'tel' && !regExpressions.TEL.test( val ) ) {\r\n\t\t\t\tvalid = false;\r\n\t\t\t\tmsg = 'Inavlid phone number.';\r\n\t\t\t}\r\n\r\n\t\t\t// check for date\r\n\t\t\telse if ( field.classList.contains( cssClasses.DATE_SELECTOR ) && !regExpressions.DATE.test( val ) ) {\r\n\t\t\t\tvalid = false;\r\n\t\t\t\tmsg = 'Incorrect date format.';\r\n\t\t\t}\r\n\r\n\t\t\t// remove any previous error messages\r\n\t\t\tif ( prevError ) {\r\n\t\t\t\tthis.container.removeChild( prevError );\r\n\t\t\t}\r\n\r\n\t\t\t// if the field is valid\r\n\t\t\tif ( valid ) {\r\n\t\t\t\tfield.classList.remove( cssClasses.INVALID_REQ_FIELD );\r\n\t\t\t}\r\n\r\n\t\t\t// if invalid, make sure it is highlighted\r\n\t\t\telse {\r\n\t\t\t\tfield.classList.add( cssClasses.INVALID_REQ_FIELD );\r\n\r\n\t\t\t\t// if we have a message\r\n\t\t\t\tif ( msg !== '' ) {\r\n\t\t\t\t\tlbl = doc.createElement( 'span' );\r\n\t\t\t\t\tlbl.classList.add( cssClasses.ERROR_LABEL );\r\n\t\t\t\t\tlbl.textContent = msg;\r\n\t\t\t\t\tthis.container.appendChild( lbl );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Helper function to set the value of the input\r\n\t\tsetValue( val ) {\r\n\t\t\tthis.input.value = val;\r\n\t\t\tthis.checkForValue();\r\n\t\t\tthis.validateField();\r\n\t\t}\r\n\r\n\t\t// Helper function get the value of the input\r\n\t\tgetValue() {\r\n\t\t\treturn this.input.value.trim();\r\n\t\t}\r\n\t}\r\n\r\n\t// Expose the TextBox object to the app\r\n\tapp.TextBox = TextBox;\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tconst cssClasses = {\r\n\t\tACTIVE: 'active',\r\n\t\tTOAST: 'toast'\r\n\t};\r\n\r\n\tclass Toast {\r\n\t\tconstructor() {\r\n\t\t\tthis.container = this.createToastElement();\r\n\t\t\tthis.duration = -1;\r\n\t\t\tthis.defaultDuration = 3000;\r\n\t\t\tthis.hideTimeout = null;\r\n\r\n\t\t\tthis.show = this.show.bind( this );\r\n\t\t\tthis.hide = this.hide.bind( this );\r\n\t\t}\r\n\r\n\t\tcreateToastElement() {\r\n\t\t\t// if an existing toast is on the page,\r\n\t\t\t// use the same toast element instead of\r\n\t\t\t// adding a second one\r\n\t\t\tif ( app.$( '.' + cssClasses.TOAST ) ) {\r\n\t\t\t\treturn app.$( '.' + cssClasses.TOAST );\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet el = doc.createElement( 'div' );\r\n\t\t\t\tel.classList.add( cssClasses.TOAST );\r\n\t\t\t\tdoc.body.appendChild( el );\r\n\t\t\t\treturn el;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tshow( msg, duration ) {\r\n\t\t\tlet me = this;\r\n\r\n\t\t\tif ( this.hideTimeout ) {\r\n\t\t\t\tclearTimeout( this.hideTimeout );\r\n\t\t\t\tthis.hideTimeout = null;\r\n\t\t\t}\r\n\r\n\t\t\tthis.container.innerHTML = msg;\r\n\r\n\t\t\tsetTimeout( function() {\r\n\t\t\t\tme.container.classList.add( cssClasses.ACTIVE );\r\n\t\t\t}, 1 );\r\n\r\n\t\t\tthis.duration = duration;\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\r\n\t\thide( now ) {\r\n\t\t\tlet me = this,\r\n \t\tduration = this.defaultDuration;\r\n\t\t\t\r\n\t\t\tif ( now ) {\r\n\t\t\t\tthis.container.classList.remove( cssClasses.ACTIVE );\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ( this.duration === -1 ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ( this.duration && this.duration !== -1 ) {\r\n\t\t\t\tduration = this.duration;\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideTimeout = setTimeout( function() {\r\n\t\t\t\tme.container.classList.remove( cssClasses.ACTIVE );\r\n\t\t\t}, duration );\r\n\t\t}\r\n\t}\r\n\r\n\tapp.Toast = Toast;\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\napp.scroll = ( function( doc ) {\r\n\t'use strict';\r\n\r\n\tvar hdr = doc.getElementById( 'hdr-main' ),\r\n\t\tlinks = doc.querySelectorAll( '.link-scroll' ),\r\n\t\tlastY = 0,\r\n\r\n\t\tSCROLL_TIME = 500;\r\n\r\n\twindow.forEachElement( links, function( link ) {\r\n\t\tlink.addEventListener( 'click', linkClick, false );\r\n\t} );\r\n\r\n\tfunction linkClick( e ) {\r\n\t\tvar selector = this.getAttribute( 'data-scroll-to' ),\r\n\t\t\tpage = doc.querySelector( '[data-scroll=\"' + selector + '\"]' ),\r\n\t\t\tscrollToYCoord = 0;\r\n\t\t\r\n\t\tif ( page && !this.classList.contains( 'active' ) ) {\r\n\t\t\tif ( this.classList.contains( 'border' ) ) {\r\n\t\t\t\tthis.classList.add( 'selected' );\r\n\t\t\t}\r\n\r\n\t\t\tlastY = app.util.getWindowScrollPosition();\r\n\t\t\tscrollToYCoord = page.offsetTop - hdr.offsetHeight;\r\n\r\n\t\t\tscrollToY( scrollToYCoord );\r\n\r\n\t\t\tif ( doc.body.classList.contains( 'nav-in' ) ) {\r\n\t\t\t\tdoc.body.classList.remove( 'nav-in' );\r\n\t\t\t}\r\n\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction scrollToY( scrollTargetY ) {\r\n\t\tvar scrollY = app.util.getWindowScrollPosition(),// window.scrollY,\r\n\t\t\tspeed = SCROLL_TIME,\r\n\t\t\teasing = easing || 'easeOutSine',\r\n\t\t\tcurrentTime = 0,\r\n\r\n\t\t\ttime = Math.max( 0.3, Math.min( Math.abs( scrollY - scrollTargetY ) / speed, 0.99 ) ),\r\n\r\n\t\t\tPI_D2 = Math.PI / 2,\r\n\t\t\teasingEquations = {\r\n\t\t\t\teaseOutSine: function( pos ) {\r\n\t\t\t\t\treturn Math.sin( pos * ( Math.PI / 2 ) );\r\n\t\t\t\t},\r\n\t\t\t\teaseInOutSine: function( pos ) {\r\n\t\t\t\t\treturn ( -0.5 * ( Math.cos( Math.PI * pos ) - 1 ) );\r\n\t\t\t\t},\r\n\t\t\t\teaseInOutQuint: function( pos ) {\r\n\t\t\t\t\tif ( ( pos /= 0.5 ) < 1 ) {\r\n\t\t\t\t\t\treturn 0.5 * Math.pow( pos, 5 );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn 0.5 * ( Math.pow(( pos - 2 ), 5 ) + 2 );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\tfunction tick() {\r\n\t\t\tcurrentTime += 1 / 60;\r\n\r\n\t\t\tvar p = currentTime / time;\r\n\t\t\tvar t = easingEquations[easing]( p );\r\n\r\n\t\t\tif ( p < 1 ) {\r\n\t\t\t\trequestAnimationFrame( tick );\r\n\r\n\t\t\t\twindow.scrollTo( 0, scrollY + ( ( scrollTargetY - scrollY ) * t ) );\r\n\t\t\t} else {\r\n\t\t\t\twindow.scrollTo( 0, scrollTargetY );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttick();\r\n\t}\r\n\r\n\treturn {\r\n\t\tscrollToY: scrollToY\r\n\t};\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2015 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n app.util = (function( doc ) {\r\n 'use strict';\r\n \r\n // will clone an object, not copying by reference\r\n function cloneObj( obj ) {\r\n return JSON.parse( JSON.stringify( obj ) );\r\n }\r\n\r\n function extend( obj1, obj2 ) {\r\n var obj = obj1;\r\n\r\n for ( var key in obj2 ) {\r\n obj[key] = obj2[key];\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n function getWindowScrollPosition() {\r\n if ( typeof window.scrollY === 'undefined' ) {\r\n return document.documentElement.scrollTop;\r\n }\r\n else {\r\n return window.scrollY;\r\n }\r\n }\r\n\r\n function callBackFn( instance, fnName ) {\r\n \treturn function() {\r\n \t\tinstance[fnName].apply( instance, arguments );\r\n \t};\r\n }\r\n\r\n function disableWindowScroll() {\r\n \tdoc.body.classList.add( 'noscroll' );\r\n }\r\n\r\n function enableWindowScroll() {\r\n \tdoc.body.classList.remove( 'noscroll' );\r\n }\r\n\r\n return {\r\n cloneObj: cloneObj,\r\n extend: extend,\r\n getWindowScrollPosition: getWindowScrollPosition,\r\n callBackFn: callBackFn,\r\n disableWindowScroll: disableWindowScroll,\r\n enableWindowScroll: enableWindowScroll\r\n };\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2016 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tlet btnNavTrigger = app.$( '#btn-nav-trigger' );\r\n\tlet nav = app.$( '#nav-main' );\r\n\tlet links;\r\n\tlet height = 0;\r\n\tlet y = 0;\r\n\tlet url = doc.URL.toLowerCase();\r\n\r\n\tif ( nav ) {\r\n\t\tlet linkFound = false;\r\n\r\n\t\twindow.addEventListener( 'DOMContentLoaded', e => {\r\n\t\t\theight = nav.offsetHeight;\r\n\t\t\ty = window.innerHeight - height;\r\n\t\t\twindow.addEventListener( 'scroll', checkPosition );\r\n\t\t} );\r\n\r\n\t\tlinks = nav.querySelectorAll( 'a' );\r\n\r\n\t\tapp.$.forEach( links, link => {\r\n\t\t\tlet href = link.getAttribute( 'href' );\r\n\r\n\t\t\tif ( href !== '/' && url.indexOf( href ) !== -1 ) {\r\n\t\t\t\tlink.classList.add( 'active' );\r\n\t\t\t\tlinkFound = true;\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tif ( !linkFound ) {\r\n\t\t\tlinks[1].classList.add( 'active' );\r\n\t\t}\r\n\r\n\t\tbtnNavTrigger.addEventListener( 'click', e => {\r\n\t\t\tif ( doc.body.classList.contains( 'nav-in' ) ) {\r\n\t\t\t\tdoc.body.classList.remove( 'nav-in' );\r\n\t\t\t\tbtnNavTrigger.querySelector( 'i' ).textContent = 'menu';\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdoc.body.classList.add( 'nav-in' );\r\n\t\t\t\tbtnNavTrigger.querySelector( 'i' ).textContent = 'close';\r\n\t\t\t}\r\n\t\t} );\r\n\t}\r\n\r\n\tfunction checkPosition() {\r\n\t\tlet scrollY = app.util.getWindowScrollPosition();\r\n\r\n\t\tif ( scrollY >= y ) {\r\n\t\t\tdoc.body.classList.add( 'nav-fixed' );\r\n\t\t}\r\n\t\telse if ( doc.body.classList.contains( 'nav-fixed' ) ) {\r\n\t\t\tdoc.body.classList.remove( 'nav-fixed' );\r\n\t\t}\r\n\t}\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2015 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tif ( 'serviceWorker' in navigator && doc.URL.indexOf( 'localhost' ) === -1 ) {\r\n\t\tnavigator.serviceWorker.register( '/serviceworker.js' ).then( registration => {\r\n\t\t\tconsole.log( 'serviceworker registration successful with scope: ' + registration.scope );\r\n\t\t} ).catch( err => {\r\n\t\t\tconsole.log( 'serviceworker registration failed: ', err );\r\n\t\t} );\r\n\t}\r\n\r\n}( document ) );"]}