{"version":3,"sources":["../main.js"],"names":["app","window","doc","undefined","$","expr","context","querySelector","$$","Array","from","document","querySelectorAll","addScript","src","parent","async","fn","script","createElement","addEventListener","appendChild","self","Promise","fetch","forEach","elements","i","len","console","log","String","length","forEachElement","addEvent","evt","el","e","findUp","startEl","selector","attr","endTag","rspObj","body","moveUp","matches","val","getAttribute","parentNode","mq","mediaQuery","matchMedia","eqHeight","setTimeout","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","parse","data","d","text","elm","_matches","ownerDocument","item","CustomEvent","event","params","bubbles","cancelable","detail","createEvent","initCustomEvent","prototype","Event","noop","methods","cloneObj","obj","obj1","obj2","key","loadScript","callback","polyfillPromises","onload","onerror","preloadImage","Image","polyfillFetch","getWindowScrollPosition","scrollY","documentElement","scrollTop","callBackFn","instance","fnName","apply","arguments","disableWindowScroll","enableWindowScroll","remove","SIComponent","root","root_","args","initialize","evtType","handler","removeEventListener","ROOT","activeAlert","Alert","ALERT_ACTIVE","ALERT_EL","ALERT_HDR","ALERT_INFO","BTN","BTN_CONFIRM","BTN_CONTAINER","BTN_DISMISS","CONTAINER","ESCAPE_KEY","container","createAlertElements","onConfirm","onDismiss","addEventListeners","cssClasses","alertEl","alertHeader","alertInfo","btnContainer","btnDismiss","textContent","btnConfirm","hdr","content","btnConfirmText","btnDismissText","fnConfirm","fnDismiss","innerHTML","updateButtons","showAlert","handleKeyDown","MaterialButton","keyCode","numbers","handleKeyPress","Carousel","carousel","items","btns","last","btn","navHandler","newItem","currSliderControl","target","next","prev","order","slideIt","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","FadeIn","FADE_IN","IS_VISIBLE","imgs","IntersectionObserverEntry","Object","defineProperty","get","intersectionRatio","initObserver","threshold","observer","IntersectionObserver","onChange","changes","rootMargin","observe","change","isIntersecting","transitionend","setAttribute","unobserve","Footer","btnTop","scrollUp","scrollToTop","setInterval","pos","pageYOffset","scrollTo","clearInterval","preventDefault","config","apiKey","Gmap","loadCallback","initialized","map","markers","defaultCenter","lat","lng","defaultZoom","icon","scrollwheel","styles","zoomControl","initMap","bind","setDefaultCenter","setDefaultZoom","google","maps","Map","center","mapTypeControl","streetViewControl","zoom","setOptions","hasAttribute","latLng","split","parseFloat","addMarker","coords","position","parseInt","me","marker","Marker","GmapInitializer","init","AdminModal","ACTIVE","BTN_CLOSE","CONTENT_CONTAINER","close","show","hide","setContent","Nav","URL","toLowerCase","navMain","navMbl","navActive","toggle","navLinks","link","href","indexOf","ANIMATABLE","NAV_IN","SideNav","btnShow","sideNav","sideNavContainer","sideNavClose","showSideNav","hideSideNav","onTouchStart","onTouchMove","onTouchEnd","onTransitionEnd","update","startX","currentX","touchingSideNav","blockClicks","stopPropagation","touches","pageX","requestAnimationFrame","translateX","Math","min","transform","Slider","wrapper","slide","activeSlide","dots","activeDot","slideDisplayTime","slides","index","rotateTimeout","rotateTo","dot","clearTimeout","Toast","VISIBLE","DEFAULT_DURATION","createToast","msg","duration","removeToasts","toast","removeChild","webkitRequestAnimationFrame","mozRequestAnimationFrame","element","element_","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","animFrameHandler","boundRippleBlurHandler","blurHandler_","blur","disable","disabled","bound","x","y","clientX","clientY","width","rect","getBoundingClientRect","sqrt","frameCount","currentTarget","round","left","top","enable","ckEditorSettings","allowedContent","toolbar","formCssClasses","chosenSelect","ckeditor","errorLabel","hidden","inputField","invalid","mediumEditor","required","Form","fields","reqFields","inputFields","initFormElements","initEditors","checkActiveInputs","validateFields","collectData","setFieldValues","clearForm","select","input","Select","tag","tagName","TextBox","isCKEditor","isMediumEditor","field","MediumEditor","placeholder","CKEDITOR","replace","id","CKFinder","setupCKEditor","instances","lbl","checkForValue","isValid","isFieldValid","innerText","trim","validateField","getData","getValue","checkIfRequired","selectedIndex","value","checked","setData","setValue","moment","format","multiple","opt","selected","jQuery","trigger","ERROR_LABEL","INVALID_REQ_FIELD","MD_MENU","MENU","MENU_OPEN","LIST_ITEM","LIST_ITEM_HOVER","REQUIRED_FIELD","SEARCHBAR","startsWith","searchString","substr","label","menu","searchBar","hasSearch","open","currentIndex","listItems","createMenu","setMenuPosition","showMenu","hideMenu","changeHandler","focusHanlder","blurHandler","keyDownHandler","bodyClickHandler","children","listItem","li","ListItem","dataVal","bottom","offsetWidth","slctdEle","menuScrollTop","menuHeight","offsetTop","setHighlighted","focus","filterList","selectItem","test","fndCntr","fndItem","ul","thisItem","toUpperCase","click","direction","errorLbl","isRequired","isDefault","removeAttribute","defaultItem","ACTIVE_FIELD_CLASS","DATE_SELECTOR","validationTests","regExp","initDatePicker","focusHandler","picker","Pikaday","onSelect","getMoment","compareWithLimit","valid","minChars","compareWith","prevError","expFound","compField","getElementById","compValue","thisValue","vtCnt","navigator","serviceWorker","register","registration","scope","catch","err"],"mappings":"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","file":"main.js","sourcesContent":["///\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 return Array.from( typeof expr === 'string' ? ( context || document ).querySelectorAll( expr ) : expr || null );\r\n };\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, fn ) {\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 ( fn && typeof fn === 'function' ) {\r\n\t\t\tscript.addEventListener( 'load', () => fn() );\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( () => {\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( () => {\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( rsp => {\r\n\t\t\t\t\treturn rsp.json();\r\n\t\t\t\t} ).then( data => {\r\n\t\t\t\t\tif ( callbackFn ) {\r\n\t\t\t\t\t\tcallbackFn( JSON.parse( 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( 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 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 loadScript( url, callback ) {\r\n if ( typeof self.Promise === 'undefined' || !self.Promise ) {\r\n return {\r\n then: fn => polyfillPromises( _ => loadScript( url, fn ) )\r\n };\r\n }\r\n\r\n return new Promise(( resolve, reject ) => {\r\n const script = document.createElement( 'script' );\r\n script.src = url;\r\n script.async = true;\r\n\r\n script.onload = _ => {\r\n resolve( script );\r\n\r\n if ( callback && typeof callback === 'function' ) {\r\n callback( script );\r\n }\r\n };\r\n\r\n script.onerror = reject;\r\n\r\n document.body.appendChild( script );\r\n } );\r\n }\r\n\r\n function preloadImage( url, callback ) {\r\n if ( typeof self.Promise === 'undefined' || !self.Promise ) {\r\n return {\r\n then: fn => polyfillPromises( _ => preloadImage( url, fn ) )\r\n };\r\n }\r\n\r\n return new Promise(( resolve, reject ) => {\r\n const img = new Image();\r\n img.src = url;\r\n img.addEventListener( 'onload', _ => resolve() );\r\n img.addEventListener( 'onerror', _ => reject() );\r\n\r\n if ( callback && typeof callback === 'function' ) {\r\n console.log( 'not here?' );\r\n callback();\r\n }\r\n } );\r\n }\r\n\r\n function polyfillPromises( fn ) {\r\n const script = document.createElement( 'script' );\r\n script.src = '/bower_components/es6-promise/promise.min.js';\r\n script.async = true;\r\n script.onload = fn;\r\n document.body.appendChild( script ); \r\n }\r\n\r\n function polyfillFetch( fn ) {\r\n const script = document.createElement( 'script' );\r\n script.src = '/bower_components/fetch/fetch.min.js';\r\n script.async = true;\r\n script.onload = fn;\r\n document.body.appendChild( script );\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 function mq( mediaQuery ) {\r\n return !( window.matchMedia ) || ( window.matchMedia && window.matchMedia( mediaQuery ).matches );\r\n } \r\n\r\n return {\r\n cloneObj: cloneObj,\r\n extend: extend,\r\n loadScript: loadScript,\r\n preloadImage: preloadImage,\r\n polyfillPromises: polyfillPromises,\r\n getWindowScrollPosition: getWindowScrollPosition,\r\n callBackFn: callBackFn,\r\n disableWindowScroll: disableWindowScroll,\r\n enableWindowScroll: enableWindowScroll,\r\n mq: mq\r\n };\r\n\r\n}( document ) );\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 'use strict';\r\n\r\n class SIComponent {\r\n static attachTo( root ) {\r\n // Subclasses which extend SIComponent should provide an attachTo() method that takes a root element and\r\n // returns an instantiated component with its root set to that element.\r\n return new SIComponent( root );\r\n }\r\n\r\n static get cssClasses() {\r\n // Classes extending SIComponent should implement this method to return an object which exports every\r\n // CSS class the component class needs as a property. e.g. {ACTIVE: 'is-active'}\r\n return {};\r\n }\r\n\r\n static get numbers() {\r\n // Classes extending SIComponent should implement this method to return an object which exports all\r\n // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350}\r\n return {};\r\n }\r\n\r\n constructor( root, ...args ) {\r\n this.root_ = root;\r\n this.initialize( ...args );\r\n }\r\n\r\n initialize( /* ...args */ ) {\r\n // Subclasses can override this to do any additional setup work that would be considered part of a\r\n // constructor. Any additional arguments besides root will be passed in here.\r\n }\r\n\r\n // Wrapper method to add an event listener to the component's root element. This is most useful when\r\n // listening for custom events.\r\n addEvent( evtType, handler ) {\r\n this.root_.addEventListener( evtType, handler );\r\n }\r\n\r\n // Wrapper method to remove an event listener to the component's root element. This is most useful when\r\n // unlistening for custom events.\r\n removeEvent( evtType, handler ) {\r\n this.root_.removeEventListener( evtType, handler );\r\n }\r\n }\r\n\r\n app.SIComponent = SIComponent;\r\n\r\n}( document ) );\r\n/**\r\n* Copyright 2017 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 'use strict';\r\n\r\n const ROOT = 'alert';\r\n let activeAlert = null;\r\n\r\n class Alert extends app.SIComponent {\r\n static attachTo( root ) {\r\n if ( activeAlert ) {\r\n return activeAlert;\r\n }\r\n\r\n return new Alert( root );\r\n }\r\n\r\n static get cssClasses() {\r\n return {\r\n ROOT,\r\n ALERT_ACTIVE: `${ROOT}-is-active`,\r\n ALERT_EL: `${ROOT}-el`,\r\n ALERT_HDR: `${ROOT}-header`,\r\n ALERT_INFO: `${ROOT}-info`,\r\n BTN: `${ROOT}-btn`,\r\n BTN_CONFIRM: `${ROOT}-btn-confirm`,\r\n BTN_CONTAINER: `${ROOT}-btn-container`,\r\n BTN_DISMISS: `${ROOT}-btn-dismiss,`,\r\n CONTAINER: `${ROOT}-container`\r\n };\r\n }\r\n\r\n static get numbers() {\r\n return {\r\n ESCAPE_KEY: 27\r\n };\r\n }\r\n\r\n constructor( root, ...args ) {\r\n super( root, ...args );\r\n }\r\n\r\n initialize() {\r\n this.container = this.createAlertElements();\r\n this.root_.appendChild( this.container );\r\n\r\n this.onConfirm = function() { };\r\n\t\t\tthis.onDismiss = function() { };\r\n\r\n this.addEventListeners();\r\n\r\n activeAlert = this;\r\n }\r\n\r\n createAlertElements() {\r\n const el = doc.createElement( 'div' );\r\n el.classList.add( Alert.cssClasses.CONTAINER );\r\n\r\n this.alertEl = doc.createElement( 'div' );\r\n this.alertEl.classList.add( Alert.cssClasses.ALERT_EL );\r\n\r\n this.alertHeader = doc.createElement( 'h3' );\r\n this.alertHeader.classList.add( Alert.cssClasses.ALERT_HDR );\r\n\r\n this.alertInfo = doc.createElement( 'div' );\r\n\t\t\tthis.alertInfo.classList.add( Alert.cssClasses.ALERT_INFO );\r\n\r\n this.btnContainer = doc.createElement( 'div' );\r\n this.btnContainer.classList.add( Alert.cssClasses.BTN_CONTAINER );\r\n\r\n this.btnDismiss = doc.createElement( 'button' );\r\n this.btnDismiss.classList.add( Alert.cssClasses.BTN );\r\n this.btnDismiss.classList.add( Alert.cssClasses.BTN_DISMISS );\r\n this.btnDismiss.classList.add( 'btn-ripple' );\r\n this.btnDismiss.textContent = 'Dismiss';\r\n\r\n this.btnConfirm = doc.createElement( 'button' );\r\n this.btnConfirm.classList.add( Alert.cssClasses.BTN );\r\n this.btnConfirm.classList.add( Alert.cssClasses.BTN_CONFIRM );\r\n this.btnConfirm.classList.add( 'btn-ripple' );\r\n this.btnConfirm.textContent = 'Confirm';\r\n\r\n this.btnContainer.appendChild( this.btnDismiss );\r\n this.btnContainer.appendChild( this.btnConfirm );\r\n\r\n this.alertEl.appendChild( this.alertHeader );\r\n this.alertEl.appendChild( this.alertInfo );\r\n this.alertEl.appendChild( this.btnContainer );\r\n\r\n el.appendChild( this.alertEl );\r\n\r\n return el;\r\n }\r\n\r\n addEventListeners() {\r\n this.btnConfirm.addEventListener( 'click', this.onConfirm, false );\r\n\t\t\tthis.btnDismiss.addEventListener( 'click', this.onDismiss, false );\r\n }\r\n\r\n promptAlert( 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 updateButtons( 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( Alert.cssClasses.ALERT_ACTIVE );\r\n\t\t}\r\n\r\n\t\thandleKeyDown( e ) {\r\n\t\t\tif ( e.keyCode === Alert.numbers.ESCAPE_KEY ) {\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( Alert.cssClasses.ALERT_ACTIVE );\r\n\t\t\tdoc.body.removeEventListener( 'keydown', this.handleKeyPress, false );\r\n\t\t}\r\n }\r\n\r\n app.Alert = Alert;\r\n\r\n}( document ) );\r\n/**\r\n* Copyright 2017 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 'use strict';\r\n\r\n const ROOT = 'carousel';\r\n\r\n class Carousel extends app.SIComponent {\r\n static get cssClasses() {\r\n return {\r\n ROOT,\r\n carousel: `${ROOT}`,\r\n container: `${ROOT}-container`,\r\n items: `${ROOT}-item`,\r\n btns: `${ROOT}-btn`\r\n };\r\n }\r\n \r\n constructor( root, ...args ) { \r\n super( root, ...args );\r\n }\r\n\r\n initialize() {\r\n this.carousel = app.$( `.${Carousel.cssClasses.container}` );\r\n this.items = app.$$( `.${Carousel.cssClasses.items}` );\r\n this.btns = app.$$( `.${Carousel.cssClasses.btns}` );\r\n this.last = this.items[this.items.length - 1];\r\n\r\n // TODO: Fix when only 3 items in list?\r\n if ( this.items.length > 3 ) {\r\n this.last.classList.add( 'is-ref' );\r\n this.addEventListeners();\r\n }\r\n }\r\n\r\n addEventListeners() {\r\n this.btns.forEach( btn => {\r\n btn.addEventListener( 'click', e => { this.navHandler( e ); } );\r\n } );\r\n }\r\n\r\n navHandler( e ) {\r\n let newItem = '';\r\n let el = document.querySelector( '.is-ref' );\r\n let currSliderControl = e.target;\r\n\r\n el.classList.remove( 'is-ref' );\r\n if ( currSliderControl.getAttribute( 'data-toggle' ) === 'next' ) {\r\n newItem = this.next( el );\r\n this.carousel.classList.remove( 'is-reversing' );\r\n } else {\r\n newItem = this.prev( el );\r\n this.carousel.classList.add( 'is-reversing' );\r\n }\r\n\r\n newItem.classList.add( 'is-ref' );\r\n newItem.style.order = 1;\r\n for ( let i = 2; i <= this.items.length; i++ ) {\r\n newItem = this.next( newItem );\r\n newItem.style.order = i;\r\n }\r\n\r\n this.carousel.classList.remove( 'is-set' );\r\n this.slideIt( this.carousel );\r\n\r\n }\r\n\r\n slideIt( el ) {\r\n setTimeout( function() {\r\n el.classList.add( 'is-set' );\r\n }, 50 );\r\n }\r\n\r\n next( el ) {\r\n if ( el.nextElementSibling ) {\r\n return el.nextElementSibling;\r\n } else {\r\n return this.carousel.firstElementChild;\r\n }\r\n }\r\n\r\n prev( el ) {\r\n if ( el.previousElementSibling ) {\r\n return el.previousElementSibling;\r\n } else {\r\n return this.carousel.lastElementChild;\r\n }\r\n }\r\n }\r\n\r\n app.$.forEach( `.${Carousel.cssClasses.carousel}`, el => {\r\n new Carousel( el );\r\n } );\r\n\r\n}( document ) );\r\n/**\r\n* Copyright 2017 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 'use strict';\r\n\r\n const ROOT = 'img';\r\n\r\n class FadeIn extends app.SIComponent {\r\n static attachTo( root ) {\r\n return new FadeIn( root );\r\n }\r\n\r\n static get cssClasses() {\r\n return {\r\n ROOT,\r\n FADE_IN: `${ROOT}-fade-in`,\r\n IS_VISIBLE: `is-visible`,\r\n };\r\n }\r\n\r\n constructor( root, ...args ) {\r\n super( root, ...args );\r\n }\r\n\r\n initialize() {\r\n this.imgs = app.$$( `.${FadeIn.cssClasses.FADE_IN}` );\r\n \r\n if ( 'IntersectionObserver' in window &&\r\n 'IntersectionObserverEntry' in window &&\r\n 'intersectionRatio' in window.IntersectionObserverEntry.prototype ) {\r\n\r\n if ( !( 'isIntersecting' in window.IntersectionObserverEntry.prototype ) ) {\r\n Object.defineProperty( window.IntersectionObserverEntry.prototype,\r\n 'isIntersecting', {\r\n get: function() {\r\n return this.intersectionRatio > 0;\r\n }\r\n } );\r\n }\r\n\r\n this.initObserver(); \r\n }\r\n else {\r\n // Load IO polyfill\r\n app.util.loadScript( '/js/app/libs/intersectionObserver.js' )\r\n .then( _ => this.initObserver() );\r\n } \r\n }\r\n\r\n initObserver() {\r\n let threshold = 0.10; \r\n \r\n if ( app.util.mq( '(min-width:1025px)' ) ) {\r\n threshold = 0.175;\r\n }\r\n\r\n this.observer = new IntersectionObserver( changes => this.onChange( changes ), {\r\n rootMargin: '0px',\r\n threshold: threshold\r\n } );\r\n\r\n this.imgs.forEach( img => this.observer.observe( img ) );\r\n } \r\n\r\n onChange( changes ) {\r\n changes.forEach( change => {\r\n if ( change.isIntersecting ) {\r\n if ( change.target.getAttribute( 'data-src' ) ) {\r\n const img = change.target;\r\n const src = img.getAttribute( 'data-src' );\r\n\r\n app.util.preloadImage( src )\r\n .then( _ => {\r\n const transitionend = e => {\r\n img.classList.remove( FadeIn.cssClasses.FADE_IN );\r\n img.removeEventListener( 'transitionend', transitionend );\r\n };\r\n\r\n img.addEventListener( 'transitionend', transitionend );\r\n img.setAttribute( 'src', src );\r\n img.classList.add( FadeIn.cssClasses.IS_VISIBLE );\r\n } );\r\n }\r\n else {\r\n change.target.classList.add( FadeIn.cssClasses.IS_VISIBLE );\r\n }\r\n\r\n this.observer.unobserve( change.target );\r\n }\r\n } );\r\n }\r\n }\r\n\r\n app.FadeIn = FadeIn;\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 * @version: 1.0\r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n class Footer {\r\n constructor() {\r\n this.btnTop = app.$( '.footer-link-top' );\r\n this.addEventListeners();\r\n\t\t}\r\n\r\n\t\taddEventListeners() {\r\n this.btnTop.addEventListener( 'click', e => this.scrollUp( e ) );\r\n }\r\n\r\n scrollUp( e ) {\r\n\t let scrollToTop = window.setInterval( function() {\r\n let pos = window.pageYOffset;\r\n\t\t if ( pos > 0 ) {\r\n\t\t\t window.scrollTo( 0, pos - 30 );\r\n\t\t } else {\r\n\t\t\t window.clearInterval( scrollToTop );\r\n\t\t }\r\n }, 2 );\r\n\r\n e.preventDefault(); \r\n }\r\n\t}\r\n\r\n\tif ( app.$( '.footer' ) ) {\r\n\t\tnew Footer();\r\n\t}\r\n\r\n}( document ) );\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\r\n'use strict';\r\n\r\nconst config = {\r\n\tapiKey: 'AIzaSyA9WItoSzrmPnv_2aQLLc1hv7OrtdwPv9A'\r\n};\r\n\r\nclass Gmap {\r\n\tconstructor( el, loadCallback ) {\r\n\t\t// don't create a map twice\r\n\t\tif ( this.initialized ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.container = el;\r\n\t\tthis.map = null;\r\n\t\tthis.markers = [];\r\n\r\n\t\tthis.loadCallback = loadCallback;\r\n\r\n\t\tthis.options = {\r\n\t\t\tdefaultCenter: {\r\n lat: 32.711520,\r\n lng: -97.413148\r\n\t\t\t},\r\n\t\t\tdefaultZoom: 11,\r\n\t\t\ticon: '/img/contact/cs-logo.v1.png',\r\n\t\t\tscrollwheel: false,\r\n styles: [{ 'featureType': 'all', 'elementType': 'labels.text.fill', 'stylers': [{ 'saturation': 36 }, { 'color': '#333333' }, { 'lightness': 40 }] }, { 'featureType': 'all', 'elementType': 'labels.text.stroke', 'stylers': [{ 'visibility': 'on' }, { 'color': '#ffffff' }, { 'lightness': 16 }] }, { 'featureType': 'all', 'elementType': 'labels.icon', 'stylers': [{ 'visibility': 'off' }] }, { 'featureType': 'administrative', 'elementType': 'all', 'stylers': [{ 'visibility': 'off' }] }, { 'featureType': 'administrative', 'elementType': 'geometry.fill', 'stylers': [{ 'color': '#fefefe' }, { 'lightness': 20 }] }, { 'featureType': 'administrative', 'elementType': 'geometry.stroke', 'stylers': [{ 'color': '#fefefe' }, { 'lightness': 17 }, { 'weight': 1.2 }] }, { 'featureType': 'landscape', 'elementType': 'geometry', 'stylers': [{ 'lightness': 20 }, { 'color': '#ececec' }] }, { 'featureType': 'landscape.man_made', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }, { 'color': '#f0f0ef' }] }, { 'featureType': 'landscape.man_made', 'elementType': 'geometry.fill', 'stylers': [{ 'visibility': 'on' }, { 'color': '#f0f0ef' }] }, { 'featureType': 'landscape.man_made', 'elementType': 'geometry.stroke', 'stylers': [{ 'visibility': 'on' }, { 'color': '#d4d4d4' }] }, { 'featureType': 'landscape.natural', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }, { 'color': '#ececec' }] }, { 'featureType': 'poi', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { 'featureType': 'poi', 'elementType': 'geometry', 'stylers': [{ 'lightness': 21 }, { 'visibility': 'off' }] }, { 'featureType': 'poi', 'elementType': 'geometry.fill', 'stylers': [{ 'visibility': 'on' }, { 'color': '#d4d4d4' }] }, { 'featureType': 'poi', 'elementType': 'labels.text.fill', 'stylers': [{ 'color': '#303030' }] }, { 'featureType': 'poi', 'elementType': 'labels.icon', 'stylers': [{ 'saturation': '-100' }] }, { 'featureType': 'poi.attraction', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { 'featureType': 'poi.business', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { 'featureType': 'poi.government', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { 'featureType': 'poi.medical', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { 'featureType': 'poi.park', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { 'featureType': 'poi.park', 'elementType': 'geometry', 'stylers': [{ 'color': '#dedede' }, { 'lightness': 21 }] }, { 'featureType': 'poi.place_of_worship', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { 'featureType': 'poi.school', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { 'featureType': 'poi.school', 'elementType': 'geometry.stroke', 'stylers': [{ 'lightness': '-61' }, { 'gamma': '0.00' }, { 'visibility': 'off' }] }, { 'featureType': 'poi.sports_complex', 'elementType': 'all', 'stylers': [{ 'visibility': 'on' }] }, { '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': 'transit', 'elementType': 'geometry', 'stylers': [{ 'color': '#f2f2f2' }, { 'lightness': 19 }] }, { 'featureType': 'water', 'elementType': 'geometry', 'stylers': [{ 'color': '#dadada' }, { 'lightness': 17 }] }],\r\n\t\t\tzoomControl: true\r\n\t\t};\r\n\r\n\t\tthis.initMap = this.initMap.bind( this );\r\n\t\tthis.setDefaultCenter = this.setDefaultCenter.bind( this );\r\n\t\tthis.setDefaultZoom = this.setDefaultZoom.bind( this );\r\n\r\n\t\tthis.addScript();\r\n\t}\r\n\r\n\tinitMap() {\r\n\t\tthis.setDefaultCenter();\r\n\t\tthis.setDefaultZoom();\r\n\r\n\t\tthis.map = new google.maps.Map( this.container, {\r\n\t\t\tcenter: this.options.defaultCenter,\r\n\t\t\tmapTypeControl: false,\r\n\t\t\tscrollwheel: this.options.scrollwheel,\r\n\t\t\tstreetViewControl: false,\r\n\t\t\tzoom: this.options.defaultZoom,\r\n\t\t\tzoomControl: this.options.zoomControl\r\n\t\t} );\r\n\r\n\t\tthis.map.setOptions( { styles: this.options.styles } );\r\n\r\n\t\tif ( this.container.hasAttribute( 'data-map-marker' ) ) {\r\n\t\t\tlet center = this.options.defaultCenter;\r\n\r\n\t\t\tif ( this.container.hasAttribute( 'data-map-marker-position' ) ) {\r\n\t\t\t\tlet latLng = this.container.getAttribute( 'data-map-marker-position' );\r\n\t\t\t\tlatLng = latLng.split( ',' );\r\n\r\n\t\t\t\tcenter = {\r\n\t\t\t\t\tlat: parseFloat( latLng[0] ),\r\n\t\t\t\t\tlng: parseFloat( latLng[1] )\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tthis.addMarker( center );\r\n\t\t}\r\n\r\n\t\tif ( this.loadCallback && typeof this.loadCallback === 'function' ) {\r\n\t\t\tthis.loadCallback( this.map );\r\n\t\t}\r\n\t}\r\n\r\n\taddScript() {\r\n\t\tapp.util.loadScript( 'https://maps.googleapis.com/maps/api/js?key=' + config.apiKey, this.initMap );\r\n\t}\r\n\r\n\tsetDefaultCenter() {\r\n\t\tif ( this.container.hasAttribute( 'data-map-center' ) ) {\r\n\t\t\tconst coords = this.container.getAttribute( 'data-map-center' );\r\n\t\t\tconst position = coords.split( ',' );\r\n\r\n\t\t\tif ( position.length ) {\r\n\t\t\t\tthis.options.defaultCenter = {\r\n\t\t\t\t\tlat: parseFloat( position[0] ),\r\n\t\t\t\t\tlng: parseFloat( position[1] )\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDefaultZoom() {\r\n\t\tif ( this.container.hasAttribute( 'data-map-zoom' ) ) {\r\n\t\t\tthis.options.defaultZoom = parseInt( this.container.getAttribute( 'data-map-zoom' ), 10 );\r\n\t\t}\r\n\t}\r\n\r\n\taddMarker( data ) {\r\n\t\tconst me = this;\r\n\t\tlet icon = data.marker || this.options.icon;\r\n\t\t\t\r\n\t\tlet marker = new google.maps.Marker( {\r\n\t\t\tdata: data,\r\n\t\t\ticon: icon,\r\n\t\t\tmap: this.map,\r\n\t\t\tposition: {\r\n\t\t\t\tlat: data.lat,\r\n\t\t\t\tlng: data.lng\r\n\t\t\t}\r\n\t\t} );\r\n\r\n\t\tthis.markers.push( marker );\r\n }\r\n}\r\n\r\napp.Gmap = Gmap;\r\n\r\nclass GmapInitializer {\r\n static init() {\r\n\r\n app.$$( '.gmap-auto' ).forEach( el => {\r\n new Gmap( el );\r\n } );\r\n }\r\n}\r\n\r\nif ( app.$( '.gmap' ) ) {\r\n GmapInitializer.init();\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 'use strict';\r\n\r\n const ROOT = 'modal';\r\n\r\n class AdminModal extends app.SIComponent {\r\n static get cssClasses() {\r\n return {\r\n ROOT,\r\n ACTIVE: `${ROOT}-in`,\r\n BTN_CLOSE: `${ROOT}-close`,\r\n CONTENT_CONTAINER: `${ROOT}-content`\r\n };\r\n }\r\n\r\n constructor( root, ...args ) {\r\n super( root, ...args );\r\n }\r\n\r\n initialize() {\r\n this.close = this.root_.querySelector( '.' + AdminModal.cssClasses.BTN_CLOSE );\r\n this.content = this.root_.querySelector( '.' + AdminModal.cssClasses.CONTENT_CONTAINER );\r\n\r\n this.show = this.show.bind( this );\r\n this.hide = this.hide.bind( this );\r\n this.setContent = this.setContent.bind( this );\r\n\r\n this.addEventListeners();\r\n\r\n return this;\r\n }\r\n\r\n addEventListeners() {\r\n this.close.addEventListener( 'click', this.hide, false );\r\n }\r\n\r\n show() {\r\n doc.body.classList.add( AdminModal.cssClasses.ACTIVE );\r\n }\r\n\r\n hide() {\r\n doc.body.classList.remove( AdminModal.cssClasses.ACTIVE );\r\n }\r\n\r\n setContent( content ) {\r\n this.content.innerHTML = content;\r\n }\r\n }\r\n\r\n app.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 * @version: 1.0\r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tclass Nav {\r\n\t\tconstructor() {\r\n this.url = doc.URL.toLowerCase();\r\n this.navMain = app.$( '#nav-main' );\r\n this.navMbl = app.$( '.nav-mbl' );\r\n this.navActive(); \r\n this.addEventListeners();\r\n }\r\n\r\n addEventListeners() {\r\n if ( this.navMbl ) {\r\n this.navMbl.addEventListener( 'click', e => {\r\n document.body.classList.toggle( 'mbl-open' );\r\n } );\r\n }\r\n }\r\n\r\n navActive() {\r\n let navLinks = this.navMain.querySelectorAll( 'a' ); \r\n\r\n navLinks.forEach( (link, i) => {\r\n if ( link.href.indexOf( this.url ) !== -1 ) {\r\n link.classList.add( 'active' );\r\n }\r\n } );\r\n\t\t}\r\n\t}\r\n\r\n if ( app.$( '#nav-main' ) ) { \r\n\t\tnew Nav();\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 * @version: 1.0\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* Copyright 2017 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 'use strict';\r\n\r\n class Slider extends app.SIComponent {\r\n static get cssClasses() {\r\n return {\r\n wrapper: `home-slides`,\r\n slide: 'home-slides-slide',\r\n activeSlide: 'slide-is-active',\r\n dots: `home-slides-dot`,\r\n activeDot: `home-slides-dot-is-active`\r\n };\r\n }\r\n\r\n static get numbers() {\r\n return {\r\n slideDisplayTime: 6000\r\n };\r\n }\r\n\r\n constructor( root, ...args ) { \r\n super( root, ...args );\r\n }\r\n\r\n initialize() {\r\n this.slides = this.root_.querySelectorAll( `.${Slider.cssClasses.slide}` );\r\n this.dots = this.root_.querySelectorAll( `.${Slider.cssClasses.dots}` );\r\n this.slides[0].classList.add( Slider.cssClasses.activeSlide );\r\n this.dots[0].classList.add( Slider.cssClasses.activeDot );\r\n this.index = 0;\r\n this.length = this.slides.length;\r\n\r\n this.rotateTimeout = null;\r\n\r\n this.addEventListeners();\r\n\r\n this.rotateTo = this.rotateTo.bind( this );\r\n this.rotateTimeout = setTimeout( this.rotateTo, Slider.numbers.slideDisplayTime );\r\n }\r\n\r\n addEventListeners() {\r\n if ( this.dots && this.dots.length ) {\r\n app.$.forEach( this.dots, ( dot, i ) => {\r\n dot.addEventListener( 'click', e => {\r\n this.rotateTo( i );\r\n e.preventDefault();\r\n } );\r\n } );\r\n }\r\n }\r\n\r\n rotateTo( index ) {\r\n if ( this.rotateTimeout ) {\r\n clearTimeout( this.rotateTimeout );\r\n this.rotateTimeout = null;\r\n }\r\n\r\n this.slides[this.index].classList.remove( Slider.cssClasses.activeSlide );\r\n\r\n if ( this.dots && this.dots.length ) {\r\n this.dots[this.index].classList.remove( Slider.cssClasses.activeDot );\r\n }\r\n\r\n if ( index || index === 0 ) {\r\n this.index = index;\r\n }\r\n else {\r\n this.index++;\r\n\r\n if ( this.index === this.length ) {\r\n this.index = 0;\r\n }\r\n }\r\n\r\n const transitionend = e => {\r\n this.slides[this.index].removeEventListener( 'transitionend', transitionend );\r\n this.rotateTimeout = setTimeout( this.rotateTo, Slider.numbers.slideDisplayTime );\r\n };\r\n\r\n this.slides[this.index].addEventListener( 'transitionend', transitionend );\r\n\r\n this.slides[this.index].classList.add( Slider.cssClasses.activeSlide );\r\n\r\n if ( this.dots && this.dots.length ) {\r\n this.dots[this.index].classList.add( Slider.cssClasses.activeDot );\r\n }\r\n }\r\n }\r\n\r\n app.$.forEach( `.${Slider.cssClasses.wrapper}`, el => {\r\n new Slider( el );\r\n } );\r\n\r\n}( document ) );\r\n/**\r\n* Copyright 2017 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 'use strict';\r\n\r\n const ROOT = 'toast';\r\n \r\n class Toast extends app.SIComponent {\r\n static attachTo( root ) {\r\n return new Toast( root );\r\n }\r\n\r\n static get cssClasses() {\r\n return {\r\n ROOT,\r\n VISIBLE: `${ROOT}-is-visible`,\r\n };\r\n }\r\n\r\n static get numbers() {\r\n return {\r\n DEFAULT_DURATION: 3000\r\n };\r\n }\r\n\r\n constructor( root, ...args ) {\r\n super( root, ...args );\r\n }\r\n\r\n initialize() {\r\n this.container = this.createToast();\r\n }\r\n\r\n show( msg, duration ) {\r\n this.removeToasts();\r\n\r\n this.container.textContent = msg;\r\n this.container.classList.add( Toast.cssClasses.VISIBLE );\r\n\r\n this.root_.appendChild( this.container );\r\n\r\n if ( !duration && duration !== -1 ) {\r\n duration = Toast.numbers.DEFAULT_DURATION;\r\n }\r\n\r\n if ( duration !== -1 ) {\r\n setTimeout( _ => this.hide(), duration );\r\n }\r\n }\r\n\r\n createToast() {\r\n const container = doc.createElement( 'div' );\r\n container.classList.add( Toast.cssClasses.ROOT );\r\n return container;\r\n }\r\n\r\n hide() {\r\n this.container.classList.remove( Toast.cssClasses.VISIBLE );\r\n }\r\n\r\n removeToasts() {\r\n const toast = app.$( '.' + Toast.cssClasses.ROOT );\r\n \r\n if ( toast ) {\r\n toast.parentNode.removeChild( toast );\r\n }\r\n }\r\n }\r\n\r\n app.Toast = Toast;\r\n\r\n}( document ) );\r\nwindow.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 2015 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n * @version: 1.0\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\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};\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\r\n\t\t\tthis.container = el;\r\n\t\t\tthis.fields = el.querySelectorAll( 'input:not([type=\"file\"]),textarea,.use-medium-editor,select' );\r\n\t\t\tthis.reqFields = el.querySelectorAll( '.' + formCssClasses.required );\r\n\t\t\tthis.inputFields = el.querySelectorAll( '.' + formCssClasses.inputField + ',.text-editor' );\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\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\t\t\t\t\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 ? 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\tlet isCKEditor = false;\r\n\t\t\t\t\t\tlet isMediumEditor = false;\r\n\r\n\t\t\t\t\t\tif ( input.classList.contains( formCssClasses.ckeditor ) ) {\r\n\t\t\t\t\t\t\tisCKEditor = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if ( input.classList.contains( formCssClasses.mediumEditor ) ) {\r\n\t\t\t\t\t\t\tisMediumEditor = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tinput.TextBox = new app.TextBox( input, isCKEditor, isMediumEditor );\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\t\t\t\t\t\t\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} );\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\t// changed this loop to use all fields so that we can check\r\n\t\t\t// if field level validation is ok.\r\n\t\t\tapp.$.forEach( this.fields, field => {\r\n\t\t\t\tlet isFieldValid = true;\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.innerText.trim();\r\n\t\t\t\t\t\r\n\t\t\t\t\tif ( field.TextBox ) {\r\n\t\t\t\t\t\tisFieldValid = field.TextBox.validateField();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( field.classList.contains( 'req' ) && val === '' ) {\r\n\t\t\t\t\t\tisFieldValid = false;\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 ( field.TextBox ) {\r\n\t\t\t\t\t\tisFieldValid = field.TextBox.validateField();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tval = CKEDITOR.instances[field.id].getData().trim();\r\n\r\n\t\t\t\t\t\tif ( field.classList.contains( 'req' ) && val === '' ) {\r\n\t\t\t\t\t\t\tisFieldValid = false;\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 ( 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\tisFieldValid = field.Select.checkIfRequired();\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\t\r\n\t\t\t\t\t\tif ( field.classList.contains( 'req' ) && ( val === '' || val === '-1' ) ) {\r\n\t\t\t\t\t\t\tisFieldValid = false;\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 {\r\n\t\t\t\t\tif ( field.TextBox ) {\r\n\t\t\t\t\t\tisFieldValid = field.TextBox.validateField();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tval = field.value.trim();\r\n\r\n\t\t\t\t\t\tif ( field.classList.contains( 'req' ) && val === '' ) {\r\n\t\t\t\t\t\t\tisFieldValid = false;\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 ( isValid && !isFieldValid ) {\r\n\t\t\t\t\tisValid = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !isFieldValid ) {\r\n\t\t\t\t\tconsole.log( 'Invalid Field: ', field );\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\tif ( key !== null ) {\r\n\t\t\t\t\tparams[key] = val;\r\n\t\t\t\t}\r\n\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.parentNode.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 else if ( tag === 'textarea' ) {\r\n if ( field.classList.contains( formCssClasses.ckeditor ) ) {\r\n CKEDITOR.instances[field.id].setData( '' );\r\n }\r\n else {\r\n field.value = '';\r\n }\r\n }\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 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\tSEARCHBAR: 'md-select-searchbar'\r\n\t};\r\n\r\n\tif ( !String.prototype.startsWith ) {\r\n\t\tString.prototype.startsWith = function( searchString, position ) {\r\n\t\t\tposition = position || 0;\r\n\t\t\treturn this.substr( position, searchString.length ) === searchString;\r\n\t\t};\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\t\t\tthis.searchBar = null;\r\n\t\t\tthis.searchString = '';\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\t//\r\n\t\t\tthis.hasSearch = this.select.hasAttribute( 'data-search' );\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\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\tthis.searchBar = doc.createElement( 'div' );\r\n\t\t\tthis.searchBar.setAttribute( 'contenteditable', 'true' );\r\n\t\t\tthis.searchBar.classList.add( cssClasses.SEARCHBAR );\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\tif ( this.select.selectedIndex > 0 && this.listItems[0].dataVal !== '-1' ) {\r\n\t\t\t\tthis.select.classList.add( 'not-default' );\r\n\t\t\t}\r\n\r\n\t\t\tdoc.body.appendChild( this.menu );\r\n\r\n\t\t\tif ( this.hasSearch ) {\r\n\t\t\t\tdoc.body.appendChild( this.searchBar );\r\n\t\t\t}\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\r\n\t\t\tif ( this.hasSearch ) {\r\n\t\t\t\tthis.searchBar.style.top = ( rect.top + app.util.getWindowScrollPosition() + 10 ) + 'px';\r\n\t\t\t\tthis.searchBar.style.left = rect.left + 'px';\r\n\t\t\t\tthis.searchBar.style.width = this.select.offsetWidth + 'px';\r\n\t\t\t}\r\n\r\n\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//Check to see if there is another Select currently open on the document\r\n\t\t\tif ( doc.Select ) {\r\n\t\t\t\tdoc.Select.hideMenu();\r\n\t\t\t\tdoc.Select = null;\r\n\t\t\t}\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.searchBar.classList.add( cssClasses.MENU_OPEN );\r\n\t\t\tthis.searchString = '';\r\n\t\t\tthis.searchBar.innerHTML = '';\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\r\n\t\t\t\tlet slctdEle = me.menu.querySelector( 'li[selected=\"true\"]' );\r\n\t\t\t\tif ( slctdEle ) {\r\n\r\n\t\t\t\t\tlet menuScrollTop = me.menu.scrollTop;\r\n\t\t\t\t\tlet menuHeight = me.menu.offsetHeight;\r\n\r\n\t\t\t\t\tif ( slctdEle.offsetTop + slctdEle.offsetHeight > menuScrollTop + menuHeight ) {\r\n\t\t\t\t\t\tme.menu.scrollTop = slctdEle.offsetTop;// menuScrollTop + slctdEle.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tme.setHighlighted( 0 );\r\n\r\n\t\t\t\tif ( me.hasSearch ) {\r\n\t\t\t\t\tme.searchBar.focus();\r\n\t\t\t\t}\r\n\r\n\t\t\t}, 100 );\r\n\r\n\r\n\r\n\t\t\t//Set the current global select so that it can be closed if it is open when another show menu on a different element is pressed.\r\n\t\t\tdoc.Select = this;\r\n\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\r\n\t\t\tif ( this.hasSearch ) {\r\n\t\t\t\tthis.searchBar.classList.remove( cssClasses.MENU_OPEN );\r\n\t\t\t}\r\n\r\n\t\t\tthis.open = false;\r\n\t\t\tthis.searchString = '';\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\tthis.filterList();\r\n\r\n\t\t\t// remove the current select from the document.\r\n\t\t\tdoc.Select = null;\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}\r\n\r\n\t\tkeyDownHandler( e ) {\r\n\t\t\tlet index = this.currentIndex;\r\n\t\t\tlet keyCode = -1;\r\n\r\n\t\t\tif ( e && e.keyCode ) {\r\n\t\t\t\tkeyCode = e.keyCode;\r\n\r\n\t\t\t\tif ( keyCode === 9 ) {\r\n\t\t\t\t\tthis.hideMenu();\r\n\t\t\t\t\tthis.select.focus();\r\n\t\t\t\t\t//e.preventDefault();\r\n\t\t\t\t}\r\n\r\n\t\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.setHighlighted( 1 );\r\n\t\t\t\t}\r\n\r\n\t\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.setHighlighted( -1 );\r\n\t\t\t\t}\r\n\r\n\t\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\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\r\n\t\t\t\t\t// anyother key is pressed\r\n\t\t\t\telse {\r\n\t\t\t\t\tif ( this.hasSearch ) {\r\n\r\n\t\t\t\t\t\tif ( keyCode === 8 ) {\r\n\t\t\t\t\t\t\tthis.searchString = this.searchString.substr( 0, this.searchString.length - 1 );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif ( e.key.length === 1 && /^[a-zA-Z0-9 _]+$/.test( e.key ) ) {\r\n\t\t\t\t\t\t\t\tthis.searchString += e.key;\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\tthis.filterList();\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilterList() {\r\n\t\t\tif ( this.hasSearch && this.listItems.length > 0 ) {\r\n\t\t\t\tlet fndCntr = 0;\r\n\t\t\t\tlet fndItem = null;\r\n\t\t\t\tlet ul = this.listItems[0].listItem.parentNode;\r\n\t\t\t\tul.classList.add( 'hidden' );\r\n\t\t\t\tfor ( var i = 0; i < this.listItems.length; i++ ) {\r\n\t\t\t\t\tlet thisItem = this.listItems[i].listItem;\r\n\t\t\t\t\tif ( thisItem.innerText.toUpperCase().startsWith( this.searchString.toUpperCase() ) || thisItem.getAttribute( 'selected' ) === 'true' ) {\r\n\t\t\t\t\t\tthisItem.classList.remove( 'hidden' );\r\n\r\n\t\t\t\t\t\tif ( fndCntr < 2 && thisItem.innerText.toUpperCase().startsWith( this.searchString.toUpperCase() ) ) {\r\n\t\t\t\t\t\t\tfndItem = thisItem;\r\n\t\t\t\t\t\t\tfndCntr += 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthisItem.classList.add( 'hidden' );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tul.classList.remove( 'hidden' );\r\n\t\t\t\tif ( fndCntr === 1 ) {\r\n\t\t\t\t\tfndItem.click();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsetHighlighted( direction ) {\r\n\t\t\t//Find the selected item and set the current index. Used upon show menu.\r\n\t\t\tif ( direction === 0 ) {\r\n\t\t\t\tfor ( let i = 0; i < this.listItems.length; i++ ) {\r\n\t\t\t\t\tlet thisItem = this.listItems[i].listItem;\r\n\t\t\t\t\tif ( thisItem.getAttribute( 'selected' ) === 'true' ) {\r\n\t\t\t\t\t\tthis.currentIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\r\n\t\t\t\tfor ( let i = this.currentIndex + direction; i < this.listItems.length && i >= 0 ; i += direction ) {\r\n\t\t\t\t\tlet thisItem = this.listItems[i].listItem;\r\n\t\t\t\t\tif ( !thisItem.classList.contains( 'hidden' ) ) {\r\n\t\t\t\t\t\tif ( this.currentIndex >= 0 ) {\r\n\t\t\t\t\t\t\tthis.listItems[this.currentIndex].listItem.classList.remove( cssClasses.LIST_ITEM_HOVER );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.currentIndex = i;\r\n\t\t\t\t\t\tthisItem.classList.add( cssClasses.LIST_ITEM_HOVER );\r\n\r\n\t\t\t\t\t\tlet menuScrollTop = this.menu.scrollTop;\r\n\t\t\t\t\t\tlet menuHeight = this.menu.offsetHeight;\r\n\r\n\t\t\t\t\t\tif ( direction > 0 ) {\r\n\t\t\t\t\t\t\t// check scroll top\r\n\t\t\t\t\t\t\tif ( thisItem.offsetTop + thisItem.offsetHeight > menuScrollTop + menuHeight ) {\r\n\t\t\t\t\t\t\t\tthis.menu.scrollTop = menuScrollTop + thisItem.offsetHeight;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// check scroll top\r\n\t\t\t\t\t\t\tif ( thisItem.offsetTop < menuScrollTop ) {\r\n\t\t\t\t\t\t\t\tthis.menu.scrollTop = menuScrollTop - thisItem.offsetHeight;\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\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\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' ) || e.target.classList.contains( 'md-select-searchbar' ) ) ) {\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 isValid = true;\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 || selected.getAttribute( 'data-val' ) === '-1' ) && 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\tisValid = false;\r\n\t\t\t}\r\n\r\n\t\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\r\n\t\t\treturn isValid;\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.select.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\t\t\tthis.isRequired = select.select.classList.contains( 'req' );\r\n\t\t\tthis.dataVal = opt.value;\r\n\t\t\tthis.isDefault = opt.value === '-1';\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 ( this.isDefault ) {\r\n\t\t\t\tthis.listItem.classList.add( 'default-item' );\r\n\t\t\t}\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\r\n\t\t\t// if clicking the currently selected item\r\n\t\t\tif ( this.listItem.getAttribute( 'selected' ) === 'true' ) {\r\n\r\n\t\t\t\tif ( !this.isRequired ) {\r\n\t\t\t\t\tthis.listItem.removeAttribute( 'selected' );\r\n\r\n\t\t\t\t\tif ( !this.select.multiple ) {\r\n\t\t\t\t\t\tthis.select.select.value = '';\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet defaultItem = this.select.select.querySelector( 'option[value=\"-1\"]' );\r\n\t\t\t\t\tif ( defaultItem ) {\r\n\t\t\t\t\t\tthis.select.select.classList.remove( 'not-default' );\r\n\t\t\t\t\t\tdefaultItem.setAttribute( 'selected', 'selected' );\r\n\t\t\t\t\t\tthis.select.select.value = '-1';\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tthis.select.checkIfRequired();\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// hide the menu if this ins not a multiple select\r\n\t\t\t\t\tif ( !this.select.multiple ) {\r\n\t\t\t\t\t\tthis.select.hideMenu();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\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\tif ( this.select.select.value !== '-1' ) {\r\n\t\t\t\tthis.select.select.classList.add( 'not-default' );\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 * 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\r\n\t// array of reg Expression for validation made up of the following objects\r\n\t// {{ type: 'Type or ClassName that indicates test should be applied', regExp: 'Expression to test', msg:'Invalid Msg' },\r\n\tconst validationTests = [\r\n { type: 'req', regExp: /^(?!\\s*$).+/, msg: 'Required Field' },\r\n { type: 'email', regExp: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/, msg: 'Invalid Email Address' },\r\n { type: 'tel', regExp: /^$|\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/, msg: 'Invalid Phone Number' },\r\n { type: 'input-date', regExp: /^(0[1-9]|1[0-2])\\/(0[1-9]|1\\d|2\\d|3[01])\\/(19|20)\\d{2}$/, msg: 'Invalid Date' },\r\n { type: 'zip', regExp: /^$|\\d{5}(?:[-\\s]\\d{4})?$/, msg: 'Invalid Zipcode' },\r\n { type: 'numonly', regExp: /[0-9]$/, msg: 'Numbers Only' },\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, isCKEditor, isMediumEditor ) {\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// if this is a ckeditor or mediumeditor\r\n\t\t\tthis.isCKEditor = isCKEditor;\r\n\t\t\tthis.isMediumEditor = isMediumEditor;\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\r\n\t\t\t\t// DGH - I removed this on 1/25/2017 because it seemed to be validating the field to many times. Don't think it was necessary since blur and set value already did this.\r\n\t\t\t\t//this.validateField();\r\n\t\t\t\t//******\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( compareWithLimit ) {\r\n\t\t\tlet field = this.input;\r\n\t\t\tlet type = field.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 compareWith = field.getAttribute( 'compare-with' );\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\t\t\tlet expFound = false;\r\n\r\n\t\t\tif ( 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\texpFound = true;\r\n\t\t\t}\r\n\t\t\telse if ( compareWith ) {\r\n\t\t\t\tlet compField = document.getElementById( compareWith );\r\n\t\t\t\tlet compValue = compField.value;\r\n\t\t\t\tlet thisValue = field.value;\r\n\r\n\t\t\t\tif ( compValue !== thisValue ) {\r\n\t\t\t\t\tvalid = false;\r\n\t\t\t\t\tmsg = 'Does Not Match';\r\n\t\t\t\t\texpFound = true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif ( !compareWithLimit ) {\r\n\t\t\t\t\t\tcompField.TextBox.validateField( true );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( !expFound ) {\r\n\t\t\t\t//Loop thru validation test to see if any need to be applied.\r\n\t\t\t\tfor ( var vtCnt = 0; vtCnt < validationTests.length; vtCnt++ ) {\r\n\t\t\t\t\tif ( type === validationTests[vtCnt].type || field.classList.contains( validationTests[vtCnt].type ) ) {\r\n\t\t\t\t\t\tif ( !validationTests[vtCnt].regExp.test( val ) ) {\r\n\t\t\t\t\t\t\tvalid = false;\r\n\t\t\t\t\t\t\tmsg = validationTests[vtCnt].msg;\r\n\t\t\t\t\t\t\tbreak;\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\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\r\n\t\t\treturn valid;\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\tif ( this.isCKEditor ) {\r\n\t\t\t\treturn CKEDITOR.instances[this.input.id].getData().trim();\r\n\t\t\t}\r\n\t\t\telse if ( this.isMediumEditor ) {\r\n\t\t\t\treturn this.input.innerText.trim();\r\n\t\t\t}\r\n\t\t\t\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 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 ) );"]}