{"version":3,"sources":["../main.js"],"names":["app","window","doc","undefined","$","expr","context","querySelector","$$","Array","from","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","document","ownerDocument","item","CustomEvent","event","params","bubbles","cancelable","detail","createEvent","initCustomEvent","prototype","Event","l","Object","toString","c","call","m","Math","pow","k","TypeError","arguments","f","a","Number","isNaN","isFinite","floor","abs","min","max","g","b","noop","methods","callback","T","O","kValue","cloneObj","obj","obj1","obj2","key","getWindowScrollPosition","scrollY","documentElement","scrollTop","callBackFn","instance","fnName","apply","disableWindowScroll","enableWindowScroll","remove","queryStringToJSON","pairs","location","search","slice","split","result","pair","toLowerCase","decodeURIComponent","SIComponent","root","root_","args","initialize","evtType","handler","removeEventListener","AdminModal","container","content","init","ROOT","activeAlert","Alert","ALERT_ACTIVE","ALERT_EL","ALERT_HDR","ALERT_INFO","BTN","BTN_CONFIRM","BTN_CONTAINER","BTN_DISMISS","CONTAINER","ESCAPE_KEY","createAlertElements","onConfirm","onDismiss","addEventListeners","cssClasses","alertEl","alertHeader","alertInfo","btnContainer","btnDismiss","textContent","btnConfirm","hdr","btnConfirmText","btnDismissText","fnConfirm","fnDismiss","innerHTML","updateButtons","showAlert","handleKeyDown","MaterialButton","keyCode","numbers","handleKeyPress","EventItem","eventId","displayEl","programEl","prgObj","ProgramItem","events","success","html","costValue","evtMax","btnSaveReg","msg","msgZero","prgMax","value","disabled","parseInt","Nav","triggers","addEventListeners_","trigger","toggle","nav","programId","readMore","details","bindEvents","showDetails","preventDefault","ShareModal","ANIMATABLE","NAV_IN","SideNav","btnShow","sideNav","sideNavContainer","sideNavClose","showSideNav","bind","hideSideNav","onTouchStart","onTouchMove","onTouchEnd","onTransitionEnd","update","startX","currentX","touchingSideNav","blockClicks","stopPropagation","touches","pageX","requestAnimationFrame","translateX","transform","Toast","VISIBLE","DEFAULT_DURATION","createToast","duration","removeToasts","hide","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","bound","x","y","clientX","clientY","width","rect","getBoundingClientRect","sqrt","frameCount","currentTarget","round","left","top","enable","btn","ckEditorSettings","allowedContent","toolbar","mediumEditorSettings","placeholder","anchorPreview","hideDelay","previewValueSelector","anchor","customClassOption","customClassOptionText","linkValidation","placeholderText","targetCheckbox","targetCheckboxText","formCssClasses","chosenSelect","ckeditor","errorLabel","hidden","inputField","invalid","mediumEditor","required","Form","editorOptions","fields","reqFields","inputFields","initFormElements","initEditors","checkActiveInputs","validateFields","collectData","setFieldValues","clearForm","select","input","Select","TimeRangeSelect","tag","tagName","TextBox","isCKEditor","isMediumEditor","field","MediumEditor","CKEDITOR","replace","id","CKFinder","setupCKEditor","instances","lbl","checkForValue","isValid","isFieldValid","innerText","trim","validateField","getData","getValue","checkIfRequired","selectedIndex","checked","parseFloat","setData","setValue","moment","format","multiple","opt","selected","jQuery","err","ERROR_LABEL","INVALID_REQ_FIELD","MD_MENU","MENU","MENU_OPEN","LIST_ITEM","LIST_ITEM_HOVER","REQUIRED_FIELD","SEARCHBAR","startsWith","searchString","position","substr","label","menu","searchBar","selectPlaceholder","hasSearch","hasAttribute","open","currentIndex","listItems","createMenu","setMenuPosition","showMenu","hideMenu","changeHandler","focusHanlder","blurHandler","keyDownHandler","bodyClickHandler","onChange","children","listItem","li","setAttribute","ListItem","dataVal","replaceSelect","bottom","offsetWidth","selectHeight","getComputedStyle","getPropertyValue","selectWidth","spanText","arrow","lineHeight","insertBefore","childNodes","setPlaceholderText","textSpan","getTextValue","me","slctdEle","menuScrollTop","menuHeight","offsetTop","setHighlighted","focus","filterList","index","selectItem","test","fndCntr","fndItem","ul","thisItem","toUpperCase","click","direction","target","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","timeRangeManagerInstances","selectAdded","timeChanged","indexOf","checkIfValid","setValidDisplay","btnSave","TimeRangeManager","timeRanges","rangeName","rangePart","timePart","fndIdx","findTimeRange","createATimeRange","loadComplete","objs","setTime","part","timeSpanValid","tr","hour","ap","end","startTimeStr","conv24Hour","endTimeStr","isBefore","lc","substring","idx","time","validateTimeSelects","module","links","URL","setCurrentLink","link","href","navigator","serviceWorker","register","registration","scope","catch"],"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\t\treturn Array.from( typeof expr === 'string' ? ( context || doc ).querySelectorAll( expr ) : expr || null );\r\n\t};\r\n\r\n\t// $.addScript - helper function to load scripts\r\n\t// @src - String - the source of the script to load\r\n\t// @parent - Element - the element that the script should be appended to\r\n\t// @async - Boolean - should the script be loaded async\r\n\t$.addScript = function( src, parent, async, 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// Polyfill for Array.from\r\n/* jshint ignore:start */\r\nif ( !Array.from ) { Array.from = function() { var l = Object.prototype.toString, h = function( c ) { return 'function' === typeof c || '[object Function]' === l.call( c ) }, m = Math.pow( 2, 53 ) - 1; return function( c ) { var k = Object( c ); if ( null == c ) throw new TypeError( 'Array.from requires an array-like object - not null or undefined' ); var d = 1 < arguments.length ? arguments[1] : void 0, f; if ( 'undefined' !== typeof d ) { if ( !h( d ) ) throw new TypeError( 'Array.from: when provided, the second argument must be a function' ); 2 < arguments.length && ( f = arguments[2] ) } var a; a = Number( k.length ); a = isNaN( a ) ? 0 : 0 !== a && isFinite( a ) ? ( 0 < a ? 1 : -1 ) * Math.floor( Math.abs( a ) ) : a; a = Math.min( Math.max( a, 0 ), m ); for ( var g = h( this ) ? Object( new this( a ) ) : Array( a ), b = 0, e; b < a; ) e = k[b], g[b] = d ? 'undefined' === typeof f ? d( e, b ) : d.call( f, e, b ) : e, b += 1; g.length = a; return g } }(); }\r\n/* jshint ignore:end */\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/* jshint ignore:start */\r\n( function() {\r\n // Production steps of ECMA-262, Edition 5, 15.4.4.18\r\n // Reference: http://es5.github.io/#x15.4.4.18\r\n if ( !Array.prototype.forEach ) {\r\n\r\n Array.prototype.forEach = function( callback/*, thisArg*/ ) {\r\n\r\n var T, k;\r\n\r\n if ( this == null ) {\r\n throw new TypeError( 'this is null or not defined' );\r\n }\r\n\r\n // 1. Let O be the result of calling toObject() passing the\r\n // |this| value as the argument.\r\n var O = Object( this );\r\n\r\n // 2. Let lenValue be the result of calling the Get() internal\r\n // method of O with the argument \"length\".\r\n // 3. Let len be toUint32(lenValue).\r\n var len = O.length >>> 0;\r\n\r\n // 4. If isCallable(callback) is false, throw a TypeError exception. \r\n // See: http://es5.github.com/#x9.11\r\n if ( typeof callback !== 'function' ) {\r\n throw new TypeError( callback + ' is not a function' );\r\n }\r\n\r\n // 5. If thisArg was supplied, let T be thisArg; else let\r\n // T be undefined.\r\n if ( arguments.length > 1 ) {\r\n T = arguments[1];\r\n }\r\n\r\n // 6. Let k be 0\r\n k = 0;\r\n\r\n // 7. Repeat, while k < len\r\n while ( k < len ) {\r\n\r\n var kValue;\r\n\r\n // a. Let Pk be ToString(k).\r\n // This is implicit for LHS operands of the in operator\r\n // b. Let kPresent be the result of calling the HasProperty\r\n // internal method of O with argument Pk.\r\n // This step can be combined with c\r\n // c. If kPresent is true, then\r\n if ( k in O ) {\r\n\r\n // i. Let kValue be the result of calling the Get internal\r\n // method of O with argument Pk.\r\n kValue = O[k];\r\n\r\n // ii. Call the Call internal method of callback with T as\r\n // the this value and argument list containing kValue, k, and O.\r\n callback.call( T, kValue, k, O );\r\n }\r\n // d. Increase k by 1.\r\n k++;\r\n }\r\n // 8. return undefined\r\n };\r\n }\r\n} );\r\n/* jshint ignore:end */\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 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 queryStringToJSON() {\r\n var pairs = location.search.slice( 1 ).split( '&' );\r\n\r\n var result = {};\r\n pairs.forEach( function( pair ) {\r\n pair = pair.split( '=' );\r\n result[pair[0].toLowerCase()] = decodeURIComponent( pair[1] || '' );\r\n });\r\n\r\n return JSON.parse( JSON.stringify( result ) );\r\n }\r\n\r\n return {\r\n cloneObj: cloneObj,\r\n extend: extend,\r\n getWindowScrollPosition: getWindowScrollPosition,\r\n callBackFn: callBackFn,\r\n disableWindowScroll: disableWindowScroll,\r\n enableWindowScroll: enableWindowScroll,\r\n queryStringToJSON: queryStringToJSON\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\t'use strict';\r\n\r\n\tclass AdminModal {\r\n\t\tstatic init() {\r\n\t\t\tthis.container = app.$( '#modal-admin' );\r\n\t\t\tthis.content = app.$( '#modal-admin-content' );\r\n\t\t}\r\n\r\n\t\tstatic show() {\r\n\t\t\tthis.container.classList.add( 'is-visible' );\r\n\t\t}\r\n\r\n\t\tstatic hide() {\r\n\t\t\tthis.container.classList.remove( 'is-visible' );\r\n\t\t}\r\n\t}\r\n\r\n\tAdminModal.init();\r\n\tapp.AdminModal = AdminModal;\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 \tstatic attachTo(root) {\r\n \t\tif (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 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( function( doc ) {\r\n \r\n\r\n class EventItem {\r\n constructor( eventId, displayEl ) {\r\n this.eventId = eventId;\r\n this.displayEl = displayEl;\r\n\r\n if ( this.displayEl && this.displayEl.innerHTML !== '' ) {\r\n const programEl = this.displayEl.querySelector( '.program-item-container' );\r\n const prgObj = new app.ProgramItem( -1, programEl );\r\n }\r\n\r\n }\r\n\r\n loadOneEvent() {\r\n if ( this.eventId > 0 ) {\r\n \r\n let e = [];\r\n e.push( this.eventId );\r\n\r\n app.$.fetch( 'api/eventsGetForView', {\r\n body: {\r\n events: e\r\n }\r\n }).then( rsp => {\r\n if ( rsp.success ) {\r\n \r\n this.displayEl.innerHTML = rsp.obj[0].html;\r\n const programEl = this.displayEl.querySelector( '.program-item-container' );\r\n const prgObj = new app.ProgramItem(-1, programEl);\r\n\r\n \t// Display FREE when they enter 0 as Cost\r\n const costValue = app.$$( '.cost-val' );\r\n costValue.forEach(el => {\r\n \tif (el.innerHTML === '$0' || el.innerHTML === '0') {\r\n \t\tel.innerHTML = 'FREE'; \r\n \t}\r\n });\r\n\r\n\t\t\t\t\t\t// Compare the values of Program Max # Students to Reg Form Max # Students\r\n const evtMax = app.$('#numStudents');\r\n const btnSaveReg = app.$( '#btn-save-reg' );\r\n\r\n evtMax.addEventListener('blur', e => {\r\n const msg = app.$( '.error-msg' );\r\n const msgZero = app.$( '.error-msg-zero' ); \r\n const prgMax = app.$( '.prg-max' ).textContent;\r\n\r\n if ( evtMax.value === '0' ) {\r\n evtMax.classList.add( 'form-error' );\r\n msgZero.classList.remove( 'hidden' );\r\n msg.classList.add( 'hidden' );\r\n btnSaveReg.disabled = true;\r\n btnSaveReg.classList.add( 'btn-fail' );\r\n return;\r\n }\r\n else {\r\n evtMax.classList.remove( 'form-error' );\r\n msgZero.classList.add( 'hidden' );\r\n btnSaveReg.disabled = false;\r\n btnSaveReg.classList.remove( 'btn-fail' );\r\n }\r\n\r\n if ( evtMax.value <= parseInt( prgMax, 10 ) ) {\r\n evtMax.classList.remove( 'form-error' );\r\n msg.classList.add( 'hidden' );\r\n btnSaveReg.disabled = false;\r\n btnSaveReg.classList.remove( 'btn-fail' );\r\n }\r\n else {\r\n \t\tevtMax.classList.add('form-error');\r\n msg.classList.remove( 'hidden' );\r\n msgZero.classList.add( 'hidden' );\r\n \t\tbtnSaveReg.disabled = true;\r\n \t\tbtnSaveReg.classList.add('btn-fail');\r\n \t}\r\n });\r\n\r\n\r\n }\r\n });\r\n } else {\r\n console.log( 'eventId not set', this.eventId );\r\n }\r\n }\r\n\r\n }\r\n\t\r\n\r\n app.EventItem = EventItem;\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\t'use strict';\r\n\r\n\tclass Nav {\r\n\t\tstatic init() {\r\n\t\t\tthis.triggers = app.$$( '.nav-trigger' );\r\n\r\n\t\t\tthis.addEventListeners_();\r\n\t\t}\r\n\r\n\t\tstatic addEventListeners_() {\r\n\t\t\tapp.$.forEach( this.triggers, trigger => {\r\n\t\t\t\ttrigger.addEventListener( 'click', e=> {\r\n\t\t\t\t\tdoc.body.classList.toggle( 'nav-in' );\r\n\t\t\t\t} );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\tstatic close() {\r\n\t\t\tdoc.body.classList.remove( 'nav-in' );\r\n\t\t}\r\n\t}\r\n\r\n\tapp.Nav = Nav;\r\n\r\n\tconst nav = app.$( '#main-nav' );\r\n\r\n\tif ( nav ) {\r\n\t\tNav.init();\r\n\t}\r\n\r\n}( document ) );\r\n( function( doc ) {\r\n\r\n\tclass ProgramItem {\r\n\r\n\t\tconstructor( programId, displayEl ) {\r\n\t\t\tthis.programId = programId;\r\n\t\t\tthis.eventId = -1;\r\n this.displayEl = displayEl;\r\n this.readMore = null;\r\n this.details = null;\r\n this.bindEvents();\r\n\t\t}\r\n\r\n bindEvents() {\r\n\t\t\tif (this.displayEl) {\r\n\t\t\t\tthis.readMore = this.displayEl.querySelector('.read-more');\r\n\t\t\t\tthis.details = this.displayEl.querySelector('.details');\r\n\r\n\t\t\t\tif (this.readMore) {\r\n this.readMore.addEventListener( 'click', e => this.showDetails( e ) );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tshowDetails( e ) {\r\n e.preventDefault();\r\n if ( this.details ) {\r\n this.details.classList.toggle( 'hidden' );\r\n\r\n if ( this.details.classList.contains( 'hidden' ) ) {\r\n this.readMore.innerHTML = 'read moreexpand_more';\r\n } else {\r\n this.readMore.innerHTML = 'read lessexpand_less';\r\n }\r\n\r\n }\r\n\t\t}\r\n\t}\r\n\r\n\tapp.ProgramItem = ProgramItem;\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\t'use strict';\r\n\r\n\tclass ShareModal {\r\n\t\tstatic init() {\r\n\t\t\tthis.container = app.$( '#modal-admin.modal-share' );\r\n\t\t\tthis.content = app.$( '#modal-admin-content' );\r\n\t\t}\r\n\r\n static show() {\r\n if ( this.container ) {\r\n this.container.classList.add( 'is-visible' );\r\n }\r\n\t\t}\r\n\r\n static hide() {\r\n if ( this.container ) {\r\n this.container.classList.remove( 'is-visible' );\r\n }\r\n\t\t}\r\n\t}\r\n\r\n\tShareModal.init();\r\n\tapp.ShareModal = ShareModal;\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 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\r\n\t'use strict';\r\n\r\n\tlet ckEditorSettings = {\r\n\t\tallowedContent: true,\r\n\t\theight: 350,\r\n\t\ttoolbar: 'Simple'\r\n\t};\r\n\r\n\tlet mediumEditorSettings = {\r\n\t\tplaceholder: {\r\n\t\t\ttext: ''\r\n },\r\n anchorPreview: {\r\n /* These are the default options for anchor preview,\r\n if nothing is passed this is what it used */\r\n hideDelay: 500,\r\n previewValueSelector: 'a'\r\n },\r\n anchor: {\r\n /* These are the default options for anchor form,\r\n if nothing is passed this is what it used */\r\n customClassOption: null,\r\n customClassOptionText: 'Button',\r\n linkValidation: true,\r\n placeholderText: 'Paste or type a link',\r\n targetCheckbox: false,\r\n targetCheckboxText: 'Open in new window'\r\n }\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, editorOptions ) {\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.editorOptions = editorOptions;\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 if ( select.getAttribute( 'data-time-fld' ) ) {\r\n\t\t\t\t select.Select = new app.TimeRangeSelect( select );\r\n\t\t\t\t } else {\r\n\t\t\t\t select.Select = new app.Select( select );\r\n\t\t\t\t }\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !input ) {\r\n\t\t\t\t\tinput = container.querySelector( 'textarea' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( !input ) {\r\n\t\t\t\t\tinput = container.querySelector( '.' + formCssClasses.mediumEditor );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( input ) {\r\n\t\t\t\t\tlet tag = input.tagName.toLowerCase();\r\n\t\t\t\t\tlet type = input.type ? 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\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, this.editorOptions || mediumEditorSettings );\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\r\n\t\t\t\t\t\tCKEDITOR.replace( field.id, this.editorOptions || ckEditorSettings );\r\n\r\n\t\t\t\t\t\tif ( field.classList.contains( 'ckfinder' ) ) {\r\n\t\t\t\t\t\t\tCKFinder.setupCKEditor( CKEDITOR.instances[field.id], '/ckfinder/' );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} );\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\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\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 && field.classList.contains('req') ) {\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\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\t\t\t\telse if ( tag === 'textarea' ) {\r\n\t\t\t\t if ( field.classList.contains(formCssClasses.ckeditor ) ) {\r\n\t\t\t\t CKEDITOR.instances[field.id].setData( '' );\r\n\t\t\t\t } else if ( field.classList.contains(formCssClasses.mediumEditor) ) {\r\n\t\t\t\t field.innerHTML = '';\r\n\t\t\t\t } else {\r\n\t\t\t\t \tfield.value = '';\r\n\t\t\t\t }\r\n\t\t\t\t}\r\n\t\t\t\telse if ( tag === 'select' ) {\r\n\t\t\t\t\tif ( field.Select ) {\r\n\t\t\t\t\t\tfield.Select.setValue( '-1' );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( field.multiple && field.classList.contains( formCssClasses.chosenSelect ) ) {\r\n\t\t\t\t\t\tapp.$.forEach( field.querySelectorAll( 'option' ), function( opt ) {\r\n\t\t\t\t\t\t\topt.selected = false;\r\n\t\t\t\t\t\t} );\r\n\r\n\t\t\t\t\t\tjQuery( field ).trigger( 'chosen:updated' );\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tfield.value = '-1';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfield.value = '';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfield.classList.remove( formCssClasses.invalid );\r\n\r\n if ( lbl && field.parentNode ) {\r\n try {\r\n field.parentNode.removeChild( lbl );\r\n }\r\n catch ( err ) {\r\n console.log( lbl );\r\n }\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\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\t\t\tthis.selectPlaceholder = null;\r\n\r\n\t\t\t// if this is a multiple select\r\n\t\t\tthis.multiple = this.select.multiple;\r\n\r\n\t\t\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\t\t\tthis.createMenu = this.createMenu.bind( this );\r\n\t\t\tthis.setMenuPosition = this.setMenuPosition.bind( this );\r\n\t\t\tthis.showMenu = this.showMenu.bind( this );\r\n\t\t\tthis.hideMenu = this.hideMenu.bind( this );\r\n\t\t\tthis.changeHandler = this.changeHandler.bind( this );\r\n\t\t\tthis.focusHanlder = this.focusHanlder.bind( this );\r\n\t\t\tthis.blurHandler = this.blurHandler.bind( this );\r\n\t\t\tthis.keyDownHandler = this.keyDownHandler.bind( this );\r\n\t\t\tthis.bodyClickHandler = this.bodyClickHandler.bind( this );\r\n\t\t\tthis.checkIfRequired = this.checkIfRequired.bind( this );\r\n \r\n\t\t\tthis.createMenu();\r\n\t\t\tthis.addEventListeners();\r\n\t\t}\r\n\r\n\t\taddEventListeners() {\r\n\t\t\t//this.select.addEventListener( 'focus', this.focusHanlder, false );\r\n\t\t\t//this.select.addEventListener( 'blur', this.blurHandler, false );\r\n\r\n\t\t\tthis.selectPlaceholder.addEventListener( 'click', this.focusHanlder, false );\r\n\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\t\t\tthis.replaceSelect();\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.selectPlaceholder.getBoundingClientRect();\r\n\t\t\tthis.menu.style.top = rect.bottom + app.util.getWindowScrollPosition() + 'px';\r\n this.menu.style.left = rect.left + 'px';\r\n\r\n if ( this.selectPlaceholder.offsetWidth < 100 ) {\r\n this.menu.style.width = '100px';\r\n } \r\n else {\r\n this.menu.style.width = this.selectPlaceholder.offsetWidth + 'px';\r\n }\r\n\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.selectPlaceholder.offsetWidth - 30 ) + 'px';\r\n\t\t\t}\r\n\r\n\r\n\t\t}\r\n\r\n\t\treplaceSelect() {\r\n\t\t // !this.select.classList.contains( 'hidden' )\r\n\r\n\t\t if ( this.selectPlaceholder === null ) {\r\n\r\n\t\t let selectHeight = window.getComputedStyle( this.select ).getPropertyValue( 'height' );\r\n\t\t let selectWidth = window.getComputedStyle( this.select ).getPropertyValue( 'width' );\r\n\r\n\t\t this.selectPlaceholder = doc.createElement( 'div' );\r\n\r\n\t\t let spanText = doc.createElement( 'span' );\r\n\t\t let arrow = doc.createElement( 'i' );\r\n\r\n\t\t this.selectPlaceholder.appendChild( spanText );\r\n\t\t this.selectPlaceholder.appendChild( arrow );\r\n\t\t arrow.classList.add( 'material-icons' );\r\n\t\t arrow.innerHTML = 'arrow_drop_down';\r\n\r\n\t\t this.selectPlaceholder.style.width = selectWidth;\r\n\t\t this.selectPlaceholder.style.height = selectHeight;\r\n\t\t this.selectPlaceholder.style.lineHeight = selectHeight;\r\n\t\t this.selectPlaceholder.classList.add( 'select-placeholder' );\r\n\t\t this.select.parentNode.insertBefore( this.selectPlaceholder, this.select.parentNode.childNodes[0] );\r\n\t\t this.setPlaceholderText();\r\n\t\t this.select.classList.add( 'hidden' );\r\n\t\t } else {\r\n\t\t this.setPlaceholderText();\r\n\t\t }\r\n\t\t}\r\n\r\n\t\tsetPlaceholderText() {\r\n\t\t let textSpan = this.selectPlaceholder.querySelector( 'span' );\r\n\t\t textSpan.innerHTML = this.getTextValue();\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\tif ( !this.open ) {\r\n\t\t\t\tthis.setMenuPosition();\r\n\t\t\t\tthis.showMenu();\r\n\t\t\t}\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\r\n\t\t\tthis.setPlaceholderText();\r\n\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\tif ( this.select.selectedIndex >= 0 ) {\r\n\t\t\t\t\treturn this.select.options[this.select.selectedIndex].text;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t}\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\t//if ( 'ontouchstart' in doc.documentElement ) {\r\n\t\t\t//\tfield.type = 'date';\r\n\t\t\t//\treturn;\r\n\t\t\t//}\r\n\r\n\t\t\tpicker = new Pikaday( {\r\n\t\t\t\tfield: field,\r\n\t\t\t\tformat: 'MM/DD/YYYY',\r\n\t\t\t\tonSelect: function() {\r\n\t\t\t\t\tfield.value = this.getMoment().format( 'MM/DD/YYYY' );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\t// OnFocus event handler\r\n\t\tfocusHandler() {\r\n\t\t\tthis.label.classList.add( cssClasses.ACTIVE_FIELD_CLASS );\r\n\t\t}\r\n\r\n\t\t// OnBlur event handler\r\n\t\tblurHandler() {\r\n\t\t\tthis.checkForValue();\r\n\t\t\tthis.validateField();\r\n\t\t}\r\n\r\n\t\t// Helper function to check for a value and handle the active class of the label\r\n\t\tcheckForValue() {\r\n\t\t\tif ( this.getValue() !== '' ) {\r\n\t\t\t\tthis.label.classList.add( cssClasses.ACTIVE_FIELD_CLASS );\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif ( this.label ) {\r\n\t\t\t\t\tthis.label.classList.remove( cssClasses.ACTIVE_FIELD_CLASS );\r\n\t\t\t\t}\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\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\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( function( doc ) {\r\n\r\n const cssClasses = {\r\n ERROR_LABEL: 'error-label',\r\n INVALID_REQ_FIELD: 'invalid',\r\n MD_MENU: 'md-select',\r\n MENU: 'md-select-menu',\r\n MENU_OPEN: 'active',\r\n LIST_ITEM: 'md-select-menu-item',\r\n LIST_ITEM_HOVER: 'keyover',\r\n REQUIRED_FIELD: 'req',\r\n SEARCHBAR: 'md-select-searchbar'\r\n };\r\n\r\n class TimeRangeSelect extends app.Select {\r\n\r\n constructor( select ) {\r\n super( select );\r\n app.timeRangeManagerInstances.selectAdded( this );\r\n \r\n }\r\n\r\n\r\n changeHandler() {\r\n super.changeHandler();\r\n app.timeRangeManagerInstances.timeChanged( this );\r\n }\r\n\r\n checkIfRequired() {\r\n \r\n let isValid = super.checkIfRequired();\r\n if ( this.select.getAttribute( 'data-time-fld' ).indexOf( 'hour' ) > -1 ) {\r\n isValid = isValid && app.timeRangeManagerInstances.checkIfValid( this );\r\n this.setValidDisplay( isValid );\r\n }\r\n return isValid ;\r\n }\r\n\r\n setValidDisplay( isValid ) {\r\n let errorLbl = this.container.querySelector( '.' + cssClasses.ERROR_LABEL );\r\n let lbl;\r\n const btnSave = app.$('#btn-save');\r\n\r\n // remove any previous error messages\r\n if ( errorLbl ) {\r\n this.container.removeChild( errorLbl );\r\n }\r\n \r\n if ( this.select.getAttribute( 'data-time-fld' ).indexOf( 'hour' ) > -1 ) {\r\n // if we don't have a selected option and this is a required field\r\n if ( !isValid ) {\r\n lbl = doc.createElement( 'span' );\r\n lbl.classList.add( cssClasses.ERROR_LABEL );\r\n lbl.textContent = 'Invalid Range';\r\n this.container.appendChild( lbl );\r\n this.select.classList.add(cssClasses.INVALID_REQ_FIELD);\r\n\r\n if (btnSave) {\r\n \tbtnSave.disabled = true;\r\n \tbtnSave.classList.add('btn-fail');\r\n }\r\n } else {\r\n // if we're all good, rmeove the invalid class\r\n \tthis.select.classList.remove(cssClasses.INVALID_REQ_FIELD);\r\n\r\n \tif (btnSave) {\r\n \t\tbtnSave.disabled = false;\r\n \t\tbtnSave.classList.remove('btn-fail');\r\n \t}\r\n }\r\n }\r\n\r\n }\r\n\r\n setValue( value ) {\r\n super.setValue( value );\r\n app.timeRangeManagerInstances.timeChanged( this );\r\n }\r\n }\r\n\r\n\r\n app.TimeRangeSelect = TimeRangeSelect;\r\n\r\n class TimeRangeManager {\r\n\r\n\r\n constructor() {\r\n this.timeRanges = [];\r\n }\r\n\r\n selectAdded( obj ) {\r\n\r\n let attr = obj.select.getAttribute('data-time-fld').split(' ');\r\n\r\n let rangeName = attr[0].toLowerCase();\r\n let rangePart = attr[1].toLowerCase();\r\n let timePart = attr[2].toLowerCase();\r\n\r\n let fndIdx = this.findTimeRange( rangeName );\r\n\r\n if ( fndIdx === -1 ) {\r\n this.createATimeRange( rangeName );\r\n fndIdx = this.timeRanges.length - 1;\r\n }\r\n\r\n this.timeChanged( obj );\r\n\r\n }\r\n\r\n timeChanged( obj ) {\r\n let attr = obj.select.getAttribute('data-time-fld').split(' ');\r\n\r\n let rangeName = attr[0].toLowerCase();\r\n let rangePart = attr[1].toLowerCase();\r\n let timePart = attr[2].toLowerCase();\r\n\r\n let fndIdx = this.findTimeRange( rangeName );\r\n\r\n\r\n if ( fndIdx >= 0 ) {\r\n\r\n if ( !this.timeRanges[fndIdx].loadComplete() ) {\r\n this.timeRanges[fndIdx].objs[rangePart][timePart] = obj;\r\n }\r\n\r\n this.setTime( fndIdx, rangePart, { part: timePart, val: obj.getValue() } );\r\n\r\n\r\n } \r\n\r\n }\r\n\r\n checkIfValid( obj ) {\r\n\r\n let attr = obj.select.getAttribute( 'data-time-fld' ).split( ' ' );\r\n\r\n let rangeName = attr[0].toLowerCase();\r\n let rangePart = attr[1].toLowerCase();\r\n let timePart = attr[2].toLowerCase();\r\n\r\n let fndIdx = this.findTimeRange( rangeName );\r\n\r\n if ( fndIdx >= 0 ) {\r\n return this.timeRanges[ fndIdx ].timeSpanValid();\r\n } \r\n\r\n return false;\r\n\r\n }\r\n\r\n\r\n createATimeRange( rangeName ) {\r\n\r\n let tr = {\r\n rangeName: rangeName,\r\n start: {\r\n hour: '00',\r\n min: '00',\r\n ap: 'AM',\r\n },\r\n end: {\r\n hour: '00',\r\n min: '00',\r\n ap: 'AM'\r\n },\r\n objs: {\r\n start: {\r\n hour: null,\r\n min: null,\r\n ap: null\r\n },\r\n end: {\r\n hour: null,\r\n min: null,\r\n ap: null\r\n }\r\n },\r\n timeSpanValid: () => {\r\n\r\n if ( tr.loadComplete() ) {\r\n let startTimeStr = '2016-01-01T' + this.conv24Hour( tr.start.hour, tr.start.ap ) + ':' + tr.start.min;\r\n let endTimeStr = '2016-01-01T' + this.conv24Hour( tr.end.hour, tr.end.ap ) + ':' + tr.end.min;\r\n\r\n if ( startTimeStr.indexOf( '--' ) >= 0 || endTimeStr.indexOf( '--' ) >= 0 ) {\r\n return false;\r\n } else {\r\n return moment( startTimeStr ).isBefore( moment( endTimeStr ) );\r\n }\r\n } else {\r\n return false;\r\n }\r\n \r\n },\r\n loadComplete: () => {\r\n\r\n let lc = ( tr.objs.start.hour !== null ) && ( tr.objs.start.min !== null ) && ( tr.objs.start.ap !== null ) &&\r\n ( tr.objs.end.hour !== null ) && ( tr.objs.end.min !== null ) && ( tr.objs.end.ap !== null );\r\n return lc;\r\n }\r\n \r\n };\r\n\r\n this.timeRanges.push( tr );\r\n\r\n }\r\n\r\n\r\n conv24Hour( hour, ap ) {\r\n\r\n if ( hour !== '12' && ap === 'PM' ) {\r\n hour = '0' + ( parseInt( hour, 10 ) + 12 );\r\n hour = hour.substring( hour.length - 2 );\r\n } else if ( hour === '12' && ap === 'AM' ) {\r\n hour = '00';\r\n }\r\n\r\n\r\n return hour;\r\n }\r\n\r\n\r\n\r\n\r\n setTime( idx, rangePart, timePart ) {\r\n let time = this.timeRanges[idx][rangePart];\r\n time[timePart.part] = timePart.val;\r\n this.validateTimeSelects( idx );\r\n }\r\n\r\n validateTimeSelects( idx ) {\r\n if ( this.timeRanges[idx].loadComplete() ) {\r\n if ( !this.timeRanges[idx].timeSpanValid() ) {\r\n this.timeRanges[idx].objs.start.hour.setValidDisplay( false );\r\n this.timeRanges[idx].objs.end.hour.setValidDisplay( false );\r\n } else {\r\n this.timeRanges[idx].objs.start.hour.setValidDisplay( true );\r\n this.timeRanges[idx].objs.end.hour.setValidDisplay( true );\r\n }\r\n }\r\n }\r\n\r\n\r\n findTimeRange( rangeName ) {\r\n for ( let idx = 0; idx < this.timeRanges.length; idx++) {\r\n if ( this.timeRanges[idx].rangeName === rangeName ) {\r\n return idx;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n\r\n app.TimeRangeManager = TimeRangeManager;\r\n\r\n\r\n} )( document );\r\n\r\n\r\n///\r\n/**\r\n * Copyright 2014 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\napp.module = ( function( doc ) {\r\n\t'use strict';\r\n\r\n\tvar nav = doc.getElementById( 'main-nav' ),\r\n links = [],\r\n url = doc.URL;\r\n\r\n if ( nav ) {\r\n links = nav.querySelectorAll( 'a' );\r\n }\r\n\r\n\tif (doc.body.id !== 'body') {\r\n\t\tsetCurrentLink();\r\n\t}\r\n\r\n\tfunction setCurrentLink() {\r\n\t\twindow.forEachElement( links, function( link ) {\r\n\t\t\tif ( link.href.indexOf( url ) !== -1 ) {\r\n\t\t\t\tlink.classList.add( 'selected' );\r\n\t\t\t}\r\n\t\t} );\r\n\t}\r\n\r\n}( document ) );\r\n///\r\n/**\r\n * Copyright 2015 Select Interactive, LLC. All rights reserved.\r\n * @author: The Select Interactive dev team (www.select-interactive.com) \r\n */\r\n( function( doc ) {\r\n\t'use strict';\r\n\r\n\tif ( 'serviceWorker' in navigator && doc.URL.indexOf( 'localhost' ) === -1 ) {\r\n\t\tnavigator.serviceWorker.register( '/serviceworker.js' ).then( registration => {\r\n\t\t\tconsole.log( 'serviceworker registration successful with scope: ' + registration.scope );\r\n\t\t} ).catch( err => {\r\n\t\t\tconsole.log( 'serviceworker registration failed: ', err );\r\n\t\t} );\r\n\t}\r\n\r\n}( document ) );\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.tabs = ( function( doc ) {\r\n//\t'use strict';\r\n\r\n//\tvar tabLinks = doc.querySelectorAll( '.tab-links' );\r\n\r\n//\twindow.forEachElement( tabLinks, function( els ) {\r\n//\t\tvar links = els.querySelectorAll( 'a' ),\r\n//\t\t\ttabGroup = els.getAttribute( 'data-tab-group' );\r\n\r\n//\t\tif ( links.length !== doc.querySelectorAll( '[data-tab-group=\"' + tabGroup + '\"].tab-content' ).length ) {\r\n//\t\t\tconsole.warn( 'Different # of links and tabs for tab group: ' + tabGroup );\r\n//\t\t}\r\n\r\n//\t\twindow.forEachElement( links, function( link ) {\r\n//\t\t\tlink.addEventListener( 'click', function( e ) {\r\n\r\n// let tab = link.getAttribute( 'href' ).toString().substring( 1 );\r\n\r\n\r\n//\t\t\t\twindow.forEachElement( doc.querySelectorAll( '[data-tab-group=\"' + tabGroup + '\"].tab-content.active' ), function( el ) {\r\n//\t\t\t\t\tel.classList.remove( 'active' );\r\n//\t\t\t\t} );\r\n\r\n//\t\t\t\ttab = doc.querySelector( '[data-tab-group=\"' + tabGroup + '\"][data-tab=\"' + tab + '\"]' );\r\n\r\n//\t\t\t\tif ( !link.classList.contains( 'active' ) ) {\r\n//\t\t\t\t\tels.querySelector( '.active' ).classList.remove( 'active' );\r\n//\t\t\t\t}\r\n\r\n//\t\t\t\tlink.classList.add( 'active' );\r\n//\t\t\t\ttab.classList.add( 'active' );\r\n\r\n//\t\t\t\te.preventDefault();\r\n//\t\t\t}, false );\r\n//\t\t} );\r\n//\t} );\r\n\r\n//}( document ) );"]}