{"version":3,"sources":["app.full.min.js","tabs.js","layout.js","mdlComponentHandler.js","rAF.js","button.js","checkbox.js","icon-toggle.js","menu.js","progress.js","radio.js","slider.js","snackbar.js","spinner.js","switch.js","textfield.js","tooltip.js","data-table.js","ripple.js","utils.js","model.js","rules.js","defaultValues.js","fourPassengersHandler.js","twoPassengersHandler.js","twoPassengersExtHandler.js","dataHandler.js","app.js"],"names":["MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","document","createElement","add","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","e","getAttribute","charAt","preventDefault","href","split","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","TAB_MANUAL_SWITCH","show","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","element","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","callback","register","config","downgradeElements","nodes","findRegisteredClass_","name","optReplace","i","registeredComponents_","length","className","getUpgradedListOfElement_","dataUpgraded","isElementUpgraded_","upgradedList","indexOf","createEvent_","eventType","bubbles","cancelable","window","CustomEvent","ev","createEvent","initEvent","upgradeDomInternal","cssClass","t","registeredClass","querySelectorAll","n","upgradeElementInternal","Element","Error","upgradingEv","dispatchEvent","defaultPrevented","classesToUpgrade","push","forEach","component","setAttribute","join","instance","classConstructor","componentConfigProperty_","createdComponents_","j","m","callbacks","widget","upgradedEv","upgradeElementsInternal","Array","isArray","prototype","slice","call","HTMLElement","children","registerInternal","widgetMissing","newConfig","constructor","classAsString","item","hasOwnProperty","found","registerUpgradedCallbackInternal","regClass","upgradeAllRegisteredInternal","deconstructComponentInternal","componentIndex","splice","upgrades","componentPlace","downgradeNodesInternal","downgradeNode","node","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","Component","documentElement","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","nextTime","Math","max","setTimeout","clearTimeout","MaterialButton","this","init","Constant_","RIPPLE_EFFECT","blurHandler_","event","blur","disable","disabled","enable","rippleElement_","boundRippleBlurHandler","bind","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","remove","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","parentElement","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","items","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","style","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","target","MouseEvent","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","parentNode","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","p","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","button","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","value","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","active","actionHandler_","undefined","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","data","message","actionHandler","actionText","timeout","checkQueue_","shift","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","index","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","start","MaterialSwitch","TRACK","THUMB","on","off","track","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","k","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","hideTooltip_","boundMouseEnterHandler","boundMouseLeaveAndScrollHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","matches","obfuscator_","drawerToggleHandler_","type","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","c","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","concat","th","headerCheckbox","firstCell","td","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","x","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","size","offset","webkitTransform","msTransform","transform","utils","selectDomElement","selector","getCurrentYear","getFullYear","getRadioValueForEmail","radioElements","getRadioValueForLink","getCheckboxValueForEmail","getCheckboxValueForLink","id","unselectElement","selectElement","displayElement","display","hideElement","displayParent","hideParent","displayImage","imgContainerElement","imgPath","backgroundImage","hideImage","displayImgIfElementSelected","imgContainer","unselectAllRadiosAndCheckboxes","containerId","checks","displayCornerView","cornerViewContainerElement","model","baseEngines","gasoline","electric","link","email","currentEngine","currentBed","lTrackKit","bedRacking","electricLiftKit","seat","seatCover","seatCanopy","canopyWindshield","exteriorMirrors","mirrors","cabDoor","washerBottle","beaconLightKit","ledWorkLightKit","robExteriorMirrors","robMirrors","brushGuard","brushGuardFrontReceiver","frontReceiver","front","rear","tires","signalLights","hornKit","backupAlarm","parkingBrakeAlarm","underHoodBox","powerKit","ramBall","sparkArrestor","base","rules","engineRules","imageUrls","engine","electricRadio","accessories","signalLightsCheckbox","gasolineRadio","images","electricContainer","electricEngine","bedRules","bed","cargoRadio","flat4ftRadio","bedContainer","cargobed","bedRackingCheckbox","bedRackingContainer","flatBed4ft","hoseReelRearContainer","lTrackKitCheckbox","cornerImages","lTrack6inContainer","lTrack2inContainer","lKitRadiosContainer","lTrack6inRadio","lTrack2inRadio","bedRackingRadiosContainer","cargoSubTitle","bedRackingNoneRadio","bedRackingSmallRadio","bedRackingLargeRadio","electricLiftKit12v","electricLiftKit48v","bedRackingQuickfistContainer","bedRackingQuickfistLargeContainer","bedRules2pext","seatsRules","benchSeatRadio","bucketSeatRadio","seatCoverCheckbox","seatsContainer","benchSeat","bucketSeat","seatsRules4p","seatFront","benchSeatFrontRadio","bucketSeatFrontRadio","seatBack","benchSeatBackRadio","bucketSeatBackRadio","seatCoverFrontCheckbox","seatCoverFront","seatCoverBackCheckbox","seatCoverBack","seatsFrontContainer","bucketSeatFront","benchSeatFront","seatsBackContainer","bucketSeatBack","benchSeatBack","canopyRules4p","canopy","canopyCheckbox","canopyWindshieldCheckbox","exteriorMirrorsCheckbox","interiorMirrorNoneRadio","interiorMirrorStandardRadio","interiorMirrorAngleRadio","interiorMirrorWinkRadio","canopyAttachmentsContainer","canopyContainer","canopyWindshieldContainer","exteriorMirrorsContainer","interiorMirrorStandardContainer","interiorMirrorStandard","interiorMirrorAngleContainer","interiorMirrorAngle","interiorMirrorWinkContainer","interiorMirrorWink","canopyRules2p","canopyNoneRadio","canopyTwoSeatRadio","ropsCabRadio","ropsTwoPostCabRadio","ropsTwoPostCabWithCanopyRadio","canopyTwoSeatsContainer","canopyRopsContainer","canopyTwoSeatsWindshieldCheckbox","exteriorTwoSeatsMirrorsCheckbox","interiorTwoSeatsMirrorNoneRadio","interiorTwoSeatsMirrorStandardRadio","interiorTwoSeatsMirrorAngleRadio","interiorTwoSeatsMirrorWinkRadio","canopyRopsWindshieldCheckbox","exteriorRopsMirrorsCheckbox","interiorRopsMirrorNoneRadio","interiorRopsMirrorStandardRadio","interiorRopsMirrorAngleRadio","interiorRopsMirrorWinkRadio","ropsAttachments","cabDoorCheckbox","washerBottleCheckbox","beaconLightCheckbox","ledLightCheckbox","ropsExteriorMirrorsCheckbox","ropsInteriorMirrorNoneRadio","ropsInterMirrorStandardRadio","ropsInteriorMirrorAngleRadio","canopyRopsSertifiedContainer","ropsCab","rops","canopyRopsWCContainer","ropsCanopy","cabDoorFrontContainer","ropsFrontDoor","cabDoorBackContainer","ropsBackDoor","beaconLightContainer","beaconLight","ledLightContainer","LedLights","ropsExteriorMirrorsContainer","ropsExteriorMirror","ropsInteriorMirrorStandardContainer","ropsStandardMirror","ropsInteriorMirrorAngleContainer","ropsAngleMirror","canopyRules2pext","canopyAttachmentsRadiosContainer","ropsRadiosContainer","ledLights","frontAttachmentsRules","brushGuardCheckbox","frontReceiverCheckbox","brushGuardFrontCheckbox","homoligationLightRadio","lightkitContainer","frontAttachmentsContainer","frontNoneRadio","hoseReelRadio","trashCanRadio","walkSpreaderRadio","brushGuardContainer","brushGuardFrontContainer","brushGuardFront","frontReceiverContainer","hoseReelFrontContainer","hoseReel","trashCanFrontContainer","trashCan","walkSpreaderFrontContainer","walkSpreader","hoseReelContainer","hoseRealRadio","rearAttachmentsRules","rearNoneRadio","hoseRear","trashCanRearContainer","trashCanRear","walkSpreaderRearContainer","walkSpreaderRear","walkSpreaderContainer","tiresRules","trufRadio","aggressiveTrufRadio","atvRadio","tiresContainer","truf","tiresAggressiveContainer","aggressive","atv","accessoriesRules","electricAccessoriesContainer","gasolineAccessoriesContainer","hornKitCheckbox","alarmCheckbox","parkingAlarmCheckbox","underHoodBoxCheckbox","powerKitCheckbox","sparkArrestorCheckbox","ramBallCheckbox","signalLightsRadiosContainer","breakLightRadio","lightkitHomoligationContainer","homoligationCargo","lightkitCargo","lightkitBrushguardCargo","homoligationFlatBed","lightkitFlatBed","lightkitBrushguardFlatBed","hornKitContainer","ramMountBallContainer","underHoodContainer","baseImageContainer","thumbsContainer","defaultValues","setDefaultImages4p","baseConfigs","fourPassengers","defaultImages","baseImg","setDefaultImages2p","twoPassengers","setDefaultImages2pext","twoPassengersExtended","setDefaultsLink4p","defaultLink","seatsFront","seatsBack","setDefaultsLink2p","seats","setDefaultsLink2pext","selectDefaultsChecks4p","selectDefaultsChecks2p","selectDefaultsChecks2pext","flatbed","fourPassengersHandler","rulesHandler","twoPassengersHandler","twoPassengersExtHandler","postRops","dataHandler","applyRules","currentModel","resetDefaultCheckedElements","baseModels","containerIds","unselectDropdownItems","modelsDropDownElements","map","changeMachineModel","newModelValue","attachmentLayers","machineModelName","convertMachineModel","modelsDropDown","changeModelBtn","changeModelBtnIco","emailBtn","currentBaseModel","baseModelName","getMachineModelName","location","hash","currentMachineModel","machineModel","showDialogImageWhenThumbClicked","thumbButtons","Object","keys","thumbImages","addEventListenerOnThumbs","imageUrl","dialogImgCont","dialog","visibility","transparentContainer","closeImageDialog","onSiteReadyLookForChangeAndReload","readyState","applicationCache","status","UPDATEREADY","confirm","reload","loadDataWhenModelChange","initialLoadData","path","currentYear","configs","innerText","getConfiguredModel","elementsToSelect","elementId","modelSelected","expandAttachmentMenu","parentsPanels","addClickEventToMenu","parent","expandSection","parentSelector","toggleContentElement","toggleArrowIconElement","openEmail","emailSelections","linkSelections","selectedOptionsEmail","selectedOptionsLink","resultedEmailText","resultedLink","linkURL","emailSubject","newLine","emailContent","l","WEBSITE_URL","open","expandLeftMenu","expandDropDownMenu","getElementsByTagName","hornKitCorner","hoseReelCorner","hoseReelBackCorner","bedRackingQuickfistCorner","bedRackingQuickfistLargeCorner","ramMountBallCorner","underHoodCorner","walkSpreaderFrontCorner","walkSpreaderCorner","lTrack2in","lTrack6in","showLeftMenuBtn","closeImageDialogBtn","menuContainers","onreadystatechange"],"mappings":"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","file":"app.full.min.js","sourcesContent":["/**\n * material-design-lite - Material Design Components in CSS, JS and HTML\n * @version v1.3.0\n * @license Apache-2.0\n * @copyright 2015 Google, Inc.\n * @link https://github.com/google/material-design-lite\n */\n!function(){\"use strict\";function e(e,t){if(e){if(t.element_.classList.contains(t.CssClasses_.MDL_JS_RIPPLE_EFFECT)){var s=document.createElement(\"span\");s.classList.add(t.CssClasses_.MDL_RIPPLE_CONTAINER),s.classList.add(t.CssClasses_.MDL_JS_RIPPLE_EFFECT);var i=document.createElement(\"span\");i.classList.add(t.CssClasses_.MDL_RIPPLE),s.appendChild(i),e.appendChild(s)}e.addEventListener(\"click\",function(s){if(\"#\"===e.getAttribute(\"href\").charAt(0)){s.preventDefault();var i=e.href.split(\"#\")[1],n=t.element_.querySelector(\"#\"+i);t.resetTabState_(),t.resetPanelState_(),e.classList.add(t.CssClasses_.ACTIVE_CLASS),n.classList.add(t.CssClasses_.ACTIVE_CLASS)}})}}function t(e,t,s,i){function n(){var n=e.href.split(\"#\")[1],a=i.content_.querySelector(\"#\"+n);i.resetTabState_(t),i.resetPanelState_(s),e.classList.add(i.CssClasses_.IS_ACTIVE),a.classList.add(i.CssClasses_.IS_ACTIVE)}if(i.tabBar_.classList.contains(i.CssClasses_.JS_RIPPLE_EFFECT)){var a=document.createElement(\"span\");a.classList.add(i.CssClasses_.RIPPLE_CONTAINER),a.classList.add(i.CssClasses_.JS_RIPPLE_EFFECT);var l=document.createElement(\"span\");l.classList.add(i.CssClasses_.RIPPLE),a.appendChild(l),e.appendChild(a)}i.tabBar_.classList.contains(i.CssClasses_.TAB_MANUAL_SWITCH)||e.addEventListener(\"click\",function(t){\"#\"===e.getAttribute(\"href\").charAt(0)&&(t.preventDefault(),n())}),e.show=n}var s={upgradeDom:function(e,t){},upgradeElement:function(e,t){},upgradeElements:function(e){},upgradeAllRegistered:function(){},registerUpgradedCallback:function(e,t){},register:function(e){},downgradeElements:function(e){}};s=function(){function e(e,t){for(var s=0;s0&&l(t.children))}function o(t){var s=\"undefined\"==typeof t.widget&&\"undefined\"==typeof t.widget,i=!0;s||(i=t.widget||t.widget);var n={classConstructor:t.constructor||t.constructor,className:t.classAsString||t.classAsString,cssClass:t.cssClass||t.cssClass,widget:i,callbacks:[]};if(c.forEach(function(e){if(e.cssClass===n.cssClass)throw new Error(\"The provided cssClass has already been registered: \"+e.cssClass);if(e.className===n.className)throw new Error(\"The provided className has already been registered\")}),t.constructor.prototype.hasOwnProperty(C))throw new Error(\"MDL component classes must not have \"+C+\" defined as a property.\");var a=e(t.classAsString,n);a||c.push(n)}function r(t,s){var i=e(t);i&&i.callbacks.push(s)}function _(){for(var e=0;e0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},d.prototype.handleItemKeyboardEvent_=function(e){if(this.element_&&this.container_){var t=this.element_.querySelectorAll(\".\"+this.CssClasses_.ITEM+\":not([disabled])\");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent(\"mousedown\");e.target.dispatchEvent(i),i=new MouseEvent(\"mouseup\"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},d.prototype.handleItemClick_=function(e){e.target.hasAttribute(\"disabled\")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},d.prototype.applyClip_=function(e,t){this.element_.classList.contains(this.CssClasses_.UNALIGNED)?this.element_.style.clip=\"\":this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?this.element_.style.clip=\"rect(0 \"+t+\"px 0 \"+t+\"px)\":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?this.element_.style.clip=\"rect(\"+e+\"px 0 \"+e+\"px 0)\":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?this.element_.style.clip=\"rect(\"+e+\"px \"+t+\"px \"+e+\"px \"+t+\"px)\":this.element_.style.clip=\"\"},d.prototype.removeAnimationEndListener_=function(e){e.target.classList.remove(d.prototype.CssClasses_.IS_ANIMATING)},d.prototype.addAnimationEndListener_=function(){this.element_.addEventListener(\"transitionend\",this.removeAnimationEndListener_),this.element_.addEventListener(\"webkitTransitionEnd\",this.removeAnimationEndListener_)},d.prototype.show=function(e){if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+\"px\",this.container_.style.height=t+\"px\",this.outline_.style.width=s+\"px\",this.outline_.style.height=t+\"px\";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll(\".\"+this.CssClasses_.ITEM),a=0;a0&&this.showSnackbar(this.queuedNotifications_.shift())},C.prototype.cleanup_=function(){this.element_.classList.remove(this.cssClasses_.ACTIVE),setTimeout(function(){this.element_.setAttribute(\"aria-hidden\",\"true\"),this.textElement_.textContent=\"\",Boolean(this.actionElement_.getAttribute(\"aria-hidden\"))||(this.setActionHidden_(!0),this.actionElement_.textContent=\"\",this.actionElement_.removeEventListener(\"click\",this.actionHandler_)),this.actionHandler_=void 0,this.message_=void 0,this.actionText_=void 0,this.active=!1,this.checkQueue_()}.bind(this),this.Constant_.ANIMATION_LENGTH)},C.prototype.setActionHidden_=function(e){e?this.actionElement_.setAttribute(\"aria-hidden\",\"true\"):this.actionElement_.removeAttribute(\"aria-hidden\")},s.register({constructor:C,classAsString:\"MaterialSnackbar\",cssClass:\"mdl-js-snackbar\",widget:!0});var u=function(e){this.element_=e,this.init()};window.MaterialSpinner=u,u.prototype.Constant_={MDL_SPINNER_LAYER_COUNT:4},u.prototype.CssClasses_={MDL_SPINNER_LAYER:\"mdl-spinner__layer\",MDL_SPINNER_CIRCLE_CLIPPER:\"mdl-spinner__circle-clipper\",MDL_SPINNER_CIRCLE:\"mdl-spinner__circle\",MDL_SPINNER_GAP_PATCH:\"mdl-spinner__gap-patch\",MDL_SPINNER_LEFT:\"mdl-spinner__left\",MDL_SPINNER_RIGHT:\"mdl-spinner__right\"},u.prototype.createLayer=function(e){var t=document.createElement(\"div\");t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER),t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER+\"-\"+e);var s=document.createElement(\"div\");s.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),s.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);var i=document.createElement(\"div\");i.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);var n=document.createElement(\"div\");n.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),n.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);for(var a=[s,i,n],l=0;l=this.maxRows&&e.preventDefault()},L.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},L.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},L.prototype.onReset_=function(e){this.updateClasses_()},L.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty(),this.checkFocus()},L.prototype.checkDisabled=function(){this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},L.prototype.checkDisabled=L.prototype.checkDisabled,L.prototype.checkFocus=function(){Boolean(this.element_.querySelector(\":focus\"))?this.element_.classList.add(this.CssClasses_.IS_FOCUSED):this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},L.prototype.checkFocus=L.prototype.checkFocus,L.prototype.checkValidity=function(){this.input_.validity&&(this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID))},L.prototype.checkValidity=L.prototype.checkValidity,L.prototype.checkDirty=function(){this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},L.prototype.checkDirty=L.prototype.checkDirty,L.prototype.disable=function(){this.input_.disabled=!0,this.updateClasses_()},L.prototype.disable=L.prototype.disable,L.prototype.enable=function(){this.input_.disabled=!1,this.updateClasses_()},L.prototype.enable=L.prototype.enable,L.prototype.change=function(e){this.input_.value=e||\"\",this.updateClasses_()},L.prototype.change=L.prototype.change,L.prototype.init=function(){if(this.element_&&(this.label_=this.element_.querySelector(\".\"+this.CssClasses_.LABEL),this.input_=this.element_.querySelector(\".\"+this.CssClasses_.INPUT),this.input_)){this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.input_.hasAttribute(\"placeholder\")&&this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.boundResetHandler=this.onReset_.bind(this),this.input_.addEventListener(\"input\",this.boundUpdateClassesHandler),this.input_.addEventListener(\"focus\",this.boundFocusHandler),this.input_.addEventListener(\"blur\",this.boundBlurHandler),this.input_.addEventListener(\"reset\",this.boundResetHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener(\"keydown\",this.boundKeyDownHandler));var e=this.element_.classList.contains(this.CssClasses_.IS_INVALID);this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED),e&&this.element_.classList.add(this.CssClasses_.IS_INVALID),this.input_.hasAttribute(\"autofocus\")&&(this.element_.focus(),this.checkFocus())}},s.register({constructor:L,classAsString:\"MaterialTextfield\",cssClass:\"mdl-js-textfield\",widget:!0});var I=function(e){this.element_=e,this.init()};window.MaterialTooltip=I,I.prototype.Constant_={},I.prototype.CssClasses_={IS_ACTIVE:\"is-active\",BOTTOM:\"mdl-tooltip--bottom\",LEFT:\"mdl-tooltip--left\",RIGHT:\"mdl-tooltip--right\",TOP:\"mdl-tooltip--top\"},I.prototype.handleMouseEnter_=function(e){var t=e.target.getBoundingClientRect(),s=t.left+t.width/2,i=t.top+t.height/2,n=-1*(this.element_.offsetWidth/2),a=-1*(this.element_.offsetHeight/2);this.element_.classList.contains(this.CssClasses_.LEFT)||this.element_.classList.contains(this.CssClasses_.RIGHT)?(s=t.width/2,i+a<0?(this.element_.style.top=\"0\",this.element_.style.marginTop=\"0\"):(this.element_.style.top=i+\"px\",this.element_.style.marginTop=a+\"px\")):s+n<0?(this.element_.style.left=\"0\",this.element_.style.marginLeft=\"0\"):(this.element_.style.left=s+\"px\",this.element_.style.marginLeft=n+\"px\"),this.element_.classList.contains(this.CssClasses_.TOP)?this.element_.style.top=t.top-this.element_.offsetHeight-10+\"px\":this.element_.classList.contains(this.CssClasses_.RIGHT)?this.element_.style.left=t.left+t.width+10+\"px\":this.element_.classList.contains(this.CssClasses_.LEFT)?this.element_.style.left=t.left-this.element_.offsetWidth-10+\"px\":this.element_.style.top=t.top+t.height+10+\"px\",this.element_.classList.add(this.CssClasses_.IS_ACTIVE)},I.prototype.hideTooltip_=function(){this.element_.classList.remove(this.CssClasses_.IS_ACTIVE)},I.prototype.init=function(){if(this.element_){var e=this.element_.getAttribute(\"for\")||this.element_.getAttribute(\"data-mdl-for\");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.hasAttribute(\"tabindex\")||this.forElement_.setAttribute(\"tabindex\",\"0\"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveAndScrollHandler=this.hideTooltip_.bind(this),this.forElement_.addEventListener(\"mouseenter\",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener(\"touchend\",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener(\"mouseleave\",this.boundMouseLeaveAndScrollHandler,!1),window.addEventListener(\"scroll\",this.boundMouseLeaveAndScrollHandler,!0),window.addEventListener(\"touchstart\",this.boundMouseLeaveAndScrollHandler))}},s.register({constructor:I,classAsString:\"MaterialTooltip\",cssClass:\"mdl-tooltip\"});var f=function(e){this.element_=e,this.init()};window.MaterialLayout=f,f.prototype.Constant_={MAX_WIDTH:\"(max-width: 1024px)\",TAB_SCROLL_PIXELS:100,RESIZE_TIMEOUT:100,MENU_ICON:\"\",CHEVRON_LEFT:\"chevron_left\",CHEVRON_RIGHT:\"chevron_right\"},f.prototype.Keycodes_={ENTER:13,ESCAPE:27,SPACE:32},f.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},f.prototype.CssClasses_={CONTAINER:\"mdl-layout__container\",HEADER:\"mdl-layout__header\",DRAWER:\"mdl-layout__drawer\",CONTENT:\"mdl-layout__content\",DRAWER_BTN:\"mdl-layout__drawer-button\",ICON:\"material-icons\",JS_RIPPLE_EFFECT:\"mdl-js-ripple-effect\",RIPPLE_CONTAINER:\"mdl-layout__tab-ripple-container\",RIPPLE:\"mdl-ripple\",RIPPLE_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\",HEADER_SEAMED:\"mdl-layout__header--seamed\",HEADER_WATERFALL:\"mdl-layout__header--waterfall\",HEADER_SCROLL:\"mdl-layout__header--scroll\",FIXED_HEADER:\"mdl-layout--fixed-header\",OBFUSCATOR:\"mdl-layout__obfuscator\",TAB_BAR:\"mdl-layout__tab-bar\",TAB_CONTAINER:\"mdl-layout__tab-bar-container\",TAB:\"mdl-layout__tab\",TAB_BAR_BUTTON:\"mdl-layout__tab-bar-button\",TAB_BAR_LEFT_BUTTON:\"mdl-layout__tab-bar-left-button\",TAB_BAR_RIGHT_BUTTON:\"mdl-layout__tab-bar-right-button\",TAB_MANUAL_SWITCH:\"mdl-layout__tab-manual-switch\",PANEL:\"mdl-layout__tab-panel\",HAS_DRAWER:\"has-drawer\",HAS_TABS:\"has-tabs\",HAS_SCROLLING_HEADER:\"has-scrolling-header\",CASTING_SHADOW:\"is-casting-shadow\",IS_COMPACT:\"is-compact\",IS_SMALL_SCREEN:\"is-small-screen\",IS_DRAWER_OPEN:\"is-visible\",IS_ACTIVE:\"is-active\",IS_UPGRADED:\"is-upgraded\",IS_ANIMATING:\"is-animating\",ON_LARGE_SCREEN:\"mdl-layout--large-screen-only\",ON_SMALL_SCREEN:\"mdl-layout--small-screen-only\"},f.prototype.contentScrollHandler_=function(){if(!this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)){var e=!this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN)||this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING))}},f.prototype.keyboardEventHandler_=function(e){e.keyCode===this.Keycodes_.ESCAPE&&this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)&&this.toggleDrawer()},f.prototype.screenSizeHandler_=function(){this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&(this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN),this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN)))},f.prototype.drawerToggleHandler_=function(e){if(e&&\"keydown\"===e.type){if(e.keyCode!==this.Keycodes_.SPACE&&e.keyCode!==this.Keycodes_.ENTER)return;e.preventDefault()}this.toggleDrawer()},f.prototype.headerTransitionEndHandler_=function(){this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},f.prototype.headerClickHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},f.prototype.resetTabState_=function(e){for(var t=0;t0?c.classList.add(this.CssClasses_.IS_ACTIVE):c.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft0)return;this.setFrameCount(1);var i,n,a=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)i=Math.round(a.width/2),n=Math.round(a.height/2);else{var l=void 0!==e.clientX?e.clientX:e.touches[0].clientX,o=void 0!==e.clientY?e.clientY:e.touches[0].clientY;i=Math.round(l-a.left),n=Math.round(o-a.top)}this.setRippleXY(i,n),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},S.prototype.upHandler_=function(e){e&&2!==e.detail&&window.setTimeout(function(){this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)}.bind(this),0)},S.prototype.init=function(){if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector(\".\"+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener(\"mousedown\",this.boundDownHandler),this.element_.addEventListener(\"touchstart\",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener(\"mouseup\",this.boundUpHandler),this.element_.addEventListener(\"mouseleave\",this.boundUpHandler),this.element_.addEventListener(\"touchend\",this.boundUpHandler),this.element_.addEventListener(\"blur\",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n,a=\"translate(\"+this.x_+\"px, \"+this.y_+\"px)\";t?(i=this.Constant_.INITIAL_SCALE,n=this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,n=this.rippleSize_+\"px\",e&&(a=\"translate(\"+this.boundWidth/2+\"px, \"+this.boundHeight/2+\"px)\")),s=\"translate(-50%, -50%) \"+a+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-- >0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},s.register({constructor:S,classAsString:\"MaterialRipple\",cssClass:\"mdl-js-ripple-effect\",widget:!1})}();\n\n\nvar utils = (function () {\r\n 'use strict';\r\n\r\n function selectDomElement(selector) {\r\n return document.querySelector(selector);\r\n }\r\n\r\n function getCurrentYear() {\r\n return (new Date()).getFullYear();\r\n }\r\n\r\n function getRadioValueForEmail(radioElements) {\r\n var value = '';\r\n\r\n for (var i = 0; i < radioElements.length; i++) {\r\n if (radioElements[i].checked) {\r\n value = radioElements[i].getAttribute('data');\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function getRadioValueForLink(radioElements) {\r\n var value = '';\r\n\r\n for (var i = 0; i < radioElements.length; i++) {\r\n if (radioElements[i].checked) {\r\n value = radioElements[i].getAttribute('data-id');\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function getCheckboxValueForEmail(element) {\r\n var value = '';\r\n\r\n if (element.checked) {\r\n value = element.getAttribute('data');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function getCheckboxValueForLink(element) {\r\n var value = '';\r\n\r\n if (element.checked) {\r\n value = element.id;\r\n value = element.getAttribute('data-id');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function unselectElement(element) {\r\n element.checked = '';\r\n element.checked = false;\r\n element.parentNode.classList.remove('is-checked');\r\n }\r\n\r\n function selectElement(element) {\r\n element.checked = 'checked';\r\n element.checked = true;\r\n element.parentNode.classList.add('is-checked');\r\n }\r\n\r\n function displayElement(selector) {\r\n selectDomElement(selector).classList.remove('hidden');\r\n }\r\n\r\n function display(element) {\r\n element.classList.remove('hidden');\r\n }\r\n\r\n function hideElement(selector) {\r\n selectDomElement(selector).classList.add('hidden');\r\n }\r\n\r\n function hide(element) {\r\n element.classList.add('hidden');\r\n }\r\n\r\n function displayParent(element) {\r\n element.parentNode.classList.remove('hidden');\r\n }\r\n\r\n function hideParent(element) {\r\n element.parentNode.classList.add('hidden');\r\n }\r\n\r\n function displayImage(imgContainerElement, imgPath) {\r\n imgContainerElement.style.backgroundImage = imgPath;\r\n }\r\n\r\n function hideImage(imgContainerElement) {\r\n imgContainerElement.style.backgroundImage = 'none';\r\n }\r\n\r\n function displayImgIfElementSelected(element, imgContainer, imgPath) {\r\n element.checked ? displayImage(imgContainer, imgPath) : hideImage(imgContainer);\r\n }\r\n\r\n function unselectAllRadiosAndCheckboxes(containerId) {\r\n var checks = document.querySelectorAll(containerId + ' input[type=\"checkbox\"]');\r\n var radios = document.querySelectorAll(containerId + ' input[type=\"radio\"]');\r\n\r\n for (var i = 0; i < checks.length; i++) {\r\n unselectElement(checks[i]);\r\n }\r\n\r\n for (var j = 0; j < radios.length; j++) {\r\n unselectElement(radios[j]);\r\n }\r\n }\r\n\r\n function displayCornerView(element, cornerViewContainerElement) {\r\n if (element.checked) {\r\n cornerViewContainerElement.className = 'active';\r\n } else {\r\n cornerViewContainerElement.className = '';\r\n }\r\n }\r\n\r\n return {\r\n selectDomElement: selectDomElement,\r\n getCurrentYear: getCurrentYear,\r\n getRadioValueForEmail: getRadioValueForEmail,\r\n getRadioValueForLink: getRadioValueForLink,\r\n getCheckboxValueForEmail: getCheckboxValueForEmail,\r\n getCheckboxValueForLink: getCheckboxValueForLink,\r\n selectElement: selectElement,\r\n unselectElement: unselectElement,\r\n displayElement: displayElement,\r\n display: display,\r\n hideElement: hideElement,\r\n hide: hide,\r\n displayParent: displayParent,\r\n hideParent: hideParent,\r\n displayImage: displayImage,\r\n hideImage: hideImage,\r\n displayImgIfElementSelected: displayImgIfElementSelected,\r\n unselectAllRadiosAndCheckboxes: unselectAllRadiosAndCheckboxes,\r\n displayCornerView: displayCornerView\r\n };\r\n}());\r\n\nvar model = (function () {\r\n var baseEngines = {\r\n gasoline: '429cc Gasoline Engine (07042)',\r\n electric: '48v AC Electric Engine (07043)'\r\n };\r\n\r\n var data = {\r\n link: {\r\n },\r\n email: {\r\n currentEngine: baseEngines.gasoline,\r\n currentBed: 'Cargo Bed (07046)',\r\n lTrackKit: '',\r\n bedRacking: '',\r\n electricLiftKit: '',\r\n seat: '',\r\n seatCover: '',\r\n seatCanopy: '',\r\n canopyWindshield: '',\r\n exteriorMirrors: '',\r\n mirrors: '',\r\n cabDoor: '',\r\n washerBottle: '',\r\n beaconLightKit: '',\r\n ledWorkLightKit: '',\r\n robExteriorMirrors: '',\r\n robMirrors: '',\r\n brushGuard: '',\r\n brushGuardFrontReceiver: '',\r\n frontReceiver: '',\r\n front: '',\r\n rear: '',\r\n tires: 'Turf Tires (137-2785)',\r\n signalLights: '',\r\n hornKit: '',\r\n backupAlarm: '',\r\n parkingBrakeAlarm: '',\r\n underHoodBox: '',\r\n powerKit: '',\r\n ramBall: '',\r\n sparkArrestor: ''\r\n },\r\n base:''\r\n };\r\n\r\n return {\r\n config: data\r\n };\r\n}());\r\n\nvar rules = (function () {\r\n var baseEngines = {\r\n gasoline: '429cc Gasoline Engine (07042)',\r\n electric: '48v AC Electric Engine (07043)'\r\n };\r\n\r\n var images = {\r\n walkSpreaderRearContainer: utils.selectDomElement('#walk-spreader-rear-img'),\r\n trashCanFrontContainer: utils.selectDomElement('#trash-can-front-img'),\r\n trashCanRearContainer: utils.selectDomElement('#trash-can-rear-img'),\r\n baseImageContainer: utils.selectDomElement('#base-img'),\r\n bedContainer: utils.selectDomElement('#bed-img'),\r\n bedRackingContainer: utils.selectDomElement('#bed-racking-img'),\r\n canopyContainer: utils.selectDomElement('#canopy-img'),\r\n canopyRopsSertifiedContainer: utils.selectDomElement('#canopy-rops-sertified-img'),\r\n seatsContainer: utils.selectDomElement('#seats-img'),\r\n seatsFrontContainer: utils.selectDomElement('#seats-front-img'),\r\n seatsBackContainer: utils.selectDomElement('#seats-back-img'),\r\n canopyRopsContainer: utils.selectDomElement('#canopy-rops-img'),\r\n canopyRopsWCContainer: utils.selectDomElement('#canopy-ropswc-img'),\r\n beaconLightContainer: utils.selectDomElement('#beacon-light-kit-img'),\r\n ledLightContainer: utils.selectDomElement('#led-work-light-img'),\r\n cabDoorFrontContainer: utils.selectDomElement('#cab-door-front-img'),\r\n cabDoorBackContainer: utils.selectDomElement('#cab-door-back-img'),\r\n tiresContainer: utils.selectDomElement('#tires-img'),\r\n tiresAggressiveContainer: utils.selectDomElement('#tires-aggressive-img'),\r\n electricContainer: utils.selectDomElement('#electric-img'),\r\n interiorMirrorStandardContainer: utils.selectDomElement('#standard-interior-mirror-img'),\r\n interiorMirrorAngleContainer: utils.selectDomElement('#wide-angle-mirror-img'),\r\n interiorMirrorWinkContainer: utils.selectDomElement('#wink-interior-mirror-img'),\r\n ropsInteriorMirrorStandardContainer: utils.selectDomElement('#rops-standard-interior-mirror-img'),\r\n ropsInteriorMirrorAngleContainer: utils.selectDomElement('#rops-wide-angle-mirror-img'),\r\n canopyWindshieldContainer: utils.selectDomElement('#canopy-windshield-img'),\r\n exteriorMirrorsContainer: utils.selectDomElement('#exterior-mirrors-img'),\r\n ropsExteriorMirrorsContainer: utils.selectDomElement('#rops-exterior-mirrors-img'),\r\n brushGuardContainer: utils.selectDomElement('#brush-guard-img'),\r\n brushGuardFrontContainer: utils.selectDomElement('#brush-guard-front-img'),\r\n frontReceiverContainer: utils.selectDomElement('#front-reciever-img'),\r\n hoseReelFrontContainer: utils.selectDomElement('#hose-reel-front-img'),\r\n walkSpreaderFrontContainer: utils.selectDomElement('#walk-spreader-front-img'),\r\n hoseReelRearContainer: utils.selectDomElement('#hose-reel-rear-img'),\r\n lightkitHomoligationContainer: utils.selectDomElement('#lightkit-homoligation-img'),\r\n lightkitContainer: utils.selectDomElement('#lightkit-img'),\r\n thumbsContainer: utils.selectDomElement('#thumbs-container')\r\n };\r\n\r\n function engineRules(elements, imageUrls) {\r\n if (elements.engine.electricRadio.checked && elements.accessories.gasoline.signalLightsCheckbox.checked) {\r\n utils.unselectElement(elements.accessories.gasoline.signalLightsCheckbox);\r\n }\r\n\r\n if (elements.engine.gasolineRadio.checked && elements.accessories.electric.signalLightsCheckbox.checked) {\r\n utils.unselectElement(elements.accessories.electric.signalLightsCheckbox);\r\n }\r\n\r\n // engines menu\r\n model.config.email.currentEngine = utils.getRadioValueForEmail([elements.engine.gasolineRadio, elements.engine.electricRadio]);\r\n model.config.link.currentEngine = utils.getRadioValueForLink([elements.engine.gasolineRadio, elements.engine.electricRadio]);\r\n\r\n // engines images\r\n utils.displayImgIfElementSelected(elements.engine.electricRadio, images.electricContainer, imageUrls.electricEngine);\r\n }\r\n\r\n function bedRules(elements, imageUrls) {\r\n\r\n // Bed options menu\r\n model.config.email.currentBed = utils.getRadioValueForEmail([elements.bed.cargoRadio, elements.bed.flat4ftRadio]);\r\n model.config.link.currentBed = utils.getRadioValueForLink([elements.bed.cargoRadio, elements.bed.flat4ftRadio]);\r\n\r\n // Bed options images\r\n if (elements.bed.cargoRadio.checked) {\r\n utils.displayImage(images.bedContainer, imageUrls.cargobed);\r\n utils.displayImgIfElementSelected(elements.bed.bedRackingCheckbox, images.bedRackingContainer, imageUrls.bedRacking);\r\n } else {\r\n utils.displayImage(images.bedContainer, imageUrls.flatBed4ft);\r\n utils.hideImage(images.hoseReelRearContainer);\r\n }\r\n\r\n if (elements.bed.flat4ftRadio.checked) {\r\n utils.unselectElement(elements.bed.lTrackKitCheckbox);\r\n elements.cornerImages.lTrack6inContainer.className = '';\r\n elements.cornerImages.lTrack2inContainer.className = '';\r\n }\r\n\r\n // set L-track Kit\r\n if (elements.bed.lTrackKitCheckbox.checked) {\r\n utils.display(elements.bed.lKitRadiosContainer);\r\n model.config.email.lTrackKit = utils.getRadioValueForEmail([elements.bed.lTrack6inRadio, elements.bed.lTrack2inRadio]);\r\n model.config.link.lTrackKitCheckbox = utils.getCheckboxValueForLink(elements.bed.lTrackKitCheckbox);\r\n model.config.link.lTrackKit = utils.getRadioValueForLink([elements.bed.lTrack6inRadio, elements.bed.lTrack2inRadio]);\r\n\r\n // corner images\r\n utils.displayCornerView(elements.bed.lTrack6inRadio, elements.cornerImages.lTrack6inContainer);\r\n utils.displayCornerView(elements.bed.lTrack2inRadio, elements.cornerImages.lTrack2inContainer);\r\n } else {\r\n utils.hide(elements.bed.lKitRadiosContainer);\r\n utils.selectElement(elements.bed.lTrack6inRadio);\r\n utils.unselectElement(elements.bed.lTrack2inRadio);\r\n\r\n model.config.email.lTrackKit = '';\r\n model.config.link.lTrackKitCheckbox = '';\r\n model.config.link.lTrackKit = '';\r\n elements.cornerImages.lTrack6inContainer.className = '';\r\n elements.cornerImages.lTrack2inContainer.className = '';\r\n }\r\n\r\n // set bed Racking\r\n if (elements.bed.flat4ftRadio.checked) {\r\n utils.unselectElement(elements.bed.bedRackingCheckbox);\r\n utils.unselectElement(elements.bed.lTrackKitCheckbox);\r\n utils.hideImage(images.bedRackingContainer);\r\n utils.hideParent(elements.bed.lTrackKitCheckbox);\r\n utils.hide(elements.bed.lKitRadiosContainer);\r\n utils.hideParent(elements.bed.bedRackingCheckbox);\r\n utils.hide(elements.bed.bedRackingRadiosContainer);\r\n utils.hide(elements.bed.cargoSubTitle);\r\n } else {\r\n utils.displayParent(elements.bed.lTrackKitCheckbox);\r\n utils.displayParent(elements.bed.bedRackingCheckbox);\r\n utils.display(elements.bed.cargoSubTitle);\r\n }\r\n\r\n if (elements.bed.bedRackingCheckbox.checked) {\r\n utils.display(elements.bed.bedRackingRadiosContainer);\r\n model.config.email.bedRackingCheckbox = utils.getCheckboxValueForEmail(elements.bed.bedRackingCheckbox);\r\n model.config.email.bedRacking = utils.getRadioValueForEmail([\r\n elements.bed.bedRackingNoneRadio,\r\n elements.bed.bedRackingSmallRadio,\r\n elements.bed.bedRackingLargeRadio\r\n ]);\r\n\r\n model.config.link.bedRackingCheckbox = utils.getCheckboxValueForLink(elements.bed.bedRackingCheckbox);\r\n model.config.link.bedRacking = utils.getRadioValueForLink([\r\n elements.bed.bedRackingNoneRadio,\r\n elements.bed.bedRackingSmallRadio,\r\n elements.bed.bedRackingLargeRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.bed.bedRackingRadiosContainer);\r\n utils.selectElement(elements.bed.bedRackingNoneRadio);\r\n utils.unselectElement(elements.bed.bedRackingSmallRadio);\r\n utils.unselectElement(elements.bed.bedRackingLargeRadio);\r\n model.config.email.bedRacking = '';\r\n model.config.link.bedRackingCheckbox = '';\r\n model.config.link.bedRacking = '';\r\n }\r\n\r\n // set electric Lift Kit\r\n if (model.config.email.currentEngine === baseEngines.electric) {\r\n utils.hideParent(elements.bed.electricLiftKit12v);\r\n utils.displayParent(elements.bed.electricLiftKit48v);\r\n\r\n model.config.email.electricLiftKit = utils.getCheckboxValueForEmail(elements.bed.electricLiftKit48v);\r\n model.config.link.electricLiftKit = utils.getCheckboxValueForLink(elements.bed.electricLiftKit48v);\r\n } else {\r\n utils.hideParent(elements.bed.electricLiftKit48v);\r\n utils.displayParent(elements.bed.electricLiftKit12v);\r\n\r\n model.config.email.electricLiftKit = utils.getCheckboxValueForEmail(elements.bed.electricLiftKit12v);\r\n model.config.link.electricLiftKit = utils.getCheckboxValueForLink(elements.bed.electricLiftKit12v);\r\n }\r\n\r\n // corner images\r\n utils.displayCornerView(elements.bed.bedRackingSmallRadio, elements.cornerImages.bedRackingQuickfistContainer);\r\n utils.displayCornerView(elements.bed.bedRackingLargeRadio, elements.cornerImages.bedRackingQuickfistLargeContainer);\r\n }\r\n\r\n function bedRules2pext(elements, imageUrls) {\r\n elements.cornerImages.lTrack6inContainer.className = '';\r\n elements.cornerImages.lTrack2inContainer.className = '';\r\n\r\n elements.cornerImages.bedRackingQuickfistContainer.className = '';\r\n elements.cornerImages.bedRackingQuickfistLargeContainer.className = '';\r\n model.config.link.currentBed = 'fb-2pext';\r\n\r\n utils.selectElement(elements.bed.electricLiftKit12v);\r\n utils.selectElement(elements.bed.electricLiftKit48v);\r\n\r\n // set electric Lift Kit\r\n if (model.config.email.currentEngine === baseEngines.electric) {\r\n utils.hideParent(elements.bed.electricLiftKit12v);\r\n utils.displayParent(elements.bed.electricLiftKit48v);\r\n\r\n model.config.email.electricLiftKit = utils.getCheckboxValueForEmail(elements.bed.electricLiftKit48v);\r\n model.config.link.electricLiftKit = utils.getCheckboxValueForLink(elements.bed.electricLiftKit48v);\r\n } else {\r\n utils.hideParent(elements.bed.electricLiftKit48v);\r\n utils.displayParent(elements.bed.electricLiftKit12v);\r\n\r\n model.config.email.electricLiftKit = utils.getCheckboxValueForEmail(elements.bed.electricLiftKit12v);\r\n model.config.link.electricLiftKit = utils.getCheckboxValueForLink(elements.bed.electricLiftKit12v);\r\n }\r\n }\r\n\r\n function seatsRules(elements, imageUrls) {\r\n\r\n // Seating menu options\r\n model.config.email.seat = utils.getRadioValueForEmail([elements.seat.benchSeatRadio, elements.seat.bucketSeatRadio]);\r\n model.config.link.seat = utils.getRadioValueForLink([elements.seat.benchSeatRadio, elements.seat.bucketSeatRadio]);\r\n\r\n if (elements.seat.bucketSeatRadio.checked) {\r\n utils.displayParent(elements.seat.seatCoverCheckbox);\r\n\r\n model.config.email.seatCover = utils.getCheckboxValueForEmail(elements.seat.seatCoverCheckbox);\r\n model.config.link.seatCover = utils.getCheckboxValueForLink(elements.seat.seatCoverCheckbox);\r\n } else {\r\n utils.hideParent(elements.seat.seatCoverCheckbox);\r\n utils.unselectElement(elements.seat.seatCoverCheckbox);\r\n\r\n model.config.email.seatCover = '';\r\n model.config.link.seatCover = '';\r\n }\r\n\r\n // Seating images preview\r\n elements.seat.benchSeatRadio.checked ?\r\n utils.displayImage(images.seatsContainer, imageUrls.benchSeat) :\r\n utils.displayImage(images.seatsContainer, imageUrls.bucketSeat);\r\n }\r\n\r\n function seatsRules4p(elements, imageUrls) {\r\n\r\n // Seating menu options\r\n model.config.email.seatFront = utils.getRadioValueForEmail([elements.seat.benchSeatFrontRadio, elements.seat.bucketSeatFrontRadio]);\r\n model.config.email.seatBack = utils.getRadioValueForEmail([elements.seat.benchSeatBackRadio, elements.seat.bucketSeatBackRadio]);\r\n model.config.link.seatFront = utils.getRadioValueForLink([elements.seat.benchSeatFrontRadio, elements.seat.bucketSeatFrontRadio]);\r\n model.config.link.seatBack = utils.getRadioValueForLink([elements.seat.benchSeatBackRadio, elements.seat.bucketSeatBackRadio]);\r\n\r\n if (elements.seat.bucketSeatFrontRadio.checked) {\r\n utils.displayParent(elements.seat.seatCoverFrontCheckbox);\r\n\r\n model.config.email.seatCoverFront = utils.getCheckboxValueForEmail(elements.seat.seatCoverFrontCheckbox);\r\n model.config.link.seatCoverFront = utils.getCheckboxValueForLink(elements.seat.seatCoverFrontCheckbox);\r\n } else {\r\n utils.hideParent(elements.seat.seatCoverFrontCheckbox);\r\n utils.unselectElement(elements.seat.seatCoverFrontCheckbox);\r\n\r\n model.config.email.seatCoverFront = '';\r\n model.config.link.seatCoverFront = '';\r\n }\r\n\r\n if (elements.seat.bucketSeatBackRadio.checked) {\r\n utils.displayParent(elements.seat.seatCoverBackCheckbox);\r\n\r\n model.config.email.seatCoverBack = utils.getCheckboxValueForEmail(elements.seat.seatCoverBackCheckbox);\r\n model.config.link.seatCoverBack = utils.getCheckboxValueForLink(elements.seat.seatCoverBackCheckbox);\r\n } else {\r\n utils.hideParent(elements.seat.seatCoverBackCheckbox);\r\n utils.unselectElement(elements.seat.seatCoverBackCheckbox);\r\n\r\n model.config.email.seatCoverBack = '';\r\n model.config.link.seatCoverBack = '';\r\n }\r\n\r\n // Seating images preview\r\n if (elements.seat.benchSeatFrontRadio.checked) {\r\n utils.hideImage(images.seatsFrontContainer, imageUrls.bucketSeatFront);\r\n utils.displayImage(images.seatsFrontContainer, imageUrls.benchSeatFront);\r\n\r\n } else {\r\n utils.hideImage(images.seatsFrontContainer, imageUrls.benchSeatFront);\r\n utils.displayImage(images.seatsFrontContainer, imageUrls.bucketSeatFront);\r\n }\r\n\r\n if (elements.seat.benchSeatBackRadio.checked) {\r\n utils.hideImage(images.seatsBackContainer, imageUrls.bucketSeatBack);\r\n utils.displayImage(images.seatsBackContainer, imageUrls.benchSeatBack);\r\n\r\n } else {\r\n utils.hideImage(images.seatsBackContainer, imageUrls.benchSeatBack);\r\n utils.displayImage(images.seatsBackContainer, imageUrls.bucketSeatBack);\r\n }\r\n }\r\n\r\n function canopyRules4p(elements, imageUrls) {\r\n\r\n // Cab & Canopy menu\r\n if (elements.canopy.canopyCheckbox.checked) {\r\n model.config.email.seatCanopy = utils.getCheckboxValueForEmail(elements.canopy.canopyCheckbox);\r\n model.config.email.canopyWindshield = utils.getCheckboxValueForEmail(elements.canopy.canopyWindshieldCheckbox);\r\n model.config.email.exteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.exteriorMirrorsCheckbox);\r\n model.config.email.mirrors = utils.getRadioValueForEmail([\r\n elements.canopy.interiorMirrorNoneRadio,\r\n elements.canopy.interiorMirrorStandardRadio,\r\n elements.canopy.interiorMirrorAngleRadio,\r\n elements.canopy.interiorMirrorWinkRadio\r\n ]);\r\n\r\n model.config.link.seatCanopy = utils.getCheckboxValueForLink(elements.canopy.canopyCheckbox);\r\n model.config.link.canopyWindshield = utils.getCheckboxValueForLink(elements.canopy.canopyWindshieldCheckbox);\r\n model.config.link.exteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.exteriorMirrorsCheckbox);\r\n model.config.link.mirrors = utils.getRadioValueForLink([\r\n elements.canopy.interiorMirrorNoneRadio,\r\n elements.canopy.interiorMirrorStandardRadio,\r\n elements.canopy.interiorMirrorAngleRadio,\r\n elements.canopy.interiorMirrorWinkRadio\r\n ]);\r\n\r\n utils.display(elements.canopy.canopyAttachmentsContainer);\r\n } else {\r\n utils.hide(elements.canopy.canopyAttachmentsContainer);\r\n utils.selectElement(elements.canopy.interiorMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorWinkRadio);\r\n utils.unselectElement(elements.canopy.canopyWindshieldCheckbox);\r\n utils.unselectElement(elements.canopy.exteriorMirrorsCheckbox);\r\n\r\n model.config.email.seatCanopy = '';\r\n model.config.email.canopyWindshield = '';\r\n model.config.email.exteriorMirrors = '';\r\n model.config.email.mirrors = '';\r\n model.config.link.seatCanopy = '';\r\n model.config.link.canopyWindshield = '';\r\n model.config.link.exteriorMirrors = '';\r\n model.config.link.mirrors = '';\r\n }\r\n\r\n // Cab & Canopy images\r\n utils.displayImgIfElementSelected(elements.canopy.canopyCheckbox, images.canopyContainer, imageUrls.canopy);\r\n\r\n if (elements.canopy.canopyCheckbox.checked) {\r\n utils.displayImgIfElementSelected(elements.canopy.canopyWindshieldCheckbox, images.canopyWindshieldContainer, imageUrls.canopyWindshield);\r\n utils.displayImgIfElementSelected(elements.canopy.exteriorMirrorsCheckbox, images.exteriorMirrorsContainer, imageUrls.exteriorMirrors);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorStandardRadio, images.interiorMirrorStandardContainer, imageUrls.interiorMirrorStandard);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorAngleRadio, images.interiorMirrorAngleContainer, imageUrls.interiorMirrorAngle);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorWinkRadio, images.interiorMirrorWinkContainer, imageUrls.interiorMirrorWink);\r\n } else {\r\n utils.hideImage(images.canopyWindshieldContainer);\r\n utils.hideImage(images.exteriorMirrorsContainer);\r\n utils.hideImage(images.interiorMirrorStandardContainer);\r\n utils.hideImage(images.interiorMirrorAngleContainer);\r\n utils.hideImage(images.interiorMirrorWinkContainer);\r\n }\r\n }\r\n\r\n function canopyRules2p(elements, imageUrls) {\r\n\r\n // Cab & Canopy menu rules 2p\r\n model.config.email.seatCanopy = utils.getRadioValueForEmail([\r\n elements.canopy.canopyNoneRadio,\r\n elements.canopy.canopyTwoSeatRadio,\r\n elements.canopy.ropsCabRadio,\r\n elements.canopy.ropsTwoPostCabRadio,\r\n elements.canopy.ropsTwoPostCabWithCanopyRadio\r\n ]);\r\n\r\n model.config.link.seatCanopy = utils.getRadioValueForLink([\r\n elements.canopy.canopyNoneRadio,\r\n elements.canopy.canopyTwoSeatRadio,\r\n elements.canopy.ropsCabRadio,\r\n elements.canopy.ropsTwoPostCabRadio,\r\n elements.canopy.ropsTwoPostCabWithCanopyRadio\r\n ]);\r\n\r\n if (elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.display(elements.canopy.canopyTwoSeatsContainer);\r\n utils.hide(elements.canopy.canopyRopsContainer);\r\n\r\n model.config.email.canopyWindshield = utils.getCheckboxValueForEmail(elements.canopy.canopyTwoSeatsWindshieldCheckbox);\r\n model.config.email.exteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.exteriorTwoSeatsMirrorsCheckbox);\r\n model.config.email.mirrors = utils.getRadioValueForEmail([\r\n elements.canopy.interiorTwoSeatsMirrorNoneRadio,\r\n elements.canopy.interiorTwoSeatsMirrorStandardRadio,\r\n elements.canopy.interiorTwoSeatsMirrorAngleRadio,\r\n elements.canopy.interiorTwoSeatsMirrorWinkRadio]);\r\n\r\n model.config.link.canopyWindshield = utils.getCheckboxValueForLink(elements.canopy.canopyTwoSeatsWindshieldCheckbox);\r\n model.config.link.exteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.exteriorTwoSeatsMirrorsCheckbox);\r\n model.config.link.mirrors = utils.getRadioValueForLink([\r\n elements.canopy.interiorTwoSeatsMirrorNoneRadio,\r\n elements.canopy.interiorTwoSeatsMirrorStandardRadio,\r\n elements.canopy.interiorTwoSeatsMirrorAngleRadio,\r\n elements.canopy.interiorTwoSeatsMirrorWinkRadio]);\r\n } else {\r\n utils.hide(elements.canopy.canopyTwoSeatsContainer);\r\n utils.selectElement(elements.canopy.interiorTwoSeatsMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.interiorTwoSeatsMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.interiorTwoSeatsMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.interiorTwoSeatsMirrorWinkRadio);\r\n utils.unselectElement(elements.canopy.canopyTwoSeatsWindshieldCheckbox);\r\n utils.unselectElement(elements.canopy.exteriorTwoSeatsMirrorsCheckbox);\r\n\r\n model.config.email.canopyWindshield = '';\r\n model.config.email.exteriorMirrors = '';\r\n model.config.email.mirrors = '';\r\n model.config.link.canopyWindshield = '';\r\n model.config.link.exteriorMirrors = '';\r\n model.config.link.mirrors = '';\r\n }\r\n\r\n if (elements.canopy.ropsTwoPostCabWithCanopyRadio.checked) {\r\n utils.display(elements.canopy.canopyRopsContainer);\r\n utils.hide(elements.canopy.canopyTwoSeatsContainer);\r\n\r\n model.config.email.canopyWindshield = utils.getCheckboxValueForEmail(elements.canopy.canopyRopsWindshieldCheckbox);\r\n model.config.email.exteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.exteriorRopsMirrorsCheckbox);\r\n model.config.email.mirrors = utils.getRadioValueForEmail([\r\n elements.canopy.interiorRopsMirrorNoneRadio,\r\n elements.canopy.interiorRopsMirrorStandardRadio,\r\n elements.canopy.interiorRopsMirrorAngleRadio,\r\n elements.canopy.interiorRopsMirrorWinkRadio\r\n ]);\r\n\r\n model.config.link.canopyWindshield = utils.getCheckboxValueForLink(elements.canopy.canopyRopsWindshieldCheckbox);\r\n model.config.link.exteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.exteriorRopsMirrorsCheckbox);\r\n model.config.link.mirrors = utils.getRadioValueForLink([\r\n elements.canopy.interiorRopsMirrorNoneRadio,\r\n elements.canopy.interiorRopsMirrorStandardRadio,\r\n elements.canopy.interiorRopsMirrorAngleRadio,\r\n elements.canopy.interiorRopsMirrorWinkRadio\r\n ]);\r\n\r\n } else if (!elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.hide(elements.canopy.canopyRopsContainer);\r\n utils.selectElement(elements.canopy.interiorRopsMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.interiorRopsMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.interiorRopsMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.interiorRopsMirrorWinkRadio);\r\n utils.unselectElement(elements.canopy.canopyRopsWindshieldCheckbox);\r\n utils.unselectElement(elements.canopy.exteriorRopsMirrorsCheckbox);\r\n\r\n model.config.email.canopyWindshield = '';\r\n model.config.email.exteriorMirrors = '';\r\n model.config.email.mirrors = '';\r\n model.config.link.canopyWindshield = '';\r\n model.config.link.exteriorMirrors = '';\r\n model.config.link.mirrors = '';\r\n }\r\n\r\n if (elements.canopy.ropsCabRadio.checked) {\r\n utils.display(elements.canopy.ropsAttachments);\r\n\r\n model.config.email.cabDoor = utils.getCheckboxValueForEmail(elements.canopy.cabDoorCheckbox);\r\n model.config.email.washerBottle = utils.getCheckboxValueForEmail(elements.canopy.washerBottleCheckbox);\r\n model.config.email.beaconLightKit = utils.getCheckboxValueForEmail(elements.canopy.beaconLightCheckbox);\r\n model.config.email.ledWorkLightKit = utils.getCheckboxValueForEmail(elements.canopy.ledLightCheckbox);\r\n model.config.email.robExteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n model.config.email.robMirrors = utils.getRadioValueForEmail([\r\n elements.canopy.ropsInteriorMirrorNoneRadio,\r\n elements.canopy.ropsInterMirrorStandardRadio,\r\n elements.canopy.ropsInteriorMirrorAngleRadio\r\n ]);\r\n\r\n model.config.link.cabDoor = utils.getCheckboxValueForLink(elements.canopy.cabDoorCheckbox);\r\n model.config.link.washerBottle = utils.getCheckboxValueForLink(elements.canopy.washerBottleCheckbox);\r\n model.config.link.beaconLightKit = utils.getCheckboxValueForLink(elements.canopy.beaconLightCheckbox);\r\n model.config.link.ledWorkLightKit = utils.getCheckboxValueForLink(elements.canopy.ledLightCheckbox);\r\n model.config.link.robExteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n model.config.link.robMirrors = utils.getRadioValueForLink([\r\n elements.canopy.ropsInteriorMirrorNoneRadio,\r\n elements.canopy.ropsInterMirrorStandardRadio,\r\n elements.canopy.ropsInteriorMirrorAngleRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.canopy.ropsAttachments);\r\n utils.selectElement(elements.canopy.ropsInteriorMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.ropsInterMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.ropsInteriorMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.cabDoorCheckbox);\r\n utils.unselectElement(elements.canopy.washerBottleCheckbox);\r\n utils.unselectElement(elements.canopy.beaconLightCheckbox);\r\n utils.unselectElement(elements.canopy.ledLightCheckbox);\r\n utils.unselectElement(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n\r\n model.config.email.cabDoor = '';\r\n model.config.email.washerBottle = '';\r\n model.config.email.beaconLightKit = '';\r\n model.config.email.ledWorkLightKit = '';\r\n model.config.email.robExteriorMirrors = '';\r\n model.config.email.robMirrors = '';\r\n\r\n model.config.link.cabDoor = '';\r\n model.config.link.washerBottle = '';\r\n model.config.link.beaconLightKit = '';\r\n model.config.link.ledWorkLightKit = '';\r\n model.config.link.robExteriorMirrors = '';\r\n model.config.link.robMirrors = '';\r\n }\r\n\r\n // Cab & Canopy menu image rules 2p\r\n utils.displayImgIfElementSelected(elements.canopy.canopyTwoSeatRadio, images.canopyContainer, imageUrls.canopy);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsCabRadio, images.canopyRopsSertifiedContainer, imageUrls.ropsCab);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsTwoPostCabRadio, images.canopyRopsContainer, imageUrls.rops);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsTwoPostCabWithCanopyRadio, images.canopyRopsWCContainer, imageUrls.ropsCanopy);\r\n\r\n if (elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.canopy.canopyTwoSeatsWindshieldCheckbox, images.canopyWindshieldContainer, imageUrls.canopyWindshield);\r\n utils.displayImgIfElementSelected(elements.canopy.exteriorTwoSeatsMirrorsCheckbox, images.exteriorMirrorsContainer, imageUrls.exteriorMirrors);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorTwoSeatsMirrorStandardRadio, images.interiorMirrorStandardContainer, imageUrls.interiorMirrorStandard);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorTwoSeatsMirrorAngleRadio, images.interiorMirrorAngleContainer, imageUrls.interiorMirrorAngle);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorTwoSeatsMirrorWinkRadio, images.interiorMirrorWinkContainer, imageUrls.interiorMirrorWink);\r\n } else if (elements.canopy.ropsTwoPostCabWithCanopyRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.canopy.canopyRopsWindshieldCheckbox, images.canopyWindshieldContainer, imageUrls.canopyWindshield);\r\n utils.displayImgIfElementSelected(elements.canopy.exteriorRopsMirrorsCheckbox, images.exteriorMirrorsContainer, imageUrls.exteriorMirrors);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorRopsMirrorStandardRadio, images.interiorMirrorStandardContainer, imageUrls.interiorMirrorStandard);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorRopsMirrorAngleRadio, images.interiorMirrorAngleContainer, imageUrls.interiorMirrorAngle);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorRopsMirrorWinkRadio, images.interiorMirrorWinkContainer, imageUrls.interiorMirrorWink);\r\n } else {\r\n utils.hideImage(images.canopyWindshieldContainer);\r\n utils.hideImage(images.exteriorMirrorsContainer);\r\n utils.hideImage(images.interiorMirrorStandardContainer);\r\n utils.hideImage(images.interiorMirrorAngleContainer);\r\n utils.hideImage(images.interiorMirrorWinkContainer);\r\n }\r\n\r\n if (elements.canopy.ropsCabRadio.checked) {\r\n if (elements.canopy.cabDoorCheckbox.checked) {\r\n utils.displayImage(images.cabDoorFrontContainer, imageUrls.ropsFrontDoor);\r\n utils.displayImage(images.cabDoorBackContainer, imageUrls.ropsBackDoor);\r\n } else {\r\n utils.hideImage(images.cabDoorFrontContainer);\r\n utils.hideImage(images.cabDoorBackContainer);\r\n }\r\n\r\n utils.displayImgIfElementSelected(elements.canopy.beaconLightCheckbox, images.beaconLightContainer, imageUrls.beaconLight);\r\n utils.displayImgIfElementSelected(elements.canopy.ledLightCheckbox, images.ledLightContainer, imageUrls.LedLights);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsExteriorMirrorsCheckbox, images.ropsExteriorMirrorsContainer, imageUrls.ropsExteriorMirror);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsInterMirrorStandardRadio, images.ropsInteriorMirrorStandardContainer, imageUrls.ropsStandardMirror);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsInteriorMirrorAngleRadio, images.ropsInteriorMirrorAngleContainer, imageUrls.ropsAngleMirror);\r\n } else {\r\n utils.hideImage(images.cabDoorFrontContainer);\r\n utils.hideImage(images.cabDoorBackContainer);\r\n utils.hideImage(images.beaconLightContainer);\r\n utils.hideImage(images.ledLightContainer);\r\n utils.hideImage(images.ropsExteriorMirrorsContainer);\r\n utils.hideImage(images.ropsInteriorMirrorStandardContainer);\r\n utils.hideImage(images.ropsInteriorMirrorAngleContainer);\r\n }\r\n }\r\n\r\n function canopyRules2pext(elements, imageUrls) {\r\n\r\n // Cab & Canopy menu options\r\n model.config.email.seatCanopy = utils.getRadioValueForEmail([\r\n elements.canopy.canopyNoneRadio,\r\n elements.canopy.canopyTwoSeatRadio,\r\n elements.canopy.ropsCabRadio\r\n ]);\r\n\r\n model.config.link.seatCanopy = utils.getRadioValueForLink([\r\n elements.canopy.canopyNoneRadio,\r\n elements.canopy.canopyTwoSeatRadio,\r\n elements.canopy.ropsCabRadio\r\n ]);\r\n\r\n if (elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.display(elements.canopy.canopyAttachmentsRadiosContainer);\r\n\r\n model.config.email.canopyWindshield = utils.getCheckboxValueForEmail(elements.canopy.canopyWindshieldCheckbox);\r\n model.config.email.exteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.exteriorMirrorsCheckbox);\r\n model.config.email.mirrors = utils.getRadioValueForEmail([\r\n elements.canopy.interiorMirrorNoneRadio,\r\n elements.canopy.interiorMirrorStandardRadio,\r\n elements.canopy.interiorMirrorAngleRadio,\r\n elements.canopy.interiorMirrorWinkRadio\r\n ]);\r\n\r\n model.config.link.canopyWindshield = utils.getCheckboxValueForLink(elements.canopy.canopyWindshieldCheckbox);\r\n model.config.link.exteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.exteriorMirrorsCheckbox);\r\n model.config.link.mirrors = utils.getRadioValueForLink([\r\n elements.canopy.interiorMirrorNoneRadio,\r\n elements.canopy.interiorMirrorStandardRadio,\r\n elements.canopy.interiorMirrorAngleRadio,\r\n elements.canopy.interiorMirrorWinkRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.canopy.canopyAttachmentsRadiosContainer);\r\n utils.selectElement(elements.canopy.interiorMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorWinkRadio);\r\n utils.unselectElement(elements.canopy.canopyWindshieldCheckbox);\r\n utils.unselectElement(elements.canopy.exteriorMirrorsCheckbox);\r\n\r\n model.config.email.canopyWindshield = '';\r\n model.config.email.exteriorMirrors = '';\r\n model.config.email.mirrors = '';\r\n model.config.link.canopyWindshield = '';\r\n model.config.link.exteriorMirrors = '';\r\n model.config.link.mirrors = '';\r\n }\r\n\r\n if (elements.canopy.ropsCabRadio.checked) {\r\n utils.display(elements.canopy.ropsRadiosContainer);\r\n\r\n model.config.email.cabDoor = utils.getCheckboxValueForEmail(elements.canopy.cabDoorCheckbox);\r\n model.config.email.washerBottle = utils.getCheckboxValueForEmail(elements.canopy.washerBottleCheckbox);\r\n model.config.email.beaconLightKit = utils.getCheckboxValueForEmail(elements.canopy.beaconLightCheckbox);\r\n model.config.email.ledWorkLightKit = utils.getCheckboxValueForEmail(elements.canopy.ledLightCheckbox);\r\n model.config.email.robExteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n model.config.email.robMirrors = utils.getRadioValueForEmail([\r\n elements.canopy.ropsInteriorMirrorNoneRadio,\r\n elements.canopy.ropsInterMirrorStandardRadio,\r\n elements.canopy.ropsInteriorMirrorAngleRadio\r\n ]);\r\n\r\n model.config.link.cabDoor = utils.getCheckboxValueForLink(elements.canopy.cabDoorCheckbox);\r\n model.config.link.washerBottle = utils.getCheckboxValueForLink(elements.canopy.washerBottleCheckbox);\r\n model.config.link.beaconLightKit = utils.getCheckboxValueForLink(elements.canopy.beaconLightCheckbox);\r\n model.config.link.ledWorkLightKit = utils.getCheckboxValueForLink(elements.canopy.ledLightCheckbox);\r\n model.config.link.robExteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n model.config.link.robMirrors = utils.getRadioValueForLink([\r\n elements.canopy.ropsInteriorMirrorNoneRadio,\r\n elements.canopy.ropsInterMirrorStandardRadio,\r\n elements.canopy.ropsInteriorMirrorAngleRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.canopy.ropsRadiosContainer);\r\n utils.selectElement(elements.canopy.ropsInteriorMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.ropsInterMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.ropsInteriorMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.cabDoorCheckbox);\r\n utils.unselectElement(elements.canopy.washerBottleCheckbox);\r\n utils.unselectElement(elements.canopy.beaconLightCheckbox);\r\n utils.unselectElement(elements.canopy.ledLightCheckbox);\r\n utils.unselectElement(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n\r\n model.config.email.cabDoor = '';\r\n model.config.email.washerBottle = '';\r\n model.config.email.beaconLightKit = '';\r\n model.config.email.ledWorkLightKit = '';\r\n model.config.email.robExteriorMirrors = '';\r\n model.config.email.robMirrors = '';\r\n\r\n model.config.link.cabDoor = '';\r\n model.config.link.washerBottle = '';\r\n model.config.link.beaconLightKit = '';\r\n model.config.link.ledWorkLightKit = '';\r\n model.config.link.robExteriorMirrors = '';\r\n model.config.link.robMirrors = '';\r\n }\r\n\r\n // Cab & Canopy image preview\r\n utils.displayImgIfElementSelected(elements.canopy.canopyTwoSeatRadio, images.canopyContainer, imageUrls.canopy);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsCabRadio, images.canopyRopsSertifiedContainer, imageUrls.ropsCab);\r\n\r\n if (elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.canopy.canopyWindshieldCheckbox, images.canopyWindshieldContainer, imageUrls.canopyWindshield);\r\n utils.displayImgIfElementSelected(elements.canopy.exteriorMirrorsCheckbox, images.exteriorMirrorsContainer, imageUrls.exteriorMirrors);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorStandardRadio, images.interiorMirrorStandardContainer, imageUrls.interiorMirrorStandard);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorAngleRadio, images.interiorMirrorAngleContainer, imageUrls.interiorMirrorAngle);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorWinkRadio, images.interiorMirrorWinkContainer, imageUrls.interiorMirrorWink);\r\n } else {\r\n utils.hideImage(images.canopyWindshieldContainer);\r\n utils.hideImage(images.exteriorMirrorsContainer);\r\n utils.hideImage(images.interiorMirrorStandardContainer);\r\n utils.hideImage(images.interiorMirrorAngleContainer);\r\n utils.hideImage(images.interiorMirrorWinkContainer);\r\n }\r\n\r\n if (elements.canopy.ropsCabRadio.checked) {\r\n if (elements.canopy.cabDoorCheckbox.checked) {\r\n utils.displayImage(images.cabDoorFrontContainer, imageUrls.ropsFrontDoor);\r\n utils.displayImage(images.cabDoorBackContainer, imageUrls.ropsBackDoor);\r\n } else {\r\n utils.hideImage(images.cabDoorFrontContainer);\r\n utils.hideImage(images.cabDoorBackContainer);\r\n }\r\n\r\n utils.displayImgIfElementSelected(elements.canopy.beaconLightCheckbox, images.beaconLightContainer, imageUrls.beaconLight);\r\n utils.displayImgIfElementSelected(elements.canopy.ledLightCheckbox, images.ledLightContainer, imageUrls.ledLights);\r\n\r\n // missing image\r\n utils.displayImgIfElementSelected(elements.canopy.ropsExteriorMirrorsCheckbox, images.ropsExteriorMirrorsContainer, imageUrls.ropsExteriorMirror);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsInterMirrorStandardRadio, images.ropsInteriorMirrorStandardContainer, imageUrls.ropsStandardMirror);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsInteriorMirrorAngleRadio, images.ropsInteriorMirrorAngleContainer, imageUrls.ropsAngleMirror);\r\n } else {\r\n utils.hideImage(images.cabDoorFrontContainer);\r\n utils.hideImage(images.cabDoorBackContainer);\r\n utils.hideImage(images.beaconLightContainer);\r\n utils.hideImage(images.ledLightContainer);\r\n utils.hideImage(images.ropsExteriorMirrorsContainer);\r\n utils.hideImage(images.ropsInteriorMirrorStandardContainer);\r\n utils.hideImage(images.ropsInteriorMirrorAngleContainer);\r\n }\r\n }\r\n\r\n function frontAttachmentsRules(elements, imageUrls) {\r\n\r\n // Front Attachments menu rules\r\n model.config.email.brushGuard = utils.getCheckboxValueForEmail(elements.front.brushGuardCheckbox);\r\n model.config.email.frontReceiver = utils.getCheckboxValueForEmail(elements.front.frontReceiverCheckbox);\r\n model.config.link.brushGuard = utils.getCheckboxValueForLink(elements.front.brushGuardCheckbox);\r\n model.config.link.frontReceiver = utils.getCheckboxValueForLink(elements.front.frontReceiverCheckbox);\r\n\r\n if (elements.front.brushGuardCheckbox.checked) {\r\n utils.displayParent(elements.front.brushGuardFrontCheckbox);\r\n elements.front.frontReceiverCheckbox.disabled = true;\r\n elements.front.frontReceiverCheckbox.parentNode.classList.add('disabled');\r\n\r\n model.config.email.brushGuardFrontReceiver = utils.getCheckboxValueForEmail(elements.front.brushGuardFrontCheckbox);\r\n model.config.link.brushGuardFrontReceiver = utils.getCheckboxValueForLink(elements.front.brushGuardFrontCheckbox);\r\n\r\n if (elements.accessories.gasoline.homoligationLightRadio.checked || elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.hideImage(images.lightkitContainer);\r\n }\r\n } else {\r\n utils.hideParent(elements.front.brushGuardFrontCheckbox);\r\n elements.front.frontReceiverCheckbox.disabled = false;\r\n elements.front.frontReceiverCheckbox.parentNode.classList.remove('disabled');\r\n utils.unselectElement(elements.front.brushGuardFrontCheckbox);\r\n\r\n model.config.email.brushGuardFrontReceiver = '';\r\n model.config.link.brushGuardFrontReceiver = '';\r\n\r\n if (elements.accessories.gasoline.homoligationLightRadio.checked || elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.hideImage(images.lightkitContainer);\r\n }\r\n }\r\n\r\n if (elements.front.frontReceiverCheckbox.checked) {\r\n elements.front.brushGuardCheckbox.disabled = true;\r\n elements.front.brushGuardCheckbox.parentNode.classList.add('disabled');\r\n } else {\r\n elements.front.brushGuardCheckbox.disabled = false;\r\n elements.front.brushGuardCheckbox.parentNode.classList.remove('disabled');\r\n }\r\n\r\n if (elements.front.brushGuardFrontCheckbox.checked || elements.front.frontReceiverCheckbox.checked) {\r\n elements.front.frontAttachmentsContainer.classList.remove('disabled');\r\n elements.front.frontNoneRadio.disabled = false;\r\n elements.front.hoseReelRadio.disabled = false;\r\n elements.front.trashCanRadio.disabled = false;\r\n elements.front.walkSpreaderRadio.disabled = false;\r\n } else if (!elements.front.brushGuardFrontCheckbox.checked) {\r\n elements.front.frontAttachmentsContainer.classList.add('disabled');\r\n utils.selectElement(elements.front.frontNoneRadio);\r\n utils.unselectElement(elements.front.hoseReelRadio);\r\n utils.unselectElement(elements.front.trashCanRadio);\r\n utils.unselectElement(elements.front.walkSpreaderRadio);\r\n elements.front.frontNoneRadio.disabled = true;\r\n elements.front.hoseReelRadio.disabled = true;\r\n elements.front.trashCanRadio.disabled = true;\r\n elements.front.walkSpreaderRadio.disabled = true;\r\n }\r\n\r\n model.config.email.front = utils.getRadioValueForEmail([\r\n elements.front.frontNoneRadio,\r\n elements.front.hoseReelRadio,\r\n elements.front.trashCanRadio,\r\n elements.front.walkSpreaderRadio\r\n ]);\r\n\r\n model.config.link.front = utils.getRadioValueForLink([\r\n elements.front.frontNoneRadio,\r\n elements.front.hoseReelRadio,\r\n elements.front.trashCanRadio,\r\n elements.front.walkSpreaderRadio\r\n ]);\r\n\r\n utils.displayImgIfElementSelected(elements.front.brushGuardCheckbox, images.brushGuardContainer, imageUrls.brushGuard);\r\n\r\n if (elements.front.brushGuardCheckbox.checked) {\r\n utils.displayImgIfElementSelected(elements.front.brushGuardFrontCheckbox, images.brushGuardFrontContainer, imageUrls.brushGuardFront);\r\n } else {\r\n utils.hideImage(images.brushGuardFrontContainer);\r\n }\r\n\r\n if (elements.front.frontReceiverCheckbox.checked ||\r\n elements.front.brushGuardFrontCheckbox.checked) {\r\n utils.displayImgIfElementSelected(elements.front.frontReceiverCheckbox, images.frontReceiverContainer, imageUrls.frontReceiver);\r\n utils.displayImgIfElementSelected(elements.front.hoseReelRadio, images.hoseReelFrontContainer, imageUrls.hoseReel);\r\n utils.displayImgIfElementSelected(elements.front.trashCanRadio, images.trashCanFrontContainer, imageUrls.trashCan);\r\n utils.displayImgIfElementSelected(elements.front.walkSpreaderRadio, images.walkSpreaderFrontContainer, imageUrls.walkSpreader);\r\n } else {\r\n utils.hideImage(images.frontReceiverContainer);\r\n utils.hideImage(images.hoseReelFrontContainer);\r\n utils.hideImage(images.trashCanFrontContainer);\r\n utils.hideImage(images.walkSpreaderFrontContainer);\r\n }\r\n\r\n if (!elements.front.brushGuardCheckbox.checked && !elements.front.frontReceiverCheckbox.checked) {\r\n utils.hideImage(images.frontReceiverContainer);\r\n utils.hideImage(images.hoseReelFrontContainer);\r\n utils.hideImage(images.trashCanFrontContainer);\r\n utils.hideImage(images.walkSpreaderFrontContainer);\r\n }\r\n\r\n //corner images\r\n if (elements.rear.walkSpreaderRadio.checked && elements.front.walkSpreaderRadio.checked) {\r\n elements.cornerImages.walkSpreaderFrontContainer.className = '';\r\n } else {\r\n utils.displayCornerView(elements.front.walkSpreaderRadio, elements.cornerImages.walkSpreaderFrontContainer);\r\n }\r\n\r\n utils.displayCornerView(elements.front.hoseReelRadio, elements.cornerImages.hoseReelContainer);\r\n\r\n if (elements.rear.hoseRealRadio.checked && elements.front.hoseReelRadio.checked) {\r\n elements.cornerImages.hoseReelContainer.className = '';\r\n } else {\r\n utils.displayCornerView(elements.front.hoseReelRadio, elements.cornerImages.hoseReelContainer);\r\n }\r\n }\r\n\r\n function rearAttachmentsRules(elements, imageUrls) {\r\n\r\n // Rear Attachments menu rules\r\n model.config.email.rear = utils.getRadioValueForEmail([\r\n elements.rear.rearNoneRadio,\r\n elements.rear.hoseRealRadio,\r\n elements.rear.trashCanRadio,\r\n elements.rear.walkSpreaderRadio\r\n ]);\r\n\r\n model.config.link.rear = utils.getRadioValueForLink([\r\n elements.rear.rearNoneRadio,\r\n elements.rear.hoseRealRadio,\r\n elements.rear.trashCanRadio,\r\n elements.rear.walkSpreaderRadio\r\n ]);\r\n\r\n // Rear Attachments images rules\r\n if (model.config.email.currentBed === 'Cargo Bed (07046)') {\r\n utils.displayImgIfElementSelected(elements.rear.hoseRealRadio, images.hoseReelRearContainer, imageUrls.hoseRear);\r\n elements.cornerImages.hoseReelRearContainer.className = '';\r\n }\r\n\r\n utils.displayImgIfElementSelected(elements.rear.trashCanRadio, images.trashCanRearContainer, imageUrls.trashCanRear);\r\n utils.displayImgIfElementSelected(elements.rear.walkSpreaderRadio, images.walkSpreaderRearContainer, imageUrls.walkSpreaderRear);\r\n\r\n //corner images\r\n utils.displayCornerView(elements.rear.walkSpreaderRadio, elements.cornerImages.walkSpreaderContainer);\r\n utils.displayCornerView(elements.rear.hoseRealRadio, elements.cornerImages.hoseReelRearContainer);\r\n }\r\n\r\n function tiresRules(elements, imageUrls) {\r\n\r\n // Tires menu rules\r\n model.config.email.tires = utils.getRadioValueForEmail([elements.tires.trufRadio, elements.tires.aggressiveTrufRadio, elements.tires.atvRadio]);\r\n model.config.link.tires = utils.getRadioValueForLink([elements.tires.trufRadio, elements.tires.aggressiveTrufRadio, elements.tires.atvRadio]);\r\n\r\n // Tires image rules\r\n if (elements.tires.trufRadio.checked) {\r\n utils.displayImage(images.tiresContainer, imageUrls.truf);\r\n utils.hideImage(images.tiresAggressiveContainer, imageUrls.aggressive);\r\n }\r\n\r\n if (elements.tires.atvRadio.checked) {\r\n utils.displayImage(images.tiresContainer, imageUrls.atv);\r\n utils.hideImage(images.tiresAggressiveContainer, imageUrls.aggressive);\r\n }\r\n\r\n if (elements.tires.aggressiveTrufRadio.checked) {\r\n utils.displayImage(images.tiresContainer, imageUrls.truf);\r\n utils.displayImage(images.tiresAggressiveContainer, imageUrls.aggressive);\r\n }\r\n }\r\n\r\n function accessoriesRules(elements, imageUrls) {\r\n\r\n // Signaling, Alarms, and Accessories menu rules\r\n if (model.config.email.currentEngine === baseEngines.electric) {\r\n utils.display(elements.accessories.electric.electricAccessoriesContainer);\r\n utils.hide(elements.accessories.gasoline.gasolineAccessoriesContainer);\r\n\r\n // if electric selected - gasoline checkboxes should be disabled\r\n utils.unselectElement(elements.accessories.gasoline.hornKitCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.alarmCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.parkingAlarmCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.underHoodBoxCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.powerKitCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.sparkArrestorCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.ramBallCheckbox);\r\n\r\n // if electric selected electric checkboxes available\r\n model.config.email.hornKit = utils.getCheckboxValueForEmail(elements.accessories.electric.hornKitCheckbox);\r\n model.config.email.backupAlarm = utils.getCheckboxValueForEmail(elements.accessories.electric.alarmCheckbox);\r\n model.config.email.underHoodBox = utils.getCheckboxValueForEmail(elements.accessories.electric.underHoodBoxCheckbox);\r\n model.config.email.ramBall = utils.getCheckboxValueForEmail(elements.accessories.electric.ramBallCheckbox);\r\n model.config.email.sparkArrestor = utils.getCheckboxValueForEmail(elements.accessories.electric.sparkArrestorCheckbox);\r\n\r\n model.config.link.hornKit = utils.getCheckboxValueForLink(elements.accessories.electric.hornKitCheckbox);\r\n model.config.link.backupAlarm = utils.getCheckboxValueForLink(elements.accessories.electric.alarmCheckbox);\r\n model.config.link.underHoodBox = utils.getCheckboxValueForLink(elements.accessories.electric.underHoodBoxCheckbox);\r\n model.config.link.ramBall = utils.getCheckboxValueForLink(elements.accessories.electric.ramBallCheckbox);\r\n model.config.link.sparkArrestor = utils.getCheckboxValueForLink(elements.accessories.electric.sparkArrestorCheckbox);\r\n\r\n if (elements.accessories.electric.signalLightsCheckbox.checked) {\r\n utils.display(elements.accessories.electric.signalLightsRadiosContainer);\r\n\r\n model.config.email.signalLights = utils.getRadioValueForEmail([\r\n elements.accessories.electric.homoligationLightRadio,\r\n elements.accessories.electric.breakLightRadio\r\n ]);\r\n\r\n model.config.link.signalLightsCheckbox = utils.getCheckboxValueForLink(elements.accessories.electric.signalLightsCheckbox);\r\n\r\n model.config.link.signalLights = utils.getRadioValueForLink([\r\n elements.accessories.electric.homoligationLightRadio,\r\n elements.accessories.electric.breakLightRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.accessories.electric.signalLightsRadiosContainer);\r\n utils.selectElement(elements.accessories.electric.homoligationLightRadio);\r\n utils.unselectElement(elements.accessories.electric.breakLightRadio);\r\n\r\n model.config.link.signalLightsCheckbox = '';\r\n model.config.email.signalLights = '';\r\n model.config.link.signalLights = '';\r\n }\r\n } else {\r\n utils.hide(elements.accessories.electric.electricAccessoriesContainer);\r\n utils.display(elements.accessories.gasoline.gasolineAccessoriesContainer);\r\n\r\n // if gasoline selected - electric checkboxes should be disabled\r\n utils.unselectElement(elements.accessories.electric.hornKitCheckbox);\r\n utils.unselectElement(elements.accessories.electric.alarmCheckbox);\r\n utils.unselectElement(elements.accessories.electric.underHoodBoxCheckbox);\r\n utils.unselectElement(elements.accessories.electric.ramBallCheckbox);\r\n utils.unselectElement(elements.accessories.electric.sparkArrestorCheckbox);\r\n\r\n // if gasoline selected gasoline checkboxes enable\r\n model.config.email.hornKit = utils.getCheckboxValueForEmail(elements.accessories.gasoline.hornKitCheckbox);\r\n model.config.email.backupAlarm = utils.getCheckboxValueForEmail(elements.accessories.gasoline.alarmCheckbox);\r\n model.config.email.parkingBrakeAlarm = utils.getCheckboxValueForEmail(elements.accessories.gasoline.parkingAlarmCheckbox);\r\n model.config.email.underHoodBox = utils.getCheckboxValueForEmail(elements.accessories.gasoline.underHoodBoxCheckbox);\r\n model.config.email.powerKit = utils.getCheckboxValueForEmail(elements.accessories.gasoline.powerKitCheckbox);\r\n model.config.email.ramBall = utils.getCheckboxValueForEmail(elements.accessories.gasoline.ramBallCheckbox);\r\n model.config.email.sparkArrestor = utils.getCheckboxValueForEmail(elements.accessories.gasoline.sparkArrestorCheckbox);\r\n\r\n model.config.link.hornKit = utils.getCheckboxValueForLink(elements.accessories.gasoline.hornKitCheckbox);\r\n model.config.link.backupAlarm = utils.getCheckboxValueForLink(elements.accessories.gasoline.alarmCheckbox);\r\n model.config.link.parkingBrakeAlarm = utils.getCheckboxValueForLink(elements.accessories.gasoline.parkingAlarmCheckbox);\r\n model.config.link.underHoodBox = utils.getCheckboxValueForLink(elements.accessories.gasoline.underHoodBoxCheckbox);\r\n model.config.link.powerKit = utils.getCheckboxValueForLink(elements.accessories.gasoline.powerKitCheckbox);\r\n model.config.link.ramBall = utils.getCheckboxValueForLink(elements.accessories.gasoline.ramBallCheckbox);\r\n model.config.link.sparkArrestor = utils.getCheckboxValueForLink(elements.accessories.gasoline.sparkArrestorCheckbox);\r\n\r\n if (elements.accessories.gasoline.signalLightsCheckbox.checked) {\r\n utils.display(elements.accessories.gasoline.signalLightsRadiosContainer);\r\n\r\n model.config.email.signalLights = utils.getRadioValueForEmail([\r\n elements.accessories.gasoline.homoligationLightRadio,\r\n elements.accessories.gasoline.breakLightRadio\r\n ]);\r\n\r\n model.config.link.signalLightsCheckbox = utils.getCheckboxValueForLink(elements.accessories.gasoline.signalLightsCheckbox);\r\n\r\n model.config.link.signalLights = utils.getRadioValueForLink([\r\n elements.accessories.gasoline.homoligationLightRadio,\r\n elements.accessories.gasoline.breakLightRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.accessories.gasoline.signalLightsRadiosContainer);\r\n utils.selectElement(elements.accessories.gasoline.homoligationLightRadio);\r\n utils.unselectElement(elements.accessories.gasoline.breakLightRadio);\r\n\r\n model.config.link.signalLightsCheckbox = '';\r\n model.config.email.signalLights = '';\r\n model.config.link.signalLights = '';\r\n }\r\n }\r\n\r\n // Signaling, Alarms, and Accessories images rules\r\n if (elements.accessories.gasoline.signalLightsCheckbox.checked) {\r\n if (model.config.email.currentBed === 'Cargo Bed (07046)') {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.homoligationLightRadio, images.lightkitHomoligationContainer, imageUrls.homoligationCargo);\r\n\r\n if (model.config.email.brushGuard !== '' && !elements.accessories.gasoline.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.breakLightRadio, images.lightkitContainer, imageUrls.lightkitBrushguardCargo);\r\n } else if (!elements.accessories.gasoline.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.breakLightRadio, images.lightkitContainer, imageUrls.lightkitCargo);\r\n }\r\n } else {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.homoligationLightRadio, images.lightkitHomoligationContainer, imageUrls.homoligationFlatBed);\r\n\r\n if (model.config.email.brushGuard !== '' && !elements.accessories.gasoline.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.breakLightRadio, images.lightkitContainer, imageUrls.lightkitBrushguardFlatBed);\r\n } else if (!elements.accessories.gasoline.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.breakLightRadio, images.lightkitContainer, imageUrls.lightkitFlatBed);\r\n }\r\n }\r\n } else if (elements.accessories.electric.signalLightsCheckbox.checked) {\r\n if (model.config.email.currentBed === 'Cargo Bed (07046)') {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.homoligationLightRadio, images.lightkitHomoligationContainer, imageUrls.homoligationCargo);\r\n\r\n if (model.config.email.brushGuard !== '' && !elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.breakLightRadio, images.lightkitContainer, imageUrls.lightkitBrushguardCargo);\r\n } else if (!elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.breakLightRadio, images.lightkitContainer, imageUrls.lightkitCargo);\r\n }\r\n } else {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.homoligationLightRadio, images.lightkitHomoligationContainer, imageUrls.homoligationFlatBed);\r\n\r\n if (model.config.email.brushGuard !== '' && !elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.breakLightRadio, images.lightkitContainer, imageUrls.lightkitBrushguardFlatBed);\r\n } else if (!elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.breakLightRadio, images.lightkitContainer, imageUrls.lightkitFlatBed);\r\n }\r\n }\r\n } else {\r\n utils.hideImage(images.lightkitHomoligationContainer);\r\n utils.hideImage(images.lightkitContainer);\r\n }\r\n\r\n // corner images\r\n if (elements.accessories.gasoline.hornKitCheckbox.checked || elements.accessories.electric.hornKitCheckbox.checked) {\r\n elements.cornerImages.hornKitContainer.className = 'active';\r\n } else {\r\n elements.cornerImages.hornKitContainer.className = '';\r\n }\r\n\r\n if (elements.accessories.gasoline.ramBallCheckbox.checked || elements.accessories.electric.ramBallCheckbox.checked) {\r\n elements.cornerImages.ramMountBallContainer.className = 'active';\r\n } else {\r\n elements.cornerImages.ramMountBallContainer.className = '';\r\n }\r\n\r\n if (elements.accessories.gasoline.underHoodBoxCheckbox.checked || elements.accessories.electric.underHoodBoxCheckbox.checked) {\r\n elements.cornerImages.underHoodContainer.className = 'active';\r\n } else {\r\n elements.cornerImages.underHoodContainer.className = '';\r\n }\r\n\r\n }\r\n\r\n return {\r\n engineRules: engineRules,\r\n bedRules: bedRules,\r\n bedRules2pext: bedRules2pext,\r\n seatsRules: seatsRules,\r\n seatsRules4p: seatsRules4p,\r\n canopyRules4p: canopyRules4p,\r\n canopyRules2p: canopyRules2p,\r\n canopyRules2pext: canopyRules2pext,\r\n frontAttachmentsRules: frontAttachmentsRules,\r\n rearAttachmentsRules: rearAttachmentsRules,\r\n tiresRules: tiresRules,\r\n accessoriesRules: accessoriesRules\r\n };\r\n}());\r\n\nvar defaultValues = (function () {\r\n var baseConfigs = {\r\n fourPassengers: {\r\n defaultImages: {\r\n baseImg: 'url(\"images/4p_base_gas.png\")'\r\n },\r\n defaultLink: {\r\n engine: 'ge-4p',\r\n seatsFront: 'besf-4p',\r\n seatsBack: 'besb-4p',\r\n tires: 'tt-4p'\r\n }\r\n },\r\n twoPassengers: {\r\n defaultImages: {\r\n baseImg: 'url(\"images/2p_base_gas.png\")'\r\n },\r\n defaultLink: {\r\n engine: 'ge-2p',\r\n bed: 'cb-2p',\r\n seats: 'bes-2p',\r\n tires: 'tt-2p'\r\n }\r\n },\r\n twoPassengersExtended: {\r\n defaultImages: {\r\n baseImg: 'url(\"images/2pext_base_gas.png\")'\r\n },\r\n defaultLink: {\r\n engine: 'ge-2pext',\r\n bed: 'fb-2pext',\r\n seats: 'bes-2pext',\r\n tires: 'tt-2pext'\r\n }\r\n }\r\n };\r\n\r\n var baseImageContainer = utils.selectDomElement('#base-img');\r\n\r\n function setDefaultImages4p() {\r\n utils.displayImage(baseImageContainer, baseConfigs.fourPassengers.defaultImages.baseImg);\r\n }\r\n\r\n function setDefaultImages2p() {\r\n utils.displayImage(baseImageContainer, baseConfigs.twoPassengers.defaultImages.baseImg);\r\n }\r\n\r\n function setDefaultImages2pext() {\r\n utils.displayImage(baseImageContainer, baseConfigs.twoPassengersExtended.defaultImages.baseImg);\r\n }\r\n\r\n function setDefaultsLink4p() {\r\n model.config.link.currentEngine = baseConfigs.fourPassengers.defaultLink.engine;\r\n model.config.link.seatFront = baseConfigs.fourPassengers.defaultLink.seatsFront;\r\n model.config.link.seatBack = baseConfigs.fourPassengers.defaultLink.seatsBack;\r\n model.config.link.tires = baseConfigs.fourPassengers.defaultLink.tires;\r\n }\r\n\r\n function setDefaultsLink2p() {\r\n model.config.link.currentEngine = baseConfigs.twoPassengers.defaultLink.engine;\r\n model.config.link.currentBed = baseConfigs.twoPassengers.defaultLink.bed;\r\n model.config.link.seat = baseConfigs.twoPassengers.defaultLink.seats;\r\n model.config.link.tires = baseConfigs.twoPassengers.defaultLink.tires;\r\n }\r\n\r\n function setDefaultsLink2pext() {\r\n model.config.link.currentEngine = baseConfigs.twoPassengersExtended.defaultLink.engine;\r\n model.config.link.currentBed = baseConfigs.twoPassengersExtended.defaultLink.bed;\r\n model.config.link.seat = baseConfigs.twoPassengersExtended.defaultLink.seats;\r\n model.config.link.tires = baseConfigs.twoPassengersExtended.defaultLink.tires;\r\n }\r\n\r\n function selectDefaultsChecks4p(elements) {\r\n utils.selectElement(elements.engine.gasolineRadio);\r\n utils.selectElement(elements.bed.cargoRadio);\r\n utils.selectElement(elements.seat.benchSeatFrontRadio);\r\n utils.selectElement(elements.seat.benchSeatBackRadio);\r\n utils.selectElement(elements.rear.rearNoneRadio);\r\n utils.selectElement(elements.tires.trufRadio);\r\n }\r\n\r\n function selectDefaultsChecks2p(elements) {\r\n utils.selectElement(elements.engine.gasolineRadio);\r\n utils.selectElement(elements.bed.cargoRadio);\r\n utils.selectElement(elements.seat.benchSeatRadio);\r\n utils.selectElement(elements.canopy.canopyNoneRadio);\r\n utils.selectElement(elements.rear.rearNoneRadio);\r\n utils.selectElement(elements.tires.trufRadio);\r\n }\r\n\r\n function selectDefaultsChecks2pext(elements) {\r\n utils.selectElement(elements.engine.gasolineRadio);\r\n utils.selectElement(elements.bed.flatbed);\r\n utils.selectElement(elements.bed.electricLiftKit12v);\r\n utils.selectElement(elements.bed.electricLiftKit48v);\r\n utils.selectElement(elements.seat.benchSeatRadio);\r\n utils.selectElement(elements.canopy.canopyNoneRadio);\r\n utils.selectElement(elements.rear.rearNoneRadio);\r\n utils.selectElement(elements.tires.trufRadio);\r\n }\r\n\r\n return {\r\n setDefaultsLink4p: setDefaultsLink4p,\r\n setDefaultsLink2p: setDefaultsLink2p,\r\n setDefaultsLink2pext: setDefaultsLink2pext,\r\n setDefaultImages4p: setDefaultImages4p,\r\n setDefaultImages2p: setDefaultImages2p,\r\n setDefaultImages2pext: setDefaultImages2pext,\r\n selectDefaultsChecks4p: selectDefaultsChecks4p,\r\n selectDefaultsChecks2p: selectDefaultsChecks2p,\r\n selectDefaultsChecks2pext: selectDefaultsChecks2pext\r\n };\r\n}());\r\n\nvar fourPassengersHandler = (function () {\r\n\r\n // Selected DOM elements needed for implementing 4 passengers base model menu options and image preview \r\n var elements = {\r\n engine: {\r\n gasolineRadio: utils.selectDomElement('#gasoline-engine-4p-radio'),\r\n electricRadio: utils.selectDomElement('#electric-engine-4p-radio')\r\n },\r\n bed: {\r\n cargoRadio: utils.selectDomElement('#cargo-bed-4p-radio'),\r\n flat4ftRadio: utils.selectDomElement('#flat-bed-4ft-4p-radio'),\r\n cargoSubTitle: utils.selectDomElement('#sub-title-cargo-bed-4p'),\r\n lTrackKitCheckbox: utils.selectDomElement('#l-track-4p-checkbox'),\r\n lKitRadiosContainer: utils.selectDomElement('#l-kit-4p-radios'),\r\n lTrack6inRadio: utils.selectDomElement('#l-track-6in-4p-radio'),\r\n lTrack2inRadio: utils.selectDomElement('#l-track-2in-4p-radio'),\r\n bedRackingCheckbox: utils.selectDomElement('#bed-racking-4p-checkbox'),\r\n bedRackingRadiosContainer: utils.selectDomElement('#bed-racking-4p-radios'),\r\n bedRackingNoneRadio: utils.selectDomElement('#bed-racking-none-4p-radio'),\r\n bedRackingSmallRadio: utils.selectDomElement('#bed-racking-small-4p-radio'),\r\n bedRackingLargeRadio: utils.selectDomElement('#bed-racking-large-4p-radio'),\r\n electricLiftKit12v: utils.selectDomElement('#electric-lift-kit-12v-4p-checkbox'),\r\n electricLiftKit48v: utils.selectDomElement('#electric-lift-kit-48v-4p-checkbox')\r\n },\r\n seat: {\r\n benchSeatFrontRadio: utils.selectDomElement('#bench-seat-front-4p-radio'),\r\n benchSeatBackRadio: utils.selectDomElement('#bench-seat-back-4p-radio'),\r\n bucketSeatFrontRadio: utils.selectDomElement('#bucket-seat-front-4p-radio'),\r\n bucketSeatBackRadio: utils.selectDomElement('#bucket-seat-back-4p-radio'),\r\n seatCoverFrontCheckbox: utils.selectDomElement('#seat-cover-front-4p-checkbox'),\r\n seatCoverBackCheckbox: utils.selectDomElement('#seat-cover-back-4p-checkbox')\r\n },\r\n canopy: {\r\n canopyCheckbox: utils.selectDomElement('#canopy-4p-checkbox'),\r\n canopyAttachmentsContainer: utils.selectDomElement('#canopy-attachments-4p'),\r\n canopyWindshieldCheckbox: utils.selectDomElement('#canopy-windshield-4p-checkbox'),\r\n exteriorMirrorsCheckbox: utils.selectDomElement('#exterior-mirrors-4p-checkbox'),\r\n interiorMirrorNoneRadio: utils.selectDomElement('#mirrors-none-4p-radio'),\r\n interiorMirrorStandardRadio: utils.selectDomElement('#standard-interior-mirror-4p-radio'),\r\n interiorMirrorAngleRadio: utils.selectDomElement('#wide-angle-mirror-4p-radio'),\r\n interiorMirrorWinkRadio: utils.selectDomElement('#wink-interior-mirror-4p-radio')\r\n },\r\n front: {\r\n brushGuardCheckbox: utils.selectDomElement('#brush-guard-4p-checkbox'),\r\n brushGuardFrontCheckbox: utils.selectDomElement('#brush-guard-front-4p-checkbox'),\r\n frontReceiverCheckbox: utils.selectDomElement('#front-receiver-4p-checkbox'),\r\n frontAttachmentsContainer: utils.selectDomElement('#front-attachments-panel-4p'),\r\n frontNoneRadio: utils.selectDomElement('#front-none-4p-radio'),\r\n hoseReelRadio: utils.selectDomElement('#house-reel-4p-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-4p-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-4p-radio')\r\n },\r\n rear: {\r\n rearNoneRadio: utils.selectDomElement('#rear-none-4p-radio'),\r\n hoseRealRadio: utils.selectDomElement('#hose-reel-mount-4p-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-mount-4p-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-mount-4p-radio')\r\n },\r\n tires: {\r\n trufRadio: utils.selectDomElement('#truf-tires-4p-radio'),\r\n aggressiveTrufRadio: utils.selectDomElement('#aggressive-truf-tires-4p-radio'),\r\n atvRadio: utils.selectDomElement('#atv-tire-kit-4p-radio')\r\n },\r\n accessories: {\r\n gasoline: {\r\n gasolineAccessoriesContainer: utils.selectDomElement('#saa-gasoline-panel-4p'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-gasoline-4p-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-gasoline-4p-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-gasoline-4p-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-gasoline-4p-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-gasoline-4p-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-gasoline-4p-checkbox'),\r\n parkingAlarmCheckbox: utils.selectDomElement('#parking-brake-alarm-gasoline-4p-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-gasoline-4p-checkbox'),\r\n powerKitCheckbox: utils.selectDomElement('#power-kit-gasoline-4p-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-gasoline-4p-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-gasoline-4p-checkbox')\r\n },\r\n electric: {\r\n electricAccessoriesContainer: utils.selectDomElement('#saa-electric-panel-4p'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-electric-4p-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-electric-4p-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-electric-4p-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-electric-4p-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-electric-4p-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-electric-4p-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-electric-4p-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-electric-4p-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-electric-4p-checkbox')\r\n }\r\n },\r\n cornerImages: {\r\n hornKitContainer: utils.selectDomElement('#horn-kit-thumb'),\r\n hoseReelContainer: utils.selectDomElement('#hose-reel-thumb'),\r\n hoseReelRearContainer: utils.selectDomElement('#hose-reel-rear-thumb'),\r\n bedRackingQuickfistContainer: utils.selectDomElement('#quickfist-grip-thumb'),\r\n bedRackingQuickfistLargeContainer: utils.selectDomElement('#quickfist-grip-large-thumb'),\r\n ramMountBallContainer: utils.selectDomElement('#ram-mount-ball-thumb'),\r\n underHoodContainer: utils.selectDomElement('#under-hood-thumb'),\r\n walkSpreaderFrontContainer: utils.selectDomElement('#walk-spreader-front-thumb'),\r\n walkSpreaderContainer: utils.selectDomElement('#walk-spreader-thumb'),\r\n lTrack2inContainer: utils.selectDomElement('#l-track-2in-thumb'),\r\n lTrack6inContainer: utils.selectDomElement('#l-track-6in-thumb')\r\n }\r\n };\r\n\r\n // Images for 4 passengers base model\r\n var imageUrls = {\r\n electricEngine: 'url(\"images/4p_electric.png\")',\r\n cargobed: 'url(\"images/4p_bed_cargobed_.png\")',\r\n flatBed4ft: 'url(\"images/4p_bed_4ftflat.png\")',\r\n bedRacking: 'url(\"images/4p_bed_cargobed_bedracking.png\")',\r\n benchSeatFront: 'url(\"images/4p_seat_front_bench.png\")',\r\n benchSeatBack: 'url(\"images/4p_seat_back_bench.png\")',\r\n bucketSeatFront: 'url(\"images/4p_seat_front_bucket.png\")',\r\n bucketSeatBack: 'url(\"images/4p_seat_back_bucket.png\")',\r\n canopy: 'url(\"images/4p_cnc_canopy_.png\")',\r\n canopyWindshield: 'url(\"images/4p_cnc_canopy_windshield.png\")',\r\n exteriorMirrors: 'url(\"images/ext_cnc_canopy_extmirror.png\")',\r\n interiorMirrorStandard: 'url(\"images/ext_cnc_canopy_standardintmirror.png\")',\r\n interiorMirrorAngle: 'url(\"images/ext_cnc_canopy_wideangleintmirror.png\")',\r\n interiorMirrorWink: 'url(\"images/4p_cnc_canopy_winkintmirror.png\")',\r\n brushGuard: 'url(\"images/ext_front_brushguard.png\")',\r\n brushGuardFront: 'url(\"images/ext_front_bgfrontreciever.png\")',\r\n frontReceiver: 'url(\"images/ext_front_frontreciever.png\")',\r\n hoseReel: 'url(\"images/ext_front_hosereel.png\")',\r\n trashCan: 'url(\"images/ext_front_trashcan.png\")',\r\n walkSpreader: 'url(\"images/ext_front_walkspreader_up.png\")',\r\n trashCanRear: 'url(\"images/ext_rear_trashcan.png\")',\r\n hoseRear: 'url(\"images/ext_rear_hosereel.png\")',\r\n walkSpreaderRear: 'url(\"images/ext_rear_walkspreader_up.png\")',\r\n truf: 'url(\"images/ext_tires_turf.png\")',\r\n atv: 'url(\"images/ext_tires_atv.png\")',\r\n aggressive: 'url(\"images/ext_tires_aggressiveturf.png\")',\r\n homoligationCargo: 'url(\"images/4p_lightkit_cargobed_homoligation.png\")',\r\n lightkitCargo: 'url(\"images/4p_lightkit_cargobed.png\")',\r\n lightkitBrushguardCargo: 'url(\"images/4p_lightkit_cargobed_brushguard.png\")',\r\n homoligationFlatBed: 'url(\"images/4p_lightkit_4ftflatbed_homoligation.png\")',\r\n lightkitFlatBed: 'url(\"images/4p_lightkit_4ftflatbed.png\")',\r\n lightkitBrushguardFlatBed: 'url(\"images/4p_lightkit_4ftflatbed_brushguard.png\")'\r\n };\r\n\r\n // reset model.config and set default email and link selections\r\n // apply model rules\r\n function rulesHandler() {\r\n model.config.base = '4 Passenger (Standard + Extension Kit) (07049)';\r\n\r\n model.config.email = {\r\n currentEngine: '429cc Gasoline Engine (07042)',\r\n currentBed: 'Cargo Bed (07046)'\r\n };\r\n\r\n model.config.link = {};\r\n model.config.link.currentEngine = '#ge-4p';\r\n model.config.link.currentBed = '#cb-4p';\r\n model.config.link.tires = '#tt-4p';\r\n\r\n rules.engineRules(elements, imageUrls);\r\n rules.bedRules(elements, imageUrls);\r\n rules.seatsRules4p(elements, imageUrls);\r\n rules.canopyRules4p(elements, imageUrls);\r\n rules.frontAttachmentsRules(elements, imageUrls);\r\n rules.rearAttachmentsRules(elements, imageUrls);\r\n rules.tiresRules(elements, imageUrls);\r\n rules.accessoriesRules(elements, imageUrls);\r\n }\r\n\r\n return {\r\n rulesHandler: rulesHandler,\r\n elements: elements,\r\n imageUrls: imageUrls\r\n };\r\n}());\r\n\nvar twoPassengersHandler = (function () {\r\n var elements = {\r\n engine: {\r\n gasolineRadio: utils.selectDomElement('#gasoline-engine-2p-radio'),\r\n electricRadio: utils.selectDomElement('#electric-engine-2p-radio')\r\n },\r\n bed: {\r\n cargoRadio: utils.selectDomElement('#cargo-bed-2p-radio'),\r\n flat4ftRadio: utils.selectDomElement('#flat-bed-4ft-2p-radio'),\r\n cargoSubTitle: utils.selectDomElement('#sub-title-cargo-bed-2p'),\r\n lTrackKitCheckbox: utils.selectDomElement('#l-track-2p-checkbox'),\r\n lKitRadiosContainer: utils.selectDomElement('#l-kit-2p-radios'),\r\n lTrack6inRadio: utils.selectDomElement('#l-track-6in-2p-radio'),\r\n lTrack2inRadio: utils.selectDomElement('#l-track-2in-2p-radio'),\r\n bedRackingCheckbox: utils.selectDomElement('#bed-racking-2p-checkbox'),\r\n bedRackingRadiosContainer: utils.selectDomElement('#bed-racking-2p-radios'),\r\n bedRackingNoneRadio: utils.selectDomElement('#bed-racking-none-2p-radio'),\r\n bedRackingSmallRadio: utils.selectDomElement('#bed-racking-small-2p-radio'),\r\n bedRackingLargeRadio: utils.selectDomElement('#bed-racking-large-2p-radio'),\r\n electricLiftKit12v: utils.selectDomElement('#electric-lift-kit-12v-2p-checkbox'),\r\n electricLiftKit48v: utils.selectDomElement('#electric-lift-kit-48v-2p-checkbox')\r\n },\r\n seat: {\r\n benchSeatRadio: utils.selectDomElement('#bench-seat-2p-radio'),\r\n bucketSeatRadio: utils.selectDomElement('#bucket-seat-2p-radio'),\r\n seatCoverCheckbox: utils.selectDomElement('#seat-cover-2p-checkbox')\r\n },\r\n canopy: {\r\n canopyNoneRadio: utils.selectDomElement('#cab-and-canopy-none-2p-radio'),\r\n canopyTwoSeatRadio: utils.selectDomElement('#canopy-2seat-2p-radio'),\r\n ropsCabRadio: utils.selectDomElement('#rops-cab-2p-radio'),\r\n ropsTwoPostCabRadio: utils.selectDomElement('#rops-2post-cab-2p-radio'),\r\n ropsTwoPostCabWithCanopyRadio: utils.selectDomElement('#rops-2post-cab-with-canopy-2p-radio'),\r\n canopyTwoSeatsContainer: utils.selectDomElement('#canopy-attachments-2cs-2p'),\r\n\r\n canopyTwoSeatsWindshieldCheckbox: utils.selectDomElement('#canopy-windshield-2cs-2p-checkbox'),\r\n exteriorTwoSeatsMirrorsCheckbox: utils.selectDomElement('#exterior-mirrors-2cs-2p-checkbox'),\r\n interiorTwoSeatsMirrorNoneRadio: utils.selectDomElement('#mirrors-none-2cs-2p-radio'),\r\n interiorTwoSeatsMirrorStandardRadio: utils.selectDomElement('#standard-interior-mirror-2cs-2p-radio'),\r\n interiorTwoSeatsMirrorAngleRadio: utils.selectDomElement('#wide-angle-mirror-2cs-2p-radio'),\r\n interiorTwoSeatsMirrorWinkRadio: utils.selectDomElement('#wink-interior-mirror-2cs-2p-radio'),\r\n canopyRopsContainer: utils.selectDomElement('#canopy-attachments-rops-2p'),\r\n\r\n canopyRopsWindshieldCheckbox: utils.selectDomElement('#canopy-windshield-rops-2p-checkbox'),\r\n exteriorRopsMirrorsCheckbox: utils.selectDomElement('#exterior-mirrors-rops-2p-checkbox'),\r\n interiorRopsMirrorNoneRadio: utils.selectDomElement('#mirrors-none-rops-2p-radio'),\r\n interiorRopsMirrorStandardRadio: utils.selectDomElement('#standard-interior-mirror-rops-2p-radio'),\r\n interiorRopsMirrorAngleRadio: utils.selectDomElement('#wide-angle-mirror-rops-2p-radio'),\r\n interiorRopsMirrorWinkRadio: utils.selectDomElement('#wink-interior-mirror-rops-2p-radio'),\r\n ropsAttachments: utils.selectDomElement('#rops-attachments-2p'),\r\n\r\n ropsInteriorMirrorNoneRadio: utils.selectDomElement('#rob-mirrors-none-2p-radio'),\r\n ropsInterMirrorStandardRadio: utils.selectDomElement('#rob-interior-mirrors-none-2p-radio'),\r\n ropsInteriorMirrorAngleRadio: utils.selectDomElement('#rob-wide-angle-interior-mirrors-none-2p-radio'),\r\n\r\n cabDoorCheckbox: utils.selectDomElement('#cab-dor-kit-2p-checkbox'),\r\n washerBottleCheckbox: utils.selectDomElement('#washer-bottle-2p-checkbox'),\r\n beaconLightCheckbox: utils.selectDomElement('#beacon-light-kit-2p-checkbox'),\r\n ledLightCheckbox: utils.selectDomElement('#led-work-light-kit-2p-checkbox'),\r\n ropsExteriorMirrorsCheckbox: utils.selectDomElement('#rob-exterior-mirrors-2p-checkbox')\r\n },\r\n front: {\r\n brushGuardCheckbox: utils.selectDomElement('#brush-guard-2p-checkbox'),\r\n brushGuardFrontCheckbox: utils.selectDomElement('#brush-guard-front-2p-checkbox'),\r\n frontReceiverCheckbox: utils.selectDomElement('#front-receiver-2p-checkbox'),\r\n frontAttachmentsContainer: utils.selectDomElement('#front-attachments-panel-2p'),\r\n frontNoneRadio: utils.selectDomElement('#front-none-2p-radio'),\r\n hoseReelRadio: utils.selectDomElement('#house-reel-2p-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-2p-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-2p-radio')\r\n },\r\n rear: {\r\n rearNoneRadio: utils.selectDomElement('#rear-none-2p-radio'),\r\n hoseRealRadio: utils.selectDomElement('#hose-reel-mount-2p-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-mount-2p-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-mount-2p-radio')\r\n },\r\n tires: {\r\n trufRadio: utils.selectDomElement('#truf-tires-2p-radio'),\r\n aggressiveTrufRadio: utils.selectDomElement('#aggressive-truf-tires-2p-radio'),\r\n atvRadio: utils.selectDomElement('#atv-tire-kit-2p-radio')\r\n },\r\n accessories: {\r\n gasoline: {\r\n gasolineAccessoriesContainer: utils.selectDomElement('#saa-gasoline-panel-2p'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-gasoline-2p-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-gasoline-2p-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-gasoline-2p-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-gasoline-2p-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-gasoline-2p-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-gasoline-2p-checkbox'),\r\n parkingAlarmCheckbox: utils.selectDomElement('#parking-brake-alarm-gasoline-2p-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-gasoline-2p-checkbox'),\r\n powerKitCheckbox: utils.selectDomElement('#power-kit-gasoline-2p-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-gasoline-2p-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-gasoline-2p-checkbox')\r\n },\r\n electric: {\r\n electricAccessoriesContainer: utils.selectDomElement('#saa-electric-panel-2p'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-electric-2p-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-electric-2p-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-electric-2p-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-electric-2p-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-electric-2p-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-electric-2p-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-electric-2p-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-electric-2p-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-electric-2p-checkbox')\r\n }\r\n },\r\n cornerImages: {\r\n hornKitContainer: utils.selectDomElement('#horn-kit-thumb'),\r\n hoseReelContainer: utils.selectDomElement('#hose-reel-thumb'),\r\n hoseReelRearContainer: utils.selectDomElement('#hose-reel-rear-thumb'),\r\n bedRackingQuickfistContainer: utils.selectDomElement('#quickfist-grip-thumb'),\r\n bedRackingQuickfistLargeContainer: utils.selectDomElement('#quickfist-grip-large-thumb'),\r\n ramMountBallContainer: utils.selectDomElement('#ram-mount-ball-thumb'),\r\n underHoodContainer: utils.selectDomElement('#under-hood-thumb'),\r\n walkSpreaderFrontContainer: utils.selectDomElement('#walk-spreader-front-thumb'),\r\n walkSpreaderContainer: utils.selectDomElement('#walk-spreader-thumb'),\r\n lTrack2inContainer: utils.selectDomElement('#l-track-2in-thumb'),\r\n lTrack6inContainer: utils.selectDomElement('#l-track-6in-thumb')\r\n }\r\n };\r\n\r\n var imageUrls = {\r\n electricEngine: 'url(\"images/2p_electric.png\")',\r\n cargobed: 'url(\"images/2p_bed_cargobed_.png\")',\r\n flatBed4ft: 'url(\"images/2p_bed_4ftflat.png\")',\r\n bedRacking: 'url(\"images/2p_bed_cargobed_bedracking.png\")',\r\n benchSeat: 'url(\"images/2p_seat_bench.png\")',\r\n bucketSeat: 'url(\"images/2p_seat_bucket.png\")',\r\n canopy: 'url(\"images/2p_cnc_canopy_.png\")',\r\n ropsCab: 'url(\"images/2p_cnc_ROPScab_.png\")',\r\n rops: 'url(\"images/2p_cnc_ROPS.png\")',\r\n ropsCanopy: 'url(\"images/2p_cnc_ROPScanopy_.png\")',\r\n canopyWindshield: 'url(\"images/2p_cnc_canopy_windshield.png\")',\r\n exteriorMirrors: 'url(\"images/2p_cnc_canopy_extmirror.png\")',\r\n interiorMirrorStandard: 'url(\"images/2p_cnc_canopy_standardintmirror.png\")',\r\n interiorMirrorAngle: 'url(\"images/2p_cnc_canopy_wideangleintmirror.png\")',\r\n interiorMirrorWink: 'url(\"images/2p_cnc_canopy_winkintmirror.png\")',\r\n ropsFrontDoor: 'url(\"images/2p_cnc_ROPScab_door_front.png\")',\r\n ropsBackDoor: 'url(\"images/2p_cnc_ROPScab_door_back.png\")',\r\n beaconLight: 'url(\"images/2p_cnc_ROPScab_beaconlight.png\")',\r\n LedLights: 'url(\"images/2p_cnc_ROPScab_LEDlights.png\")',\r\n ropsExteriorMirror: 'url(\"images/2pext_cnc_ROPScab_extmirror.png\")',\r\n ropsStandardMirror: 'url(\"images/2p_cnc_ROPScab_standardintmirror.png\")',\r\n ropsAngleMirror: 'url(\"images/2p_cnc_ROPScab_wideangleintmirror.png\")',\r\n brushGuard: 'url(\"images/ext_front_brushguard.png\")',\r\n brushGuardFront: 'url(\"images/2p_front_bgfrontreciever.png\")',\r\n frontReceiver: 'url(\"images/2p_front_frontreciever.png\")',\r\n hoseReel: 'url(\"images/2p_front_hosereel.png\")',\r\n trashCan: 'url(\"images/2p_front_trashcan.png\")',\r\n walkSpreader: 'url(\"images/2p_front_walkspreader_up.png\")',\r\n hoseRear: 'url(\"images/2p_rear_hosereel.png\")',\r\n trashCanRear: 'url(\"images/2p_rear_trashcan.png\")',\r\n walkSpreaderRear: 'url(\"images/2p_rear_walkspreader_up.png\")',\r\n truf: 'url(\"images/2p_tires_turf.png\")',\r\n atv: 'url(\"images/2p_tires_atv.png\")',\r\n aggressive: 'url(\"images/2p_tires_aggressiveturf.png\")',\r\n homoligationCargo: 'url(\"images/2p_lightkit_cargobed_homoligation.png\")',\r\n lightkitCargo: 'url(\"images/2p_lightkit_cargobed.png\")',\r\n lightkitBrushguardCargo: 'url(\"images/2p_lightkit_cargobed_brushguard.png\")',\r\n homoligationFlatBed: 'url(\"images/2p_lightkit_4ftflatbed_homoligation.png\")',\r\n lightkitFlatBed: 'url(\"images/2p_lightkit_4ftflatbed.png\")',\r\n lightkitBrushguardFlatBed: 'url(\"images/2p_lightkit_4ftflatbed_brushguard.png\")'\r\n };\r\n\r\n // reset model.config and set default email and link selections\r\n // apply model rules\r\n function rulesHandler() {\r\n model.config.base = '2 Passenger (Standard)';\r\n\r\n model.config.email = {\r\n currentEngine: '429cc Gasoline Engine (07042)',\r\n currentBed: 'Cargo Bed (07046)'\r\n };\r\n\r\n model.config.link = {};\r\n model.config.link.currentEngine = '#ge-2p';\r\n model.config.link.currentBed = '#cb-2p';\r\n model.config.link.tires = '#tt-2p';\r\n\r\n rules.engineRules(elements, imageUrls);\r\n rules.bedRules(elements, imageUrls);\r\n rules.seatsRules(elements, imageUrls);\r\n rules.canopyRules2p(elements, imageUrls);\r\n rules.frontAttachmentsRules(elements, imageUrls);\r\n rules.rearAttachmentsRules(elements, imageUrls);\r\n rules.tiresRules(elements, imageUrls);\r\n rules.accessoriesRules(elements, imageUrls);\r\n }\r\n\r\n return {\r\n rulesHandler: rulesHandler,\r\n elements: elements\r\n };\r\n}());\r\n\nvar twoPassengersExtHandler = (function () {\r\n var elements = {\r\n engine: {\r\n gasolineRadio: utils.selectDomElement('#gasoline-engine-2pext-radio'),\r\n electricRadio: utils.selectDomElement('#electric-engine-2pext-radio')\r\n },\r\n bed: {\r\n flatbed: utils.selectDomElement('#flat-bed-6ft-2pext-radio'),\r\n electricLiftKit12v: utils.selectDomElement('#electric-lift-kit-12v-2pext-checkbox'),\r\n electricLiftKit48v: utils.selectDomElement('#electric-lift-kit-48v-2pext-checkbox')\r\n },\r\n seat: {\r\n benchSeatRadio: utils.selectDomElement('#bench-seat-2pext-radio'),\r\n bucketSeatRadio: utils.selectDomElement('#bucket-seat-2pext-radio'),\r\n seatCoverCheckbox: utils.selectDomElement('#seat-cover-2pext-checkbox')\r\n },\r\n canopy: {\r\n canopyNoneRadio: utils.selectDomElement('#cab-and-canopy-none-2pext-radio'),\r\n canopyTwoSeatRadio: utils.selectDomElement('#canopy-2seat-2pext-radio'),\r\n ropsCabRadio: utils.selectDomElement('#rops-cab-2pext-radio'),\r\n canopyAttachmentsRadiosContainer: utils.selectDomElement('#canopy-attachments-2pext'),\r\n canopyWindshieldCheckbox: utils.selectDomElement('#canopy-windshield-2pext-checkbox'),\r\n exteriorMirrorsCheckbox: utils.selectDomElement('#exterior-mirrors-2pext-checkbox'),\r\n interiorMirrorNoneRadio: utils.selectDomElement('#mirrors-none-2pext-radio'),\r\n interiorMirrorStandardRadio: utils.selectDomElement('#standard-interior-mirror-2pext-radio'),\r\n interiorMirrorAngleRadio: utils.selectDomElement('#wide-angle-mirror-2pext-radio'),\r\n interiorMirrorWinkRadio: utils.selectDomElement('#wink-interior-mirror-2pext-radio'),\r\n ropsRadiosContainer: utils.selectDomElement('#rops-attachments-2pext'),\r\n cabDoorCheckbox: utils.selectDomElement('#cab-dor-kit-2pext-checkbox'),\r\n washerBottleCheckbox: utils.selectDomElement('#washer-bottle-2pext-checkbox'),\r\n beaconLightCheckbox: utils.selectDomElement('#beacon-light-kit-2pext-checkbox'),\r\n ledLightCheckbox: utils.selectDomElement('#led-work-light-kit-2pext-checkbox'),\r\n ropsExteriorMirrorsCheckbox: utils.selectDomElement('#rob-exterior-mirrors-2pext-checkbox'),\r\n ropsInteriorMirrorNoneRadio: utils.selectDomElement('#rob-mirrors-none-2pext-radio'),\r\n ropsInterMirrorStandardRadio: utils.selectDomElement('#rob-interior-mirrors-none-2pext-radio'),\r\n ropsInteriorMirrorAngleRadio: utils.selectDomElement('#rob-wide-angle-interior-mirrors-none-2pext-radio')\r\n },\r\n front: {\r\n brushGuardCheckbox: utils.selectDomElement('#brush-guard-2pext-checkbox'),\r\n brushGuardFrontCheckbox: utils.selectDomElement('#brush-guard-front-2pext-checkbox'),\r\n frontReceiverCheckbox: utils.selectDomElement('#front-receiver-2pext-checkbox'),\r\n frontAttachmentsContainer: utils.selectDomElement('#front-attachments-panel-2pext'),\r\n frontNoneRadio: utils.selectDomElement('#front-none-2pext-radio'),\r\n hoseReelRadio: utils.selectDomElement('#house-reel-2pext-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-2pext-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-2pext-radio')\r\n },\r\n rear: {\r\n rearNoneRadio: utils.selectDomElement('#rear-none-2pext-radio'),\r\n hoseRealRadio: utils.selectDomElement('#hose-reel-mount-2pext-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-mount-2pext-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-mount-2pext-radio')\r\n },\r\n tires: {\r\n trufRadio: utils.selectDomElement('#truf-tires-2pext-radio'),\r\n aggressiveTrufRadio: utils.selectDomElement('#aggressive-truf-tires-2pext-radio'),\r\n atvRadio: utils.selectDomElement('#atv-tire-kit-2pext-radio')\r\n },\r\n accessories: {\r\n gasoline: {\r\n gasolineAccessoriesContainer: utils.selectDomElement('#saa-gasoline-panel-2pext'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-gasoline-2pext-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-gasoline-2pext-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-gasoline-2pext-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-gasoline-2pext-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-gasoline-2pext-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-gasoline-2pext-checkbox'),\r\n parkingAlarmCheckbox: utils.selectDomElement('#parking-brake-alarm-gasoline-2pext-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-gasoline-2pext-checkbox'),\r\n powerKitCheckbox: utils.selectDomElement('#power-kit-gasoline-2pext-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-gasoline-2pext-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-gasoline-2pext-checkbox')\r\n },\r\n electric: {\r\n electricAccessoriesContainer: utils.selectDomElement('#saa-electric-panel-2pext'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-electric-2pext-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-electric-2pext-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-electric-2pext-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-electric-2pext-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-electric-2pext-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-electric-2pext-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-electric-2pext-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-electric-2pext-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-electric-2pext-checkbox')\r\n }\r\n },\r\n cornerImages: {\r\n hornKitContainer: utils.selectDomElement('#horn-kit-thumb'),\r\n hoseReelContainer: utils.selectDomElement('#hose-reel-thumb'),\r\n hoseReelRearContainer: utils.selectDomElement('#hose-reel-rear-thumb'),\r\n bedRackingQuickfistContainer: utils.selectDomElement('#quickfist-grip-thumb'),\r\n bedRackingQuickfistLargeContainer: utils.selectDomElement('#quickfist-grip-large-thumb'),\r\n ramMountBallContainer: utils.selectDomElement('#ram-mount-ball-thumb'),\r\n underHoodContainer: utils.selectDomElement('#under-hood-thumb'),\r\n walkSpreaderFrontContainer: utils.selectDomElement('#walk-spreader-front-thumb'),\r\n walkSpreaderContainer: utils.selectDomElement('#walk-spreader-thumb'),\r\n lTrack2inContainer: utils.selectDomElement('#l-track-2in-thumb'),\r\n lTrack6inContainer: utils.selectDomElement('#l-track-6in-thumb')\r\n }\r\n };\r\n\r\n imageUrls = {\r\n electricEngine: 'url(\"images/ext_electric.png\")',\r\n benchSeat: 'url(\"images/2pext_seat_bench.png\")',\r\n bucketSeat: 'url(\"images/2pext_seat_bucket.png\")',\r\n canopy: 'url(\"images/2pext_cnc_canopy_.png\")',\r\n ropsCab: 'url(\"images/2pext_cnc_ROPScab.png\")',\r\n postRops: 'url(\"images/2pext_cnc_2postROPS.png\")',\r\n canopyWindshield: 'url(\"images/2pext_cnc_canopy_windshield.png\")',\r\n exteriorMirrors: 'url(\"images/ext_cnc_canopy_extmirror.png\")',\r\n interiorMirrorStandard: 'url(\"images/ext_cnc_canopy_standardintmirror.png\")',\r\n interiorMirrorAngle: 'url(\"images/ext_cnc_canopy_wideangleintmirror.png\")',\r\n interiorMirrorWink: 'url(\"images/ext_cnc_canopy_winkintmirror.png\")',\r\n ropsFrontDoor: 'url(\"images/2pext_cnc_ROPScab_door_front.png\")',\r\n ropsBackDoor: 'url(\"images/2p_cnc_ROPScab_door_back.png\")',\r\n beaconLight: 'url(\"images/2pext_cnc_ROPScab_beaconlight.png\")',\r\n ledLights: 'url(\"images/2pext_cnc_ROPScab_LEDlights.png\")',\r\n ropsExteriorMirror: 'url(\"images/2pext_cnc_ROPScab_extmirror.png\")',\r\n ropsStandardMirror: 'url(\"images/2pext_cnc_ROPScab_standardintmirror.png\")',\r\n ropsAngleMirror: 'url(\"images/2pext_cnc_ROPScab_wideangleintmirror.png\")',\r\n brushGuard: 'url(\"images/ext_front_brushguard.png\")',\r\n brushGuardFront: 'url(\"images/ext_front_bgfrontreciever.png\")',\r\n frontReceiver: 'url(\"images/ext_front_frontreciever.png\")',\r\n hoseReel: 'url(\"images/ext_front_hosereel.png\")',\r\n trashCan: 'url(\"images/ext_front_trashcan.png\")',\r\n walkSpreader: 'url(\"images/ext_front_walkspreader_up.png\")',\r\n hoseRear: 'url(\"images/2p_rear_hosereel.png\")',\r\n trashCanRear: 'url(\"images/ext_rear_trashcan.png\")',\r\n walkSpreaderRear: 'url(\"images/ext_rear_walkspreader_up.png\")',\r\n truf: 'url(\"images/ext_tires_turf.png\")',\r\n atv: 'url(\"images/ext_tires_atv.png\")',\r\n aggressive: 'url(\"images/ext_tires_aggressiveturf.png\")',\r\n homoligationCargo: '',\r\n lightkitCargo: '',\r\n lightkitBrushguardCargo: '',\r\n homoligationFlatBed: 'url(\"images/2pext_lightkit_homoligation.png\")',\r\n lightkitFlatBed: 'url(\"images/2pext_lightkit.png\")',\r\n lightkitBrushguardFlatBed: 'url(\"images/2pext_lightkit_brushguard.png\")'\r\n };\r\n\r\n // reset model.config and set default email and link selections\r\n // apply model rules\r\n function rulesHandler() {\r\n model.config.base = '2 Passenger (Standard + Extension Kit + 6ft Flat Bed) (07049, 07149)';\r\n\r\n model.config.email = {\r\n currentEngine: '429cc Gasoline Engine (07042)',\r\n currentBed: 'Cargo Bed (07046)'\r\n };\r\n model.config.email.currentBed = '6ft Flat Bed';\r\n\r\n model.config.link = {};\r\n model.config.link.currentEngine = '#ge-2pext';\r\n model.config.link.currentBed = '#fb-2pext';\r\n model.config.link.tires = '#tt-2pext';\r\n\r\n rules.engineRules(elements, imageUrls);\r\n rules.bedRules2pext(elements, imageUrls);\r\n rules.seatsRules(elements, imageUrls);\r\n rules.canopyRules2pext(elements, imageUrls);\r\n rules.frontAttachmentsRules(elements, imageUrls);\r\n rules.rearAttachmentsRules(elements, imageUrls);\r\n rules.tiresRules(elements, imageUrls);\r\n rules.accessoriesRules(elements, imageUrls);\r\n }\r\n\r\n return {\r\n rulesHandler: rulesHandler,\r\n elements: elements\r\n };\r\n}());\r\n\nvar dataHandler = (function () {\r\n 'use strict';\r\n\r\n var WEBSITE_URL = 'http://sites.toro.com/workman-gtx-configurator/';\r\n var resizingId;\r\n var dialog = utils.selectDomElement('#dialog-container');\r\n var emailBtn = utils.selectDomElement('#email-btn');\r\n var dialogImgCont = utils.selectDomElement('#dialog-img-cont');\r\n var transparentContainer = utils.selectDomElement('#transparent-container');\r\n var changeModelBtn = utils.selectDomElement('#header-title');\r\n var changeModelBtnIco = changeModelBtn.getElementsByClassName('fa')[0];\r\n var modelsDropDown = utils.selectDomElement('#models-drop-down');\r\n var modelsDropDownElements = Array.prototype.slice.call(modelsDropDown.getElementsByTagName('a'));\r\n var machineModelName = utils.selectDomElement('#machine-model-name');\r\n\r\n var baseModels = {\r\n fourPassengers: 'WorkmanGtx4Passenger',\r\n twoPassengers: 'WorkmanGtx2Passenger',\r\n twoPassengersExtended: 'WorkmanGtx2PassengerExtended'\r\n };\r\n\r\n var machineModel = {\r\n fourPassengers: 'Workman-Gtx-4-Passenger',\r\n twoPassengers: 'Workman-Gtx-2-Passenger',\r\n twoPassengersExtended: 'Workman-Gtx-2-Passenger-Extended'\r\n };\r\n\r\n var currentBaseModel = baseModels.fourPassengers;\r\n var currentMachineModel = machineModel.fourPassengers;\r\n\r\n var cornerImages = {\r\n buttons: {\r\n hornKitCorner: utils.selectDomElement('#horn-kit-button'),\r\n hoseReelCorner: utils.selectDomElement('#hose-reel-button'),\r\n hoseReelBackCorner: utils.selectDomElement('#hose-reel-rear-button'),\r\n bedRackingQuickfistCorner: utils.selectDomElement('#quickfist-grip-button'),\r\n bedRackingQuickfistLargeCorner: utils.selectDomElement('#quickfist-grip-large-button'),\r\n ramMountBallCorner: utils.selectDomElement('#ram-mount-ball-button'),\r\n underHoodCorner: utils.selectDomElement('#under-hood-button'),\r\n walkSpreaderFrontCorner: utils.selectDomElement('#walk-spreader-front-button'),\r\n walkSpreaderCorner: utils.selectDomElement('#walk-spreader-button'),\r\n lTrack2in: utils.selectDomElement('#l-track-2in-button'),\r\n lTrack6in: utils.selectDomElement('#l-track-6in-button')\r\n },\r\n imageUrls: {\r\n hornKitCorner: 'images/horn-kit.jpg\"',\r\n hoseReelCorner: 'images/hose-reel-mount.png',\r\n hoseReelBackCorner: 'images/hose-reel-mount.png', // or hosereel-rear.png\r\n bedRackingQuickfistCorner: 'images/quickfist-grip-mini.jpg',\r\n bedRackingQuickfistLargeCorner: 'images/quickfist-grip-large.jpg',\r\n ramMountBallCorner: 'images/ram-mount-ball.jpg',\r\n underHoodCorner: 'images/under-hood-storage-box-kit.jpg',\r\n walkSpreaderFrontCorner: 'images/walk-spreader-mount.png',\r\n walkSpreaderCorner: 'images/walk-spreader-mount.png',\r\n lTrack2in: 'images/l-track-2in.jpg',\r\n lTrack6in: 'images/l-track-6in.jpg'\r\n }\r\n };\r\n\r\n var containerIds = {\r\n fourPassengers: '#left-menu-4p',\r\n twoPassengers: '#left-menu-2p',\r\n twoPassengersExtended: '#left-menu-2pext'\r\n };\r\n\r\n // Show the proper left menu according selected base model and apply its rules\r\n // because of IE11 caching issues - unselect all chosen options first\r\n // and then select the default ones \r\n function applyRules(currentModel) {\r\n resetDefaultCheckedElements(currentModel);\r\n\r\n if (currentModel === baseModels.fourPassengers) {\r\n utils.displayElement(containerIds.fourPassengers);\r\n utils.hideElement(containerIds.twoPassengers);\r\n utils.hideElement(containerIds.twoPassengersExtended);\r\n\r\n defaultValues.setDefaultImages4p();\r\n defaultValues.setDefaultsLink4p();\r\n defaultValues.selectDefaultsChecks4p(fourPassengersHandler.elements);\r\n\r\n fourPassengersHandler.rulesHandler();\r\n } else if (currentModel === baseModels.twoPassengers) {\r\n utils.hideElement(containerIds.fourPassengers);\r\n utils.displayElement(containerIds.twoPassengers);\r\n utils.hideElement(containerIds.twoPassengersExtended);\r\n\r\n defaultValues.setDefaultImages2p();\r\n defaultValues.setDefaultsLink2p();\r\n defaultValues.selectDefaultsChecks2p(twoPassengersHandler.elements);\r\n\r\n twoPassengersHandler.rulesHandler();\r\n } else {\r\n utils.hideElement(containerIds.fourPassengers);\r\n utils.hideElement(containerIds.twoPassengers);\r\n utils.displayElement(containerIds.twoPassengersExtended);\r\n\r\n defaultValues.setDefaultImages2pext();\r\n defaultValues.setDefaultsLink2pext();\r\n defaultValues.selectDefaultsChecks2pext(twoPassengersExtHandler.elements);\r\n\r\n twoPassengersExtHandler.rulesHandler();\r\n }\r\n }\r\n\r\n function unselectDropdownItems() {\r\n modelsDropDownElements.map(function (x) {\r\n x.className = '';\r\n });\r\n }\r\n\r\n function changeMachineModel(newModelValue) {\r\n\r\n // Remove previous selected attachments from all layers\r\n var attachmentLayers = Array.prototype.slice.call(document.getElementsByClassName('toro-attachments-images'));\r\n\r\n attachmentLayers.map(function (x) {\r\n x.style.backgroundImage = 'none';\r\n });\r\n\r\n unselectDropdownItems();\r\n\r\n machineModelName.innerHTML = convertMachineModel(newModelValue);\r\n\r\n document.getElementById(newModelValue).className = 'active';\r\n modelsDropDown.className = '';\r\n changeModelBtn.className = '';\r\n changeModelBtnIco.className = 'fa fa-angle-down';\r\n emailBtn.classList.remove('hidden');\r\n\r\n applyRules(currentBaseModel);\r\n }\r\n\r\n // Convert base model into text shown in header after selecting the model\r\n function convertMachineModel(baseModelName) {\r\n switch (baseModelName) {\r\n case baseModels.fourPassengers: return 'Workman GTX 4 Passenger Configurator';\r\n case baseModels.twoPassengers: return 'Workman GTX 2 Passenger Configurator';\r\n case baseModels.twoPassengersExtended: return 'Workman GTX 2 Passenger Extended Configurator';\r\n default: 'Workman GTX Configurator';\r\n }\r\n }\r\n\r\n // get params after \"#\" from the URL\r\n // get current base model from drop-down menu and select it to active\r\n function getMachineModelName() {\r\n var model = window.location.hash;\r\n\r\n if (model !== '' || model !== '#') {\r\n if (model === '#Workman-Gtx-2-Passenger-Extended') {\r\n utils.selectDomElement('#' + baseModels.twoPassengersExtended).className = 'active';\r\n currentBaseModel = baseModels.twoPassengersExtended;\r\n currentMachineModel = machineModel.twoPassengersExtended;\r\n\r\n return baseModels.twoPassengersExtended;\r\n } else if (model === '#Workman-Gtx-2-Passenger') {\r\n utils.selectDomElement('#' + baseModels.twoPassengers).className = 'active';\r\n currentBaseModel = baseModels.twoPassengers;\r\n currentMachineModel = machineModel.twoPassengers;\r\n\r\n return baseModels.twoPassengers;\r\n } else {\r\n utils.selectDomElement('#' + baseModels.fourPassengers).className = 'active';\r\n currentBaseModel = baseModels.fourPassengers;\r\n currentMachineModel = machineModel.fourPassengers;\r\n\r\n return baseModels.fourPassengers;\r\n }\r\n } else {\r\n utils.selectDomElement(baseModels.fourPassengers).className = 'active';\r\n currentBaseModel = baseModels.fourPassengers;\r\n currentMachineModel = machineModel.fourPassengers;\r\n\r\n return baseModels.fourPassengers;\r\n }\r\n }\r\n\r\n // Add event listeners for inside corner images preview\r\n // at each button click dialog image appear\r\n function showDialogImageWhenThumbClicked() {\r\n var thumbButtons = Object.keys(cornerImages.buttons).map(function (e) {\r\n return cornerImages.buttons[e];\r\n });\r\n\r\n var thumbImages = Object.keys(cornerImages.imageUrls).map(function (e) {\r\n return cornerImages.imageUrls[e];\r\n });\r\n\r\n for (var i = 0; i < thumbButtons.length; i++) {\r\n addEventListenerOnThumbs(thumbButtons[i], thumbImages[i]);\r\n }\r\n }\r\n\r\n function addEventListenerOnThumbs(button, imageUrl) {\r\n button.addEventListener('click', function () {\r\n dialogImgCont.innerHTML = '\"\"';\r\n dialog.style.visibility = \"visible\";\r\n transparentContainer.style.visibility = \"visible\";\r\n dialog.style.top = '20%';\r\n });\r\n }\r\n\r\n // Closes the extra view dialog\r\n function closeImageDialog() {\r\n dialog.style.visibility = \"hidden\";\r\n transparentContainer.style.visibility = \"hidden\";\r\n }\r\n\r\n function onSiteReadyLookForChangeAndReload() {\r\n if (document.readyState === 'complete') {\r\n window.applicationCache.addEventListener('updateready', function (e) {\r\n\r\n if (window.applicationCache.status === window.applicationCache.UPDATEREADY) {\r\n\r\n // Browser downloaded a new app cache.\r\n if (confirm('A new version of this site is available. Load it?')) {\r\n window.location.reload();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n function loadDataWhenModelChange() {\r\n unselectDropdownItems();\r\n changeMachineModel(getMachineModelName());\r\n }\r\n\r\n // initial site load\r\n function initialLoadData() {\r\n var path = window.location.hash;\r\n var currentYear = utils.getCurrentYear();\r\n var model = path.split('/')[0];\r\n var configs = path.split('/')[1];\r\n var rules = '';\r\n\r\n if (model === '#Workman-Gtx-2-Passenger-Extended') {\r\n utils.selectDomElement('#machine-model-name').innerText = 'Workman GTX 2 Passenger Extended Configurator';\r\n utils.selectDomElement('#WorkmanGtx2PassengerExtended').classList.add('active');\r\n\r\n currentBaseModel = baseModels.twoPassengersExtended;\r\n currentMachineModel = machineModel.twoPassengersExtended;\r\n } else if (model === '#Workman-Gtx-2-Passenger') {\r\n utils.selectDomElement('#machine-model-name').innerText = 'Workman GTX 2 Passenger Configurator';\r\n utils.selectDomElement('#WorkmanGtx2Passenger').classList.add('active');\r\n\r\n currentBaseModel = baseModels.twoPassengers;\r\n currentMachineModel = machineModel.twoPassengers;\r\n } else if (model === '#Workman-Gtx-4-Passenger' || model === '' || model === '#') {\r\n utils.selectDomElement('#machine-model-name').innerText = 'Workman GTX 4 Passenger Configurator';\r\n utils.selectDomElement('#WorkmanGtx4Passenger').classList.add('active');\r\n\r\n currentBaseModel = baseModels.fourPassengers;\r\n currentMachineModel = machineModel.fourPassengers;\r\n }\r\n\r\n applyRules(currentBaseModel);\r\n\r\n // If there are configs - all the configs elements from Url should be checked\r\n // ge-4p,cb-4p,tt-4p,besf-4p,besb-4p,fn-4p,rn-4p ---- id-s of checkbox/radio to be selected\r\n if (configs) {\r\n getConfiguredModel(configs);\r\n\r\n if (currentBaseModel === baseModels.fourPassengers) {\r\n fourPassengersHandler.rulesHandler();\r\n } else if (currentBaseModel === baseModels.twoPassengers) {\r\n twoPassengersHandler.rulesHandler();\r\n } else {\r\n twoPassengersExtHandler.rulesHandler();\r\n }\r\n }\r\n\r\n // get the current year for footer\r\n utils.selectDomElement('#current-year').innerText = currentYear;\r\n }\r\n\r\n function getConfiguredModel(configs) {\r\n var elementsToSelect = configs.split(',');\r\n\r\n resetDefaultCheckedElements(currentBaseModel);\r\n\r\n for (var j = 0; j < elementsToSelect.length; j++) {\r\n var elementId = document.querySelector('input[data-id=\"' + elementsToSelect[j] + '\"]').id;\r\n var element = utils.selectDomElement('#' + elementId);\r\n\r\n utils.selectElement(element);\r\n }\r\n }\r\n\r\n function resetDefaultCheckedElements(modelSelected) {\r\n var id = '';\r\n\r\n if (modelSelected === baseModels.fourPassengers) {\r\n id = containerIds.fourPassengers;\r\n } else if (modelSelected === baseModels.twoPassengers) {\r\n id = containerIds.twoPassengers;\r\n } else {\r\n id = containerIds.twoPassengersExtended;\r\n }\r\n\r\n utils.unselectAllRadiosAndCheckboxes(id);\r\n }\r\n\r\n // Expand left menu functionality\r\n function expandAttachmentMenu() {\r\n var parentsPanels = [containerIds.fourPassengers, containerIds.twoPassengers, containerIds.twoPassengersExtended];\r\n\r\n for (var j = 0; j < parentsPanels.length; j++) {\r\n addClickEventToMenu(parentsPanels[j], '.engine');\r\n addClickEventToMenu(parentsPanels[j], '.bed-and-accessories');\r\n\r\n if (j !== 0) {\r\n addClickEventToMenu(parentsPanels[j], '.seating');\r\n } else {\r\n addClickEventToMenu(parentsPanels[j], '.seating-front');\r\n addClickEventToMenu(parentsPanels[j], '.seating-back');\r\n }\r\n\r\n addClickEventToMenu(parentsPanels[j], '.cab-and-canopy');\r\n addClickEventToMenu(parentsPanels[j], '.front-attachments');\r\n addClickEventToMenu(parentsPanels[j], '.rear-attachments');\r\n addClickEventToMenu(parentsPanels[j], '.tires');\r\n addClickEventToMenu(parentsPanels[j], '.signaling-alarms-and-accessories');\r\n }\r\n }\r\n\r\n function addClickEventToMenu(parent, selector) {\r\n var container = parent + ' ' + selector + ' ' + selector + '-container';\r\n\r\n utils.selectDomElement(container).addEventListener('click', function expand() {\r\n expandSection(parent, selector);\r\n });\r\n }\r\n\r\n function expandSection(parent, selector) {\r\n var parentSelector = parent + ' ' + selector;\r\n var toggleContentElement = utils.selectDomElement(parentSelector + ' >div.expand-front');\r\n var toggleArrowIconElement = utils.selectDomElement(parentSelector + ' #left-icon-front');\r\n\r\n if (toggleContentElement.classList.contains('hidden')) {\r\n toggleContentElement.classList.remove('hidden');\r\n toggleArrowIconElement.className = 'fa fa-angle-up fa-2x';\r\n } else {\r\n toggleContentElement.classList.add('hidden');\r\n toggleArrowIconElement.className = 'fa fa-angle-down fa-2x';\r\n }\r\n }\r\n\r\n // Opens the Email Client with the link with the current configuration\r\n function openEmail() {\r\n var emailSelections = model.config.email;\r\n var linkSelections = model.config.link;\r\n var selectedOptionsEmail = Object.keys(emailSelections).map(function (e) {\r\n return emailSelections[e];\r\n });\r\n\r\n var selectedOptionsLink = Object.keys(linkSelections).map(function (e) {\r\n return linkSelections[e];\r\n });\r\n\r\n var resultedEmailText = '';\r\n var resultedLink = selectedOptionsLink[0];\r\n var linkURL = '';\r\n var emailSubject = convertMachineModel(currentBaseModel);\r\n var newLine = '%0D%0A%0D%0A';\r\n var emailContent = '';\r\n\r\n for (var l = 0; l < selectedOptionsEmail.length; l++) {\r\n if (selectedOptionsEmail[l] !== '' && selectedOptionsEmail[l] !== '6ft Flat Bed') {\r\n resultedEmailText = resultedEmailText + newLine + selectedOptionsEmail[l];\r\n }\r\n }\r\n\r\n for (var k = 1; k < selectedOptionsLink.length; k++) {\r\n if (selectedOptionsLink[k] !== '') {\r\n resultedLink += ',' + selectedOptionsLink[k];\r\n }\r\n }\r\n\r\n linkURL = WEBSITE_URL + '%23' + currentMachineModel + '/' + resultedLink + '%0D%0A%0D%0A%0D%0A%0D%0A';\r\n\r\n emailContent = 'Selected Workman GTX: ' + model.config.base +\r\n resultedEmailText +\r\n newLine +\r\n 'View the configured Workman GTX here: ' +\r\n newLine +\r\n linkURL;\r\n\r\n window.open('mailto:' + '' + '?subject=' + emailSubject + '&body=' + '%0D%0A' + emailContent, '_self');\r\n }\r\n\r\n // Attach event on the hide/show menu button(only visible when width of window < 941px)\r\n function expandLeftMenu() {\r\n var elements = document.getElementsByClassName('toro-attachments-images');\r\n\r\n if (utils.selectDomElement('#left-menu').style.display === 'none') { // Closed\r\n utils.selectDomElement('#left-menu').style.display = 'block';\r\n utils.selectDomElement('#show-left-menu').className = 'show-menu fa fa-angle-left fa-3x';\r\n utils.selectDomElement('#show-left-menu').style.left = '250px';\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n elements[i].style.width = 'calc(100vw - 250px)';\r\n }\r\n } else { //Open\r\n utils.selectDomElement('#left-menu').style.display = 'none';\r\n utils.selectDomElement('#show-left-menu').className = 'show-menu fa fa-angle-right fa-3x';\r\n utils.selectDomElement('#show-left-menu').style.left = '0px';\r\n\r\n for (var m = 0; m < elements.length; m++) {\r\n elements[m].style.width = '100vw';\r\n }\r\n }\r\n }\r\n\r\n // Listen for expanding of drop-down\r\n function expandDropDownMenu() {\r\n if (changeModelBtn.className === 'active') {\r\n changeModelBtn.className = '';\r\n modelsDropDown.className = '';\r\n changeModelBtnIco.className = 'fa fa-angle-down';\r\n emailBtn.classList.remove('hidden');\r\n } else {\r\n changeModelBtn.className = 'active';\r\n modelsDropDown.className = 'active';\r\n changeModelBtnIco.className = 'fa fa-angle-up';\r\n emailBtn.classList.add('hidden');\r\n }\r\n }\r\n\r\n return {\r\n initialLoadData: initialLoadData,\r\n loadDataWhenModelChange: loadDataWhenModelChange,\r\n onSiteReadyLookForChangeAndReload: onSiteReadyLookForChangeAndReload,\r\n expandAttachmentMenu: expandAttachmentMenu,\r\n showDialogImageWhenThumbClicked: showDialogImageWhenThumbClicked,\r\n openEmail: openEmail,\r\n expandLeftMenu: expandLeftMenu,\r\n expandDropDownMenu: expandDropDownMenu,\r\n closeImageDialog: closeImageDialog\r\n };\r\n}());\r\n\n(function () {\r\n 'use strict';\r\n\r\n var emailBtn = utils.selectDomElement('#email-btn');\r\n var showLeftMenuBtn = utils.selectDomElement('#show-left-menu');\r\n var changeModelBtn = utils.selectDomElement('#header-title');\r\n var closeImageDialogBtn = utils.selectDomElement('#closeImageDialogBtn');\r\n var containerIds = {\r\n fourPassengers: '#left-menu-4p',\r\n twoPassengers: '#left-menu-2p',\r\n twoPassengersExtended: '#left-menu-2pext'\r\n };\r\n var menuContainers = {\r\n fourPassengers: utils.selectDomElement(containerIds.fourPassengers),\r\n twoPassengers: utils.selectDomElement(containerIds.twoPassengers),\r\n twoPassengersExtended: utils.selectDomElement(containerIds.twoPassengersExtended)\r\n };\r\n\r\n window.addEventListener('load', dataHandler.initialLoadData);\r\n window.addEventListener('hashchange', dataHandler.loadDataWhenModelChange);\r\n document.onreadystatechange = dataHandler.onSiteReadyLookForChangeAndReload;\r\n\r\n menuContainers.fourPassengers.addEventListener('change', fourPassengersHandler.rulesHandler);\r\n menuContainers.twoPassengers.addEventListener('change', twoPassengersHandler.rulesHandler);\r\n menuContainers.twoPassengersExtended.addEventListener('change', twoPassengersExtHandler.rulesHandler);\r\n\r\n dataHandler.expandAttachmentMenu();\r\n dataHandler.showDialogImageWhenThumbClicked();\r\n\r\n emailBtn.addEventListener('click', dataHandler.openEmail);\r\n showLeftMenuBtn.addEventListener('click', dataHandler.expandLeftMenu);\r\n changeModelBtn.addEventListener('click', dataHandler.expandDropDownMenu);\r\n\r\n if (closeImageDialogBtn) {\r\n closeImageDialogBtn.addEventListener('click', dataHandler.closeImageDialog);\r\n }\r\n}());\r\n\r\n\r\n","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tabs MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialTabs = function MaterialTabs(element) {\n // Stores the HTML element.\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTabs.prototype.CssClasses_ = {\n TAB_CLASS: 'mdl-tabs__tab',\n PANEL_CLASS: 'mdl-tabs__panel',\n ACTIVE_CLASS: 'is-active',\n UPGRADED_CLASS: 'is-upgraded',\n MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n MDL_RIPPLE: 'mdl-ripple',\n MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n * Handle clicks to a tabs component\n *\n * @private\n */\nMaterialTabs.prototype.initTabs_ = function () {\n if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n // Create new tabs for each tab element\n for (var i = 0; i < this.tabs_.length; i++) {\n new MaterialTab(this.tabs_[i], this);\n }\n this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetTabState_ = function () {\n for (var k = 0; k < this.tabs_.length; k++) {\n this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialTabs.prototype.resetPanelState_ = function () {\n for (var j = 0; j < this.panels_.length; j++) {\n this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n }\n};\n/**\n * Initialize element.\n */\nMaterialTabs.prototype.init = function () {\n if (this.element_) {\n this.initTabs_();\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {Element} tab The HTML element for the tab.\n * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n */\nfunction MaterialTab(tab, ctx) {\n if (tab) {\n if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n var href = tab.href.split('#')[1];\n var panel = ctx.element_.querySelector('#' + href);\n ctx.resetTabState_();\n ctx.resetPanelState_();\n tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n }\n });\n }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTabs,\n classAsString: 'MaterialTabs',\n cssClass: 'mdl-js-tabs'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Layout MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialLayout = function MaterialLayout(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialLayout.prototype.Constant_ = {\n MAX_WIDTH: '(max-width: 1024px)',\n TAB_SCROLL_PIXELS: 100,\n RESIZE_TIMEOUT: 100,\n MENU_ICON: '',\n CHEVRON_LEFT: 'chevron_left',\n CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32\n};\n/**\n * Modes.\n *\n * @enum {number}\n * @private\n */\nMaterialLayout.prototype.Mode_ = {\n STANDARD: 0,\n SEAMED: 1,\n WATERFALL: 2,\n SCROLL: 3\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialLayout.prototype.CssClasses_ = {\n CONTAINER: 'mdl-layout__container',\n HEADER: 'mdl-layout__header',\n DRAWER: 'mdl-layout__drawer',\n CONTENT: 'mdl-layout__content',\n DRAWER_BTN: 'mdl-layout__drawer-button',\n ICON: 'material-icons',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n RIPPLE: 'mdl-ripple',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n HEADER_SEAMED: 'mdl-layout__header--seamed',\n HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n HEADER_SCROLL: 'mdl-layout__header--scroll',\n FIXED_HEADER: 'mdl-layout--fixed-header',\n OBFUSCATOR: 'mdl-layout__obfuscator',\n TAB_BAR: 'mdl-layout__tab-bar',\n TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n TAB: 'mdl-layout__tab',\n TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',\n PANEL: 'mdl-layout__tab-panel',\n HAS_DRAWER: 'has-drawer',\n HAS_TABS: 'has-tabs',\n HAS_SCROLLING_HEADER: 'has-scrolling-header',\n CASTING_SHADOW: 'is-casting-shadow',\n IS_COMPACT: 'is-compact',\n IS_SMALL_SCREEN: 'is-small-screen',\n IS_DRAWER_OPEN: 'is-visible',\n IS_ACTIVE: 'is-active',\n IS_UPGRADED: 'is-upgraded',\n IS_ANIMATING: 'is-animating',\n ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n * Handles scrolling on the content.\n *\n * @private\n */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n return;\n }\n var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n if (headerVisible) {\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n};\n/**\n * Handles a keyboard event on the drawer.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n // Only react when the drawer is open.\n if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.toggleDrawer();\n }\n};\n/**\n * Handles changes in screen size.\n *\n * @private\n */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n if (this.screenSizeMediaQuery_.matches) {\n this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n // Collapse drawer (if any) when moving to a large screen size.\n if (this.drawer_) {\n this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n }\n }\n};\n/**\n * Handles events of drawer button.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n if (evt && evt.type === 'keydown') {\n if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n // prevent scrolling in drawer nav\n evt.preventDefault();\n } else {\n // prevent other keys\n return;\n }\n }\n this.toggleDrawer();\n};\n/**\n * Handles (un)setting the `is-animating` class\n *\n * @private\n */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n * Handles expanding the header on click\n *\n * @private\n */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n};\n/**\n * Reset tab state, dropping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n for (var k = 0; k < tabBar.length; k++) {\n tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Reset panel state, droping active classes\n *\n * @private\n */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n for (var j = 0; j < panels.length; j++) {\n panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n};\n/**\n * Toggle drawer state\n *\n * @public\n */\nMaterialLayout.prototype.toggleDrawer = function () {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n // Set accessibility properties.\n if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n this.drawer_.setAttribute('aria-hidden', 'false');\n drawerButton.setAttribute('aria-expanded', 'true');\n } else {\n this.drawer_.setAttribute('aria-hidden', 'true');\n drawerButton.setAttribute('aria-expanded', 'false');\n }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n * Initialize element.\n */\nMaterialLayout.prototype.init = function () {\n if (this.element_) {\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n var focusedElement = this.element_.querySelector(':focus');\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n if (focusedElement) {\n focusedElement.focus();\n }\n var directChildren = this.element_.childNodes;\n var numChildren = directChildren.length;\n for (var c = 0; c < numChildren; c++) {\n var child = directChildren[c];\n if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n this.header_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n this.drawer_ = child;\n }\n if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n this.content_ = child;\n }\n }\n window.addEventListener('pageshow', function (e) {\n if (e.persisted) {\n // when page is loaded from back/forward cache\n // trigger repaint to let layout scroll in safari\n this.element_.style.overflowY = 'hidden';\n requestAnimationFrame(function () {\n this.element_.style.overflowY = '';\n }.bind(this));\n }\n }.bind(this), false);\n if (this.header_) {\n this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n }\n var mode = this.Mode_.STANDARD;\n if (this.header_) {\n if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n mode = this.Mode_.SEAMED;\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n mode = this.Mode_.WATERFALL;\n this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n mode = this.Mode_.SCROLL;\n container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n }\n if (mode === this.Mode_.STANDARD) {\n this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n if (this.tabBar_) {\n this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n }\n } else if (mode === this.Mode_.WATERFALL) {\n // Add and remove shadows depending on scroll position.\n // Also add/remove auxiliary class for styling of the compact version of\n // the header.\n this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n this.contentScrollHandler_();\n }\n }\n // Add drawer toggling button to our layout, if we have an openable drawer.\n if (this.drawer_) {\n var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n if (!drawerButton) {\n drawerButton = document.createElement('div');\n drawerButton.setAttribute('aria-expanded', 'false');\n drawerButton.setAttribute('role', 'button');\n drawerButton.setAttribute('tabindex', '0');\n drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n var drawerButtonIcon = document.createElement('i');\n drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n drawerButton.appendChild(drawerButtonIcon);\n }\n if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n }\n drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n // Add a class if the layout has a drawer, for altering the left padding.\n // Adds the HAS_DRAWER to the elements since this.header_ may or may\n // not be present.\n this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n // If we have a fixed header, add the button to the header rather than\n // the layout.\n if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n this.header_.insertBefore(drawerButton, this.header_.firstChild);\n } else {\n this.element_.insertBefore(drawerButton, this.content_);\n }\n var obfuscator = document.createElement('div');\n obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n this.element_.appendChild(obfuscator);\n obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n this.obfuscator_ = obfuscator;\n this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n this.drawer_.setAttribute('aria-hidden', 'true');\n }\n // Keep an eye on screen size, and add/remove auxiliary class for styling\n // of small screens.\n this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n this.screenSizeHandler_();\n // Initialize tabs, if any.\n if (this.header_ && this.tabBar_) {\n this.element_.classList.add(this.CssClasses_.HAS_TABS);\n var tabContainer = document.createElement('div');\n tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n this.header_.insertBefore(tabContainer, this.tabBar_);\n this.header_.removeChild(this.tabBar_);\n var leftButton = document.createElement('div');\n leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n var leftButtonIcon = document.createElement('i');\n leftButtonIcon.classList.add(this.CssClasses_.ICON);\n leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n leftButton.appendChild(leftButtonIcon);\n leftButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n var rightButton = document.createElement('div');\n rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n var rightButtonIcon = document.createElement('i');\n rightButtonIcon.classList.add(this.CssClasses_.ICON);\n rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n rightButton.appendChild(rightButtonIcon);\n rightButton.addEventListener('click', function () {\n this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n }.bind(this));\n tabContainer.appendChild(leftButton);\n tabContainer.appendChild(this.tabBar_);\n tabContainer.appendChild(rightButton);\n // Add and remove tab buttons depending on scroll position and total\n // window size.\n var tabUpdateHandler = function () {\n if (this.tabBar_.scrollLeft > 0) {\n leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n } else {\n rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n }\n }.bind(this);\n this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n tabUpdateHandler();\n // Update tabs when the window resizes.\n var windowResizeHandler = function () {\n // Use timeouts to make sure it doesn't happen too often.\n if (this.resizeTimeoutId_) {\n clearTimeout(this.resizeTimeoutId_);\n }\n this.resizeTimeoutId_ = setTimeout(function () {\n tabUpdateHandler();\n this.resizeTimeoutId_ = null;\n }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n }.bind(this);\n window.addEventListener('resize', windowResizeHandler);\n if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n }\n // Select element tabs, document panels\n var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n // Create new tabs for each tab element\n for (var i = 0; i < tabs.length; i++) {\n new MaterialLayoutTab(tabs[i], tabs, panels, this);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Constructor for an individual tab.\n *\n * @constructor\n * @param {HTMLElement} tab The HTML element for the tab.\n * @param {!Array} tabs Array with HTML elements for all tabs.\n * @param {!Array} panels Array with HTML elements for all panels.\n * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n /**\n * Auxiliary method to programmatically select a tab in the UI.\n */\n function selectTab() {\n var href = tab.href.split('#')[1];\n var panel = layout.content_.querySelector('#' + href);\n layout.resetTabState_(tabs);\n layout.resetPanelState_(panels);\n tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n }\n if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n var ripple = document.createElement('span');\n ripple.classList.add(layout.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n tab.appendChild(rippleContainer);\n }\n if (!layout.tabBar_.classList.contains(layout.CssClasses_.TAB_MANUAL_SWITCH)) {\n tab.addEventListener('click', function (e) {\n if (tab.getAttribute('href').charAt(0) === '#') {\n e.preventDefault();\n selectTab();\n }\n });\n }\n tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialLayout,\n classAsString: 'MaterialLayout',\n cssClass: 'mdl-js-layout'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n upgradeDom: function(optJsClass, optCssClass) {},\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n upgradeElement: function(element, optJsClass) {},\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n upgradeElements: function(elements) {},\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n upgradeAllRegistered: function() {},\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n registerUpgradedCallback: function(jsClass, callback) {},\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n */\n register: function(config) {},\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n 'use strict';\n\n /** @type {!Array} */\n var registeredComponents_ = [];\n\n /** @type {!Array} */\n var createdComponents_ = [];\n\n var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n /**\n * Searches registered components for a class we are interested in using.\n * Optionally replaces a match with passed object if specified.\n *\n * @param {string} name The name of a class we want to use.\n * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n * @return {!Object|boolean}\n * @private\n */\n function findRegisteredClass_(name, optReplace) {\n for (var i = 0; i < registeredComponents_.length; i++) {\n if (registeredComponents_[i].className === name) {\n if (typeof optReplace !== 'undefined') {\n registeredComponents_[i] = optReplace;\n }\n return registeredComponents_[i];\n }\n }\n return false;\n }\n\n /**\n * Returns an array of the classNames of the upgraded classes on the element.\n *\n * @param {!Element} element The element to fetch data from.\n * @return {!Array}\n * @private\n */\n function getUpgradedListOfElement_(element) {\n var dataUpgraded = element.getAttribute('data-upgraded');\n // Use `['']` as default value to conform the `,name,name...` style.\n return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n }\n\n /**\n * Returns true if the given element has already been upgraded for the given\n * class.\n *\n * @param {!Element} element The element we want to check.\n * @param {string} jsClass The class to check for.\n * @returns {boolean}\n * @private\n */\n function isElementUpgraded_(element, jsClass) {\n var upgradedList = getUpgradedListOfElement_(element);\n return upgradedList.indexOf(jsClass) !== -1;\n }\n\n /**\n * Create an event object.\n *\n * @param {string} eventType The type name of the event.\n * @param {boolean} bubbles Whether the event should bubble up the DOM.\n * @param {boolean} cancelable Whether the event can be canceled.\n * @returns {!Event}\n */\n function createEvent_(eventType, bubbles, cancelable) {\n if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n return new CustomEvent(eventType, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else {\n var ev = document.createEvent('Events');\n ev.initEvent(eventType, bubbles, cancelable);\n return ev;\n }\n }\n\n /**\n * Searches existing DOM for elements of our component type and upgrades them\n * if they have not already been upgraded.\n *\n * @param {string=} optJsClass the programatic name of the element class we\n * need to create a new instance of.\n * @param {string=} optCssClass the name of the CSS class elements of this\n * type will have.\n */\n function upgradeDomInternal(optJsClass, optCssClass) {\n if (typeof optJsClass === 'undefined' &&\n typeof optCssClass === 'undefined') {\n for (var i = 0; i < registeredComponents_.length; i++) {\n upgradeDomInternal(registeredComponents_[i].className,\n registeredComponents_[i].cssClass);\n }\n } else {\n var jsClass = /** @type {string} */ (optJsClass);\n if (typeof optCssClass === 'undefined') {\n var registeredClass = findRegisteredClass_(jsClass);\n if (registeredClass) {\n optCssClass = registeredClass.cssClass;\n }\n }\n\n var elements = document.querySelectorAll('.' + optCssClass);\n for (var n = 0; n < elements.length; n++) {\n upgradeElementInternal(elements[n], jsClass);\n }\n }\n }\n\n /**\n * Upgrades a specific element rather than all in the DOM.\n *\n * @param {!Element} element The element we wish to upgrade.\n * @param {string=} optJsClass Optional name of the class we want to upgrade\n * the element to.\n */\n function upgradeElementInternal(element, optJsClass) {\n // Verify argument type.\n if (!(typeof element === 'object' && element instanceof Element)) {\n throw new Error('Invalid argument provided to upgrade MDL element.');\n }\n // Allow upgrade to be canceled by canceling emitted event.\n var upgradingEv = createEvent_('mdl-componentupgrading', true, true);\n element.dispatchEvent(upgradingEv);\n if (upgradingEv.defaultPrevented) {\n return;\n }\n\n var upgradedList = getUpgradedListOfElement_(element);\n var classesToUpgrade = [];\n // If jsClass is not provided scan the registered components to find the\n // ones matching the element's CSS classList.\n if (!optJsClass) {\n var classList = element.classList;\n registeredComponents_.forEach(function(component) {\n // Match CSS & Not to be upgraded & Not upgraded.\n if (classList.contains(component.cssClass) &&\n classesToUpgrade.indexOf(component) === -1 &&\n !isElementUpgraded_(element, component.className)) {\n classesToUpgrade.push(component);\n }\n });\n } else if (!isElementUpgraded_(element, optJsClass)) {\n classesToUpgrade.push(findRegisteredClass_(optJsClass));\n }\n\n // Upgrade the element for each classes.\n for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n registeredClass = classesToUpgrade[i];\n if (registeredClass) {\n // Mark element as upgraded.\n upgradedList.push(registeredClass.className);\n element.setAttribute('data-upgraded', upgradedList.join(','));\n var instance = new registeredClass.classConstructor(element);\n instance[componentConfigProperty_] = registeredClass;\n createdComponents_.push(instance);\n // Call any callbacks the user has registered with this component type.\n for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n registeredClass.callbacks[j](element);\n }\n\n if (registeredClass.widget) {\n // Assign per element instance for control over API\n element[registeredClass.className] = instance;\n }\n } else {\n throw new Error(\n 'Unable to find a registered component for the given class.');\n }\n\n var upgradedEv = createEvent_('mdl-componentupgraded', true, false);\n element.dispatchEvent(upgradedEv);\n }\n }\n\n /**\n * Upgrades a specific list of elements rather than all in the DOM.\n *\n * @param {!Element|!Array|!NodeList|!HTMLCollection} elements\n * The elements we wish to upgrade.\n */\n function upgradeElementsInternal(elements) {\n if (!Array.isArray(elements)) {\n if (elements instanceof Element) {\n elements = [elements];\n } else {\n elements = Array.prototype.slice.call(elements);\n }\n }\n for (var i = 0, n = elements.length, element; i < n; i++) {\n element = elements[i];\n if (element instanceof HTMLElement) {\n upgradeElementInternal(element);\n if (element.children.length > 0) {\n upgradeElementsInternal(element.children);\n }\n }\n }\n }\n\n /**\n * Registers a class for future use and attempts to upgrade existing DOM.\n *\n * @param {componentHandler.ComponentConfigPublic} config\n */\n function registerInternal(config) {\n // In order to support both Closure-compiled and uncompiled code accessing\n // this method, we need to allow for both the dot and array syntax for\n // property access. You'll therefore see the `foo.bar || foo['bar']`\n // pattern repeated across this method.\n var widgetMissing = (typeof config.widget === 'undefined' &&\n typeof config['widget'] === 'undefined');\n var widget = true;\n\n if (!widgetMissing) {\n widget = config.widget || config['widget'];\n }\n\n var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n classConstructor: config.constructor || config['constructor'],\n className: config.classAsString || config['classAsString'],\n cssClass: config.cssClass || config['cssClass'],\n widget: widget,\n callbacks: []\n });\n\n registeredComponents_.forEach(function(item) {\n if (item.cssClass === newConfig.cssClass) {\n throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n }\n if (item.className === newConfig.className) {\n throw new Error('The provided className has already been registered');\n }\n });\n\n if (config.constructor.prototype\n .hasOwnProperty(componentConfigProperty_)) {\n throw new Error(\n 'MDL component classes must not have ' + componentConfigProperty_ +\n ' defined as a property.');\n }\n\n var found = findRegisteredClass_(config.classAsString, newConfig);\n\n if (!found) {\n registeredComponents_.push(newConfig);\n }\n }\n\n /**\n * Allows user to be alerted to any upgrades that are performed for a given\n * component type\n *\n * @param {string} jsClass The class name of the MDL component we wish\n * to hook into for any upgrades performed.\n * @param {function(!HTMLElement)} callback The function to call upon an\n * upgrade. This function should expect 1 parameter - the HTMLElement which\n * got upgraded.\n */\n function registerUpgradedCallbackInternal(jsClass, callback) {\n var regClass = findRegisteredClass_(jsClass);\n if (regClass) {\n regClass.callbacks.push(callback);\n }\n }\n\n /**\n * Upgrades all registered components found in the current DOM. This is\n * automatically called on window load.\n */\n function upgradeAllRegisteredInternal() {\n for (var n = 0; n < registeredComponents_.length; n++) {\n upgradeDomInternal(registeredComponents_[n].className);\n }\n }\n\n /**\n * Check the component for the downgrade method.\n * Execute if found.\n * Remove component from createdComponents list.\n *\n * @param {?componentHandler.Component} component\n */\n function deconstructComponentInternal(component) {\n if (component) {\n var componentIndex = createdComponents_.indexOf(component);\n createdComponents_.splice(componentIndex, 1);\n\n var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n upgrades.splice(componentPlace, 1);\n component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n var ev = createEvent_('mdl-componentdowngraded', true, false);\n component.element_.dispatchEvent(ev);\n }\n }\n\n /**\n * Downgrade either a given node, an array of nodes, or a NodeList.\n *\n * @param {!Node|!Array|!NodeList} nodes\n */\n function downgradeNodesInternal(nodes) {\n /**\n * Auxiliary function to downgrade a single node.\n * @param {!Node} node the node to be downgraded\n */\n var downgradeNode = function(node) {\n createdComponents_.filter(function(item) {\n return item.element_ === node;\n }).forEach(deconstructComponentInternal);\n };\n if (nodes instanceof Array || nodes instanceof NodeList) {\n for (var n = 0; n < nodes.length; n++) {\n downgradeNode(nodes[n]);\n }\n } else if (nodes instanceof Node) {\n downgradeNode(nodes);\n } else {\n throw new Error('Invalid argument provided to downgrade MDL nodes.');\n }\n }\n\n // Now return the functions that should be made public with their publicly\n // facing names...\n return {\n upgradeDom: upgradeDomInternal,\n upgradeElement: upgradeElementInternal,\n upgradeElements: upgradeElementsInternal,\n upgradeAllRegistered: upgradeAllRegisteredInternal,\n registerUpgradedCallback: registerUpgradedCallbackInternal,\n register: registerInternal,\n downgradeElements: downgradeNodesInternal\n };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: Function,\n * classAsString: string,\n * cssClass: string,\n * widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic; // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * constructor: !Function,\n * className: string,\n * cssClass: string,\n * widget: (string|boolean),\n * callbacks: !Array\n * }}\n */\ncomponentHandler.ComponentConfig; // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n * element_: !HTMLElement,\n * className: string,\n * classAsString: string,\n * cssClass: string,\n * widget: string\n * }}\n */\ncomponentHandler.Component; // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n 'use strict';\n\n /**\n * Performs a \"Cutting the mustard\" test. If the browser supports the features\n * tested, adds a mdl-js class to the element. It then upgrades all MDL\n * components requiring JavaScript.\n */\n if ('classList' in document.createElement('div') &&\n 'querySelector' in document &&\n 'addEventListener' in window && Array.prototype.forEach) {\n document.documentElement.classList.add('mdl-js');\n componentHandler.upgradeAllRegistered();\n } else {\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.upgradeElement = function() {};\n /**\n * Dummy function to avoid JS errors.\n */\n componentHandler.register = function() {};\n }\n});\n","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n /**\n * Date.now polyfill.\n * @return {number} the current Date\n */\n Date.now = function () {\n return new Date().getTime();\n };\n Date['now'] = Date.now;\n}\nvar vendors = [\n 'webkit',\n 'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n /**\n * requestAnimationFrame polyfill.\n * @param {!Function} callback the callback function.\n */\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n window['requestAnimationFrame'] = window.requestAnimationFrame;\n window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Button MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialButton = function MaterialButton(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialButton.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialButton.prototype.CssClasses_ = {\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle blur of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialButton.prototype.blurHandler_ = function (event) {\n if (event) {\n this.element_.blur();\n }\n};\n// Public methods.\n/**\n * Disable button.\n *\n * @public\n */\nMaterialButton.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n * Enable button.\n *\n * @public\n */\nMaterialButton.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n * Initialize element.\n */\nMaterialButton.prototype.init = function () {\n if (this.element_) {\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleElement_ = document.createElement('span');\n this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(this.rippleElement_);\n this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n this.element_.appendChild(rippleContainer);\n }\n this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialButton,\n classAsString: 'MaterialButton',\n cssClass: 'mdl-js-button',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialCheckbox.prototype.CssClasses_ = {\n INPUT: 'mdl-checkbox__input',\n BOX_OUTLINE: 'mdl-checkbox__box-outline',\n FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialCheckbox.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialCheckbox.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n * Disable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n * Enable checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n * Check checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n * Uncheck checkbox.\n *\n * @public\n */\nMaterialCheckbox.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialCheckbox.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var boxOutline = document.createElement('span');\n boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n var tickContainer = document.createElement('span');\n tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n var tickOutline = document.createElement('span');\n tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n boxOutline.appendChild(tickOutline);\n this.element_.appendChild(tickContainer);\n this.element_.appendChild(boxOutline);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialCheckbox,\n classAsString: 'MaterialCheckbox',\n cssClass: 'mdl-js-checkbox',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for icon toggle MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialIconToggle.prototype.CssClasses_ = {\n INPUT: 'mdl-icon-toggle__input',\n JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialIconToggle.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the inputs toggle state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n * Check the inputs disabled state and update display.\n *\n * @public\n */\nMaterialIconToggle.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n * Disable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n * Enable icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n * Check icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.check = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n * Uncheck icon toggle.\n *\n * @public\n */\nMaterialIconToggle.prototype.uncheck = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialIconToggle.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundInputOnChange = this.onChange_.bind(this);\n this.boundInputOnFocus = this.onFocus_.bind(this);\n this.boundInputOnBlur = this.onBlur_.bind(this);\n this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n this.inputElement_.addEventListener('change', this.boundInputOnChange);\n this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialIconToggle,\n classAsString: 'MaterialIconToggle',\n cssClass: 'mdl-js-icon-toggle',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for dropdown MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialMenu = function MaterialMenu(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialMenu.prototype.Constant_ = {\n // Total duration of the menu animation.\n TRANSITION_DURATION_SECONDS: 0.3,\n // The fraction of the total duration we want to use for menu item animations.\n TRANSITION_DURATION_FRACTION: 0.8,\n // How long the menu stays open after choosing an option (so the user can see\n // the ripple).\n CLOSE_TIMEOUT: 150\n};\n/**\n * Keycodes, for code readability.\n *\n * @enum {number}\n * @private\n */\nMaterialMenu.prototype.Keycodes_ = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n UP_ARROW: 38,\n DOWN_ARROW: 40\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialMenu.prototype.CssClasses_ = {\n CONTAINER: 'mdl-menu__container',\n OUTLINE: 'mdl-menu__outline',\n ITEM: 'mdl-menu__item',\n ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n // Statuses\n IS_UPGRADED: 'is-upgraded',\n IS_VISIBLE: 'is-visible',\n IS_ANIMATING: 'is-animating',\n // Alignment options\n BOTTOM_LEFT: 'mdl-menu--bottom-left',\n // This is the default.\n BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n TOP_LEFT: 'mdl-menu--top-left',\n TOP_RIGHT: 'mdl-menu--top-right',\n UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n * Initialize element.\n */\nMaterialMenu.prototype.init = function () {\n if (this.element_) {\n // Create container for the menu.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n this.container_ = container;\n // Create outline for the menu (shadow and background).\n var outline = document.createElement('div');\n outline.classList.add(this.CssClasses_.OUTLINE);\n this.outline_ = outline;\n container.insertBefore(outline, this.element_);\n // Find the \"for\" element and bind events to it.\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n var forEl = null;\n if (forElId) {\n forEl = document.getElementById(forElId);\n if (forEl) {\n this.forElement_ = forEl;\n forEl.addEventListener('click', this.handleForClick_.bind(this));\n forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n }\n }\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n this.boundItemClick_ = this.handleItemClick_.bind(this);\n for (var i = 0; i < items.length; i++) {\n // Add a listener to each menu item.\n items[i].addEventListener('click', this.boundItemClick_);\n // Add a tab index to each menu item.\n items[i].tabIndex = '-1';\n // Add a keyboard listener to each menu item.\n items[i].addEventListener('keydown', this.boundItemKeydown_);\n }\n // Add ripple classes to each item, if the user has enabled ripples.\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n var rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n item.appendChild(rippleContainer);\n item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n }\n }\n // Copy alignment classes to the container, so the outline can use them.\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n }\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n }\n container.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n/**\n * Handles a click on the \"for\" element, by positioning the menu and then\n * toggling it.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n if (this.element_ && this.forElement_) {\n var rect = this.forElement_.getBoundingClientRect();\n var forRect = this.forElement_.parentElement.getBoundingClientRect();\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Position below the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Position above the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Position above the \"for\" element, aligned to its right.\n this.container_.style.right = forRect.right - rect.right + 'px';\n this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container_.style.left = this.forElement_.offsetLeft + 'px';\n this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n }\n }\n this.toggle(evt);\n};\n/**\n * Handles a keyboard event on the \"for\" element.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_ && this.forElement_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n items[items.length - 1].focus();\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n items[0].focus();\n }\n }\n }\n};\n/**\n * Handles a keyboard event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n if (this.element_ && this.container_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n evt.preventDefault();\n if (currentIndex > 0) {\n items[currentIndex - 1].focus();\n } else {\n items[items.length - 1].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n evt.preventDefault();\n if (items.length > currentIndex + 1) {\n items[currentIndex + 1].focus();\n } else {\n items[0].focus();\n }\n } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n evt.preventDefault();\n // Send mousedown and mouseup to trigger ripple.\n var e = new MouseEvent('mousedown');\n evt.target.dispatchEvent(e);\n e = new MouseEvent('mouseup');\n evt.target.dispatchEvent(e);\n // Send click.\n evt.target.click();\n } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n evt.preventDefault();\n this.hide();\n }\n }\n }\n};\n/**\n * Handles a click event on an item.\n *\n * @param {Event} evt The event that fired.\n * @private\n */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n if (evt.target.hasAttribute('disabled')) {\n evt.stopPropagation();\n } else {\n // Wait some time before closing menu, so the user can see the ripple.\n this.closing_ = true;\n window.setTimeout(function (evt) {\n this.hide();\n this.closing_ = false;\n }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n }\n};\n/**\n * Calculates the initial clip (for opening the menu) or final clip (for closing\n * it), and applies it. This allows us to animate from or to the correct point,\n * that is, the point it's aligned to in the \"for\" element.\n *\n * @param {number} height Height of the clip rectangle\n * @param {number} width Width of the clip rectangle\n * @private\n */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n // Do not clip.\n this.element_.style.clip = '';\n } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n // Clip to the top right corner of the menu.\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n // Clip to the bottom left corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n // Clip to the bottom right corner of the menu.\n this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.element_.style.clip = '';\n }\n};\n/**\n * Cleanup function to remove animation listeners.\n *\n * @param {Event} evt\n * @private\n */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n * Adds an event listener to clean up after the animation ends.\n *\n * @private\n */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n * Displays the menu.\n *\n * @public\n */\nMaterialMenu.prototype.show = function (evt) {\n if (this.element_ && this.container_ && this.outline_) {\n // Measure the inner element.\n var height = this.element_.getBoundingClientRect().height;\n var width = this.element_.getBoundingClientRect().width;\n // Apply the inner element's size to the container and outline.\n this.container_.style.width = width + 'px';\n this.container_.style.height = height + 'px';\n this.outline_.style.width = width + 'px';\n this.outline_.style.height = height + 'px';\n var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n // Calculate transition delays for individual menu items, so that they fade\n // in one at a time.\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n for (var i = 0; i < items.length; i++) {\n var itemDelay = null;\n if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n } else {\n itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n }\n items[i].style.transitionDelay = itemDelay;\n }\n // Apply the initial clip to the text before we start animating.\n this.applyClip_(height, width);\n // Wait for the next frame, turn on animation, and apply the final clip.\n // Also make it visible. This triggers the transitions.\n window.requestAnimationFrame(function () {\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n }.bind(this));\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n // Add a click listener to the document, to close the menu.\n var callback = function (e) {\n // Check to see if the document is processing the same event that\n // displayed the menu in the first place. If so, do nothing.\n // Also check to see if the menu is in the process of closing itself, and\n // do nothing in that case.\n // Also check if the clicked element is a menu item\n // if so, do nothing.\n if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n document.removeEventListener('click', callback);\n this.hide();\n }\n }.bind(this);\n document.addEventListener('click', callback);\n }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n * Hides the menu.\n *\n * @public\n */\nMaterialMenu.prototype.hide = function () {\n if (this.element_ && this.container_ && this.outline_) {\n var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n // Remove all transition delays; menu items fade out concurrently.\n for (var i = 0; i < items.length; i++) {\n items[i].style.removeProperty('transition-delay');\n }\n // Measure the inner element.\n var rect = this.element_.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n this.applyClip_(height, width);\n this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n // Clean up after the animation is complete.\n this.addAnimationEndListener_();\n }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n * Displays or hides the menu, depending on current state.\n *\n * @public\n */\nMaterialMenu.prototype.toggle = function (evt) {\n if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n this.hide();\n } else {\n this.show(evt);\n }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialMenu,\n classAsString: 'MaterialMenu',\n cssClass: 'mdl-js-menu',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Progress MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialProgress = function MaterialProgress(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialProgress.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n * Set the current progress of the progressbar.\n *\n * @param {number} p Percentage of the progress (0-100)\n * @public\n */\nMaterialProgress.prototype.setProgress = function (p) {\n if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n return;\n }\n this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n * Set the current progress of the buffer.\n *\n * @param {number} p Percentage of the buffer (0-100)\n * @public\n */\nMaterialProgress.prototype.setBuffer = function (p) {\n this.bufferbar_.style.width = p + '%';\n this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n * Initialize element.\n */\nMaterialProgress.prototype.init = function () {\n if (this.element_) {\n var el = document.createElement('div');\n el.className = 'progressbar bar bar1';\n this.element_.appendChild(el);\n this.progressbar_ = el;\n el = document.createElement('div');\n el.className = 'bufferbar bar bar2';\n this.element_.appendChild(el);\n this.bufferbar_ = el;\n el = document.createElement('div');\n el.className = 'auxbar bar bar3';\n this.element_.appendChild(el);\n this.auxbar_ = el;\n this.progressbar_.style.width = '0%';\n this.bufferbar_.style.width = '100%';\n this.auxbar_.style.width = '0%';\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialProgress,\n classAsString: 'MaterialProgress',\n cssClass: 'mdl-js-progress',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Radio MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRadio = function MaterialRadio(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRadio.prototype.CssClasses_ = {\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked',\n IS_UPGRADED: 'is-upgraded',\n JS_RADIO: 'mdl-js-radio',\n RADIO_BTN: 'mdl-radio__button',\n RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onChange_ = function (event) {\n // Since other radio buttons don't get change events, we need to look for\n // them to update their classes.\n var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n for (var i = 0; i < radios.length; i++) {\n var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n // Different name == different group, so no point updating those.\n if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n if (typeof radios[i]['MaterialRadio'] !== 'undefined') {\n radios[i]['MaterialRadio'].updateClasses_();\n }\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n this.blur_();\n};\n/**\n * Update classes.\n *\n * @private\n */\nMaterialRadio.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialRadio.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.btnElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkDisabled = function () {\n if (this.btnElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialRadio.prototype.checkToggleState = function () {\n if (this.btnElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n * Disable radio.\n *\n * @public\n */\nMaterialRadio.prototype.disable = function () {\n this.btnElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n * Enable radio.\n *\n * @public\n */\nMaterialRadio.prototype.enable = function () {\n this.btnElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n * Check radio.\n *\n * @public\n */\nMaterialRadio.prototype.check = function () {\n this.btnElement_.checked = true;\n this.onChange_(null);\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n * Uncheck radio.\n *\n * @public\n */\nMaterialRadio.prototype.uncheck = function () {\n this.btnElement_.checked = false;\n this.onChange_(null);\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n * Initialize element.\n */\nMaterialRadio.prototype.init = function () {\n if (this.element_) {\n this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n this.boundChangeHandler_ = this.onChange_.bind(this);\n this.boundFocusHandler_ = this.onChange_.bind(this);\n this.boundBlurHandler_ = this.onBlur_.bind(this);\n this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n var outerCircle = document.createElement('span');\n outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n var innerCircle = document.createElement('span');\n innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n this.element_.appendChild(outerCircle);\n this.element_.appendChild(innerCircle);\n var rippleContainer;\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n rippleContainer = document.createElement('span');\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n rippleContainer.appendChild(ripple);\n this.element_.appendChild(rippleContainer);\n }\n this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRadio,\n classAsString: 'MaterialRadio',\n cssClass: 'mdl-js-radio',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Slider MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSlider = function MaterialSlider(element) {\n this.element_ = element;\n // Browser feature detection.\n this.isIE_ = window.navigator.msPointerEnabled;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSlider.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSlider.prototype.CssClasses_ = {\n IE_CONTAINER: 'mdl-slider__ie-container',\n SLIDER_CONTAINER: 'mdl-slider__container',\n BACKGROUND_FLEX: 'mdl-slider__background-flex',\n BACKGROUND_LOWER: 'mdl-slider__background-lower',\n BACKGROUND_UPPER: 'mdl-slider__background-upper',\n IS_LOWEST_VALUE: 'is-lowest-value',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Handle input on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onInput_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle change on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onChange_ = function (event) {\n this.updateValueStyles_();\n};\n/**\n * Handle mouseup on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n event.target.blur();\n};\n/**\n * Handle mousedown on container element.\n * This handler is purpose is to not require the use to click\n * exactly on the 2px slider element, as FireFox seems to be very\n * strict about this.\n *\n * @param {Event} event The event that fired.\n * @private\n * @suppress {missingProperties}\n */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n // If this click is not on the parent element (but rather some child)\n // ignore. It may still bubble up.\n if (event.target !== this.element_.parentElement) {\n return;\n }\n // Discard the original event and create a new event that\n // is on the slider element.\n event.preventDefault();\n var newEvent = new MouseEvent('mousedown', {\n target: event.target,\n buttons: event.buttons,\n clientX: event.clientX,\n clientY: this.element_.getBoundingClientRect().y\n });\n this.element_.dispatchEvent(newEvent);\n};\n/**\n * Handle updating of values.\n *\n * @private\n */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n // Calculate and apply percentages to div structure behind slider.\n var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n if (fraction === 0) {\n this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n }\n if (!this.isIE_) {\n this.backgroundLower_.style.flex = fraction;\n this.backgroundLower_.style.webkitFlex = fraction;\n this.backgroundUpper_.style.flex = 1 - fraction;\n this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n }\n};\n// Public methods.\n/**\n * Disable slider.\n *\n * @public\n */\nMaterialSlider.prototype.disable = function () {\n this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n * Enable slider.\n *\n * @public\n */\nMaterialSlider.prototype.enable = function () {\n this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n * Update slider value.\n *\n * @param {number} value The value to which to set the control (optional).\n * @public\n */\nMaterialSlider.prototype.change = function (value) {\n if (typeof value !== 'undefined') {\n this.element_.value = value;\n }\n this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n * Initialize element.\n */\nMaterialSlider.prototype.init = function () {\n if (this.element_) {\n if (this.isIE_) {\n // Since we need to specify a very large height in IE due to\n // implementation limitations, we add a parent here that trims it down to\n // a reasonable size.\n var containerIE = document.createElement('div');\n containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n this.element_.parentElement.insertBefore(containerIE, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n containerIE.appendChild(this.element_);\n } else {\n // For non-IE browsers, we need a div structure that sits behind the\n // slider and allows us to style the left and right sides of it with\n // different colors.\n var container = document.createElement('div');\n container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n this.element_.parentElement.insertBefore(container, this.element_);\n this.element_.parentElement.removeChild(this.element_);\n container.appendChild(this.element_);\n var backgroundFlex = document.createElement('div');\n backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n container.appendChild(backgroundFlex);\n this.backgroundLower_ = document.createElement('div');\n this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n backgroundFlex.appendChild(this.backgroundLower_);\n this.backgroundUpper_ = document.createElement('div');\n this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n backgroundFlex.appendChild(this.backgroundUpper_);\n }\n this.boundInputHandler = this.onInput_.bind(this);\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n this.element_.addEventListener('input', this.boundInputHandler);\n this.element_.addEventListener('change', this.boundChangeHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n this.updateValueStyles_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSlider,\n classAsString: 'MaterialSlider',\n cssClass: 'mdl-js-slider',\n widget: true\n});","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Snackbar MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n this.element_ = element;\n this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n if (!this.textElement_) {\n throw new Error('There must be a message element for a snackbar.');\n }\n if (!this.actionElement_) {\n throw new Error('There must be an action element for a snackbar.');\n }\n this.active = false;\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.queuedNotifications_ = [];\n this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSnackbar.prototype.Constant_ = {\n // The duration of the snackbar show/hide animation, in ms.\n ANIMATION_LENGTH: 250\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSnackbar.prototype.cssClasses_ = {\n SNACKBAR: 'mdl-snackbar',\n MESSAGE: 'mdl-snackbar__text',\n ACTION: 'mdl-snackbar__action',\n ACTIVE: 'mdl-snackbar--active'\n};\n/**\n * Display the snackbar.\n *\n * @private\n */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n this.element_.setAttribute('aria-hidden', 'true');\n if (this.actionHandler_) {\n this.actionElement_.textContent = this.actionText_;\n this.actionElement_.addEventListener('click', this.actionHandler_);\n this.setActionHidden_(false);\n }\n this.textElement_.textContent = this.message_;\n this.element_.classList.add(this.cssClasses_.ACTIVE);\n this.element_.setAttribute('aria-hidden', 'false');\n setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n * Show the snackbar.\n *\n * @param {Object} data The data for the notification.\n * @public\n */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n if (data === undefined) {\n throw new Error('Please provide a data object with at least a message to display.');\n }\n if (data['message'] === undefined) {\n throw new Error('Please provide a message to be displayed.');\n }\n if (data['actionHandler'] && !data['actionText']) {\n throw new Error('Please provide action text with the handler.');\n }\n if (this.active) {\n this.queuedNotifications_.push(data);\n } else {\n this.active = true;\n this.message_ = data['message'];\n if (data['timeout']) {\n this.timeout_ = data['timeout'];\n } else {\n this.timeout_ = 2750;\n }\n if (data['actionHandler']) {\n this.actionHandler_ = data['actionHandler'];\n }\n if (data['actionText']) {\n this.actionText_ = data['actionText'];\n }\n this.displaySnackbar_();\n }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n * Check if the queue has items within it.\n * If it does, display the next entry.\n *\n * @private\n */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n if (this.queuedNotifications_.length > 0) {\n this.showSnackbar(this.queuedNotifications_.shift());\n }\n};\n/**\n * Cleanup the snackbar event listeners and accessiblity attributes.\n *\n * @private\n */\nMaterialSnackbar.prototype.cleanup_ = function () {\n this.element_.classList.remove(this.cssClasses_.ACTIVE);\n setTimeout(function () {\n this.element_.setAttribute('aria-hidden', 'true');\n this.textElement_.textContent = '';\n if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n this.setActionHidden_(true);\n this.actionElement_.textContent = '';\n this.actionElement_.removeEventListener('click', this.actionHandler_);\n }\n this.actionHandler_ = undefined;\n this.message_ = undefined;\n this.actionText_ = undefined;\n this.active = false;\n this.checkQueue_();\n }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n * Set the action handler hidden state.\n *\n * @param {boolean} value\n * @private\n */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n if (value) {\n this.actionElement_.setAttribute('aria-hidden', 'true');\n } else {\n this.actionElement_.removeAttribute('aria-hidden');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSnackbar,\n classAsString: 'MaterialSnackbar',\n cssClass: 'mdl-js-snackbar',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Spinner MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @param {HTMLElement} element The element that will be upgraded.\n * @constructor\n */\nvar MaterialSpinner = function MaterialSpinner(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSpinner.prototype.CssClasses_ = {\n MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n MDL_SPINNER_LEFT: 'mdl-spinner__left',\n MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n * Auxiliary method to create a spinner layer.\n *\n * @param {number} index Index of the layer to be created.\n * @public\n */\nMaterialSpinner.prototype.createLayer = function (index) {\n var layer = document.createElement('div');\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n var leftClipper = document.createElement('div');\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n var gapPatch = document.createElement('div');\n gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n var rightClipper = document.createElement('div');\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n var circleOwners = [\n leftClipper,\n gapPatch,\n rightClipper\n ];\n for (var i = 0; i < circleOwners.length; i++) {\n var circle = document.createElement('div');\n circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n circleOwners[i].appendChild(circle);\n }\n layer.appendChild(leftClipper);\n layer.appendChild(gapPatch);\n layer.appendChild(rightClipper);\n this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n * Stops the spinner animation.\n * Public method for users who need to stop the spinner for any reason.\n *\n * @public\n */\nMaterialSpinner.prototype.stop = function () {\n this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n * Starts the spinner animation.\n * Public method for users who need to manually start the spinner for any reason\n * (instead of just adding the 'is-active' class to their markup).\n *\n * @public\n */\nMaterialSpinner.prototype.start = function () {\n this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n * Initialize element.\n */\nMaterialSpinner.prototype.init = function () {\n if (this.element_) {\n for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n this.createLayer(i);\n }\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSpinner,\n classAsString: 'MaterialSpinner',\n cssClass: 'mdl-js-spinner',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Checkbox MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialSwitch = function MaterialSwitch(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialSwitch.prototype.CssClasses_ = {\n INPUT: 'mdl-switch__input',\n TRACK: 'mdl-switch__track',\n THUMB: 'mdl-switch__thumb',\n FOCUS_HELPER: 'mdl-switch__focus-helper',\n RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE: 'mdl-ripple',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_CHECKED: 'is-checked'\n};\n/**\n * Handle change of state.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onChange_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus of element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle mouseup.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n this.blur_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialSwitch.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkToggleState();\n};\n/**\n * Add blur.\n *\n * @private\n */\nMaterialSwitch.prototype.blur_ = function () {\n // TODO: figure out why there's a focus event being fired after our blur,\n // so that we can avoid this hack.\n window.setTimeout(function () {\n this.inputElement_.blur();\n }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n * Check the components disabled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkDisabled = function () {\n if (this.inputElement_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n * Check the components toggled state.\n *\n * @public\n */\nMaterialSwitch.prototype.checkToggleState = function () {\n if (this.inputElement_.checked) {\n this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n * Disable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.disable = function () {\n this.inputElement_.disabled = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n * Enable switch.\n *\n * @public\n */\nMaterialSwitch.prototype.enable = function () {\n this.inputElement_.disabled = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n * Activate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.on = function () {\n this.inputElement_.checked = true;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n * Deactivate switch.\n *\n * @public\n */\nMaterialSwitch.prototype.off = function () {\n this.inputElement_.checked = false;\n this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n * Initialize element.\n */\nMaterialSwitch.prototype.init = function () {\n if (this.element_) {\n this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n var track = document.createElement('div');\n track.classList.add(this.CssClasses_.TRACK);\n var thumb = document.createElement('div');\n thumb.classList.add(this.CssClasses_.THUMB);\n var focusHelper = document.createElement('span');\n focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n thumb.appendChild(focusHelper);\n this.element_.appendChild(track);\n this.element_.appendChild(thumb);\n this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n this.rippleContainerElement_ = document.createElement('span');\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n var ripple = document.createElement('span');\n ripple.classList.add(this.CssClasses_.RIPPLE);\n this.rippleContainerElement_.appendChild(ripple);\n this.element_.appendChild(this.rippleContainerElement_);\n }\n this.boundChangeHandler = this.onChange_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.inputElement_.addEventListener('change', this.boundChangeHandler);\n this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n this.updateClasses_();\n this.element_.classList.add('is-upgraded');\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialSwitch,\n classAsString: 'MaterialSwitch',\n cssClass: 'mdl-js-switch',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Textfield MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTextfield = function MaterialTextfield(element) {\n this.element_ = element;\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTextfield.prototype.Constant_ = {\n NO_MAX_ROWS: -1,\n MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTextfield.prototype.CssClasses_ = {\n LABEL: 'mdl-textfield__label',\n INPUT: 'mdl-textfield__input',\n IS_DIRTY: 'is-dirty',\n IS_FOCUSED: 'is-focused',\n IS_DISABLED: 'is-disabled',\n IS_INVALID: 'is-invalid',\n IS_UPGRADED: 'is-upgraded',\n HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n * Handle input being entered.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n var currentRowCount = event.target.value.split('\\n').length;\n if (event.keyCode === 13) {\n if (currentRowCount >= this.maxRows) {\n event.preventDefault();\n }\n }\n};\n/**\n * Handle focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle lost focus.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n * Handle reset event from out side.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTextfield.prototype.onReset_ = function (event) {\n this.updateClasses_();\n};\n/**\n * Handle class updates.\n *\n * @private\n */\nMaterialTextfield.prototype.updateClasses_ = function () {\n this.checkDisabled();\n this.checkValidity();\n this.checkDirty();\n this.checkFocus();\n};\n// Public methods.\n/**\n * Check the disabled state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDisabled = function () {\n if (this.input_.disabled) {\n this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n * Check the focus state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkFocus = function () {\n if (Boolean(this.element_.querySelector(':focus'))) {\n this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n * Check the validity state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkValidity = function () {\n if (this.input_.validity) {\n if (this.input_.validity.valid) {\n this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n } else {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n * Check the dirty state and update field accordingly.\n *\n * @public\n */\nMaterialTextfield.prototype.checkDirty = function () {\n if (this.input_.value && this.input_.value.length > 0) {\n this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n } else {\n this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n * Disable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.disable = function () {\n this.input_.disabled = true;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n * Enable text field.\n *\n * @public\n */\nMaterialTextfield.prototype.enable = function () {\n this.input_.disabled = false;\n this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n * Update text field value.\n *\n * @param {string} value The value to which to set the control (optional).\n * @public\n */\nMaterialTextfield.prototype.change = function (value) {\n this.input_.value = value || '';\n this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n * Initialize element.\n */\nMaterialTextfield.prototype.init = function () {\n if (this.element_) {\n this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n if (this.input_) {\n if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n if (isNaN(this.maxRows)) {\n this.maxRows = this.Constant_.NO_MAX_ROWS;\n }\n }\n if (this.input_.hasAttribute('placeholder')) {\n this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n }\n this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n this.boundFocusHandler = this.onFocus_.bind(this);\n this.boundBlurHandler = this.onBlur_.bind(this);\n this.boundResetHandler = this.onReset_.bind(this);\n this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n this.input_.addEventListener('focus', this.boundFocusHandler);\n this.input_.addEventListener('blur', this.boundBlurHandler);\n this.input_.addEventListener('reset', this.boundResetHandler);\n if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n // TODO: This should handle pasting multi line text.\n // Currently doesn't.\n this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n }\n var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n this.updateClasses_();\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n if (invalid) {\n this.element_.classList.add(this.CssClasses_.IS_INVALID);\n }\n if (this.input_.hasAttribute('autofocus')) {\n this.element_.focus();\n this.checkFocus();\n }\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTextfield,\n classAsString: 'MaterialTextfield',\n cssClass: 'mdl-js-textfield',\n widget: true\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Tooltip MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialTooltip = function MaterialTooltip(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialTooltip.prototype.CssClasses_ = {\n IS_ACTIVE: 'is-active',\n BOTTOM: 'mdl-tooltip--bottom',\n LEFT: 'mdl-tooltip--left',\n RIGHT: 'mdl-tooltip--right',\n TOP: 'mdl-tooltip--top'\n};\n/**\n * Handle mouseenter for tooltip.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n var props = event.target.getBoundingClientRect();\n var left = props.left + props.width / 2;\n var top = props.top + props.height / 2;\n var marginLeft = -1 * (this.element_.offsetWidth / 2);\n var marginTop = -1 * (this.element_.offsetHeight / 2);\n if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n left = props.width / 2;\n if (top + marginTop < 0) {\n this.element_.style.top = '0';\n this.element_.style.marginTop = '0';\n } else {\n this.element_.style.top = top + 'px';\n this.element_.style.marginTop = marginTop + 'px';\n }\n } else {\n if (left + marginLeft < 0) {\n this.element_.style.left = '0';\n this.element_.style.marginLeft = '0';\n } else {\n this.element_.style.left = left + 'px';\n this.element_.style.marginLeft = marginLeft + 'px';\n }\n }\n if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n this.element_.style.left = props.left + props.width + 10 + 'px';\n } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n } else {\n this.element_.style.top = props.top + props.height + 10 + 'px';\n }\n this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Hide tooltip on mouseleave or scroll\n *\n * @private\n */\nMaterialTooltip.prototype.hideTooltip_ = function () {\n this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n * Initialize element.\n */\nMaterialTooltip.prototype.init = function () {\n if (this.element_) {\n var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n if (forElId) {\n this.forElement_ = document.getElementById(forElId);\n }\n if (this.forElement_) {\n // It's left here because it prevents accidental text selection on Android\n if (!this.forElement_.hasAttribute('tabindex')) {\n this.forElement_.setAttribute('tabindex', '0');\n }\n this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);\n this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);\n window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);\n window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialTooltip,\n classAsString: 'MaterialTooltip',\n cssClass: 'mdl-tooltip'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Data Table Card MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {Element} element The element that will be upgraded.\n */\nvar MaterialDataTable = function MaterialDataTable(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialDataTable.prototype.CssClasses_ = {\n DATA_TABLE: 'mdl-data-table',\n SELECTABLE: 'mdl-data-table--selectable',\n SELECT_ELEMENT: 'mdl-data-table__select',\n IS_SELECTED: 'is-selected',\n IS_UPGRADED: 'is-upgraded'\n};\n/**\n * Generates and returns a function that toggles the selection state of a\n * single row (or multiple rows).\n *\n * @param {Element} checkbox Checkbox that toggles the selection state.\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n if (row) {\n return function () {\n if (checkbox.checked) {\n row.classList.add(this.CssClasses_.IS_SELECTED);\n } else {\n row.classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }.bind(this);\n }\n if (opt_rows) {\n return function () {\n var i;\n var el;\n if (checkbox.checked) {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].check();\n opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n }\n } else {\n for (i = 0; i < opt_rows.length; i++) {\n el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n el['MaterialCheckbox'].uncheck();\n opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n }\n }\n }.bind(this);\n }\n};\n/**\n * Creates a checkbox for a single or or multiple rows and hooks up the\n * event handling.\n *\n * @param {Element} row Row to toggle when checkbox changes.\n * @param {(Array|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n * @private\n */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n var label = document.createElement('label');\n var labelClasses = [\n 'mdl-checkbox',\n 'mdl-js-checkbox',\n 'mdl-js-ripple-effect',\n this.CssClasses_.SELECT_ELEMENT\n ];\n label.className = labelClasses.join(' ');\n var checkbox = document.createElement('input');\n checkbox.type = 'checkbox';\n checkbox.classList.add('mdl-checkbox__input');\n if (row) {\n checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n } else if (opt_rows) {\n checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n }\n label.appendChild(checkbox);\n componentHandler.upgradeElement(label, 'MaterialCheckbox');\n return label;\n};\n/**\n * Initialize element.\n */\nMaterialDataTable.prototype.init = function () {\n if (this.element_) {\n var firstHeader = this.element_.querySelector('th');\n var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n var rows = bodyRows.concat(footRows);\n if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n var th = document.createElement('th');\n var headerCheckbox = this.createCheckbox_(null, rows);\n th.appendChild(headerCheckbox);\n firstHeader.parentElement.insertBefore(th, firstHeader);\n for (var i = 0; i < rows.length; i++) {\n var firstCell = rows[i].querySelector('td');\n if (firstCell) {\n var td = document.createElement('td');\n if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n var rowCheckbox = this.createCheckbox_(rows[i]);\n td.appendChild(rowCheckbox);\n }\n rows[i].insertBefore(td, firstCell);\n }\n }\n this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialDataTable,\n classAsString: 'MaterialDataTable',\n cssClass: 'mdl-js-data-table'\n});","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Class constructor for Ripple MDL component.\n * Implements MDL component design pattern defined at:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @constructor\n * @param {HTMLElement} element The element that will be upgraded.\n */\nvar MaterialRipple = function MaterialRipple(element) {\n this.element_ = element;\n // Initialize instance.\n this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n * Store constants in one place so they can be updated easily.\n *\n * @enum {string | number}\n * @private\n */\nMaterialRipple.prototype.Constant_ = {\n INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n INITIAL_SIZE: '1px',\n INITIAL_OPACITY: '0.4',\n FINAL_OPACITY: '0',\n FINAL_SCALE: ''\n};\n/**\n * Store strings for class names defined by this component that are used in\n * JavaScript. This allows us to simply change it in one place should we\n * decide to modify at a later date.\n *\n * @enum {string}\n * @private\n */\nMaterialRipple.prototype.CssClasses_ = {\n RIPPLE_CENTER: 'mdl-ripple--center',\n RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n RIPPLE: 'mdl-ripple',\n IS_ANIMATING: 'is-animating',\n IS_VISIBLE: 'is-visible'\n};\n/**\n * Handle mouse / finger down on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.downHandler_ = function (event) {\n if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n var rect = this.element_.getBoundingClientRect();\n this.boundHeight = rect.height;\n this.boundWidth = rect.width;\n this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n this.rippleElement_.style.width = this.rippleSize_ + 'px';\n this.rippleElement_.style.height = this.rippleSize_ + 'px';\n }\n this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n this.ignoringMouseDown_ = false;\n } else {\n if (event.type === 'touchstart') {\n this.ignoringMouseDown_ = true;\n }\n var frameCount = this.getFrameCount();\n if (frameCount > 0) {\n return;\n }\n this.setFrameCount(1);\n var bound = event.currentTarget.getBoundingClientRect();\n var x;\n var y;\n // Check if we are handling a keyboard click.\n if (event.clientX === 0 && event.clientY === 0) {\n x = Math.round(bound.width / 2);\n y = Math.round(bound.height / 2);\n } else {\n var clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;\n x = Math.round(clientX - bound.left);\n y = Math.round(clientY - bound.top);\n }\n this.setRippleXY(x, y);\n this.setRippleStyles(true);\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n }\n};\n/**\n * Handle mouse / finger up on element.\n *\n * @param {Event} event The event that fired.\n * @private\n */\nMaterialRipple.prototype.upHandler_ = function (event) {\n // Don't fire for the artificial \"mouseup\" generated by a double-click.\n if (event && event.detail !== 2) {\n // Allow a repaint to occur before removing this class, so the animation\n // shows for tap events, which seem to trigger a mouseup too soon after\n // mousedown.\n window.setTimeout(function () {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n }.bind(this), 0);\n }\n};\n/**\n * Initialize element.\n */\nMaterialRipple.prototype.init = function () {\n if (this.element_) {\n var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n this.frameCount_ = 0;\n this.rippleSize_ = 0;\n this.x_ = 0;\n this.y_ = 0;\n // Touch start produces a compat mouse down event, which would cause a\n // second ripples. To avoid that, we use this property to ignore the first\n // mouse down after a touch start.\n this.ignoringMouseDown_ = false;\n this.boundDownHandler = this.downHandler_.bind(this);\n this.element_.addEventListener('mousedown', this.boundDownHandler);\n this.element_.addEventListener('touchstart', this.boundDownHandler);\n this.boundUpHandler = this.upHandler_.bind(this);\n this.element_.addEventListener('mouseup', this.boundUpHandler);\n this.element_.addEventListener('mouseleave', this.boundUpHandler);\n this.element_.addEventListener('touchend', this.boundUpHandler);\n this.element_.addEventListener('blur', this.boundUpHandler);\n /**\n * Getter for frameCount_.\n * @return {number} the frame count.\n */\n this.getFrameCount = function () {\n return this.frameCount_;\n };\n /**\n * Setter for frameCount_.\n * @param {number} fC the frame count.\n */\n this.setFrameCount = function (fC) {\n this.frameCount_ = fC;\n };\n /**\n * Getter for rippleElement_.\n * @return {Element} the ripple element.\n */\n this.getRippleElement = function () {\n return this.rippleElement_;\n };\n /**\n * Sets the ripple X and Y coordinates.\n * @param {number} newX the new X coordinate\n * @param {number} newY the new Y coordinate\n */\n this.setRippleXY = function (newX, newY) {\n this.x_ = newX;\n this.y_ = newY;\n };\n /**\n * Sets the ripple styles.\n * @param {boolean} start whether or not this is the start frame.\n */\n this.setRippleStyles = function (start) {\n if (this.rippleElement_ !== null) {\n var transformString;\n var scale;\n var size;\n var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n if (start) {\n scale = this.Constant_.INITIAL_SCALE;\n size = this.Constant_.INITIAL_SIZE;\n } else {\n scale = this.Constant_.FINAL_SCALE;\n size = this.rippleSize_ + 'px';\n if (recentering) {\n offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n }\n }\n transformString = 'translate(-50%, -50%) ' + offset + scale;\n this.rippleElement_.style.webkitTransform = transformString;\n this.rippleElement_.style.msTransform = transformString;\n this.rippleElement_.style.transform = transformString;\n if (start) {\n this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n } else {\n this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n }\n }\n };\n /**\n * Handles an animation frame.\n */\n this.animFrameHandler = function () {\n if (this.frameCount_-- > 0) {\n window.requestAnimationFrame(this.animFrameHandler.bind(this));\n } else {\n this.setRippleStyles(false);\n }\n };\n }\n }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n constructor: MaterialRipple,\n classAsString: 'MaterialRipple',\n cssClass: 'mdl-js-ripple-effect',\n widget: false\n});","var utils = (function () {\r\n 'use strict';\r\n\r\n function selectDomElement(selector) {\r\n return document.querySelector(selector);\r\n }\r\n\r\n function getCurrentYear() {\r\n return (new Date()).getFullYear();\r\n }\r\n\r\n function getRadioValueForEmail(radioElements) {\r\n var value = '';\r\n\r\n for (var i = 0; i < radioElements.length; i++) {\r\n if (radioElements[i].checked) {\r\n value = radioElements[i].getAttribute('data');\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function getRadioValueForLink(radioElements) {\r\n var value = '';\r\n\r\n for (var i = 0; i < radioElements.length; i++) {\r\n if (radioElements[i].checked) {\r\n value = radioElements[i].getAttribute('data-id');\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function getCheckboxValueForEmail(element) {\r\n var value = '';\r\n\r\n if (element.checked) {\r\n value = element.getAttribute('data');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function getCheckboxValueForLink(element) {\r\n var value = '';\r\n\r\n if (element.checked) {\r\n value = element.id;\r\n value = element.getAttribute('data-id');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function unselectElement(element) {\r\n element.checked = '';\r\n element.checked = false;\r\n element.parentNode.classList.remove('is-checked');\r\n }\r\n\r\n function selectElement(element) {\r\n element.checked = 'checked';\r\n element.checked = true;\r\n element.parentNode.classList.add('is-checked');\r\n }\r\n\r\n function displayElement(selector) {\r\n selectDomElement(selector).classList.remove('hidden');\r\n }\r\n\r\n function display(element) {\r\n element.classList.remove('hidden');\r\n }\r\n\r\n function hideElement(selector) {\r\n selectDomElement(selector).classList.add('hidden');\r\n }\r\n\r\n function hide(element) {\r\n element.classList.add('hidden');\r\n }\r\n\r\n function displayParent(element) {\r\n element.parentNode.classList.remove('hidden');\r\n }\r\n\r\n function hideParent(element) {\r\n element.parentNode.classList.add('hidden');\r\n }\r\n\r\n function displayImage(imgContainerElement, imgPath) {\r\n imgContainerElement.style.backgroundImage = imgPath;\r\n }\r\n\r\n function hideImage(imgContainerElement) {\r\n imgContainerElement.style.backgroundImage = 'none';\r\n }\r\n\r\n function displayImgIfElementSelected(element, imgContainer, imgPath) {\r\n element.checked ? displayImage(imgContainer, imgPath) : hideImage(imgContainer);\r\n }\r\n\r\n function unselectAllRadiosAndCheckboxes(containerId) {\r\n var checks = document.querySelectorAll(containerId + ' input[type=\"checkbox\"]');\r\n var radios = document.querySelectorAll(containerId + ' input[type=\"radio\"]');\r\n\r\n for (var i = 0; i < checks.length; i++) {\r\n unselectElement(checks[i]);\r\n }\r\n\r\n for (var j = 0; j < radios.length; j++) {\r\n unselectElement(radios[j]);\r\n }\r\n }\r\n\r\n function displayCornerView(element, cornerViewContainerElement) {\r\n if (element.checked) {\r\n cornerViewContainerElement.className = 'active';\r\n } else {\r\n cornerViewContainerElement.className = '';\r\n }\r\n }\r\n\r\n return {\r\n selectDomElement: selectDomElement,\r\n getCurrentYear: getCurrentYear,\r\n getRadioValueForEmail: getRadioValueForEmail,\r\n getRadioValueForLink: getRadioValueForLink,\r\n getCheckboxValueForEmail: getCheckboxValueForEmail,\r\n getCheckboxValueForLink: getCheckboxValueForLink,\r\n selectElement: selectElement,\r\n unselectElement: unselectElement,\r\n displayElement: displayElement,\r\n display: display,\r\n hideElement: hideElement,\r\n hide: hide,\r\n displayParent: displayParent,\r\n hideParent: hideParent,\r\n displayImage: displayImage,\r\n hideImage: hideImage,\r\n displayImgIfElementSelected: displayImgIfElementSelected,\r\n unselectAllRadiosAndCheckboxes: unselectAllRadiosAndCheckboxes,\r\n displayCornerView: displayCornerView\r\n };\r\n}());\r\n","var model = (function () {\r\n var baseEngines = {\r\n gasoline: '429cc Gasoline Engine (07042)',\r\n electric: '48v AC Electric Engine (07043)'\r\n };\r\n\r\n var data = {\r\n link: {\r\n },\r\n email: {\r\n currentEngine: baseEngines.gasoline,\r\n currentBed: 'Cargo Bed (07046)',\r\n lTrackKit: '',\r\n bedRacking: '',\r\n electricLiftKit: '',\r\n seat: '',\r\n seatCover: '',\r\n seatCanopy: '',\r\n canopyWindshield: '',\r\n exteriorMirrors: '',\r\n mirrors: '',\r\n cabDoor: '',\r\n washerBottle: '',\r\n beaconLightKit: '',\r\n ledWorkLightKit: '',\r\n robExteriorMirrors: '',\r\n robMirrors: '',\r\n brushGuard: '',\r\n brushGuardFrontReceiver: '',\r\n frontReceiver: '',\r\n front: '',\r\n rear: '',\r\n tires: 'Turf Tires (137-2785)',\r\n signalLights: '',\r\n hornKit: '',\r\n backupAlarm: '',\r\n parkingBrakeAlarm: '',\r\n underHoodBox: '',\r\n powerKit: '',\r\n ramBall: '',\r\n sparkArrestor: ''\r\n },\r\n base:''\r\n };\r\n\r\n return {\r\n config: data\r\n };\r\n}());\r\n","var rules = (function () {\r\n var baseEngines = {\r\n gasoline: '429cc Gasoline Engine (07042)',\r\n electric: '48v AC Electric Engine (07043)'\r\n };\r\n\r\n var images = {\r\n walkSpreaderRearContainer: utils.selectDomElement('#walk-spreader-rear-img'),\r\n trashCanFrontContainer: utils.selectDomElement('#trash-can-front-img'),\r\n trashCanRearContainer: utils.selectDomElement('#trash-can-rear-img'),\r\n baseImageContainer: utils.selectDomElement('#base-img'),\r\n bedContainer: utils.selectDomElement('#bed-img'),\r\n bedRackingContainer: utils.selectDomElement('#bed-racking-img'),\r\n canopyContainer: utils.selectDomElement('#canopy-img'),\r\n canopyRopsSertifiedContainer: utils.selectDomElement('#canopy-rops-sertified-img'),\r\n seatsContainer: utils.selectDomElement('#seats-img'),\r\n seatsFrontContainer: utils.selectDomElement('#seats-front-img'),\r\n seatsBackContainer: utils.selectDomElement('#seats-back-img'),\r\n canopyRopsContainer: utils.selectDomElement('#canopy-rops-img'),\r\n canopyRopsWCContainer: utils.selectDomElement('#canopy-ropswc-img'),\r\n beaconLightContainer: utils.selectDomElement('#beacon-light-kit-img'),\r\n ledLightContainer: utils.selectDomElement('#led-work-light-img'),\r\n cabDoorFrontContainer: utils.selectDomElement('#cab-door-front-img'),\r\n cabDoorBackContainer: utils.selectDomElement('#cab-door-back-img'),\r\n tiresContainer: utils.selectDomElement('#tires-img'),\r\n tiresAggressiveContainer: utils.selectDomElement('#tires-aggressive-img'),\r\n electricContainer: utils.selectDomElement('#electric-img'),\r\n interiorMirrorStandardContainer: utils.selectDomElement('#standard-interior-mirror-img'),\r\n interiorMirrorAngleContainer: utils.selectDomElement('#wide-angle-mirror-img'),\r\n interiorMirrorWinkContainer: utils.selectDomElement('#wink-interior-mirror-img'),\r\n ropsInteriorMirrorStandardContainer: utils.selectDomElement('#rops-standard-interior-mirror-img'),\r\n ropsInteriorMirrorAngleContainer: utils.selectDomElement('#rops-wide-angle-mirror-img'),\r\n canopyWindshieldContainer: utils.selectDomElement('#canopy-windshield-img'),\r\n exteriorMirrorsContainer: utils.selectDomElement('#exterior-mirrors-img'),\r\n ropsExteriorMirrorsContainer: utils.selectDomElement('#rops-exterior-mirrors-img'),\r\n brushGuardContainer: utils.selectDomElement('#brush-guard-img'),\r\n brushGuardFrontContainer: utils.selectDomElement('#brush-guard-front-img'),\r\n frontReceiverContainer: utils.selectDomElement('#front-reciever-img'),\r\n hoseReelFrontContainer: utils.selectDomElement('#hose-reel-front-img'),\r\n walkSpreaderFrontContainer: utils.selectDomElement('#walk-spreader-front-img'),\r\n hoseReelRearContainer: utils.selectDomElement('#hose-reel-rear-img'),\r\n lightkitHomoligationContainer: utils.selectDomElement('#lightkit-homoligation-img'),\r\n lightkitContainer: utils.selectDomElement('#lightkit-img'),\r\n thumbsContainer: utils.selectDomElement('#thumbs-container')\r\n };\r\n\r\n function engineRules(elements, imageUrls) {\r\n if (elements.engine.electricRadio.checked && elements.accessories.gasoline.signalLightsCheckbox.checked) {\r\n utils.unselectElement(elements.accessories.gasoline.signalLightsCheckbox);\r\n }\r\n\r\n if (elements.engine.gasolineRadio.checked && elements.accessories.electric.signalLightsCheckbox.checked) {\r\n utils.unselectElement(elements.accessories.electric.signalLightsCheckbox);\r\n }\r\n\r\n // engines menu\r\n model.config.email.currentEngine = utils.getRadioValueForEmail([elements.engine.gasolineRadio, elements.engine.electricRadio]);\r\n model.config.link.currentEngine = utils.getRadioValueForLink([elements.engine.gasolineRadio, elements.engine.electricRadio]);\r\n\r\n // engines images\r\n utils.displayImgIfElementSelected(elements.engine.electricRadio, images.electricContainer, imageUrls.electricEngine);\r\n }\r\n\r\n function bedRules(elements, imageUrls) {\r\n\r\n // Bed options menu\r\n model.config.email.currentBed = utils.getRadioValueForEmail([elements.bed.cargoRadio, elements.bed.flat4ftRadio]);\r\n model.config.link.currentBed = utils.getRadioValueForLink([elements.bed.cargoRadio, elements.bed.flat4ftRadio]);\r\n\r\n // Bed options images\r\n if (elements.bed.cargoRadio.checked) {\r\n utils.displayImage(images.bedContainer, imageUrls.cargobed);\r\n utils.displayImgIfElementSelected(elements.bed.bedRackingCheckbox, images.bedRackingContainer, imageUrls.bedRacking);\r\n } else {\r\n utils.displayImage(images.bedContainer, imageUrls.flatBed4ft);\r\n utils.hideImage(images.hoseReelRearContainer);\r\n }\r\n\r\n if (elements.bed.flat4ftRadio.checked) {\r\n utils.unselectElement(elements.bed.lTrackKitCheckbox);\r\n elements.cornerImages.lTrack6inContainer.className = '';\r\n elements.cornerImages.lTrack2inContainer.className = '';\r\n }\r\n\r\n // set L-track Kit\r\n if (elements.bed.lTrackKitCheckbox.checked) {\r\n utils.display(elements.bed.lKitRadiosContainer);\r\n model.config.email.lTrackKit = utils.getRadioValueForEmail([elements.bed.lTrack6inRadio, elements.bed.lTrack2inRadio]);\r\n model.config.link.lTrackKitCheckbox = utils.getCheckboxValueForLink(elements.bed.lTrackKitCheckbox);\r\n model.config.link.lTrackKit = utils.getRadioValueForLink([elements.bed.lTrack6inRadio, elements.bed.lTrack2inRadio]);\r\n\r\n // corner images\r\n utils.displayCornerView(elements.bed.lTrack6inRadio, elements.cornerImages.lTrack6inContainer);\r\n utils.displayCornerView(elements.bed.lTrack2inRadio, elements.cornerImages.lTrack2inContainer);\r\n } else {\r\n utils.hide(elements.bed.lKitRadiosContainer);\r\n utils.selectElement(elements.bed.lTrack6inRadio);\r\n utils.unselectElement(elements.bed.lTrack2inRadio);\r\n\r\n model.config.email.lTrackKit = '';\r\n model.config.link.lTrackKitCheckbox = '';\r\n model.config.link.lTrackKit = '';\r\n elements.cornerImages.lTrack6inContainer.className = '';\r\n elements.cornerImages.lTrack2inContainer.className = '';\r\n }\r\n\r\n // set bed Racking\r\n if (elements.bed.flat4ftRadio.checked) {\r\n utils.unselectElement(elements.bed.bedRackingCheckbox);\r\n utils.unselectElement(elements.bed.lTrackKitCheckbox);\r\n utils.hideImage(images.bedRackingContainer);\r\n utils.hideParent(elements.bed.lTrackKitCheckbox);\r\n utils.hide(elements.bed.lKitRadiosContainer);\r\n utils.hideParent(elements.bed.bedRackingCheckbox);\r\n utils.hide(elements.bed.bedRackingRadiosContainer);\r\n utils.hide(elements.bed.cargoSubTitle);\r\n } else {\r\n utils.displayParent(elements.bed.lTrackKitCheckbox);\r\n utils.displayParent(elements.bed.bedRackingCheckbox);\r\n utils.display(elements.bed.cargoSubTitle);\r\n }\r\n\r\n if (elements.bed.bedRackingCheckbox.checked) {\r\n utils.display(elements.bed.bedRackingRadiosContainer);\r\n model.config.email.bedRackingCheckbox = utils.getCheckboxValueForEmail(elements.bed.bedRackingCheckbox);\r\n model.config.email.bedRacking = utils.getRadioValueForEmail([\r\n elements.bed.bedRackingNoneRadio,\r\n elements.bed.bedRackingSmallRadio,\r\n elements.bed.bedRackingLargeRadio\r\n ]);\r\n\r\n model.config.link.bedRackingCheckbox = utils.getCheckboxValueForLink(elements.bed.bedRackingCheckbox);\r\n model.config.link.bedRacking = utils.getRadioValueForLink([\r\n elements.bed.bedRackingNoneRadio,\r\n elements.bed.bedRackingSmallRadio,\r\n elements.bed.bedRackingLargeRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.bed.bedRackingRadiosContainer);\r\n utils.selectElement(elements.bed.bedRackingNoneRadio);\r\n utils.unselectElement(elements.bed.bedRackingSmallRadio);\r\n utils.unselectElement(elements.bed.bedRackingLargeRadio);\r\n model.config.email.bedRacking = '';\r\n model.config.link.bedRackingCheckbox = '';\r\n model.config.link.bedRacking = '';\r\n }\r\n\r\n // set electric Lift Kit\r\n if (model.config.email.currentEngine === baseEngines.electric) {\r\n utils.hideParent(elements.bed.electricLiftKit12v);\r\n utils.displayParent(elements.bed.electricLiftKit48v);\r\n\r\n model.config.email.electricLiftKit = utils.getCheckboxValueForEmail(elements.bed.electricLiftKit48v);\r\n model.config.link.electricLiftKit = utils.getCheckboxValueForLink(elements.bed.electricLiftKit48v);\r\n } else {\r\n utils.hideParent(elements.bed.electricLiftKit48v);\r\n utils.displayParent(elements.bed.electricLiftKit12v);\r\n\r\n model.config.email.electricLiftKit = utils.getCheckboxValueForEmail(elements.bed.electricLiftKit12v);\r\n model.config.link.electricLiftKit = utils.getCheckboxValueForLink(elements.bed.electricLiftKit12v);\r\n }\r\n\r\n // corner images\r\n utils.displayCornerView(elements.bed.bedRackingSmallRadio, elements.cornerImages.bedRackingQuickfistContainer);\r\n utils.displayCornerView(elements.bed.bedRackingLargeRadio, elements.cornerImages.bedRackingQuickfistLargeContainer);\r\n }\r\n\r\n function bedRules2pext(elements, imageUrls) {\r\n elements.cornerImages.lTrack6inContainer.className = '';\r\n elements.cornerImages.lTrack2inContainer.className = '';\r\n\r\n elements.cornerImages.bedRackingQuickfistContainer.className = '';\r\n elements.cornerImages.bedRackingQuickfistLargeContainer.className = '';\r\n model.config.link.currentBed = 'fb-2pext';\r\n\r\n utils.selectElement(elements.bed.electricLiftKit12v);\r\n utils.selectElement(elements.bed.electricLiftKit48v);\r\n\r\n // set electric Lift Kit\r\n if (model.config.email.currentEngine === baseEngines.electric) {\r\n utils.hideParent(elements.bed.electricLiftKit12v);\r\n utils.displayParent(elements.bed.electricLiftKit48v);\r\n\r\n model.config.email.electricLiftKit = utils.getCheckboxValueForEmail(elements.bed.electricLiftKit48v);\r\n model.config.link.electricLiftKit = utils.getCheckboxValueForLink(elements.bed.electricLiftKit48v);\r\n } else {\r\n utils.hideParent(elements.bed.electricLiftKit48v);\r\n utils.displayParent(elements.bed.electricLiftKit12v);\r\n\r\n model.config.email.electricLiftKit = utils.getCheckboxValueForEmail(elements.bed.electricLiftKit12v);\r\n model.config.link.electricLiftKit = utils.getCheckboxValueForLink(elements.bed.electricLiftKit12v);\r\n }\r\n }\r\n\r\n function seatsRules(elements, imageUrls) {\r\n\r\n // Seating menu options\r\n model.config.email.seat = utils.getRadioValueForEmail([elements.seat.benchSeatRadio, elements.seat.bucketSeatRadio]);\r\n model.config.link.seat = utils.getRadioValueForLink([elements.seat.benchSeatRadio, elements.seat.bucketSeatRadio]);\r\n\r\n if (elements.seat.bucketSeatRadio.checked) {\r\n utils.displayParent(elements.seat.seatCoverCheckbox);\r\n\r\n model.config.email.seatCover = utils.getCheckboxValueForEmail(elements.seat.seatCoverCheckbox);\r\n model.config.link.seatCover = utils.getCheckboxValueForLink(elements.seat.seatCoverCheckbox);\r\n } else {\r\n utils.hideParent(elements.seat.seatCoverCheckbox);\r\n utils.unselectElement(elements.seat.seatCoverCheckbox);\r\n\r\n model.config.email.seatCover = '';\r\n model.config.link.seatCover = '';\r\n }\r\n\r\n // Seating images preview\r\n elements.seat.benchSeatRadio.checked ?\r\n utils.displayImage(images.seatsContainer, imageUrls.benchSeat) :\r\n utils.displayImage(images.seatsContainer, imageUrls.bucketSeat);\r\n }\r\n\r\n function seatsRules4p(elements, imageUrls) {\r\n\r\n // Seating menu options\r\n model.config.email.seatFront = utils.getRadioValueForEmail([elements.seat.benchSeatFrontRadio, elements.seat.bucketSeatFrontRadio]);\r\n model.config.email.seatBack = utils.getRadioValueForEmail([elements.seat.benchSeatBackRadio, elements.seat.bucketSeatBackRadio]);\r\n model.config.link.seatFront = utils.getRadioValueForLink([elements.seat.benchSeatFrontRadio, elements.seat.bucketSeatFrontRadio]);\r\n model.config.link.seatBack = utils.getRadioValueForLink([elements.seat.benchSeatBackRadio, elements.seat.bucketSeatBackRadio]);\r\n\r\n if (elements.seat.bucketSeatFrontRadio.checked) {\r\n utils.displayParent(elements.seat.seatCoverFrontCheckbox);\r\n\r\n model.config.email.seatCoverFront = utils.getCheckboxValueForEmail(elements.seat.seatCoverFrontCheckbox);\r\n model.config.link.seatCoverFront = utils.getCheckboxValueForLink(elements.seat.seatCoverFrontCheckbox);\r\n } else {\r\n utils.hideParent(elements.seat.seatCoverFrontCheckbox);\r\n utils.unselectElement(elements.seat.seatCoverFrontCheckbox);\r\n\r\n model.config.email.seatCoverFront = '';\r\n model.config.link.seatCoverFront = '';\r\n }\r\n\r\n if (elements.seat.bucketSeatBackRadio.checked) {\r\n utils.displayParent(elements.seat.seatCoverBackCheckbox);\r\n\r\n model.config.email.seatCoverBack = utils.getCheckboxValueForEmail(elements.seat.seatCoverBackCheckbox);\r\n model.config.link.seatCoverBack = utils.getCheckboxValueForLink(elements.seat.seatCoverBackCheckbox);\r\n } else {\r\n utils.hideParent(elements.seat.seatCoverBackCheckbox);\r\n utils.unselectElement(elements.seat.seatCoverBackCheckbox);\r\n\r\n model.config.email.seatCoverBack = '';\r\n model.config.link.seatCoverBack = '';\r\n }\r\n\r\n // Seating images preview\r\n if (elements.seat.benchSeatFrontRadio.checked) {\r\n utils.hideImage(images.seatsFrontContainer, imageUrls.bucketSeatFront);\r\n utils.displayImage(images.seatsFrontContainer, imageUrls.benchSeatFront);\r\n\r\n } else {\r\n utils.hideImage(images.seatsFrontContainer, imageUrls.benchSeatFront);\r\n utils.displayImage(images.seatsFrontContainer, imageUrls.bucketSeatFront);\r\n }\r\n\r\n if (elements.seat.benchSeatBackRadio.checked) {\r\n utils.hideImage(images.seatsBackContainer, imageUrls.bucketSeatBack);\r\n utils.displayImage(images.seatsBackContainer, imageUrls.benchSeatBack);\r\n\r\n } else {\r\n utils.hideImage(images.seatsBackContainer, imageUrls.benchSeatBack);\r\n utils.displayImage(images.seatsBackContainer, imageUrls.bucketSeatBack);\r\n }\r\n }\r\n\r\n function canopyRules4p(elements, imageUrls) {\r\n\r\n // Cab & Canopy menu\r\n if (elements.canopy.canopyCheckbox.checked) {\r\n model.config.email.seatCanopy = utils.getCheckboxValueForEmail(elements.canopy.canopyCheckbox);\r\n model.config.email.canopyWindshield = utils.getCheckboxValueForEmail(elements.canopy.canopyWindshieldCheckbox);\r\n model.config.email.exteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.exteriorMirrorsCheckbox);\r\n model.config.email.mirrors = utils.getRadioValueForEmail([\r\n elements.canopy.interiorMirrorNoneRadio,\r\n elements.canopy.interiorMirrorStandardRadio,\r\n elements.canopy.interiorMirrorAngleRadio,\r\n elements.canopy.interiorMirrorWinkRadio\r\n ]);\r\n\r\n model.config.link.seatCanopy = utils.getCheckboxValueForLink(elements.canopy.canopyCheckbox);\r\n model.config.link.canopyWindshield = utils.getCheckboxValueForLink(elements.canopy.canopyWindshieldCheckbox);\r\n model.config.link.exteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.exteriorMirrorsCheckbox);\r\n model.config.link.mirrors = utils.getRadioValueForLink([\r\n elements.canopy.interiorMirrorNoneRadio,\r\n elements.canopy.interiorMirrorStandardRadio,\r\n elements.canopy.interiorMirrorAngleRadio,\r\n elements.canopy.interiorMirrorWinkRadio\r\n ]);\r\n\r\n utils.display(elements.canopy.canopyAttachmentsContainer);\r\n } else {\r\n utils.hide(elements.canopy.canopyAttachmentsContainer);\r\n utils.selectElement(elements.canopy.interiorMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorWinkRadio);\r\n utils.unselectElement(elements.canopy.canopyWindshieldCheckbox);\r\n utils.unselectElement(elements.canopy.exteriorMirrorsCheckbox);\r\n\r\n model.config.email.seatCanopy = '';\r\n model.config.email.canopyWindshield = '';\r\n model.config.email.exteriorMirrors = '';\r\n model.config.email.mirrors = '';\r\n model.config.link.seatCanopy = '';\r\n model.config.link.canopyWindshield = '';\r\n model.config.link.exteriorMirrors = '';\r\n model.config.link.mirrors = '';\r\n }\r\n\r\n // Cab & Canopy images\r\n utils.displayImgIfElementSelected(elements.canopy.canopyCheckbox, images.canopyContainer, imageUrls.canopy);\r\n\r\n if (elements.canopy.canopyCheckbox.checked) {\r\n utils.displayImgIfElementSelected(elements.canopy.canopyWindshieldCheckbox, images.canopyWindshieldContainer, imageUrls.canopyWindshield);\r\n utils.displayImgIfElementSelected(elements.canopy.exteriorMirrorsCheckbox, images.exteriorMirrorsContainer, imageUrls.exteriorMirrors);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorStandardRadio, images.interiorMirrorStandardContainer, imageUrls.interiorMirrorStandard);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorAngleRadio, images.interiorMirrorAngleContainer, imageUrls.interiorMirrorAngle);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorWinkRadio, images.interiorMirrorWinkContainer, imageUrls.interiorMirrorWink);\r\n } else {\r\n utils.hideImage(images.canopyWindshieldContainer);\r\n utils.hideImage(images.exteriorMirrorsContainer);\r\n utils.hideImage(images.interiorMirrorStandardContainer);\r\n utils.hideImage(images.interiorMirrorAngleContainer);\r\n utils.hideImage(images.interiorMirrorWinkContainer);\r\n }\r\n }\r\n\r\n function canopyRules2p(elements, imageUrls) {\r\n\r\n // Cab & Canopy menu rules 2p\r\n model.config.email.seatCanopy = utils.getRadioValueForEmail([\r\n elements.canopy.canopyNoneRadio,\r\n elements.canopy.canopyTwoSeatRadio,\r\n elements.canopy.ropsCabRadio,\r\n elements.canopy.ropsTwoPostCabRadio,\r\n elements.canopy.ropsTwoPostCabWithCanopyRadio\r\n ]);\r\n\r\n model.config.link.seatCanopy = utils.getRadioValueForLink([\r\n elements.canopy.canopyNoneRadio,\r\n elements.canopy.canopyTwoSeatRadio,\r\n elements.canopy.ropsCabRadio,\r\n elements.canopy.ropsTwoPostCabRadio,\r\n elements.canopy.ropsTwoPostCabWithCanopyRadio\r\n ]);\r\n\r\n if (elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.display(elements.canopy.canopyTwoSeatsContainer);\r\n utils.hide(elements.canopy.canopyRopsContainer);\r\n\r\n model.config.email.canopyWindshield = utils.getCheckboxValueForEmail(elements.canopy.canopyTwoSeatsWindshieldCheckbox);\r\n model.config.email.exteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.exteriorTwoSeatsMirrorsCheckbox);\r\n model.config.email.mirrors = utils.getRadioValueForEmail([\r\n elements.canopy.interiorTwoSeatsMirrorNoneRadio,\r\n elements.canopy.interiorTwoSeatsMirrorStandardRadio,\r\n elements.canopy.interiorTwoSeatsMirrorAngleRadio,\r\n elements.canopy.interiorTwoSeatsMirrorWinkRadio]);\r\n\r\n model.config.link.canopyWindshield = utils.getCheckboxValueForLink(elements.canopy.canopyTwoSeatsWindshieldCheckbox);\r\n model.config.link.exteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.exteriorTwoSeatsMirrorsCheckbox);\r\n model.config.link.mirrors = utils.getRadioValueForLink([\r\n elements.canopy.interiorTwoSeatsMirrorNoneRadio,\r\n elements.canopy.interiorTwoSeatsMirrorStandardRadio,\r\n elements.canopy.interiorTwoSeatsMirrorAngleRadio,\r\n elements.canopy.interiorTwoSeatsMirrorWinkRadio]);\r\n } else {\r\n utils.hide(elements.canopy.canopyTwoSeatsContainer);\r\n utils.selectElement(elements.canopy.interiorTwoSeatsMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.interiorTwoSeatsMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.interiorTwoSeatsMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.interiorTwoSeatsMirrorWinkRadio);\r\n utils.unselectElement(elements.canopy.canopyTwoSeatsWindshieldCheckbox);\r\n utils.unselectElement(elements.canopy.exteriorTwoSeatsMirrorsCheckbox);\r\n\r\n model.config.email.canopyWindshield = '';\r\n model.config.email.exteriorMirrors = '';\r\n model.config.email.mirrors = '';\r\n model.config.link.canopyWindshield = '';\r\n model.config.link.exteriorMirrors = '';\r\n model.config.link.mirrors = '';\r\n }\r\n\r\n if (elements.canopy.ropsTwoPostCabWithCanopyRadio.checked) {\r\n utils.display(elements.canopy.canopyRopsContainer);\r\n utils.hide(elements.canopy.canopyTwoSeatsContainer);\r\n\r\n model.config.email.canopyWindshield = utils.getCheckboxValueForEmail(elements.canopy.canopyRopsWindshieldCheckbox);\r\n model.config.email.exteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.exteriorRopsMirrorsCheckbox);\r\n model.config.email.mirrors = utils.getRadioValueForEmail([\r\n elements.canopy.interiorRopsMirrorNoneRadio,\r\n elements.canopy.interiorRopsMirrorStandardRadio,\r\n elements.canopy.interiorRopsMirrorAngleRadio,\r\n elements.canopy.interiorRopsMirrorWinkRadio\r\n ]);\r\n\r\n model.config.link.canopyWindshield = utils.getCheckboxValueForLink(elements.canopy.canopyRopsWindshieldCheckbox);\r\n model.config.link.exteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.exteriorRopsMirrorsCheckbox);\r\n model.config.link.mirrors = utils.getRadioValueForLink([\r\n elements.canopy.interiorRopsMirrorNoneRadio,\r\n elements.canopy.interiorRopsMirrorStandardRadio,\r\n elements.canopy.interiorRopsMirrorAngleRadio,\r\n elements.canopy.interiorRopsMirrorWinkRadio\r\n ]);\r\n\r\n } else if (!elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.hide(elements.canopy.canopyRopsContainer);\r\n utils.selectElement(elements.canopy.interiorRopsMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.interiorRopsMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.interiorRopsMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.interiorRopsMirrorWinkRadio);\r\n utils.unselectElement(elements.canopy.canopyRopsWindshieldCheckbox);\r\n utils.unselectElement(elements.canopy.exteriorRopsMirrorsCheckbox);\r\n\r\n model.config.email.canopyWindshield = '';\r\n model.config.email.exteriorMirrors = '';\r\n model.config.email.mirrors = '';\r\n model.config.link.canopyWindshield = '';\r\n model.config.link.exteriorMirrors = '';\r\n model.config.link.mirrors = '';\r\n }\r\n\r\n if (elements.canopy.ropsCabRadio.checked) {\r\n utils.display(elements.canopy.ropsAttachments);\r\n\r\n model.config.email.cabDoor = utils.getCheckboxValueForEmail(elements.canopy.cabDoorCheckbox);\r\n model.config.email.washerBottle = utils.getCheckboxValueForEmail(elements.canopy.washerBottleCheckbox);\r\n model.config.email.beaconLightKit = utils.getCheckboxValueForEmail(elements.canopy.beaconLightCheckbox);\r\n model.config.email.ledWorkLightKit = utils.getCheckboxValueForEmail(elements.canopy.ledLightCheckbox);\r\n model.config.email.robExteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n model.config.email.robMirrors = utils.getRadioValueForEmail([\r\n elements.canopy.ropsInteriorMirrorNoneRadio,\r\n elements.canopy.ropsInterMirrorStandardRadio,\r\n elements.canopy.ropsInteriorMirrorAngleRadio\r\n ]);\r\n\r\n model.config.link.cabDoor = utils.getCheckboxValueForLink(elements.canopy.cabDoorCheckbox);\r\n model.config.link.washerBottle = utils.getCheckboxValueForLink(elements.canopy.washerBottleCheckbox);\r\n model.config.link.beaconLightKit = utils.getCheckboxValueForLink(elements.canopy.beaconLightCheckbox);\r\n model.config.link.ledWorkLightKit = utils.getCheckboxValueForLink(elements.canopy.ledLightCheckbox);\r\n model.config.link.robExteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n model.config.link.robMirrors = utils.getRadioValueForLink([\r\n elements.canopy.ropsInteriorMirrorNoneRadio,\r\n elements.canopy.ropsInterMirrorStandardRadio,\r\n elements.canopy.ropsInteriorMirrorAngleRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.canopy.ropsAttachments);\r\n utils.selectElement(elements.canopy.ropsInteriorMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.ropsInterMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.ropsInteriorMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.cabDoorCheckbox);\r\n utils.unselectElement(elements.canopy.washerBottleCheckbox);\r\n utils.unselectElement(elements.canopy.beaconLightCheckbox);\r\n utils.unselectElement(elements.canopy.ledLightCheckbox);\r\n utils.unselectElement(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n\r\n model.config.email.cabDoor = '';\r\n model.config.email.washerBottle = '';\r\n model.config.email.beaconLightKit = '';\r\n model.config.email.ledWorkLightKit = '';\r\n model.config.email.robExteriorMirrors = '';\r\n model.config.email.robMirrors = '';\r\n\r\n model.config.link.cabDoor = '';\r\n model.config.link.washerBottle = '';\r\n model.config.link.beaconLightKit = '';\r\n model.config.link.ledWorkLightKit = '';\r\n model.config.link.robExteriorMirrors = '';\r\n model.config.link.robMirrors = '';\r\n }\r\n\r\n // Cab & Canopy menu image rules 2p\r\n utils.displayImgIfElementSelected(elements.canopy.canopyTwoSeatRadio, images.canopyContainer, imageUrls.canopy);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsCabRadio, images.canopyRopsSertifiedContainer, imageUrls.ropsCab);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsTwoPostCabRadio, images.canopyRopsContainer, imageUrls.rops);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsTwoPostCabWithCanopyRadio, images.canopyRopsWCContainer, imageUrls.ropsCanopy);\r\n\r\n if (elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.canopy.canopyTwoSeatsWindshieldCheckbox, images.canopyWindshieldContainer, imageUrls.canopyWindshield);\r\n utils.displayImgIfElementSelected(elements.canopy.exteriorTwoSeatsMirrorsCheckbox, images.exteriorMirrorsContainer, imageUrls.exteriorMirrors);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorTwoSeatsMirrorStandardRadio, images.interiorMirrorStandardContainer, imageUrls.interiorMirrorStandard);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorTwoSeatsMirrorAngleRadio, images.interiorMirrorAngleContainer, imageUrls.interiorMirrorAngle);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorTwoSeatsMirrorWinkRadio, images.interiorMirrorWinkContainer, imageUrls.interiorMirrorWink);\r\n } else if (elements.canopy.ropsTwoPostCabWithCanopyRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.canopy.canopyRopsWindshieldCheckbox, images.canopyWindshieldContainer, imageUrls.canopyWindshield);\r\n utils.displayImgIfElementSelected(elements.canopy.exteriorRopsMirrorsCheckbox, images.exteriorMirrorsContainer, imageUrls.exteriorMirrors);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorRopsMirrorStandardRadio, images.interiorMirrorStandardContainer, imageUrls.interiorMirrorStandard);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorRopsMirrorAngleRadio, images.interiorMirrorAngleContainer, imageUrls.interiorMirrorAngle);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorRopsMirrorWinkRadio, images.interiorMirrorWinkContainer, imageUrls.interiorMirrorWink);\r\n } else {\r\n utils.hideImage(images.canopyWindshieldContainer);\r\n utils.hideImage(images.exteriorMirrorsContainer);\r\n utils.hideImage(images.interiorMirrorStandardContainer);\r\n utils.hideImage(images.interiorMirrorAngleContainer);\r\n utils.hideImage(images.interiorMirrorWinkContainer);\r\n }\r\n\r\n if (elements.canopy.ropsCabRadio.checked) {\r\n if (elements.canopy.cabDoorCheckbox.checked) {\r\n utils.displayImage(images.cabDoorFrontContainer, imageUrls.ropsFrontDoor);\r\n utils.displayImage(images.cabDoorBackContainer, imageUrls.ropsBackDoor);\r\n } else {\r\n utils.hideImage(images.cabDoorFrontContainer);\r\n utils.hideImage(images.cabDoorBackContainer);\r\n }\r\n\r\n utils.displayImgIfElementSelected(elements.canopy.beaconLightCheckbox, images.beaconLightContainer, imageUrls.beaconLight);\r\n utils.displayImgIfElementSelected(elements.canopy.ledLightCheckbox, images.ledLightContainer, imageUrls.LedLights);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsExteriorMirrorsCheckbox, images.ropsExteriorMirrorsContainer, imageUrls.ropsExteriorMirror);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsInterMirrorStandardRadio, images.ropsInteriorMirrorStandardContainer, imageUrls.ropsStandardMirror);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsInteriorMirrorAngleRadio, images.ropsInteriorMirrorAngleContainer, imageUrls.ropsAngleMirror);\r\n } else {\r\n utils.hideImage(images.cabDoorFrontContainer);\r\n utils.hideImage(images.cabDoorBackContainer);\r\n utils.hideImage(images.beaconLightContainer);\r\n utils.hideImage(images.ledLightContainer);\r\n utils.hideImage(images.ropsExteriorMirrorsContainer);\r\n utils.hideImage(images.ropsInteriorMirrorStandardContainer);\r\n utils.hideImage(images.ropsInteriorMirrorAngleContainer);\r\n }\r\n }\r\n\r\n function canopyRules2pext(elements, imageUrls) {\r\n\r\n // Cab & Canopy menu options\r\n model.config.email.seatCanopy = utils.getRadioValueForEmail([\r\n elements.canopy.canopyNoneRadio,\r\n elements.canopy.canopyTwoSeatRadio,\r\n elements.canopy.ropsCabRadio\r\n ]);\r\n\r\n model.config.link.seatCanopy = utils.getRadioValueForLink([\r\n elements.canopy.canopyNoneRadio,\r\n elements.canopy.canopyTwoSeatRadio,\r\n elements.canopy.ropsCabRadio\r\n ]);\r\n\r\n if (elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.display(elements.canopy.canopyAttachmentsRadiosContainer);\r\n\r\n model.config.email.canopyWindshield = utils.getCheckboxValueForEmail(elements.canopy.canopyWindshieldCheckbox);\r\n model.config.email.exteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.exteriorMirrorsCheckbox);\r\n model.config.email.mirrors = utils.getRadioValueForEmail([\r\n elements.canopy.interiorMirrorNoneRadio,\r\n elements.canopy.interiorMirrorStandardRadio,\r\n elements.canopy.interiorMirrorAngleRadio,\r\n elements.canopy.interiorMirrorWinkRadio\r\n ]);\r\n\r\n model.config.link.canopyWindshield = utils.getCheckboxValueForLink(elements.canopy.canopyWindshieldCheckbox);\r\n model.config.link.exteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.exteriorMirrorsCheckbox);\r\n model.config.link.mirrors = utils.getRadioValueForLink([\r\n elements.canopy.interiorMirrorNoneRadio,\r\n elements.canopy.interiorMirrorStandardRadio,\r\n elements.canopy.interiorMirrorAngleRadio,\r\n elements.canopy.interiorMirrorWinkRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.canopy.canopyAttachmentsRadiosContainer);\r\n utils.selectElement(elements.canopy.interiorMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.interiorMirrorWinkRadio);\r\n utils.unselectElement(elements.canopy.canopyWindshieldCheckbox);\r\n utils.unselectElement(elements.canopy.exteriorMirrorsCheckbox);\r\n\r\n model.config.email.canopyWindshield = '';\r\n model.config.email.exteriorMirrors = '';\r\n model.config.email.mirrors = '';\r\n model.config.link.canopyWindshield = '';\r\n model.config.link.exteriorMirrors = '';\r\n model.config.link.mirrors = '';\r\n }\r\n\r\n if (elements.canopy.ropsCabRadio.checked) {\r\n utils.display(elements.canopy.ropsRadiosContainer);\r\n\r\n model.config.email.cabDoor = utils.getCheckboxValueForEmail(elements.canopy.cabDoorCheckbox);\r\n model.config.email.washerBottle = utils.getCheckboxValueForEmail(elements.canopy.washerBottleCheckbox);\r\n model.config.email.beaconLightKit = utils.getCheckboxValueForEmail(elements.canopy.beaconLightCheckbox);\r\n model.config.email.ledWorkLightKit = utils.getCheckboxValueForEmail(elements.canopy.ledLightCheckbox);\r\n model.config.email.robExteriorMirrors = utils.getCheckboxValueForEmail(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n model.config.email.robMirrors = utils.getRadioValueForEmail([\r\n elements.canopy.ropsInteriorMirrorNoneRadio,\r\n elements.canopy.ropsInterMirrorStandardRadio,\r\n elements.canopy.ropsInteriorMirrorAngleRadio\r\n ]);\r\n\r\n model.config.link.cabDoor = utils.getCheckboxValueForLink(elements.canopy.cabDoorCheckbox);\r\n model.config.link.washerBottle = utils.getCheckboxValueForLink(elements.canopy.washerBottleCheckbox);\r\n model.config.link.beaconLightKit = utils.getCheckboxValueForLink(elements.canopy.beaconLightCheckbox);\r\n model.config.link.ledWorkLightKit = utils.getCheckboxValueForLink(elements.canopy.ledLightCheckbox);\r\n model.config.link.robExteriorMirrors = utils.getCheckboxValueForLink(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n model.config.link.robMirrors = utils.getRadioValueForLink([\r\n elements.canopy.ropsInteriorMirrorNoneRadio,\r\n elements.canopy.ropsInterMirrorStandardRadio,\r\n elements.canopy.ropsInteriorMirrorAngleRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.canopy.ropsRadiosContainer);\r\n utils.selectElement(elements.canopy.ropsInteriorMirrorNoneRadio);\r\n utils.unselectElement(elements.canopy.ropsInterMirrorStandardRadio);\r\n utils.unselectElement(elements.canopy.ropsInteriorMirrorAngleRadio);\r\n utils.unselectElement(elements.canopy.cabDoorCheckbox);\r\n utils.unselectElement(elements.canopy.washerBottleCheckbox);\r\n utils.unselectElement(elements.canopy.beaconLightCheckbox);\r\n utils.unselectElement(elements.canopy.ledLightCheckbox);\r\n utils.unselectElement(elements.canopy.ropsExteriorMirrorsCheckbox);\r\n\r\n model.config.email.cabDoor = '';\r\n model.config.email.washerBottle = '';\r\n model.config.email.beaconLightKit = '';\r\n model.config.email.ledWorkLightKit = '';\r\n model.config.email.robExteriorMirrors = '';\r\n model.config.email.robMirrors = '';\r\n\r\n model.config.link.cabDoor = '';\r\n model.config.link.washerBottle = '';\r\n model.config.link.beaconLightKit = '';\r\n model.config.link.ledWorkLightKit = '';\r\n model.config.link.robExteriorMirrors = '';\r\n model.config.link.robMirrors = '';\r\n }\r\n\r\n // Cab & Canopy image preview\r\n utils.displayImgIfElementSelected(elements.canopy.canopyTwoSeatRadio, images.canopyContainer, imageUrls.canopy);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsCabRadio, images.canopyRopsSertifiedContainer, imageUrls.ropsCab);\r\n\r\n if (elements.canopy.canopyTwoSeatRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.canopy.canopyWindshieldCheckbox, images.canopyWindshieldContainer, imageUrls.canopyWindshield);\r\n utils.displayImgIfElementSelected(elements.canopy.exteriorMirrorsCheckbox, images.exteriorMirrorsContainer, imageUrls.exteriorMirrors);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorStandardRadio, images.interiorMirrorStandardContainer, imageUrls.interiorMirrorStandard);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorAngleRadio, images.interiorMirrorAngleContainer, imageUrls.interiorMirrorAngle);\r\n utils.displayImgIfElementSelected(elements.canopy.interiorMirrorWinkRadio, images.interiorMirrorWinkContainer, imageUrls.interiorMirrorWink);\r\n } else {\r\n utils.hideImage(images.canopyWindshieldContainer);\r\n utils.hideImage(images.exteriorMirrorsContainer);\r\n utils.hideImage(images.interiorMirrorStandardContainer);\r\n utils.hideImage(images.interiorMirrorAngleContainer);\r\n utils.hideImage(images.interiorMirrorWinkContainer);\r\n }\r\n\r\n if (elements.canopy.ropsCabRadio.checked) {\r\n if (elements.canopy.cabDoorCheckbox.checked) {\r\n utils.displayImage(images.cabDoorFrontContainer, imageUrls.ropsFrontDoor);\r\n utils.displayImage(images.cabDoorBackContainer, imageUrls.ropsBackDoor);\r\n } else {\r\n utils.hideImage(images.cabDoorFrontContainer);\r\n utils.hideImage(images.cabDoorBackContainer);\r\n }\r\n\r\n utils.displayImgIfElementSelected(elements.canopy.beaconLightCheckbox, images.beaconLightContainer, imageUrls.beaconLight);\r\n utils.displayImgIfElementSelected(elements.canopy.ledLightCheckbox, images.ledLightContainer, imageUrls.ledLights);\r\n\r\n // missing image\r\n utils.displayImgIfElementSelected(elements.canopy.ropsExteriorMirrorsCheckbox, images.ropsExteriorMirrorsContainer, imageUrls.ropsExteriorMirror);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsInterMirrorStandardRadio, images.ropsInteriorMirrorStandardContainer, imageUrls.ropsStandardMirror);\r\n utils.displayImgIfElementSelected(elements.canopy.ropsInteriorMirrorAngleRadio, images.ropsInteriorMirrorAngleContainer, imageUrls.ropsAngleMirror);\r\n } else {\r\n utils.hideImage(images.cabDoorFrontContainer);\r\n utils.hideImage(images.cabDoorBackContainer);\r\n utils.hideImage(images.beaconLightContainer);\r\n utils.hideImage(images.ledLightContainer);\r\n utils.hideImage(images.ropsExteriorMirrorsContainer);\r\n utils.hideImage(images.ropsInteriorMirrorStandardContainer);\r\n utils.hideImage(images.ropsInteriorMirrorAngleContainer);\r\n }\r\n }\r\n\r\n function frontAttachmentsRules(elements, imageUrls) {\r\n\r\n // Front Attachments menu rules\r\n model.config.email.brushGuard = utils.getCheckboxValueForEmail(elements.front.brushGuardCheckbox);\r\n model.config.email.frontReceiver = utils.getCheckboxValueForEmail(elements.front.frontReceiverCheckbox);\r\n model.config.link.brushGuard = utils.getCheckboxValueForLink(elements.front.brushGuardCheckbox);\r\n model.config.link.frontReceiver = utils.getCheckboxValueForLink(elements.front.frontReceiverCheckbox);\r\n\r\n if (elements.front.brushGuardCheckbox.checked) {\r\n utils.displayParent(elements.front.brushGuardFrontCheckbox);\r\n elements.front.frontReceiverCheckbox.disabled = true;\r\n elements.front.frontReceiverCheckbox.parentNode.classList.add('disabled');\r\n\r\n model.config.email.brushGuardFrontReceiver = utils.getCheckboxValueForEmail(elements.front.brushGuardFrontCheckbox);\r\n model.config.link.brushGuardFrontReceiver = utils.getCheckboxValueForLink(elements.front.brushGuardFrontCheckbox);\r\n\r\n if (elements.accessories.gasoline.homoligationLightRadio.checked || elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.hideImage(images.lightkitContainer);\r\n }\r\n } else {\r\n utils.hideParent(elements.front.brushGuardFrontCheckbox);\r\n elements.front.frontReceiverCheckbox.disabled = false;\r\n elements.front.frontReceiverCheckbox.parentNode.classList.remove('disabled');\r\n utils.unselectElement(elements.front.brushGuardFrontCheckbox);\r\n\r\n model.config.email.brushGuardFrontReceiver = '';\r\n model.config.link.brushGuardFrontReceiver = '';\r\n\r\n if (elements.accessories.gasoline.homoligationLightRadio.checked || elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.hideImage(images.lightkitContainer);\r\n }\r\n }\r\n\r\n if (elements.front.frontReceiverCheckbox.checked) {\r\n elements.front.brushGuardCheckbox.disabled = true;\r\n elements.front.brushGuardCheckbox.parentNode.classList.add('disabled');\r\n } else {\r\n elements.front.brushGuardCheckbox.disabled = false;\r\n elements.front.brushGuardCheckbox.parentNode.classList.remove('disabled');\r\n }\r\n\r\n if (elements.front.brushGuardFrontCheckbox.checked || elements.front.frontReceiverCheckbox.checked) {\r\n elements.front.frontAttachmentsContainer.classList.remove('disabled');\r\n elements.front.frontNoneRadio.disabled = false;\r\n elements.front.hoseReelRadio.disabled = false;\r\n elements.front.trashCanRadio.disabled = false;\r\n elements.front.walkSpreaderRadio.disabled = false;\r\n } else if (!elements.front.brushGuardFrontCheckbox.checked) {\r\n elements.front.frontAttachmentsContainer.classList.add('disabled');\r\n utils.selectElement(elements.front.frontNoneRadio);\r\n utils.unselectElement(elements.front.hoseReelRadio);\r\n utils.unselectElement(elements.front.trashCanRadio);\r\n utils.unselectElement(elements.front.walkSpreaderRadio);\r\n elements.front.frontNoneRadio.disabled = true;\r\n elements.front.hoseReelRadio.disabled = true;\r\n elements.front.trashCanRadio.disabled = true;\r\n elements.front.walkSpreaderRadio.disabled = true;\r\n }\r\n\r\n model.config.email.front = utils.getRadioValueForEmail([\r\n elements.front.frontNoneRadio,\r\n elements.front.hoseReelRadio,\r\n elements.front.trashCanRadio,\r\n elements.front.walkSpreaderRadio\r\n ]);\r\n\r\n model.config.link.front = utils.getRadioValueForLink([\r\n elements.front.frontNoneRadio,\r\n elements.front.hoseReelRadio,\r\n elements.front.trashCanRadio,\r\n elements.front.walkSpreaderRadio\r\n ]);\r\n\r\n utils.displayImgIfElementSelected(elements.front.brushGuardCheckbox, images.brushGuardContainer, imageUrls.brushGuard);\r\n\r\n if (elements.front.brushGuardCheckbox.checked) {\r\n utils.displayImgIfElementSelected(elements.front.brushGuardFrontCheckbox, images.brushGuardFrontContainer, imageUrls.brushGuardFront);\r\n } else {\r\n utils.hideImage(images.brushGuardFrontContainer);\r\n }\r\n\r\n if (elements.front.frontReceiverCheckbox.checked ||\r\n elements.front.brushGuardFrontCheckbox.checked) {\r\n utils.displayImgIfElementSelected(elements.front.frontReceiverCheckbox, images.frontReceiverContainer, imageUrls.frontReceiver);\r\n utils.displayImgIfElementSelected(elements.front.hoseReelRadio, images.hoseReelFrontContainer, imageUrls.hoseReel);\r\n utils.displayImgIfElementSelected(elements.front.trashCanRadio, images.trashCanFrontContainer, imageUrls.trashCan);\r\n utils.displayImgIfElementSelected(elements.front.walkSpreaderRadio, images.walkSpreaderFrontContainer, imageUrls.walkSpreader);\r\n } else {\r\n utils.hideImage(images.frontReceiverContainer);\r\n utils.hideImage(images.hoseReelFrontContainer);\r\n utils.hideImage(images.trashCanFrontContainer);\r\n utils.hideImage(images.walkSpreaderFrontContainer);\r\n }\r\n\r\n if (!elements.front.brushGuardCheckbox.checked && !elements.front.frontReceiverCheckbox.checked) {\r\n utils.hideImage(images.frontReceiverContainer);\r\n utils.hideImage(images.hoseReelFrontContainer);\r\n utils.hideImage(images.trashCanFrontContainer);\r\n utils.hideImage(images.walkSpreaderFrontContainer);\r\n }\r\n\r\n //corner images\r\n if (elements.rear.walkSpreaderRadio.checked && elements.front.walkSpreaderRadio.checked) {\r\n elements.cornerImages.walkSpreaderFrontContainer.className = '';\r\n } else {\r\n utils.displayCornerView(elements.front.walkSpreaderRadio, elements.cornerImages.walkSpreaderFrontContainer);\r\n }\r\n\r\n utils.displayCornerView(elements.front.hoseReelRadio, elements.cornerImages.hoseReelContainer);\r\n\r\n if (elements.rear.hoseRealRadio.checked && elements.front.hoseReelRadio.checked) {\r\n elements.cornerImages.hoseReelContainer.className = '';\r\n } else {\r\n utils.displayCornerView(elements.front.hoseReelRadio, elements.cornerImages.hoseReelContainer);\r\n }\r\n }\r\n\r\n function rearAttachmentsRules(elements, imageUrls) {\r\n\r\n // Rear Attachments menu rules\r\n model.config.email.rear = utils.getRadioValueForEmail([\r\n elements.rear.rearNoneRadio,\r\n elements.rear.hoseRealRadio,\r\n elements.rear.trashCanRadio,\r\n elements.rear.walkSpreaderRadio\r\n ]);\r\n\r\n model.config.link.rear = utils.getRadioValueForLink([\r\n elements.rear.rearNoneRadio,\r\n elements.rear.hoseRealRadio,\r\n elements.rear.trashCanRadio,\r\n elements.rear.walkSpreaderRadio\r\n ]);\r\n\r\n // Rear Attachments images rules\r\n if (model.config.email.currentBed === 'Cargo Bed (07046)') {\r\n utils.displayImgIfElementSelected(elements.rear.hoseRealRadio, images.hoseReelRearContainer, imageUrls.hoseRear);\r\n elements.cornerImages.hoseReelRearContainer.className = '';\r\n }\r\n\r\n utils.displayImgIfElementSelected(elements.rear.trashCanRadio, images.trashCanRearContainer, imageUrls.trashCanRear);\r\n utils.displayImgIfElementSelected(elements.rear.walkSpreaderRadio, images.walkSpreaderRearContainer, imageUrls.walkSpreaderRear);\r\n\r\n //corner images\r\n utils.displayCornerView(elements.rear.walkSpreaderRadio, elements.cornerImages.walkSpreaderContainer);\r\n utils.displayCornerView(elements.rear.hoseRealRadio, elements.cornerImages.hoseReelRearContainer);\r\n }\r\n\r\n function tiresRules(elements, imageUrls) {\r\n\r\n // Tires menu rules\r\n model.config.email.tires = utils.getRadioValueForEmail([elements.tires.trufRadio, elements.tires.aggressiveTrufRadio, elements.tires.atvRadio]);\r\n model.config.link.tires = utils.getRadioValueForLink([elements.tires.trufRadio, elements.tires.aggressiveTrufRadio, elements.tires.atvRadio]);\r\n\r\n // Tires image rules\r\n if (elements.tires.trufRadio.checked) {\r\n utils.displayImage(images.tiresContainer, imageUrls.truf);\r\n utils.hideImage(images.tiresAggressiveContainer, imageUrls.aggressive);\r\n }\r\n\r\n if (elements.tires.atvRadio.checked) {\r\n utils.displayImage(images.tiresContainer, imageUrls.atv);\r\n utils.hideImage(images.tiresAggressiveContainer, imageUrls.aggressive);\r\n }\r\n\r\n if (elements.tires.aggressiveTrufRadio.checked) {\r\n utils.displayImage(images.tiresContainer, imageUrls.truf);\r\n utils.displayImage(images.tiresAggressiveContainer, imageUrls.aggressive);\r\n }\r\n }\r\n\r\n function accessoriesRules(elements, imageUrls) {\r\n\r\n // Signaling, Alarms, and Accessories menu rules\r\n if (model.config.email.currentEngine === baseEngines.electric) {\r\n utils.display(elements.accessories.electric.electricAccessoriesContainer);\r\n utils.hide(elements.accessories.gasoline.gasolineAccessoriesContainer);\r\n\r\n // if electric selected - gasoline checkboxes should be disabled\r\n utils.unselectElement(elements.accessories.gasoline.hornKitCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.alarmCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.parkingAlarmCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.underHoodBoxCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.powerKitCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.sparkArrestorCheckbox);\r\n utils.unselectElement(elements.accessories.gasoline.ramBallCheckbox);\r\n\r\n // if electric selected electric checkboxes available\r\n model.config.email.hornKit = utils.getCheckboxValueForEmail(elements.accessories.electric.hornKitCheckbox);\r\n model.config.email.backupAlarm = utils.getCheckboxValueForEmail(elements.accessories.electric.alarmCheckbox);\r\n model.config.email.underHoodBox = utils.getCheckboxValueForEmail(elements.accessories.electric.underHoodBoxCheckbox);\r\n model.config.email.ramBall = utils.getCheckboxValueForEmail(elements.accessories.electric.ramBallCheckbox);\r\n model.config.email.sparkArrestor = utils.getCheckboxValueForEmail(elements.accessories.electric.sparkArrestorCheckbox);\r\n\r\n model.config.link.hornKit = utils.getCheckboxValueForLink(elements.accessories.electric.hornKitCheckbox);\r\n model.config.link.backupAlarm = utils.getCheckboxValueForLink(elements.accessories.electric.alarmCheckbox);\r\n model.config.link.underHoodBox = utils.getCheckboxValueForLink(elements.accessories.electric.underHoodBoxCheckbox);\r\n model.config.link.ramBall = utils.getCheckboxValueForLink(elements.accessories.electric.ramBallCheckbox);\r\n model.config.link.sparkArrestor = utils.getCheckboxValueForLink(elements.accessories.electric.sparkArrestorCheckbox);\r\n\r\n if (elements.accessories.electric.signalLightsCheckbox.checked) {\r\n utils.display(elements.accessories.electric.signalLightsRadiosContainer);\r\n\r\n model.config.email.signalLights = utils.getRadioValueForEmail([\r\n elements.accessories.electric.homoligationLightRadio,\r\n elements.accessories.electric.breakLightRadio\r\n ]);\r\n\r\n model.config.link.signalLightsCheckbox = utils.getCheckboxValueForLink(elements.accessories.electric.signalLightsCheckbox);\r\n\r\n model.config.link.signalLights = utils.getRadioValueForLink([\r\n elements.accessories.electric.homoligationLightRadio,\r\n elements.accessories.electric.breakLightRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.accessories.electric.signalLightsRadiosContainer);\r\n utils.selectElement(elements.accessories.electric.homoligationLightRadio);\r\n utils.unselectElement(elements.accessories.electric.breakLightRadio);\r\n\r\n model.config.link.signalLightsCheckbox = '';\r\n model.config.email.signalLights = '';\r\n model.config.link.signalLights = '';\r\n }\r\n } else {\r\n utils.hide(elements.accessories.electric.electricAccessoriesContainer);\r\n utils.display(elements.accessories.gasoline.gasolineAccessoriesContainer);\r\n\r\n // if gasoline selected - electric checkboxes should be disabled\r\n utils.unselectElement(elements.accessories.electric.hornKitCheckbox);\r\n utils.unselectElement(elements.accessories.electric.alarmCheckbox);\r\n utils.unselectElement(elements.accessories.electric.underHoodBoxCheckbox);\r\n utils.unselectElement(elements.accessories.electric.ramBallCheckbox);\r\n utils.unselectElement(elements.accessories.electric.sparkArrestorCheckbox);\r\n\r\n // if gasoline selected gasoline checkboxes enable\r\n model.config.email.hornKit = utils.getCheckboxValueForEmail(elements.accessories.gasoline.hornKitCheckbox);\r\n model.config.email.backupAlarm = utils.getCheckboxValueForEmail(elements.accessories.gasoline.alarmCheckbox);\r\n model.config.email.parkingBrakeAlarm = utils.getCheckboxValueForEmail(elements.accessories.gasoline.parkingAlarmCheckbox);\r\n model.config.email.underHoodBox = utils.getCheckboxValueForEmail(elements.accessories.gasoline.underHoodBoxCheckbox);\r\n model.config.email.powerKit = utils.getCheckboxValueForEmail(elements.accessories.gasoline.powerKitCheckbox);\r\n model.config.email.ramBall = utils.getCheckboxValueForEmail(elements.accessories.gasoline.ramBallCheckbox);\r\n model.config.email.sparkArrestor = utils.getCheckboxValueForEmail(elements.accessories.gasoline.sparkArrestorCheckbox);\r\n\r\n model.config.link.hornKit = utils.getCheckboxValueForLink(elements.accessories.gasoline.hornKitCheckbox);\r\n model.config.link.backupAlarm = utils.getCheckboxValueForLink(elements.accessories.gasoline.alarmCheckbox);\r\n model.config.link.parkingBrakeAlarm = utils.getCheckboxValueForLink(elements.accessories.gasoline.parkingAlarmCheckbox);\r\n model.config.link.underHoodBox = utils.getCheckboxValueForLink(elements.accessories.gasoline.underHoodBoxCheckbox);\r\n model.config.link.powerKit = utils.getCheckboxValueForLink(elements.accessories.gasoline.powerKitCheckbox);\r\n model.config.link.ramBall = utils.getCheckboxValueForLink(elements.accessories.gasoline.ramBallCheckbox);\r\n model.config.link.sparkArrestor = utils.getCheckboxValueForLink(elements.accessories.gasoline.sparkArrestorCheckbox);\r\n\r\n if (elements.accessories.gasoline.signalLightsCheckbox.checked) {\r\n utils.display(elements.accessories.gasoline.signalLightsRadiosContainer);\r\n\r\n model.config.email.signalLights = utils.getRadioValueForEmail([\r\n elements.accessories.gasoline.homoligationLightRadio,\r\n elements.accessories.gasoline.breakLightRadio\r\n ]);\r\n\r\n model.config.link.signalLightsCheckbox = utils.getCheckboxValueForLink(elements.accessories.gasoline.signalLightsCheckbox);\r\n\r\n model.config.link.signalLights = utils.getRadioValueForLink([\r\n elements.accessories.gasoline.homoligationLightRadio,\r\n elements.accessories.gasoline.breakLightRadio\r\n ]);\r\n } else {\r\n utils.hide(elements.accessories.gasoline.signalLightsRadiosContainer);\r\n utils.selectElement(elements.accessories.gasoline.homoligationLightRadio);\r\n utils.unselectElement(elements.accessories.gasoline.breakLightRadio);\r\n\r\n model.config.link.signalLightsCheckbox = '';\r\n model.config.email.signalLights = '';\r\n model.config.link.signalLights = '';\r\n }\r\n }\r\n\r\n // Signaling, Alarms, and Accessories images rules\r\n if (elements.accessories.gasoline.signalLightsCheckbox.checked) {\r\n if (model.config.email.currentBed === 'Cargo Bed (07046)') {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.homoligationLightRadio, images.lightkitHomoligationContainer, imageUrls.homoligationCargo);\r\n\r\n if (model.config.email.brushGuard !== '' && !elements.accessories.gasoline.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.breakLightRadio, images.lightkitContainer, imageUrls.lightkitBrushguardCargo);\r\n } else if (!elements.accessories.gasoline.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.breakLightRadio, images.lightkitContainer, imageUrls.lightkitCargo);\r\n }\r\n } else {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.homoligationLightRadio, images.lightkitHomoligationContainer, imageUrls.homoligationFlatBed);\r\n\r\n if (model.config.email.brushGuard !== '' && !elements.accessories.gasoline.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.breakLightRadio, images.lightkitContainer, imageUrls.lightkitBrushguardFlatBed);\r\n } else if (!elements.accessories.gasoline.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.gasoline.breakLightRadio, images.lightkitContainer, imageUrls.lightkitFlatBed);\r\n }\r\n }\r\n } else if (elements.accessories.electric.signalLightsCheckbox.checked) {\r\n if (model.config.email.currentBed === 'Cargo Bed (07046)') {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.homoligationLightRadio, images.lightkitHomoligationContainer, imageUrls.homoligationCargo);\r\n\r\n if (model.config.email.brushGuard !== '' && !elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.breakLightRadio, images.lightkitContainer, imageUrls.lightkitBrushguardCargo);\r\n } else if (!elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.breakLightRadio, images.lightkitContainer, imageUrls.lightkitCargo);\r\n }\r\n } else {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.homoligationLightRadio, images.lightkitHomoligationContainer, imageUrls.homoligationFlatBed);\r\n\r\n if (model.config.email.brushGuard !== '' && !elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.breakLightRadio, images.lightkitContainer, imageUrls.lightkitBrushguardFlatBed);\r\n } else if (!elements.accessories.electric.homoligationLightRadio.checked) {\r\n utils.displayImgIfElementSelected(elements.accessories.electric.breakLightRadio, images.lightkitContainer, imageUrls.lightkitFlatBed);\r\n }\r\n }\r\n } else {\r\n utils.hideImage(images.lightkitHomoligationContainer);\r\n utils.hideImage(images.lightkitContainer);\r\n }\r\n\r\n // corner images\r\n if (elements.accessories.gasoline.hornKitCheckbox.checked || elements.accessories.electric.hornKitCheckbox.checked) {\r\n elements.cornerImages.hornKitContainer.className = 'active';\r\n } else {\r\n elements.cornerImages.hornKitContainer.className = '';\r\n }\r\n\r\n if (elements.accessories.gasoline.ramBallCheckbox.checked || elements.accessories.electric.ramBallCheckbox.checked) {\r\n elements.cornerImages.ramMountBallContainer.className = 'active';\r\n } else {\r\n elements.cornerImages.ramMountBallContainer.className = '';\r\n }\r\n\r\n if (elements.accessories.gasoline.underHoodBoxCheckbox.checked || elements.accessories.electric.underHoodBoxCheckbox.checked) {\r\n elements.cornerImages.underHoodContainer.className = 'active';\r\n } else {\r\n elements.cornerImages.underHoodContainer.className = '';\r\n }\r\n\r\n }\r\n\r\n return {\r\n engineRules: engineRules,\r\n bedRules: bedRules,\r\n bedRules2pext: bedRules2pext,\r\n seatsRules: seatsRules,\r\n seatsRules4p: seatsRules4p,\r\n canopyRules4p: canopyRules4p,\r\n canopyRules2p: canopyRules2p,\r\n canopyRules2pext: canopyRules2pext,\r\n frontAttachmentsRules: frontAttachmentsRules,\r\n rearAttachmentsRules: rearAttachmentsRules,\r\n tiresRules: tiresRules,\r\n accessoriesRules: accessoriesRules\r\n };\r\n}());\r\n","var defaultValues = (function () {\r\n var baseConfigs = {\r\n fourPassengers: {\r\n defaultImages: {\r\n baseImg: 'url(\"images/4p_base_gas.png\")'\r\n },\r\n defaultLink: {\r\n engine: 'ge-4p',\r\n seatsFront: 'besf-4p',\r\n seatsBack: 'besb-4p',\r\n tires: 'tt-4p'\r\n }\r\n },\r\n twoPassengers: {\r\n defaultImages: {\r\n baseImg: 'url(\"images/2p_base_gas.png\")'\r\n },\r\n defaultLink: {\r\n engine: 'ge-2p',\r\n bed: 'cb-2p',\r\n seats: 'bes-2p',\r\n tires: 'tt-2p'\r\n }\r\n },\r\n twoPassengersExtended: {\r\n defaultImages: {\r\n baseImg: 'url(\"images/2pext_base_gas.png\")'\r\n },\r\n defaultLink: {\r\n engine: 'ge-2pext',\r\n bed: 'fb-2pext',\r\n seats: 'bes-2pext',\r\n tires: 'tt-2pext'\r\n }\r\n }\r\n };\r\n\r\n var baseImageContainer = utils.selectDomElement('#base-img');\r\n\r\n function setDefaultImages4p() {\r\n utils.displayImage(baseImageContainer, baseConfigs.fourPassengers.defaultImages.baseImg);\r\n }\r\n\r\n function setDefaultImages2p() {\r\n utils.displayImage(baseImageContainer, baseConfigs.twoPassengers.defaultImages.baseImg);\r\n }\r\n\r\n function setDefaultImages2pext() {\r\n utils.displayImage(baseImageContainer, baseConfigs.twoPassengersExtended.defaultImages.baseImg);\r\n }\r\n\r\n function setDefaultsLink4p() {\r\n model.config.link.currentEngine = baseConfigs.fourPassengers.defaultLink.engine;\r\n model.config.link.seatFront = baseConfigs.fourPassengers.defaultLink.seatsFront;\r\n model.config.link.seatBack = baseConfigs.fourPassengers.defaultLink.seatsBack;\r\n model.config.link.tires = baseConfigs.fourPassengers.defaultLink.tires;\r\n }\r\n\r\n function setDefaultsLink2p() {\r\n model.config.link.currentEngine = baseConfigs.twoPassengers.defaultLink.engine;\r\n model.config.link.currentBed = baseConfigs.twoPassengers.defaultLink.bed;\r\n model.config.link.seat = baseConfigs.twoPassengers.defaultLink.seats;\r\n model.config.link.tires = baseConfigs.twoPassengers.defaultLink.tires;\r\n }\r\n\r\n function setDefaultsLink2pext() {\r\n model.config.link.currentEngine = baseConfigs.twoPassengersExtended.defaultLink.engine;\r\n model.config.link.currentBed = baseConfigs.twoPassengersExtended.defaultLink.bed;\r\n model.config.link.seat = baseConfigs.twoPassengersExtended.defaultLink.seats;\r\n model.config.link.tires = baseConfigs.twoPassengersExtended.defaultLink.tires;\r\n }\r\n\r\n function selectDefaultsChecks4p(elements) {\r\n utils.selectElement(elements.engine.gasolineRadio);\r\n utils.selectElement(elements.bed.cargoRadio);\r\n utils.selectElement(elements.seat.benchSeatFrontRadio);\r\n utils.selectElement(elements.seat.benchSeatBackRadio);\r\n utils.selectElement(elements.rear.rearNoneRadio);\r\n utils.selectElement(elements.tires.trufRadio);\r\n }\r\n\r\n function selectDefaultsChecks2p(elements) {\r\n utils.selectElement(elements.engine.gasolineRadio);\r\n utils.selectElement(elements.bed.cargoRadio);\r\n utils.selectElement(elements.seat.benchSeatRadio);\r\n utils.selectElement(elements.canopy.canopyNoneRadio);\r\n utils.selectElement(elements.rear.rearNoneRadio);\r\n utils.selectElement(elements.tires.trufRadio);\r\n }\r\n\r\n function selectDefaultsChecks2pext(elements) {\r\n utils.selectElement(elements.engine.gasolineRadio);\r\n utils.selectElement(elements.bed.flatbed);\r\n utils.selectElement(elements.bed.electricLiftKit12v);\r\n utils.selectElement(elements.bed.electricLiftKit48v);\r\n utils.selectElement(elements.seat.benchSeatRadio);\r\n utils.selectElement(elements.canopy.canopyNoneRadio);\r\n utils.selectElement(elements.rear.rearNoneRadio);\r\n utils.selectElement(elements.tires.trufRadio);\r\n }\r\n\r\n return {\r\n setDefaultsLink4p: setDefaultsLink4p,\r\n setDefaultsLink2p: setDefaultsLink2p,\r\n setDefaultsLink2pext: setDefaultsLink2pext,\r\n setDefaultImages4p: setDefaultImages4p,\r\n setDefaultImages2p: setDefaultImages2p,\r\n setDefaultImages2pext: setDefaultImages2pext,\r\n selectDefaultsChecks4p: selectDefaultsChecks4p,\r\n selectDefaultsChecks2p: selectDefaultsChecks2p,\r\n selectDefaultsChecks2pext: selectDefaultsChecks2pext\r\n };\r\n}());\r\n","var fourPassengersHandler = (function () {\r\n\r\n // Selected DOM elements needed for implementing 4 passengers base model menu options and image preview \r\n var elements = {\r\n engine: {\r\n gasolineRadio: utils.selectDomElement('#gasoline-engine-4p-radio'),\r\n electricRadio: utils.selectDomElement('#electric-engine-4p-radio')\r\n },\r\n bed: {\r\n cargoRadio: utils.selectDomElement('#cargo-bed-4p-radio'),\r\n flat4ftRadio: utils.selectDomElement('#flat-bed-4ft-4p-radio'),\r\n cargoSubTitle: utils.selectDomElement('#sub-title-cargo-bed-4p'),\r\n lTrackKitCheckbox: utils.selectDomElement('#l-track-4p-checkbox'),\r\n lKitRadiosContainer: utils.selectDomElement('#l-kit-4p-radios'),\r\n lTrack6inRadio: utils.selectDomElement('#l-track-6in-4p-radio'),\r\n lTrack2inRadio: utils.selectDomElement('#l-track-2in-4p-radio'),\r\n bedRackingCheckbox: utils.selectDomElement('#bed-racking-4p-checkbox'),\r\n bedRackingRadiosContainer: utils.selectDomElement('#bed-racking-4p-radios'),\r\n bedRackingNoneRadio: utils.selectDomElement('#bed-racking-none-4p-radio'),\r\n bedRackingSmallRadio: utils.selectDomElement('#bed-racking-small-4p-radio'),\r\n bedRackingLargeRadio: utils.selectDomElement('#bed-racking-large-4p-radio'),\r\n electricLiftKit12v: utils.selectDomElement('#electric-lift-kit-12v-4p-checkbox'),\r\n electricLiftKit48v: utils.selectDomElement('#electric-lift-kit-48v-4p-checkbox')\r\n },\r\n seat: {\r\n benchSeatFrontRadio: utils.selectDomElement('#bench-seat-front-4p-radio'),\r\n benchSeatBackRadio: utils.selectDomElement('#bench-seat-back-4p-radio'),\r\n bucketSeatFrontRadio: utils.selectDomElement('#bucket-seat-front-4p-radio'),\r\n bucketSeatBackRadio: utils.selectDomElement('#bucket-seat-back-4p-radio'),\r\n seatCoverFrontCheckbox: utils.selectDomElement('#seat-cover-front-4p-checkbox'),\r\n seatCoverBackCheckbox: utils.selectDomElement('#seat-cover-back-4p-checkbox')\r\n },\r\n canopy: {\r\n canopyCheckbox: utils.selectDomElement('#canopy-4p-checkbox'),\r\n canopyAttachmentsContainer: utils.selectDomElement('#canopy-attachments-4p'),\r\n canopyWindshieldCheckbox: utils.selectDomElement('#canopy-windshield-4p-checkbox'),\r\n exteriorMirrorsCheckbox: utils.selectDomElement('#exterior-mirrors-4p-checkbox'),\r\n interiorMirrorNoneRadio: utils.selectDomElement('#mirrors-none-4p-radio'),\r\n interiorMirrorStandardRadio: utils.selectDomElement('#standard-interior-mirror-4p-radio'),\r\n interiorMirrorAngleRadio: utils.selectDomElement('#wide-angle-mirror-4p-radio'),\r\n interiorMirrorWinkRadio: utils.selectDomElement('#wink-interior-mirror-4p-radio')\r\n },\r\n front: {\r\n brushGuardCheckbox: utils.selectDomElement('#brush-guard-4p-checkbox'),\r\n brushGuardFrontCheckbox: utils.selectDomElement('#brush-guard-front-4p-checkbox'),\r\n frontReceiverCheckbox: utils.selectDomElement('#front-receiver-4p-checkbox'),\r\n frontAttachmentsContainer: utils.selectDomElement('#front-attachments-panel-4p'),\r\n frontNoneRadio: utils.selectDomElement('#front-none-4p-radio'),\r\n hoseReelRadio: utils.selectDomElement('#house-reel-4p-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-4p-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-4p-radio')\r\n },\r\n rear: {\r\n rearNoneRadio: utils.selectDomElement('#rear-none-4p-radio'),\r\n hoseRealRadio: utils.selectDomElement('#hose-reel-mount-4p-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-mount-4p-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-mount-4p-radio')\r\n },\r\n tires: {\r\n trufRadio: utils.selectDomElement('#truf-tires-4p-radio'),\r\n aggressiveTrufRadio: utils.selectDomElement('#aggressive-truf-tires-4p-radio'),\r\n atvRadio: utils.selectDomElement('#atv-tire-kit-4p-radio')\r\n },\r\n accessories: {\r\n gasoline: {\r\n gasolineAccessoriesContainer: utils.selectDomElement('#saa-gasoline-panel-4p'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-gasoline-4p-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-gasoline-4p-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-gasoline-4p-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-gasoline-4p-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-gasoline-4p-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-gasoline-4p-checkbox'),\r\n parkingAlarmCheckbox: utils.selectDomElement('#parking-brake-alarm-gasoline-4p-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-gasoline-4p-checkbox'),\r\n powerKitCheckbox: utils.selectDomElement('#power-kit-gasoline-4p-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-gasoline-4p-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-gasoline-4p-checkbox')\r\n },\r\n electric: {\r\n electricAccessoriesContainer: utils.selectDomElement('#saa-electric-panel-4p'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-electric-4p-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-electric-4p-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-electric-4p-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-electric-4p-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-electric-4p-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-electric-4p-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-electric-4p-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-electric-4p-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-electric-4p-checkbox')\r\n }\r\n },\r\n cornerImages: {\r\n hornKitContainer: utils.selectDomElement('#horn-kit-thumb'),\r\n hoseReelContainer: utils.selectDomElement('#hose-reel-thumb'),\r\n hoseReelRearContainer: utils.selectDomElement('#hose-reel-rear-thumb'),\r\n bedRackingQuickfistContainer: utils.selectDomElement('#quickfist-grip-thumb'),\r\n bedRackingQuickfistLargeContainer: utils.selectDomElement('#quickfist-grip-large-thumb'),\r\n ramMountBallContainer: utils.selectDomElement('#ram-mount-ball-thumb'),\r\n underHoodContainer: utils.selectDomElement('#under-hood-thumb'),\r\n walkSpreaderFrontContainer: utils.selectDomElement('#walk-spreader-front-thumb'),\r\n walkSpreaderContainer: utils.selectDomElement('#walk-spreader-thumb'),\r\n lTrack2inContainer: utils.selectDomElement('#l-track-2in-thumb'),\r\n lTrack6inContainer: utils.selectDomElement('#l-track-6in-thumb')\r\n }\r\n };\r\n\r\n // Images for 4 passengers base model\r\n var imageUrls = {\r\n electricEngine: 'url(\"images/4p_electric.png\")',\r\n cargobed: 'url(\"images/4p_bed_cargobed_.png\")',\r\n flatBed4ft: 'url(\"images/4p_bed_4ftflat.png\")',\r\n bedRacking: 'url(\"images/4p_bed_cargobed_bedracking.png\")',\r\n benchSeatFront: 'url(\"images/4p_seat_front_bench.png\")',\r\n benchSeatBack: 'url(\"images/4p_seat_back_bench.png\")',\r\n bucketSeatFront: 'url(\"images/4p_seat_front_bucket.png\")',\r\n bucketSeatBack: 'url(\"images/4p_seat_back_bucket.png\")',\r\n canopy: 'url(\"images/4p_cnc_canopy_.png\")',\r\n canopyWindshield: 'url(\"images/4p_cnc_canopy_windshield.png\")',\r\n exteriorMirrors: 'url(\"images/ext_cnc_canopy_extmirror.png\")',\r\n interiorMirrorStandard: 'url(\"images/ext_cnc_canopy_standardintmirror.png\")',\r\n interiorMirrorAngle: 'url(\"images/ext_cnc_canopy_wideangleintmirror.png\")',\r\n interiorMirrorWink: 'url(\"images/4p_cnc_canopy_winkintmirror.png\")',\r\n brushGuard: 'url(\"images/ext_front_brushguard.png\")',\r\n brushGuardFront: 'url(\"images/ext_front_bgfrontreciever.png\")',\r\n frontReceiver: 'url(\"images/ext_front_frontreciever.png\")',\r\n hoseReel: 'url(\"images/ext_front_hosereel.png\")',\r\n trashCan: 'url(\"images/ext_front_trashcan.png\")',\r\n walkSpreader: 'url(\"images/ext_front_walkspreader_up.png\")',\r\n trashCanRear: 'url(\"images/ext_rear_trashcan.png\")',\r\n hoseRear: 'url(\"images/ext_rear_hosereel.png\")',\r\n walkSpreaderRear: 'url(\"images/ext_rear_walkspreader_up.png\")',\r\n truf: 'url(\"images/ext_tires_turf.png\")',\r\n atv: 'url(\"images/ext_tires_atv.png\")',\r\n aggressive: 'url(\"images/ext_tires_aggressiveturf.png\")',\r\n homoligationCargo: 'url(\"images/4p_lightkit_cargobed_homoligation.png\")',\r\n lightkitCargo: 'url(\"images/4p_lightkit_cargobed.png\")',\r\n lightkitBrushguardCargo: 'url(\"images/4p_lightkit_cargobed_brushguard.png\")',\r\n homoligationFlatBed: 'url(\"images/4p_lightkit_4ftflatbed_homoligation.png\")',\r\n lightkitFlatBed: 'url(\"images/4p_lightkit_4ftflatbed.png\")',\r\n lightkitBrushguardFlatBed: 'url(\"images/4p_lightkit_4ftflatbed_brushguard.png\")'\r\n };\r\n\r\n // reset model.config and set default email and link selections\r\n // apply model rules\r\n function rulesHandler() {\r\n model.config.base = '4 Passenger (Standard + Extension Kit) (07049)';\r\n\r\n model.config.email = {\r\n currentEngine: '429cc Gasoline Engine (07042)',\r\n currentBed: 'Cargo Bed (07046)'\r\n };\r\n\r\n model.config.link = {};\r\n model.config.link.currentEngine = '#ge-4p';\r\n model.config.link.currentBed = '#cb-4p';\r\n model.config.link.tires = '#tt-4p';\r\n\r\n rules.engineRules(elements, imageUrls);\r\n rules.bedRules(elements, imageUrls);\r\n rules.seatsRules4p(elements, imageUrls);\r\n rules.canopyRules4p(elements, imageUrls);\r\n rules.frontAttachmentsRules(elements, imageUrls);\r\n rules.rearAttachmentsRules(elements, imageUrls);\r\n rules.tiresRules(elements, imageUrls);\r\n rules.accessoriesRules(elements, imageUrls);\r\n }\r\n\r\n return {\r\n rulesHandler: rulesHandler,\r\n elements: elements,\r\n imageUrls: imageUrls\r\n };\r\n}());\r\n","var twoPassengersHandler = (function () {\r\n var elements = {\r\n engine: {\r\n gasolineRadio: utils.selectDomElement('#gasoline-engine-2p-radio'),\r\n electricRadio: utils.selectDomElement('#electric-engine-2p-radio')\r\n },\r\n bed: {\r\n cargoRadio: utils.selectDomElement('#cargo-bed-2p-radio'),\r\n flat4ftRadio: utils.selectDomElement('#flat-bed-4ft-2p-radio'),\r\n cargoSubTitle: utils.selectDomElement('#sub-title-cargo-bed-2p'),\r\n lTrackKitCheckbox: utils.selectDomElement('#l-track-2p-checkbox'),\r\n lKitRadiosContainer: utils.selectDomElement('#l-kit-2p-radios'),\r\n lTrack6inRadio: utils.selectDomElement('#l-track-6in-2p-radio'),\r\n lTrack2inRadio: utils.selectDomElement('#l-track-2in-2p-radio'),\r\n bedRackingCheckbox: utils.selectDomElement('#bed-racking-2p-checkbox'),\r\n bedRackingRadiosContainer: utils.selectDomElement('#bed-racking-2p-radios'),\r\n bedRackingNoneRadio: utils.selectDomElement('#bed-racking-none-2p-radio'),\r\n bedRackingSmallRadio: utils.selectDomElement('#bed-racking-small-2p-radio'),\r\n bedRackingLargeRadio: utils.selectDomElement('#bed-racking-large-2p-radio'),\r\n electricLiftKit12v: utils.selectDomElement('#electric-lift-kit-12v-2p-checkbox'),\r\n electricLiftKit48v: utils.selectDomElement('#electric-lift-kit-48v-2p-checkbox')\r\n },\r\n seat: {\r\n benchSeatRadio: utils.selectDomElement('#bench-seat-2p-radio'),\r\n bucketSeatRadio: utils.selectDomElement('#bucket-seat-2p-radio'),\r\n seatCoverCheckbox: utils.selectDomElement('#seat-cover-2p-checkbox')\r\n },\r\n canopy: {\r\n canopyNoneRadio: utils.selectDomElement('#cab-and-canopy-none-2p-radio'),\r\n canopyTwoSeatRadio: utils.selectDomElement('#canopy-2seat-2p-radio'),\r\n ropsCabRadio: utils.selectDomElement('#rops-cab-2p-radio'),\r\n ropsTwoPostCabRadio: utils.selectDomElement('#rops-2post-cab-2p-radio'),\r\n ropsTwoPostCabWithCanopyRadio: utils.selectDomElement('#rops-2post-cab-with-canopy-2p-radio'),\r\n canopyTwoSeatsContainer: utils.selectDomElement('#canopy-attachments-2cs-2p'),\r\n\r\n canopyTwoSeatsWindshieldCheckbox: utils.selectDomElement('#canopy-windshield-2cs-2p-checkbox'),\r\n exteriorTwoSeatsMirrorsCheckbox: utils.selectDomElement('#exterior-mirrors-2cs-2p-checkbox'),\r\n interiorTwoSeatsMirrorNoneRadio: utils.selectDomElement('#mirrors-none-2cs-2p-radio'),\r\n interiorTwoSeatsMirrorStandardRadio: utils.selectDomElement('#standard-interior-mirror-2cs-2p-radio'),\r\n interiorTwoSeatsMirrorAngleRadio: utils.selectDomElement('#wide-angle-mirror-2cs-2p-radio'),\r\n interiorTwoSeatsMirrorWinkRadio: utils.selectDomElement('#wink-interior-mirror-2cs-2p-radio'),\r\n canopyRopsContainer: utils.selectDomElement('#canopy-attachments-rops-2p'),\r\n\r\n canopyRopsWindshieldCheckbox: utils.selectDomElement('#canopy-windshield-rops-2p-checkbox'),\r\n exteriorRopsMirrorsCheckbox: utils.selectDomElement('#exterior-mirrors-rops-2p-checkbox'),\r\n interiorRopsMirrorNoneRadio: utils.selectDomElement('#mirrors-none-rops-2p-radio'),\r\n interiorRopsMirrorStandardRadio: utils.selectDomElement('#standard-interior-mirror-rops-2p-radio'),\r\n interiorRopsMirrorAngleRadio: utils.selectDomElement('#wide-angle-mirror-rops-2p-radio'),\r\n interiorRopsMirrorWinkRadio: utils.selectDomElement('#wink-interior-mirror-rops-2p-radio'),\r\n ropsAttachments: utils.selectDomElement('#rops-attachments-2p'),\r\n\r\n ropsInteriorMirrorNoneRadio: utils.selectDomElement('#rob-mirrors-none-2p-radio'),\r\n ropsInterMirrorStandardRadio: utils.selectDomElement('#rob-interior-mirrors-none-2p-radio'),\r\n ropsInteriorMirrorAngleRadio: utils.selectDomElement('#rob-wide-angle-interior-mirrors-none-2p-radio'),\r\n\r\n cabDoorCheckbox: utils.selectDomElement('#cab-dor-kit-2p-checkbox'),\r\n washerBottleCheckbox: utils.selectDomElement('#washer-bottle-2p-checkbox'),\r\n beaconLightCheckbox: utils.selectDomElement('#beacon-light-kit-2p-checkbox'),\r\n ledLightCheckbox: utils.selectDomElement('#led-work-light-kit-2p-checkbox'),\r\n ropsExteriorMirrorsCheckbox: utils.selectDomElement('#rob-exterior-mirrors-2p-checkbox')\r\n },\r\n front: {\r\n brushGuardCheckbox: utils.selectDomElement('#brush-guard-2p-checkbox'),\r\n brushGuardFrontCheckbox: utils.selectDomElement('#brush-guard-front-2p-checkbox'),\r\n frontReceiverCheckbox: utils.selectDomElement('#front-receiver-2p-checkbox'),\r\n frontAttachmentsContainer: utils.selectDomElement('#front-attachments-panel-2p'),\r\n frontNoneRadio: utils.selectDomElement('#front-none-2p-radio'),\r\n hoseReelRadio: utils.selectDomElement('#house-reel-2p-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-2p-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-2p-radio')\r\n },\r\n rear: {\r\n rearNoneRadio: utils.selectDomElement('#rear-none-2p-radio'),\r\n hoseRealRadio: utils.selectDomElement('#hose-reel-mount-2p-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-mount-2p-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-mount-2p-radio')\r\n },\r\n tires: {\r\n trufRadio: utils.selectDomElement('#truf-tires-2p-radio'),\r\n aggressiveTrufRadio: utils.selectDomElement('#aggressive-truf-tires-2p-radio'),\r\n atvRadio: utils.selectDomElement('#atv-tire-kit-2p-radio')\r\n },\r\n accessories: {\r\n gasoline: {\r\n gasolineAccessoriesContainer: utils.selectDomElement('#saa-gasoline-panel-2p'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-gasoline-2p-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-gasoline-2p-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-gasoline-2p-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-gasoline-2p-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-gasoline-2p-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-gasoline-2p-checkbox'),\r\n parkingAlarmCheckbox: utils.selectDomElement('#parking-brake-alarm-gasoline-2p-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-gasoline-2p-checkbox'),\r\n powerKitCheckbox: utils.selectDomElement('#power-kit-gasoline-2p-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-gasoline-2p-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-gasoline-2p-checkbox')\r\n },\r\n electric: {\r\n electricAccessoriesContainer: utils.selectDomElement('#saa-electric-panel-2p'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-electric-2p-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-electric-2p-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-electric-2p-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-electric-2p-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-electric-2p-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-electric-2p-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-electric-2p-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-electric-2p-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-electric-2p-checkbox')\r\n }\r\n },\r\n cornerImages: {\r\n hornKitContainer: utils.selectDomElement('#horn-kit-thumb'),\r\n hoseReelContainer: utils.selectDomElement('#hose-reel-thumb'),\r\n hoseReelRearContainer: utils.selectDomElement('#hose-reel-rear-thumb'),\r\n bedRackingQuickfistContainer: utils.selectDomElement('#quickfist-grip-thumb'),\r\n bedRackingQuickfistLargeContainer: utils.selectDomElement('#quickfist-grip-large-thumb'),\r\n ramMountBallContainer: utils.selectDomElement('#ram-mount-ball-thumb'),\r\n underHoodContainer: utils.selectDomElement('#under-hood-thumb'),\r\n walkSpreaderFrontContainer: utils.selectDomElement('#walk-spreader-front-thumb'),\r\n walkSpreaderContainer: utils.selectDomElement('#walk-spreader-thumb'),\r\n lTrack2inContainer: utils.selectDomElement('#l-track-2in-thumb'),\r\n lTrack6inContainer: utils.selectDomElement('#l-track-6in-thumb')\r\n }\r\n };\r\n\r\n var imageUrls = {\r\n electricEngine: 'url(\"images/2p_electric.png\")',\r\n cargobed: 'url(\"images/2p_bed_cargobed_.png\")',\r\n flatBed4ft: 'url(\"images/2p_bed_4ftflat.png\")',\r\n bedRacking: 'url(\"images/2p_bed_cargobed_bedracking.png\")',\r\n benchSeat: 'url(\"images/2p_seat_bench.png\")',\r\n bucketSeat: 'url(\"images/2p_seat_bucket.png\")',\r\n canopy: 'url(\"images/2p_cnc_canopy_.png\")',\r\n ropsCab: 'url(\"images/2p_cnc_ROPScab_.png\")',\r\n rops: 'url(\"images/2p_cnc_ROPS.png\")',\r\n ropsCanopy: 'url(\"images/2p_cnc_ROPScanopy_.png\")',\r\n canopyWindshield: 'url(\"images/2p_cnc_canopy_windshield.png\")',\r\n exteriorMirrors: 'url(\"images/2p_cnc_canopy_extmirror.png\")',\r\n interiorMirrorStandard: 'url(\"images/2p_cnc_canopy_standardintmirror.png\")',\r\n interiorMirrorAngle: 'url(\"images/2p_cnc_canopy_wideangleintmirror.png\")',\r\n interiorMirrorWink: 'url(\"images/2p_cnc_canopy_winkintmirror.png\")',\r\n ropsFrontDoor: 'url(\"images/2p_cnc_ROPScab_door_front.png\")',\r\n ropsBackDoor: 'url(\"images/2p_cnc_ROPScab_door_back.png\")',\r\n beaconLight: 'url(\"images/2p_cnc_ROPScab_beaconlight.png\")',\r\n LedLights: 'url(\"images/2p_cnc_ROPScab_LEDlights.png\")',\r\n ropsExteriorMirror: 'url(\"images/2pext_cnc_ROPScab_extmirror.png\")',\r\n ropsStandardMirror: 'url(\"images/2p_cnc_ROPScab_standardintmirror.png\")',\r\n ropsAngleMirror: 'url(\"images/2p_cnc_ROPScab_wideangleintmirror.png\")',\r\n brushGuard: 'url(\"images/ext_front_brushguard.png\")',\r\n brushGuardFront: 'url(\"images/2p_front_bgfrontreciever.png\")',\r\n frontReceiver: 'url(\"images/2p_front_frontreciever.png\")',\r\n hoseReel: 'url(\"images/2p_front_hosereel.png\")',\r\n trashCan: 'url(\"images/2p_front_trashcan.png\")',\r\n walkSpreader: 'url(\"images/2p_front_walkspreader_up.png\")',\r\n hoseRear: 'url(\"images/2p_rear_hosereel.png\")',\r\n trashCanRear: 'url(\"images/2p_rear_trashcan.png\")',\r\n walkSpreaderRear: 'url(\"images/2p_rear_walkspreader_up.png\")',\r\n truf: 'url(\"images/2p_tires_turf.png\")',\r\n atv: 'url(\"images/2p_tires_atv.png\")',\r\n aggressive: 'url(\"images/2p_tires_aggressiveturf.png\")',\r\n homoligationCargo: 'url(\"images/2p_lightkit_cargobed_homoligation.png\")',\r\n lightkitCargo: 'url(\"images/2p_lightkit_cargobed.png\")',\r\n lightkitBrushguardCargo: 'url(\"images/2p_lightkit_cargobed_brushguard.png\")',\r\n homoligationFlatBed: 'url(\"images/2p_lightkit_4ftflatbed_homoligation.png\")',\r\n lightkitFlatBed: 'url(\"images/2p_lightkit_4ftflatbed.png\")',\r\n lightkitBrushguardFlatBed: 'url(\"images/2p_lightkit_4ftflatbed_brushguard.png\")'\r\n };\r\n\r\n // reset model.config and set default email and link selections\r\n // apply model rules\r\n function rulesHandler() {\r\n model.config.base = '2 Passenger (Standard)';\r\n\r\n model.config.email = {\r\n currentEngine: '429cc Gasoline Engine (07042)',\r\n currentBed: 'Cargo Bed (07046)'\r\n };\r\n\r\n model.config.link = {};\r\n model.config.link.currentEngine = '#ge-2p';\r\n model.config.link.currentBed = '#cb-2p';\r\n model.config.link.tires = '#tt-2p';\r\n\r\n rules.engineRules(elements, imageUrls);\r\n rules.bedRules(elements, imageUrls);\r\n rules.seatsRules(elements, imageUrls);\r\n rules.canopyRules2p(elements, imageUrls);\r\n rules.frontAttachmentsRules(elements, imageUrls);\r\n rules.rearAttachmentsRules(elements, imageUrls);\r\n rules.tiresRules(elements, imageUrls);\r\n rules.accessoriesRules(elements, imageUrls);\r\n }\r\n\r\n return {\r\n rulesHandler: rulesHandler,\r\n elements: elements\r\n };\r\n}());\r\n","var twoPassengersExtHandler = (function () {\r\n var elements = {\r\n engine: {\r\n gasolineRadio: utils.selectDomElement('#gasoline-engine-2pext-radio'),\r\n electricRadio: utils.selectDomElement('#electric-engine-2pext-radio')\r\n },\r\n bed: {\r\n flatbed: utils.selectDomElement('#flat-bed-6ft-2pext-radio'),\r\n electricLiftKit12v: utils.selectDomElement('#electric-lift-kit-12v-2pext-checkbox'),\r\n electricLiftKit48v: utils.selectDomElement('#electric-lift-kit-48v-2pext-checkbox')\r\n },\r\n seat: {\r\n benchSeatRadio: utils.selectDomElement('#bench-seat-2pext-radio'),\r\n bucketSeatRadio: utils.selectDomElement('#bucket-seat-2pext-radio'),\r\n seatCoverCheckbox: utils.selectDomElement('#seat-cover-2pext-checkbox')\r\n },\r\n canopy: {\r\n canopyNoneRadio: utils.selectDomElement('#cab-and-canopy-none-2pext-radio'),\r\n canopyTwoSeatRadio: utils.selectDomElement('#canopy-2seat-2pext-radio'),\r\n ropsCabRadio: utils.selectDomElement('#rops-cab-2pext-radio'),\r\n canopyAttachmentsRadiosContainer: utils.selectDomElement('#canopy-attachments-2pext'),\r\n canopyWindshieldCheckbox: utils.selectDomElement('#canopy-windshield-2pext-checkbox'),\r\n exteriorMirrorsCheckbox: utils.selectDomElement('#exterior-mirrors-2pext-checkbox'),\r\n interiorMirrorNoneRadio: utils.selectDomElement('#mirrors-none-2pext-radio'),\r\n interiorMirrorStandardRadio: utils.selectDomElement('#standard-interior-mirror-2pext-radio'),\r\n interiorMirrorAngleRadio: utils.selectDomElement('#wide-angle-mirror-2pext-radio'),\r\n interiorMirrorWinkRadio: utils.selectDomElement('#wink-interior-mirror-2pext-radio'),\r\n ropsRadiosContainer: utils.selectDomElement('#rops-attachments-2pext'),\r\n cabDoorCheckbox: utils.selectDomElement('#cab-dor-kit-2pext-checkbox'),\r\n washerBottleCheckbox: utils.selectDomElement('#washer-bottle-2pext-checkbox'),\r\n beaconLightCheckbox: utils.selectDomElement('#beacon-light-kit-2pext-checkbox'),\r\n ledLightCheckbox: utils.selectDomElement('#led-work-light-kit-2pext-checkbox'),\r\n ropsExteriorMirrorsCheckbox: utils.selectDomElement('#rob-exterior-mirrors-2pext-checkbox'),\r\n ropsInteriorMirrorNoneRadio: utils.selectDomElement('#rob-mirrors-none-2pext-radio'),\r\n ropsInterMirrorStandardRadio: utils.selectDomElement('#rob-interior-mirrors-none-2pext-radio'),\r\n ropsInteriorMirrorAngleRadio: utils.selectDomElement('#rob-wide-angle-interior-mirrors-none-2pext-radio')\r\n },\r\n front: {\r\n brushGuardCheckbox: utils.selectDomElement('#brush-guard-2pext-checkbox'),\r\n brushGuardFrontCheckbox: utils.selectDomElement('#brush-guard-front-2pext-checkbox'),\r\n frontReceiverCheckbox: utils.selectDomElement('#front-receiver-2pext-checkbox'),\r\n frontAttachmentsContainer: utils.selectDomElement('#front-attachments-panel-2pext'),\r\n frontNoneRadio: utils.selectDomElement('#front-none-2pext-radio'),\r\n hoseReelRadio: utils.selectDomElement('#house-reel-2pext-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-2pext-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-2pext-radio')\r\n },\r\n rear: {\r\n rearNoneRadio: utils.selectDomElement('#rear-none-2pext-radio'),\r\n hoseRealRadio: utils.selectDomElement('#hose-reel-mount-2pext-radio'),\r\n trashCanRadio: utils.selectDomElement('#trash-can-mount-2pext-radio'),\r\n walkSpreaderRadio: utils.selectDomElement('#walk-spreader-mount-2pext-radio')\r\n },\r\n tires: {\r\n trufRadio: utils.selectDomElement('#truf-tires-2pext-radio'),\r\n aggressiveTrufRadio: utils.selectDomElement('#aggressive-truf-tires-2pext-radio'),\r\n atvRadio: utils.selectDomElement('#atv-tire-kit-2pext-radio')\r\n },\r\n accessories: {\r\n gasoline: {\r\n gasolineAccessoriesContainer: utils.selectDomElement('#saa-gasoline-panel-2pext'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-gasoline-2pext-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-gasoline-2pext-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-gasoline-2pext-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-gasoline-2pext-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-gasoline-2pext-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-gasoline-2pext-checkbox'),\r\n parkingAlarmCheckbox: utils.selectDomElement('#parking-brake-alarm-gasoline-2pext-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-gasoline-2pext-checkbox'),\r\n powerKitCheckbox: utils.selectDomElement('#power-kit-gasoline-2pext-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-gasoline-2pext-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-gasoline-2pext-checkbox')\r\n },\r\n electric: {\r\n electricAccessoriesContainer: utils.selectDomElement('#saa-electric-panel-2pext'),\r\n signalLightsCheckbox: utils.selectDomElement('#signal-lights-electric-2pext-checkbox'),\r\n signalLightsRadiosContainer: utils.selectDomElement('#signal-lights-electric-2pext-radios'),\r\n homoligationLightRadio: utils.selectDomElement('#homoligation-electric-2pext-radio'),\r\n breakLightRadio: utils.selectDomElement('#brake-light-only-electric-2pext-radio'),\r\n hornKitCheckbox: utils.selectDomElement('#horn-kit-electric-2pext-checkbox'),\r\n alarmCheckbox: utils.selectDomElement('#backup-alarm-electric-2pext-checkbox'),\r\n underHoodBoxCheckbox: utils.selectDomElement('#under-hood-box-electric-2pext-checkbox'),\r\n sparkArrestorCheckbox: utils.selectDomElement('#spark-arrestor-electric-2pext-checkbox'),\r\n ramBallCheckbox: utils.selectDomElement('#ram-ball-electric-2pext-checkbox')\r\n }\r\n },\r\n cornerImages: {\r\n hornKitContainer: utils.selectDomElement('#horn-kit-thumb'),\r\n hoseReelContainer: utils.selectDomElement('#hose-reel-thumb'),\r\n hoseReelRearContainer: utils.selectDomElement('#hose-reel-rear-thumb'),\r\n bedRackingQuickfistContainer: utils.selectDomElement('#quickfist-grip-thumb'),\r\n bedRackingQuickfistLargeContainer: utils.selectDomElement('#quickfist-grip-large-thumb'),\r\n ramMountBallContainer: utils.selectDomElement('#ram-mount-ball-thumb'),\r\n underHoodContainer: utils.selectDomElement('#under-hood-thumb'),\r\n walkSpreaderFrontContainer: utils.selectDomElement('#walk-spreader-front-thumb'),\r\n walkSpreaderContainer: utils.selectDomElement('#walk-spreader-thumb'),\r\n lTrack2inContainer: utils.selectDomElement('#l-track-2in-thumb'),\r\n lTrack6inContainer: utils.selectDomElement('#l-track-6in-thumb')\r\n }\r\n };\r\n\r\n imageUrls = {\r\n electricEngine: 'url(\"images/ext_electric.png\")',\r\n benchSeat: 'url(\"images/2pext_seat_bench.png\")',\r\n bucketSeat: 'url(\"images/2pext_seat_bucket.png\")',\r\n canopy: 'url(\"images/2pext_cnc_canopy_.png\")',\r\n ropsCab: 'url(\"images/2pext_cnc_ROPScab.png\")',\r\n postRops: 'url(\"images/2pext_cnc_2postROPS.png\")',\r\n canopyWindshield: 'url(\"images/2pext_cnc_canopy_windshield.png\")',\r\n exteriorMirrors: 'url(\"images/ext_cnc_canopy_extmirror.png\")',\r\n interiorMirrorStandard: 'url(\"images/ext_cnc_canopy_standardintmirror.png\")',\r\n interiorMirrorAngle: 'url(\"images/ext_cnc_canopy_wideangleintmirror.png\")',\r\n interiorMirrorWink: 'url(\"images/ext_cnc_canopy_winkintmirror.png\")',\r\n ropsFrontDoor: 'url(\"images/2pext_cnc_ROPScab_door_front.png\")',\r\n ropsBackDoor: 'url(\"images/2p_cnc_ROPScab_door_back.png\")',\r\n beaconLight: 'url(\"images/2pext_cnc_ROPScab_beaconlight.png\")',\r\n ledLights: 'url(\"images/2pext_cnc_ROPScab_LEDlights.png\")',\r\n ropsExteriorMirror: 'url(\"images/2pext_cnc_ROPScab_extmirror.png\")',\r\n ropsStandardMirror: 'url(\"images/2pext_cnc_ROPScab_standardintmirror.png\")',\r\n ropsAngleMirror: 'url(\"images/2pext_cnc_ROPScab_wideangleintmirror.png\")',\r\n brushGuard: 'url(\"images/ext_front_brushguard.png\")',\r\n brushGuardFront: 'url(\"images/ext_front_bgfrontreciever.png\")',\r\n frontReceiver: 'url(\"images/ext_front_frontreciever.png\")',\r\n hoseReel: 'url(\"images/ext_front_hosereel.png\")',\r\n trashCan: 'url(\"images/ext_front_trashcan.png\")',\r\n walkSpreader: 'url(\"images/ext_front_walkspreader_up.png\")',\r\n hoseRear: 'url(\"images/2p_rear_hosereel.png\")',\r\n trashCanRear: 'url(\"images/ext_rear_trashcan.png\")',\r\n walkSpreaderRear: 'url(\"images/ext_rear_walkspreader_up.png\")',\r\n truf: 'url(\"images/ext_tires_turf.png\")',\r\n atv: 'url(\"images/ext_tires_atv.png\")',\r\n aggressive: 'url(\"images/ext_tires_aggressiveturf.png\")',\r\n homoligationCargo: '',\r\n lightkitCargo: '',\r\n lightkitBrushguardCargo: '',\r\n homoligationFlatBed: 'url(\"images/2pext_lightkit_homoligation.png\")',\r\n lightkitFlatBed: 'url(\"images/2pext_lightkit.png\")',\r\n lightkitBrushguardFlatBed: 'url(\"images/2pext_lightkit_brushguard.png\")'\r\n };\r\n\r\n // reset model.config and set default email and link selections\r\n // apply model rules\r\n function rulesHandler() {\r\n model.config.base = '2 Passenger (Standard + Extension Kit + 6ft Flat Bed) (07049, 07149)';\r\n\r\n model.config.email = {\r\n currentEngine: '429cc Gasoline Engine (07042)',\r\n currentBed: 'Cargo Bed (07046)'\r\n };\r\n model.config.email.currentBed = '6ft Flat Bed';\r\n\r\n model.config.link = {};\r\n model.config.link.currentEngine = '#ge-2pext';\r\n model.config.link.currentBed = '#fb-2pext';\r\n model.config.link.tires = '#tt-2pext';\r\n\r\n rules.engineRules(elements, imageUrls);\r\n rules.bedRules2pext(elements, imageUrls);\r\n rules.seatsRules(elements, imageUrls);\r\n rules.canopyRules2pext(elements, imageUrls);\r\n rules.frontAttachmentsRules(elements, imageUrls);\r\n rules.rearAttachmentsRules(elements, imageUrls);\r\n rules.tiresRules(elements, imageUrls);\r\n rules.accessoriesRules(elements, imageUrls);\r\n }\r\n\r\n return {\r\n rulesHandler: rulesHandler,\r\n elements: elements\r\n };\r\n}());\r\n","var dataHandler = (function () {\r\n 'use strict';\r\n\r\n var WEBSITE_URL = 'http://sites.toro.com/workman-gtx-configurator/';\r\n var resizingId;\r\n var dialog = utils.selectDomElement('#dialog-container');\r\n var emailBtn = utils.selectDomElement('#email-btn');\r\n var dialogImgCont = utils.selectDomElement('#dialog-img-cont');\r\n var transparentContainer = utils.selectDomElement('#transparent-container');\r\n var changeModelBtn = utils.selectDomElement('#header-title');\r\n var changeModelBtnIco = changeModelBtn.getElementsByClassName('fa')[0];\r\n var modelsDropDown = utils.selectDomElement('#models-drop-down');\r\n var modelsDropDownElements = Array.prototype.slice.call(modelsDropDown.getElementsByTagName('a'));\r\n var machineModelName = utils.selectDomElement('#machine-model-name');\r\n\r\n var baseModels = {\r\n fourPassengers: 'WorkmanGtx4Passenger',\r\n twoPassengers: 'WorkmanGtx2Passenger',\r\n twoPassengersExtended: 'WorkmanGtx2PassengerExtended'\r\n };\r\n\r\n var machineModel = {\r\n fourPassengers: 'Workman-Gtx-4-Passenger',\r\n twoPassengers: 'Workman-Gtx-2-Passenger',\r\n twoPassengersExtended: 'Workman-Gtx-2-Passenger-Extended'\r\n };\r\n\r\n var currentBaseModel = baseModels.fourPassengers;\r\n var currentMachineModel = machineModel.fourPassengers;\r\n\r\n var cornerImages = {\r\n buttons: {\r\n hornKitCorner: utils.selectDomElement('#horn-kit-button'),\r\n hoseReelCorner: utils.selectDomElement('#hose-reel-button'),\r\n hoseReelBackCorner: utils.selectDomElement('#hose-reel-rear-button'),\r\n bedRackingQuickfistCorner: utils.selectDomElement('#quickfist-grip-button'),\r\n bedRackingQuickfistLargeCorner: utils.selectDomElement('#quickfist-grip-large-button'),\r\n ramMountBallCorner: utils.selectDomElement('#ram-mount-ball-button'),\r\n underHoodCorner: utils.selectDomElement('#under-hood-button'),\r\n walkSpreaderFrontCorner: utils.selectDomElement('#walk-spreader-front-button'),\r\n walkSpreaderCorner: utils.selectDomElement('#walk-spreader-button'),\r\n lTrack2in: utils.selectDomElement('#l-track-2in-button'),\r\n lTrack6in: utils.selectDomElement('#l-track-6in-button')\r\n },\r\n imageUrls: {\r\n hornKitCorner: 'images/horn-kit.jpg\"',\r\n hoseReelCorner: 'images/hose-reel-mount.png',\r\n hoseReelBackCorner: 'images/hose-reel-mount.png', // or hosereel-rear.png\r\n bedRackingQuickfistCorner: 'images/quickfist-grip-mini.jpg',\r\n bedRackingQuickfistLargeCorner: 'images/quickfist-grip-large.jpg',\r\n ramMountBallCorner: 'images/ram-mount-ball.jpg',\r\n underHoodCorner: 'images/under-hood-storage-box-kit.jpg',\r\n walkSpreaderFrontCorner: 'images/walk-spreader-mount.png',\r\n walkSpreaderCorner: 'images/walk-spreader-mount.png',\r\n lTrack2in: 'images/l-track-2in.jpg',\r\n lTrack6in: 'images/l-track-6in.jpg'\r\n }\r\n };\r\n\r\n var containerIds = {\r\n fourPassengers: '#left-menu-4p',\r\n twoPassengers: '#left-menu-2p',\r\n twoPassengersExtended: '#left-menu-2pext'\r\n };\r\n\r\n // Show the proper left menu according selected base model and apply its rules\r\n // because of IE11 caching issues - unselect all chosen options first\r\n // and then select the default ones \r\n function applyRules(currentModel) {\r\n resetDefaultCheckedElements(currentModel);\r\n\r\n if (currentModel === baseModels.fourPassengers) {\r\n utils.displayElement(containerIds.fourPassengers);\r\n utils.hideElement(containerIds.twoPassengers);\r\n utils.hideElement(containerIds.twoPassengersExtended);\r\n\r\n defaultValues.setDefaultImages4p();\r\n defaultValues.setDefaultsLink4p();\r\n defaultValues.selectDefaultsChecks4p(fourPassengersHandler.elements);\r\n\r\n fourPassengersHandler.rulesHandler();\r\n } else if (currentModel === baseModels.twoPassengers) {\r\n utils.hideElement(containerIds.fourPassengers);\r\n utils.displayElement(containerIds.twoPassengers);\r\n utils.hideElement(containerIds.twoPassengersExtended);\r\n\r\n defaultValues.setDefaultImages2p();\r\n defaultValues.setDefaultsLink2p();\r\n defaultValues.selectDefaultsChecks2p(twoPassengersHandler.elements);\r\n\r\n twoPassengersHandler.rulesHandler();\r\n } else {\r\n utils.hideElement(containerIds.fourPassengers);\r\n utils.hideElement(containerIds.twoPassengers);\r\n utils.displayElement(containerIds.twoPassengersExtended);\r\n\r\n defaultValues.setDefaultImages2pext();\r\n defaultValues.setDefaultsLink2pext();\r\n defaultValues.selectDefaultsChecks2pext(twoPassengersExtHandler.elements);\r\n\r\n twoPassengersExtHandler.rulesHandler();\r\n }\r\n }\r\n\r\n function unselectDropdownItems() {\r\n modelsDropDownElements.map(function (x) {\r\n x.className = '';\r\n });\r\n }\r\n\r\n function changeMachineModel(newModelValue) {\r\n\r\n // Remove previous selected attachments from all layers\r\n var attachmentLayers = Array.prototype.slice.call(document.getElementsByClassName('toro-attachments-images'));\r\n\r\n attachmentLayers.map(function (x) {\r\n x.style.backgroundImage = 'none';\r\n });\r\n\r\n unselectDropdownItems();\r\n\r\n machineModelName.innerHTML = convertMachineModel(newModelValue);\r\n\r\n document.getElementById(newModelValue).className = 'active';\r\n modelsDropDown.className = '';\r\n changeModelBtn.className = '';\r\n changeModelBtnIco.className = 'fa fa-angle-down';\r\n emailBtn.classList.remove('hidden');\r\n\r\n applyRules(currentBaseModel);\r\n }\r\n\r\n // Convert base model into text shown in header after selecting the model\r\n function convertMachineModel(baseModelName) {\r\n switch (baseModelName) {\r\n case baseModels.fourPassengers: return 'Workman GTX 4 Passenger Configurator';\r\n case baseModels.twoPassengers: return 'Workman GTX 2 Passenger Configurator';\r\n case baseModels.twoPassengersExtended: return 'Workman GTX 2 Passenger Extended Configurator';\r\n default: 'Workman GTX Configurator';\r\n }\r\n }\r\n\r\n // get params after \"#\" from the URL\r\n // get current base model from drop-down menu and select it to active\r\n function getMachineModelName() {\r\n var model = window.location.hash;\r\n\r\n if (model !== '' || model !== '#') {\r\n if (model === '#Workman-Gtx-2-Passenger-Extended') {\r\n utils.selectDomElement('#' + baseModels.twoPassengersExtended).className = 'active';\r\n currentBaseModel = baseModels.twoPassengersExtended;\r\n currentMachineModel = machineModel.twoPassengersExtended;\r\n\r\n return baseModels.twoPassengersExtended;\r\n } else if (model === '#Workman-Gtx-2-Passenger') {\r\n utils.selectDomElement('#' + baseModels.twoPassengers).className = 'active';\r\n currentBaseModel = baseModels.twoPassengers;\r\n currentMachineModel = machineModel.twoPassengers;\r\n\r\n return baseModels.twoPassengers;\r\n } else {\r\n utils.selectDomElement('#' + baseModels.fourPassengers).className = 'active';\r\n currentBaseModel = baseModels.fourPassengers;\r\n currentMachineModel = machineModel.fourPassengers;\r\n\r\n return baseModels.fourPassengers;\r\n }\r\n } else {\r\n utils.selectDomElement(baseModels.fourPassengers).className = 'active';\r\n currentBaseModel = baseModels.fourPassengers;\r\n currentMachineModel = machineModel.fourPassengers;\r\n\r\n return baseModels.fourPassengers;\r\n }\r\n }\r\n\r\n // Add event listeners for inside corner images preview\r\n // at each button click dialog image appear\r\n function showDialogImageWhenThumbClicked() {\r\n var thumbButtons = Object.keys(cornerImages.buttons).map(function (e) {\r\n return cornerImages.buttons[e];\r\n });\r\n\r\n var thumbImages = Object.keys(cornerImages.imageUrls).map(function (e) {\r\n return cornerImages.imageUrls[e];\r\n });\r\n\r\n for (var i = 0; i < thumbButtons.length; i++) {\r\n addEventListenerOnThumbs(thumbButtons[i], thumbImages[i]);\r\n }\r\n }\r\n\r\n function addEventListenerOnThumbs(button, imageUrl) {\r\n button.addEventListener('click', function () {\r\n dialogImgCont.innerHTML = '\"\"';\r\n dialog.style.visibility = \"visible\";\r\n transparentContainer.style.visibility = \"visible\";\r\n dialog.style.top = '20%';\r\n });\r\n }\r\n\r\n // Closes the extra view dialog\r\n function closeImageDialog() {\r\n dialog.style.visibility = \"hidden\";\r\n transparentContainer.style.visibility = \"hidden\";\r\n }\r\n\r\n function onSiteReadyLookForChangeAndReload() {\r\n if (document.readyState === 'complete') {\r\n window.applicationCache.addEventListener('updateready', function (e) {\r\n\r\n if (window.applicationCache.status === window.applicationCache.UPDATEREADY) {\r\n\r\n // Browser downloaded a new app cache.\r\n if (confirm('A new version of this site is available. Load it?')) {\r\n window.location.reload();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n function loadDataWhenModelChange() {\r\n unselectDropdownItems();\r\n changeMachineModel(getMachineModelName());\r\n }\r\n\r\n // initial site load\r\n function initialLoadData() {\r\n var path = window.location.hash;\r\n var currentYear = utils.getCurrentYear();\r\n var model = path.split('/')[0];\r\n var configs = path.split('/')[1];\r\n var rules = '';\r\n\r\n if (model === '#Workman-Gtx-2-Passenger-Extended') {\r\n utils.selectDomElement('#machine-model-name').innerText = 'Workman GTX 2 Passenger Extended Configurator';\r\n utils.selectDomElement('#WorkmanGtx2PassengerExtended').classList.add('active');\r\n\r\n currentBaseModel = baseModels.twoPassengersExtended;\r\n currentMachineModel = machineModel.twoPassengersExtended;\r\n } else if (model === '#Workman-Gtx-2-Passenger') {\r\n utils.selectDomElement('#machine-model-name').innerText = 'Workman GTX 2 Passenger Configurator';\r\n utils.selectDomElement('#WorkmanGtx2Passenger').classList.add('active');\r\n\r\n currentBaseModel = baseModels.twoPassengers;\r\n currentMachineModel = machineModel.twoPassengers;\r\n } else if (model === '#Workman-Gtx-4-Passenger' || model === '' || model === '#') {\r\n utils.selectDomElement('#machine-model-name').innerText = 'Workman GTX 4 Passenger Configurator';\r\n utils.selectDomElement('#WorkmanGtx4Passenger').classList.add('active');\r\n\r\n currentBaseModel = baseModels.fourPassengers;\r\n currentMachineModel = machineModel.fourPassengers;\r\n }\r\n\r\n applyRules(currentBaseModel);\r\n\r\n // If there are configs - all the configs elements from Url should be checked\r\n // ge-4p,cb-4p,tt-4p,besf-4p,besb-4p,fn-4p,rn-4p ---- id-s of checkbox/radio to be selected\r\n if (configs) {\r\n getConfiguredModel(configs);\r\n\r\n if (currentBaseModel === baseModels.fourPassengers) {\r\n fourPassengersHandler.rulesHandler();\r\n } else if (currentBaseModel === baseModels.twoPassengers) {\r\n twoPassengersHandler.rulesHandler();\r\n } else {\r\n twoPassengersExtHandler.rulesHandler();\r\n }\r\n }\r\n\r\n // get the current year for footer\r\n utils.selectDomElement('#current-year').innerText = currentYear;\r\n }\r\n\r\n function getConfiguredModel(configs) {\r\n var elementsToSelect = configs.split(',');\r\n\r\n resetDefaultCheckedElements(currentBaseModel);\r\n\r\n for (var j = 0; j < elementsToSelect.length; j++) {\r\n var elementId = document.querySelector('input[data-id=\"' + elementsToSelect[j] + '\"]').id;\r\n var element = utils.selectDomElement('#' + elementId);\r\n\r\n utils.selectElement(element);\r\n }\r\n }\r\n\r\n function resetDefaultCheckedElements(modelSelected) {\r\n var id = '';\r\n\r\n if (modelSelected === baseModels.fourPassengers) {\r\n id = containerIds.fourPassengers;\r\n } else if (modelSelected === baseModels.twoPassengers) {\r\n id = containerIds.twoPassengers;\r\n } else {\r\n id = containerIds.twoPassengersExtended;\r\n }\r\n\r\n utils.unselectAllRadiosAndCheckboxes(id);\r\n }\r\n\r\n // Expand left menu functionality\r\n function expandAttachmentMenu() {\r\n var parentsPanels = [containerIds.fourPassengers, containerIds.twoPassengers, containerIds.twoPassengersExtended];\r\n\r\n for (var j = 0; j < parentsPanels.length; j++) {\r\n addClickEventToMenu(parentsPanels[j], '.engine');\r\n addClickEventToMenu(parentsPanels[j], '.bed-and-accessories');\r\n\r\n if (j !== 0) {\r\n addClickEventToMenu(parentsPanels[j], '.seating');\r\n } else {\r\n addClickEventToMenu(parentsPanels[j], '.seating-front');\r\n addClickEventToMenu(parentsPanels[j], '.seating-back');\r\n }\r\n\r\n addClickEventToMenu(parentsPanels[j], '.cab-and-canopy');\r\n addClickEventToMenu(parentsPanels[j], '.front-attachments');\r\n addClickEventToMenu(parentsPanels[j], '.rear-attachments');\r\n addClickEventToMenu(parentsPanels[j], '.tires');\r\n addClickEventToMenu(parentsPanels[j], '.signaling-alarms-and-accessories');\r\n }\r\n }\r\n\r\n function addClickEventToMenu(parent, selector) {\r\n var container = parent + ' ' + selector + ' ' + selector + '-container';\r\n\r\n utils.selectDomElement(container).addEventListener('click', function expand() {\r\n expandSection(parent, selector);\r\n });\r\n }\r\n\r\n function expandSection(parent, selector) {\r\n var parentSelector = parent + ' ' + selector;\r\n var toggleContentElement = utils.selectDomElement(parentSelector + ' >div.expand-front');\r\n var toggleArrowIconElement = utils.selectDomElement(parentSelector + ' #left-icon-front');\r\n\r\n if (toggleContentElement.classList.contains('hidden')) {\r\n toggleContentElement.classList.remove('hidden');\r\n toggleArrowIconElement.className = 'fa fa-angle-up fa-2x';\r\n } else {\r\n toggleContentElement.classList.add('hidden');\r\n toggleArrowIconElement.className = 'fa fa-angle-down fa-2x';\r\n }\r\n }\r\n\r\n // Opens the Email Client with the link with the current configuration\r\n function openEmail() {\r\n var emailSelections = model.config.email;\r\n var linkSelections = model.config.link;\r\n var selectedOptionsEmail = Object.keys(emailSelections).map(function (e) {\r\n return emailSelections[e];\r\n });\r\n\r\n var selectedOptionsLink = Object.keys(linkSelections).map(function (e) {\r\n return linkSelections[e];\r\n });\r\n\r\n var resultedEmailText = '';\r\n var resultedLink = selectedOptionsLink[0];\r\n var linkURL = '';\r\n var emailSubject = convertMachineModel(currentBaseModel);\r\n var newLine = '%0D%0A%0D%0A';\r\n var emailContent = '';\r\n\r\n for (var l = 0; l < selectedOptionsEmail.length; l++) {\r\n if (selectedOptionsEmail[l] !== '' && selectedOptionsEmail[l] !== '6ft Flat Bed') {\r\n resultedEmailText = resultedEmailText + newLine + selectedOptionsEmail[l];\r\n }\r\n }\r\n\r\n for (var k = 1; k < selectedOptionsLink.length; k++) {\r\n if (selectedOptionsLink[k] !== '') {\r\n resultedLink += ',' + selectedOptionsLink[k];\r\n }\r\n }\r\n\r\n linkURL = WEBSITE_URL + '%23' + currentMachineModel + '/' + resultedLink + '%0D%0A%0D%0A%0D%0A%0D%0A';\r\n\r\n emailContent = 'Selected Workman GTX: ' + model.config.base +\r\n resultedEmailText +\r\n newLine +\r\n 'View the configured Workman GTX here: ' +\r\n newLine +\r\n linkURL;\r\n\r\n window.open('mailto:' + '' + '?subject=' + emailSubject + '&body=' + '%0D%0A' + emailContent, '_self');\r\n }\r\n\r\n // Attach event on the hide/show menu button(only visible when width of window < 941px)\r\n function expandLeftMenu() {\r\n var elements = document.getElementsByClassName('toro-attachments-images');\r\n\r\n if (utils.selectDomElement('#left-menu').style.display === 'none') { // Closed\r\n utils.selectDomElement('#left-menu').style.display = 'block';\r\n utils.selectDomElement('#show-left-menu').className = 'show-menu fa fa-angle-left fa-3x';\r\n utils.selectDomElement('#show-left-menu').style.left = '250px';\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n elements[i].style.width = 'calc(100vw - 250px)';\r\n }\r\n } else { //Open\r\n utils.selectDomElement('#left-menu').style.display = 'none';\r\n utils.selectDomElement('#show-left-menu').className = 'show-menu fa fa-angle-right fa-3x';\r\n utils.selectDomElement('#show-left-menu').style.left = '0px';\r\n\r\n for (var m = 0; m < elements.length; m++) {\r\n elements[m].style.width = '100vw';\r\n }\r\n }\r\n }\r\n\r\n // Listen for expanding of drop-down\r\n function expandDropDownMenu() {\r\n if (changeModelBtn.className === 'active') {\r\n changeModelBtn.className = '';\r\n modelsDropDown.className = '';\r\n changeModelBtnIco.className = 'fa fa-angle-down';\r\n emailBtn.classList.remove('hidden');\r\n } else {\r\n changeModelBtn.className = 'active';\r\n modelsDropDown.className = 'active';\r\n changeModelBtnIco.className = 'fa fa-angle-up';\r\n emailBtn.classList.add('hidden');\r\n }\r\n }\r\n\r\n return {\r\n initialLoadData: initialLoadData,\r\n loadDataWhenModelChange: loadDataWhenModelChange,\r\n onSiteReadyLookForChangeAndReload: onSiteReadyLookForChangeAndReload,\r\n expandAttachmentMenu: expandAttachmentMenu,\r\n showDialogImageWhenThumbClicked: showDialogImageWhenThumbClicked,\r\n openEmail: openEmail,\r\n expandLeftMenu: expandLeftMenu,\r\n expandDropDownMenu: expandDropDownMenu,\r\n closeImageDialog: closeImageDialog\r\n };\r\n}());\r\n","(function () {\r\n 'use strict';\r\n\r\n var emailBtn = utils.selectDomElement('#email-btn');\r\n var showLeftMenuBtn = utils.selectDomElement('#show-left-menu');\r\n var changeModelBtn = utils.selectDomElement('#header-title');\r\n var closeImageDialogBtn = utils.selectDomElement('#closeImageDialogBtn');\r\n var containerIds = {\r\n fourPassengers: '#left-menu-4p',\r\n twoPassengers: '#left-menu-2p',\r\n twoPassengersExtended: '#left-menu-2pext'\r\n };\r\n var menuContainers = {\r\n fourPassengers: utils.selectDomElement(containerIds.fourPassengers),\r\n twoPassengers: utils.selectDomElement(containerIds.twoPassengers),\r\n twoPassengersExtended: utils.selectDomElement(containerIds.twoPassengersExtended)\r\n };\r\n\r\n window.addEventListener('load', dataHandler.initialLoadData);\r\n window.addEventListener('hashchange', dataHandler.loadDataWhenModelChange);\r\n document.onreadystatechange = dataHandler.onSiteReadyLookForChangeAndReload;\r\n\r\n menuContainers.fourPassengers.addEventListener('change', fourPassengersHandler.rulesHandler);\r\n menuContainers.twoPassengers.addEventListener('change', twoPassengersHandler.rulesHandler);\r\n menuContainers.twoPassengersExtended.addEventListener('change', twoPassengersExtHandler.rulesHandler);\r\n\r\n dataHandler.expandAttachmentMenu();\r\n dataHandler.showDialogImageWhenThumbClicked();\r\n\r\n emailBtn.addEventListener('click', dataHandler.openEmail);\r\n showLeftMenuBtn.addEventListener('click', dataHandler.expandLeftMenu);\r\n changeModelBtn.addEventListener('click', dataHandler.expandDropDownMenu);\r\n\r\n if (closeImageDialogBtn) {\r\n closeImageDialogBtn.addEventListener('click', dataHandler.closeImageDialog);\r\n }\r\n}());\r\n"]}