{"version":3,"sources":["beacon.js","Beacon_LocalStorage.js","stacktrace.js","WcfProxy.js","NumberFormatting.js","Beacon_Variables.js","Beacon_PageInitialization.js","Beacon_GoogleAnalytics.js","Beacon_EULA.js","Beacon_TabularDataSupport.js","Beacon_Dialogs.js","Beacon_Utils.js","Beacon_PrintDialog.js","Beacon_API.js","Beacon_LazyLoader.js","AsyncModuleLoader.js","Ripple_Integration.js","Beacon_BrowserCompatibility.js","Beacon_Ping.js","Beacon_SearchBox.js","Beacon_AdvancedDropdown.js","Beacon_Tabs.js","Beacon_ModuleHeader.js","Beacon_PhotoEngine.js","Beacon_WCAG.js","Beacon_JqueryValidators.js","Beacon_Notifications.js","Beacon_Charts.js","Beacon_FileUploader.js","Beacon_DataEditor.js"],"names":["Beacon","Control","Strategy","Layer","Popup","Handler","Protocol","Tile","Templates","Account","MapJS","window","console","info","warn","error","scripts","document","getElementsByTagName","script","length","src","u","match","_cdnUrl","e","localStorage","setItem","removeItem","err","ls","getItem","k","v","clear","sessionStorage","ss","printStackTrace","options","ex","guess","p","implementation","result","run","guessAnonymousFunctions","module","exports","prototype","mode","this","createException","other","arguments","callee","undef","stack","sourceURL","number","message","opera","stacktrace","indexOf","split","instrumentFunction","context","functionName","callback","original","call","slice","_instrumented","apply","deinstrumentFunction","constructor","Function","chrome","replace","pop","safari","ie","firefox","opera11","lineRE","lines","i","len","exec","location","fnName","push","opera10b","opera10a","opera9","ANON","curr","fn","args","fnRE","test","toString","RegExp","$1","Array","stringifyArguments","caller","arg","undefined","Object","String","Number","join","sourceCache","ajax","url","req","createXMLHTTPObject","open","send","responseText","xmlhttp","XMLHttpFactories","XMLHttpRequest","ActiveXObject","isSameDomain","hostname","getSource","frame","ref","m","file","lineno","charno","guessAnonymousFunction","lineNo","charNo","ret","findFunctionName","source","line","commentPos","reFunctionDeclaration","reFunctionExpression","reFunctionEvaluation","code","maxLines","Math","min","substr","wcfServiceProxy","serviceUrl","extraQueryString","_I","invoke","method","timeout","data","bare","scope","scopeArgs","json","JSON","stringify","$","type","processData","contentType","dataType","success","res","parse","property","xhr","msg","status","statusText","format","hasComma","psplit","that","toFixed","fnum","cnum","parr","j","n","floor","displayRounding","round","addCommas","addCommas_rgx","nStr","x","x1","x2","Variables","smallLayoutWidth","mediumLayoutWidth","isDesktopViewport","viewportWidth","win","doc","a","documentElement","b","PageInitialization","isGenericPage","documentMode","encodeURIComponent","pathname","search","logException","API","LogJsError","EULA","Initialize","ModuleHeader","Ping","init","LazyLoader","initialize","TabularDataSupport","PhotoEngine","SearchBox","PrintDialog","onPageLoad","WCAG","JqueryValidators","tooltip","GA","TrackEvent","action","label","gtag","CLASS_NAME","_affirmativeValue","Show","html","Dialogs","showWithHtml","mapConfig","EULAInEveryNewTab","AppId","ShowAlertsIfNeeded","ShowEulaIfNeeded","storageValue","get","then","d","_headerHtml","_headerDividerHtml","fail","BeaconSessionAlerts","ShowAlert","alerts","alrt","ssKey","ID","Subject","Body","configureFootableDefaults","searchIntentAttribute","searchIntent","searchIntentOrder","searchIntentParts","trim","toLowerCase","searchHeaders","getAttribute","setAttribute","setTimeout","fixupAfterGridSort","find","footable","columnDataSelector","each","text","idx","element","labelExpandCollapseButtons","table","B_RawParcelID_Idx","c","rows","cells","innerText","checkboxToggle","row","closest","checked","removeClass","addClass","bind","footable_sorted","submitOrderedResultsToServer","removeAttr","checkboxCol","colNum","hasClass","change","tbl","uniqueColIdxs","getUniqueColumnIdxes","titleText","col","cellText","colIdx","headerText","toggleButton","attr","uniqueColAttr","attrCols","useUniqueColsAttr","rowScopeCols","useRowScope","firstHeaderFound","useFirstRow","uniqueColList","headerRow","getHeaderRow","uniqueCols","forEach","val","num","parseInt","headerCell","firstDataRow","getFirstDataRow","dataHeader","headerIdx","index","columnHeader","orderedPIDs","r","SetOrderedResults","LayerId","breakpoints","delay","parsers","address","cell","multilineDate","parts","Date","multilineNumeric","sortPart","parseFloat","plss","date","Node","next","linkedModals","head","size","add","current","node","removeFrom","showDialog","chainedModal","me","Button1","click","Action1","addSpacebarSupport","Button2","Action2","on","hidden","remove","ReturnTargetelement","aria","Utils","attemptFocus","focusFirstDescendant","backdrop","keyboard","OnlyUseButtons","hide","height","css","maxHeight","overflowY","modal","returnTargetelement","headerTitle","bodyHtml","onlyUseButtons","button1","action1","button2","action2","z","modalDialogHtml","Title","ShowClose","nextModal","showFromIFrame","modalDialogIFrame","Url","modalbody","shown","innerHeight","outerHeight","isFocusable","tabIndex","disabled","nodeName","href","rel","childNodes","child","focusLastDescendant","focus","activeElement","utcDTStringToLocalDTString","utcDTString","localDT","toLocaleString","validateEmail","email","loaded","defaultSettings","paperSize","mapQuality","title","subtitle","author","showHeader","showTitleBar","showFooter","showOverview","showLegend","showScaleBar","showNorthArrow","showDetails","mapScale","settings","print","printSetup","printViaBrowser","loadDefaultSettings","loadDefaultPrintLayout","initializeSettingsDialog","bindSettingsToUi","onSaveDefault","onResetToDefaults","scale","log","show","extend","layoutId","validatePrintLayoutId","setPrintLayout","el","bindControl","saveDefaultSettings","fadeOut","selectCurrentMapScale","currentScale","map","getScale","opt","empty","append","baseLayer","scales","prop","inputType","bbox","keyvalue","isMap","getExtent","toBBOX","selectionLayer","keyValue","KeyValue","Tabs","getUrl","PageTypeId","PageId","getTime","id","isNaN","pBeaconCore","QPS","UpdateMapExtent","ext","resolution","failure","minx","left","miny","bottom","maxx","right","maxy","top","ts","SetResults","layerId","keys","GetVectorLayer","useSelection","wkt","spatialRelation","featureLimit","projectionOverride","auxKeyField","InvokeGeoProcService","targetLayer","selectionKey","jobId","wkid","GetAttributes","attributes","distinct","QueryWithWhere","where","SpatialRelation","None","Intersects","Contains","ContainsCentroid","QueryMapDetail","key","BufferGeometry","wkts","distance","ClearBufferGeometry","BufferAndExport","exportType","showParcelId","usePropertyAddress","skipLabelCount","GetTabs","AnnouncementAcknowledgement","announcementId","appId","GetModuleJurisdictions","ModuleName","GetVendorJurisdictions","VendorName","GetDisclaimers","layerIds","GetQuickZoomList","SetLayerVisibility","visible","SetLayersVisibility","layersVisibility","SetLayersNotVisible","SetLayersVisible","SaveMapMarkup","markup","LoadMapMarkup","SaveMapMeasure","PostDataEdits","edits","GetCurrentBalance","GetMapState","name","SaveMapState","state","DeleteMapState","GetLegendInfos","GetServiceLayerInfo","spatialServerId","GetServiceLegend","GetMapImpage","width","dpi","clientGraphics","trackedImages","debounceTimer","settingsTag","offscreenPreloadBuffer","iconUrl","blankUrl","missingUrl","chkShowPhotos","chkShowPhotosID","replaceWith","parent","parentContents","contents","checkboxIdx","nodeType","TEXT_NODE","checkBoxHandler","enableLazyImages","disableLazyImages","event","target","preventDefault","stopPropagation","image","onScrollAndResize","clearTimeout","unbind","img","sort","offset","scroll","loadVisibleImages","screenTop","scrollTop","screenBottom","imgTop","imgBot","imageLoadError","swapImageOnFailure","hideImageOnFailure","off","swapImagesOnError","urls","splitUrls","cnt","swapCarouselImageOnError","LoadAsyncContent","moduleid","ac","pu","pw","er","errthrown","ddlWexfordAction","wexford","parcelId","Wexford_Action","actionId","value","alert","selected","Wexford_SetMenuVisibility","getElementById","style","display","Wexford_ParseURL","Wexford_Init","actionCount","GetActionCount","oOption","createElement","GetActionName","nukeSettings","cookies","cookie","eqPos","navigator","appName","writeln","BrowserCompatibility","unsupportedBrowser","legacyBrowser","limitResults","Detect","ua","userAgent","Notify","slideDown","timerId","interval","setInterval","onTimer","initializeGlobalSearchBox","initializeNameSearchBox","initializeAddressSearchBox","initializeStreetNameSearchBox","initializeParcelIdSearchBox","initializeAlternateIdSearchBox","initializeAlternateIdExactMatchSearchBox","initializeNeighborhoodSearchBox","initializeBookSearchBox","initializePageSearchBox","initializeDBASearchBox","initSearchIntentHandler","initializeModuleHeaderToLabelTheInput","elementId","parentsUntil","last","first","initializeSearchButtonToFieldsets","fieldName","btn_idx","btn","moduleElement","has","moduleChildren","children","ctrl","keypress","which","Handlebars","registerHelper","object","searchArgs","minLength","highlight","hint","Search","Name","createBloodhoundAdapter","displayKey","templates","header","searchbox_Owners_header","suggestion","searchbox_Owners","Address","searchbox_Addresses","ParcelId","searchbox_Parcelids","AlternateId","searchbox_Alternateids","tt","typeahead","searchType","OwnerName","ParcelID","dataset","SourceId","IsMapPage","dMapZoom","setDefaultLayerToActive","zoomAndSelectByKeyValue","DefaultReportUrl","missingHTMLElement","noResultsDiv","sourceId","archiveTag","createBloodhoundAdapter2","maxResults","tokenizerFieldName","useNonword","tokenizer","Bloodhound","tokenizers","nonword","whitespace","bh","limit","remote","rateLimitBy","rateLimitWait","datumTokenizer","queryTokenizer","ttAdapter","initSearchControl","prefetch","txtElementId","btnElementId","moduleId","cacheThumbprint","initTypeaheadControl","bhOptions","obj","cacheKey","ttl","thumbprint","filter","list","storage","getSearchIntent","AdvancedDropdown","keyCode","RETURN","SPACE","PAGEUP","PAGEDOWN","END","HOME","LEFT","UP","RIGHT","DOWN","SLASH","ESCAPE","TAB","configureAdvancedDropdown","elementID","defaultValueID","onSelect","self","mouseStateHolder","mouseX","mouseY","button","menu","openMenu","closeMenu","wasMenuOpen","selectedOption","toggleMenu","getFirstOption","getLastOption","changeSelection","previousSelection","nextSelection","focusin","mousedown","keydown","option","availableOptions","selectedIdx","getPreviousOption","currentSelection","getNextOption","mouseover","clientX","clientY","focusout","keyup","searchText","toUpperCase","configureMultiSelect","onDelete","deletedItem","destination","selectedElement","newSelectionSpan","newSelection","deleteButton","_templateHtmlPre","_templateHtmlPost","_templateTarget","_wizards","_userLoggedIn","hasPageType","pagetype","getReportLinks","reports","tab","getReportLinksHtml","listPrefix","listSeparator","extraParams","reportLinks","Permissions","Streetview","generateTabStrip","bItemSelected","helpers","equals","operand1","operand2","isGroup","pages","tabStripModel","tabs","activePage","loginUrl","loginText","isThisLayerAWizard","_","contains","hasKey","activePageId","activePageTypeId","page","isMapTab","isActivePage","nr","nk","activeTab","tabName","groupName","groupID","hasActivePage","numTabs","substring","pageType","NavigateUrl","locked","isActive","moreTabElementID","tabEls","selectedIndex","loadQuickZoomMenu","onResize","maxWidth","outerWidth","stripwidth","stripFull","someItemsHidden","desktopSize","mapViewHeight","initialize_generic","userLoggedIn","ResultCount","loadSimpleLayerList","toggleLayersMenu","updateSize","forceTileCacheRedraw","hideLayersMenu","pageTypeId","pageId","specialPage","QuickZoomService","requestQuickZoomData","t","quickzoom","QZ","kv","lyrs","forIn","LayerView","lyr","GroupName","qSubLyrs","Layers","slyr","Query","LayerName","ActiveLayer","LayerChangeUrl","simpleLayerList","Links","minusIcon","plusIcon","wireUpClickHandler","processInitialCookie","onClick","content","knob","slipperyKnob","hiddenModuleIds","getHiddenModulesFromCookie","visibleModuleIds","getVisibleModulesFromCookie","defaultVisibility","moduleIsPreviouslyHidden","inArray","moduleIsPreviouslyVisible","slideUp","grep","item","saveHiddenModulesToCookie","saveVisibleModulesToCookie","is","moduleIds","moduleList","expires","initializeSketchModule","initializePhotoModule","initializeSummaryPhoto","initializeGenericImagesModule","rsdiv","slides","clone","slider","royalSlider","startSlideId","autoScaleSlider","globalCaption","globalCaptionInside","fullscreen","enabled","native","ev","destroy","enterFullscreen","ct","showBullets","autoScaleSliderWidth","autoScaleSliderHeight","imageScalePadding","numImagesToPreload","controlNavigation","fadeinLoadedSlide","viewModule","addPauseAnimation","addButtonPolyfill","fixTables_Presentation","fixTables_Data","HeadingsandLabels2_4_6","updateRowHeaders","updateColHeaders","restructureSearchModules","restructureExceptionalSearchModules","fixCompSearches","ExpandCollapse","elementIds","buttonID","isArray","shift","div","toggleClass","$btn","animationStatus","pauseAnimation","w","l","not","tableClass","tc","prepend","className","moduleTitle","parents","caption","visualLintRules","rowHeaderIndex","tableIdx","rowIdx","criterionCell","getCriterionCell","categoryLabel","getCategoryLabel","idDomain","useCheckbox","getUseCheckbox","fixUseCheckbox","isSaleDateCompoundInput","fixSaleDateCompoundInput","isDistanceFromSubjectCompoundInput","fixDistanceFromSubjectCompoundInput","isLowHighInputRange","fixLowHighInputRange","isLowHighRangeWithUnit","fixLowHighWithUnitDropdown","isSingleListBox","fixSingleListBoxInput","isSingleTextBox","fixSingleTextBoxInput","isSingleDropdown","isSingleCheckbox","fixSingleCheckboxInput","isRadioInput","fixRadioInput","isSubdivisionTypeaheadInput","fixSubdivisionTypeaheadInput","eq","hasUseColumn","categoryCell","getCategoryCell","useCheckboxLabelID","categoryText","superLegendID","listLegendID","listLabelID","rangeLegendID","salesLabelID","fromLabelID","toLabelID","superFieldset","superLegend","rbDateList","detach","listFieldset","listLegend","listLabel","dateList","lineBreak","rbDateRange","rangeFieldset","rangeLegend","salesLabel","fromLabel","fromDate","toLabel","toDate","legendID","fieldset","legend","magnitude","unit","lowSpanID","highSpanID","unitNodes","findUnitTextNodes","lowSpan","lowInput","highSpan","highInput","unitID","unitLabel","unitNode","unitInput","categoryID","instructionNodes","findInstructionText","instructionID","instructionsLabel","instructionNode","input","br","labelText","checkbox","neededContent","inputID","cellContents","lastInput","lastInputIdx","lastBr","lastBrIdx","toArray","section","repairContents","searchButtons","fixSearchButtonFieldset","fixSearchButtonLabel","fixSingleInputLabel","fixHelpBlock","addTypeaheadInstructios","hasOneSearchButton","searchButton","newFieldset","newLegend","moduleContent","descrID","resultsDescription","helpBlock","jQuery","validator","addMethod","zipCode","beaconCaptchaLoad","captchaElement","grecaptcha","render","sitekey","beaconCaptchaSubmit","requestSubmit","currentValidator","resetForm","currentForm","removeData","errorPlacementBetter","re","betterErrorID","prevElementToError","prev","insertAfter","beaconModuleValidator","moduleRules","useRecaptcha","f","errorPlacement","errorElement","submitHandler","form","submitevent","getResponse","submit","execute","validate","valid","focusInvalid","buildDependentRadio","dependentLblName","dependentRdoName","controllingRadioUnRequiredValue","controllingRadio","isRadioButtonRequired","requiredRadioButtonName","unRequiredValue","radioButtonValue","isDate","txtDate","dtArray","dtMonth","dtDay","dtYear","isleap","isEmail","isNumber","isPDFFile","isPhoneNumber","validPhone","isCityStateZip","validCityStateZip","Notifications","_activeId","_announcementData","_userId","ackedCount","newAcks","activeId","userId","isEmpty","refreshTime","now","refreshTimeISO","toISOString","notificationAnnouncementJS","updateNotificationList","updateBadge","allTheNotificationsTrashed","notification","notificationID","UserID","trashed","trashedClass","acked","ackedClass","notifications","toggle","noteId","hasbeenread","likeSection","badgeElement","count","likeFailure","acknowlegeAnnouncment","Charts","CaptureTableData","ft","rowHeadText","cellValues","cellHash","columns","column","cells2","rowHeader","colHeaders","o","FindRow","ftData","indexOrName","FindRowIndex","findIndex","FindColumnIndex","GetHorizontalSeries","startColumnIndexOrName","endColumnIndexOrName","rowIndexesOrNames","rowHeadIndexOrName","reverseSeries","colSeriesName","colSeriesNameIndex","startCol","endCol","categories","rowHeadIndex","colIndex","reverse","unshift","dataColumns","rowIndex","cols","ParseValue","GetVerticalSeries","startRowIndexOrName","endRowIndexOrName","colIndexesOrNames","colHeadIndexOrName","startRow","endRow","colHeadIndex","CleanMissingCategoryData","chartData","splice","CreateChart","divId","colData","chartConfig","bindto","axis","tick","padding","y","d3","xFormat","groups","cd","c3","generate","_loaderPromise","LoadC3","onloadCallback","p1","Deferred","p2","when","promise","path","d3js","onload","resolve","appendChild","c3js","InsertChart","chartDom","tableData","tableType","dataStart","dataEnd","dataSeries","heading","reverseData","seriesName","chartType","InitChart","chartInfo","dataTable","after","divChart","shouldShow","ReadList","IsShown","icon","CreateAndShow","bodyZoom","zoom","WriteList","AddToShownList","without","RemoveFromShownList","autoShow","defer","foobox","Error","plugins","register","ftmid","footable_initialized","moduleSection","ftTables","ftIndex","chartOptionScript","chartOption","tableIndex","FileUploader","ShowUploadDialog","acceptedFiles","parallelUploads","dzOptions","maxFilesize","addRemoveLinks","createImageThumbnails","disablePreviews","clickable","chunking","forceChunking","chunkSize","parallelChunkUploads","retryChunks","retryChunksLimit","previewTemplate","DropzoneUpload","dz","files","response","getRejectedFiles","reload","myDzId","valueOf","formHtml","myDz","disable","Dropzone","PrototypeLib","Class","P","F","C","newArgs","concat","inherit","Util","Event","hasOwnProperty","DataEditor","editConfig","saveButtonDiv","editItems","defaultEmail","newGroupCounter","hookup","hookupTemplates","showConfirmation","hookupEditItem","redrawContent","isChanged","colorbox","sendData","close","values","editItem","config","group","editGroup","dir","span","editKey","cfg","edititem","EditItem","targetElement","addbutton","tmpHtml","deleteBtn","tmpItems","tmpItem","newEditItems","originalElement","td","before","fadeIn","tmpGroupName","groupCounter","itemGroupName","dataEditor","originalText","containerDiv","editButtonDiv","deleteButtonDiv","isDeleted","keep","editor","isValidTemplate","tmpl","valueTemplate","multiItem","hover","editItemClick","renderTemplate","theDefaultValue","defaultValue","setupNumericInput","setupTextInput","ddl","setupDropdownList","txt","ul","setupPickList","values2","defaultValue2","ddl2","ddl3","values3","defaultValue3","setupSaveButton","onSaveButtonClick","selectedValue","showBlankItem","toggleMode","showItemQty","defs","li","saveButton","input1","input2","input3","input4","input1Items","input2Items","formattedInput","optionalQtyValues","keepOrig","value2","value3","value4","removeOneItem","template","output"],"mappings":"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","file":"../App/core.min.js","sourcesContent":["\r\n// Init top level Beacon object\r\nBeacon = {};\r\nBeacon.Control = {};\r\nBeacon.Strategy = {};\r\nBeacon.Layer = {};\r\nBeacon.Popup = {};\r\nBeacon.Handler = {};\r\nBeacon.Protocol = {};\r\nBeacon.Tile = {};\r\nBeacon.Templates = {};\r\nBeacon.Account = {};\r\nBeacon.MapJS = {};\r\n\r\n// define console so debugging doesnt break ie\r\nif (!window.console) {\r\n window.console = {\r\n info: function () { },\r\n warn: function () { },\r\n error: function () { }\r\n }\r\n}\r\n\r\n\r\n// If a script needs access to the path used for resource loading, Beacon._cdnUrl gets set here:\r\n// This would be the client side way to get the foldername like the server side code does in `VersionedAssetOptimization`\r\n\r\n(function () {\r\n try {\r\n var scripts = document.getElementsByTagName(\"script\");\r\n var script = scripts[scripts.length - 1].src;\r\n var rx = /\\/cdn\\/([0-9a-f]{8})\\//i;\r\n var u = script.match(rx)[1];\r\n Beacon._cdnUrl = '/cdn/' + u;\r\n } catch (e) {\r\n Beacon._cdnUrl = '/cdn/00000000'; // something is busted\r\n }\r\n})();\r\n","\r\n// fake localStorage support for ie7, wkhtmltopdf, etc\r\n\r\nBeacon.localStorage = window.localStorage;\r\n\r\nif (window.localStorage) {\r\n try {\r\n // then test to see if it really works\r\n window.localStorage.setItem(\"~~~\", \"!\");\r\n window.localStorage.removeItem(\"~~~\");\r\n } catch (err) {\r\n Beacon.localStorage = null;\r\n }\r\n}\r\n\r\nif (!Beacon.localStorage) {\r\n console.warn(\"Enabling simulated localStorage\")\r\n var ls = {\r\n getItem: function (k) { return ls[k] },\r\n removeItem: function (k) { delete ls[k] },\r\n setItem: function (k, v) { ls[k] = v },\r\n clear: function () { ls = {}; }\r\n };\r\n Beacon.localStorage = ls;\r\n}\r\n\r\nBeacon.sessionStorage = window.sessionStorage;\r\n\r\nif (window.sessionStorage) {\r\n try {\r\n // then test to see if it really works\r\n window.sessionStorage.setItem(\"~~~\", \"!\");\r\n window.sessionStorage.removeItem(\"~~~\");\r\n } catch (err) {\r\n Beacon.sessionStorage = null;\r\n }\r\n}\r\n\r\nif (!Beacon.sessionStorage) {\r\n console.warn(\"Enabling simulated sessionStorage\")\r\n var ss = {\r\n getItem: function () { },\r\n removeItem: function () { },\r\n setItem: function () { },\r\n clear: function () { }\r\n };\r\n Beacon.sessionStorage = ss;\r\n}\r\n","// Domain Public by Eric Wendelin http://eriwen.com/ (2008)\r\n// Luke Smith http://lucassmith.name/ (2008)\r\n// Loic Dachary (2008)\r\n// Johan Euphrosine (2008)\r\n// Oyvind Sean Kinsey http://kinsey.no/blog (2010)\r\n// Victor Homyakov (2010)\r\n\r\n/**\r\n * Main function giving a function stack trace with a forced or passed in Error\r\n *\r\n * @cfg {Error} e The error to create a stacktrace from (optional)\r\n * @cfg {Boolean} guess If we should try to resolve the names of anonymous functions\r\n * @return {Array} of Strings with functions, lines, files, and arguments where possible\r\n */\r\nfunction printStackTrace(options) {\r\n options = options || { guess: true };\r\n var ex = options.e || null, guess = !!options.guess;\r\n var p = new printStackTrace.implementation(), result = p.run(ex);\r\n return (guess) ? p.guessAnonymousFunctions(result) : result;\r\n}\r\n\r\nif (typeof module !== \"undefined\" && module.exports) {\r\n module.exports = printStackTrace;\r\n}\r\n\r\nprintStackTrace.implementation = function () {\r\n};\r\n\r\nprintStackTrace.implementation.prototype = {\r\n /**\r\n * @param {Error} ex The error to create a stacktrace from (optional)\r\n * @param {String} mode Forced mode (optional, mostly for unit tests)\r\n */\r\n run: function (ex, mode) {\r\n ex = ex || this.createException();\r\n // examine exception properties w/o debugger\r\n //for (var prop in ex) {alert(\"Ex['\" + prop + \"']=\" + ex[prop]);}\r\n mode = mode || this.mode(ex);\r\n if (mode === 'other') {\r\n return this.other(arguments.callee);\r\n } else {\r\n return this[mode](ex);\r\n }\r\n },\r\n\r\n createException: function () {\r\n try {\r\n this.undef();\r\n } catch (e) {\r\n return e;\r\n }\r\n },\r\n\r\n /**\r\n * Mode could differ for different exception, e.g.\r\n * exceptions in Chrome may or may not have arguments or stack.\r\n *\r\n * @return {String} mode of operation for the exception\r\n */\r\n mode: function (e) {\r\n if (e['arguments'] && e.stack) {\r\n return 'chrome';\r\n } else if (e.stack && e.sourceURL) {\r\n return 'safari';\r\n } else if (e.stack && e.number) {\r\n return 'ie';\r\n } else if (typeof e.message === 'string' && typeof window !== 'undefined' && window.opera) {\r\n // e.message.indexOf(\"Backtrace:\") > -1 -> opera\r\n // !e.stacktrace -> opera\r\n if (!e.stacktrace) {\r\n return 'opera9'; // use e.message\r\n }\r\n // 'opera#sourceloc' in e -> opera9, opera10a\r\n if (e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\r\n return 'opera9'; // use e.message\r\n }\r\n // e.stacktrace && !e.stack -> opera10a\r\n if (!e.stack) {\r\n return 'opera10a'; // use e.stacktrace\r\n }\r\n // e.stacktrace && e.stack -> opera10b\r\n if (e.stacktrace.indexOf(\"called from line\") < 0) {\r\n return 'opera10b'; // use e.stacktrace, format differs from 'opera10a'\r\n }\r\n // e.stacktrace && e.stack -> opera11\r\n return 'opera11'; // use e.stacktrace, format differs from 'opera10a', 'opera10b'\r\n } else if (e.stack) {\r\n return 'firefox';\r\n }\r\n return 'other';\r\n },\r\n\r\n /**\r\n * Given a context, function name, and callback function, overwrite it so that it calls\r\n * printStackTrace() first with a callback and then runs the rest of the body.\r\n *\r\n * @param {Object} context of execution (e.g. window)\r\n * @param {String} functionName to instrument\r\n * @param {Function} function to call with a stack trace on invocation\r\n */\r\n instrumentFunction: function (context, functionName, callback) {\r\n context = context || window;\r\n var original = context[functionName];\r\n context[functionName] = function instrumented() {\r\n callback.call(this, printStackTrace().slice(4));\r\n return context[functionName]._instrumented.apply(this, arguments);\r\n };\r\n context[functionName]._instrumented = original;\r\n },\r\n\r\n /**\r\n * Given a context and function name of a function that has been\r\n * instrumented, revert the function to it's original (non-instrumented)\r\n * state.\r\n *\r\n * @param {Object} context of execution (e.g. window)\r\n * @param {String} functionName to de-instrument\r\n */\r\n deinstrumentFunction: function (context, functionName) {\r\n if (context[functionName].constructor === Function &&\r\n context[functionName]._instrumented &&\r\n context[functionName]._instrumented.constructor === Function) {\r\n context[functionName] = context[functionName]._instrumented;\r\n }\r\n },\r\n\r\n /**\r\n * Given an Error object, return a formatted Array based on Chrome's stack string.\r\n *\r\n * @param e - Error object to inspect\r\n * @return Array of function calls, files and line numbers\r\n */\r\n chrome: function (e) {\r\n var stack = (e.stack + '\\n').replace(/^\\S[^\\(]+?[\\n$]/gm, '').\r\n replace(/^\\s+(at eval )?at\\s+/gm, '').\r\n replace(/^([^\\(]+?)([\\n$])/gm, '{anonymous}()@$1$2').\r\n replace(/^Object.\\s*\\(([^\\)]+)\\)/gm, '{anonymous}()@$1').split('\\n');\r\n stack.pop();\r\n return stack;\r\n },\r\n\r\n /**\r\n * Given an Error object, return a formatted Array based on Safari's stack string.\r\n *\r\n * @param e - Error object to inspect\r\n * @return Array of function calls, files and line numbers\r\n */\r\n safari: function (e) {\r\n return e.stack.replace(/\\[native code\\]\\n/m, '')\r\n .replace(/^(?=\\w+Error\\:).*$\\n/m, '')\r\n .replace(/^@/gm, '{anonymous}()@')\r\n .split('\\n');\r\n },\r\n\r\n /**\r\n * Given an Error object, return a formatted Array based on IE's stack string.\r\n *\r\n * @param e - Error object to inspect\r\n * @return Array of function calls, files and line numbers\r\n */\r\n ie: function (e) {\r\n var lineRE = /^.*at (\\w+) \\(([^\\)]+)\\)$/gm;\r\n return e.stack.replace(/at Anonymous function /gm, '{anonymous}()@')\r\n .replace(/^(?=\\w+Error\\:).*$\\n/m, '')\r\n .replace(lineRE, '$1@$2')\r\n .split('\\n');\r\n },\r\n\r\n /**\r\n * Given an Error object, return a formatted Array based on Firefox's stack string.\r\n *\r\n * @param e - Error object to inspect\r\n * @return Array of function calls, files and line numbers\r\n */\r\n firefox: function (e) {\r\n return e.stack.replace(/(?:\\n@:0)?\\s+$/m, '').replace(/^[\\(@]/gm, '{anonymous}()@').split('\\n');\r\n },\r\n\r\n opera11: function (e) {\r\n var ANON = '{anonymous}', lineRE = /^.*line (\\d+), column (\\d+)(?: in (.+))? in (\\S+):$/;\r\n var lines = e.stacktrace.split('\\n'), result = [];\r\n\r\n for (var i = 0, len = lines.length; i < len; i += 2) {\r\n var match = lineRE.exec(lines[i]);\r\n if (match) {\r\n var location = match[4] + ':' + match[1] + ':' + match[2];\r\n var fnName = match[3] || \"global code\";\r\n fnName = fnName.replace(//, \"$1\").replace(//, ANON);\r\n result.push(fnName + '@' + location + ' -- ' + lines[i + 1].replace(/^\\s+/, ''));\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n opera10b: function (e) {\r\n // \"([arguments not available])@file://localhost/G:/js/stacktrace.js:27\\n\" +\r\n // \"printStackTrace([arguments not available])@file://localhost/G:/js/stacktrace.js:18\\n\" +\r\n // \"@file://localhost/G:/js/test/functional/testcase1.html:15\"\r\n var lineRE = /^(.*)@(.+):(\\d+)$/;\r\n var lines = e.stacktrace.split('\\n'), result = [];\r\n\r\n for (var i = 0, len = lines.length; i < len; i++) {\r\n var match = lineRE.exec(lines[i]);\r\n if (match) {\r\n var fnName = match[1] ? (match[1] + '()') : \"global code\";\r\n result.push(fnName + '@' + match[2] + ':' + match[3]);\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n /**\r\n * Given an Error object, return a formatted Array based on Opera 10's stacktrace string.\r\n *\r\n * @param e - Error object to inspect\r\n * @return Array of function calls, files and line numbers\r\n */\r\n opera10a: function (e) {\r\n // \" Line 27 of linked script file://localhost/G:/js/stacktrace.js\\n\"\r\n // \" Line 11 of inline#1 script in file://localhost/G:/js/test/functional/testcase1.html: In function foo\\n\"\r\n var ANON = '{anonymous}', lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\r\n var lines = e.stacktrace.split('\\n'), result = [];\r\n\r\n for (var i = 0, len = lines.length; i < len; i += 2) {\r\n var match = lineRE.exec(lines[i]);\r\n if (match) {\r\n var fnName = match[3] || ANON;\r\n result.push(fnName + '()@' + match[2] + ':' + match[1] + ' -- ' + lines[i + 1].replace(/^\\s+/, ''));\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n // Opera 7.x-9.2x only!\r\n opera9: function (e) {\r\n // \" Line 43 of linked script file://localhost/G:/js/stacktrace.js\\n\"\r\n // \" Line 7 of inline#1 script in file://localhost/G:/js/test/functional/testcase1.html\\n\"\r\n var ANON = '{anonymous}', lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\r\n var lines = e.message.split('\\n'), result = [];\r\n\r\n for (var i = 2, len = lines.length; i < len; i += 2) {\r\n var match = lineRE.exec(lines[i]);\r\n if (match) {\r\n result.push(ANON + '()@' + match[2] + ':' + match[1] + ' -- ' + lines[i + 1].replace(/^\\s+/, ''));\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n // Safari 5-, IE 9-, and others\r\n other: function (curr) {\r\n var ANON = '{anonymous}', fnRE = /function\\s*([\\w\\-$]+)?\\s*\\(/i, stack = [], fn, args, maxStackSize = 10;\r\n while (curr && curr['arguments'] && stack.length < maxStackSize) {\r\n fn = fnRE.test(curr.toString()) ? RegExp.$1 || ANON : ANON;\r\n args = Array.prototype.slice.call(curr['arguments'] || []);\r\n stack[stack.length] = fn + '(' + this.stringifyArguments(args) + ')';\r\n curr = curr.caller;\r\n }\r\n return stack;\r\n },\r\n\r\n /**\r\n * Given arguments array as a String, subsituting type names for non-string types.\r\n *\r\n * @param {Arguments} args\r\n * @return {Array} of Strings with stringified arguments\r\n */\r\n stringifyArguments: function (args) {\r\n var result = [];\r\n var slice = Array.prototype.slice;\r\n for (var i = 0; i < args.length; ++i) {\r\n var arg = args[i];\r\n if (arg === undefined) {\r\n result[i] = 'undefined';\r\n } else if (arg === null) {\r\n result[i] = 'null';\r\n } else if (arg.constructor) {\r\n if (arg.constructor === Array) {\r\n if (arg.length < 3) {\r\n result[i] = '[' + this.stringifyArguments(arg) + ']';\r\n } else {\r\n result[i] = '[' + this.stringifyArguments(slice.call(arg, 0, 1)) + '...' + this.stringifyArguments(slice.call(arg, -1)) + ']';\r\n }\r\n } else if (arg.constructor === Object) {\r\n result[i] = '#object';\r\n } else if (arg.constructor === Function) {\r\n result[i] = '#function';\r\n } else if (arg.constructor === String) {\r\n result[i] = '\"' + arg + '\"';\r\n } else if (arg.constructor === Number) {\r\n result[i] = arg;\r\n }\r\n }\r\n }\r\n return result.join(',');\r\n },\r\n\r\n sourceCache: {},\r\n\r\n /**\r\n * @return the text from a given URL\r\n */\r\n ajax: function (url) {\r\n var req = this.createXMLHTTPObject();\r\n if (req) {\r\n try {\r\n req.open('GET', url, false);\r\n //req.overrideMimeType('text/plain');\r\n //req.overrideMimeType('text/javascript');\r\n req.send(null);\r\n //return req.status == 200 ? req.responseText : '';\r\n return req.responseText;\r\n } catch (e) {\r\n }\r\n }\r\n return '';\r\n },\r\n\r\n /**\r\n * Try XHR methods in order and store XHR factory.\r\n *\r\n * @return XHR function or equivalent\r\n */\r\n createXMLHTTPObject: function () {\r\n var xmlhttp, XMLHttpFactories = [\r\n function () {\r\n return new XMLHttpRequest();\r\n }, function () {\r\n return new ActiveXObject('Msxml2.XMLHTTP');\r\n }, function () {\r\n return new ActiveXObject('Msxml3.XMLHTTP');\r\n }, function () {\r\n return new ActiveXObject('Microsoft.XMLHTTP');\r\n }\r\n ];\r\n for (var i = 0; i < XMLHttpFactories.length; i++) {\r\n try {\r\n xmlhttp = XMLHttpFactories[i]();\r\n // Use memoization to cache the factory\r\n this.createXMLHTTPObject = XMLHttpFactories[i];\r\n return xmlhttp;\r\n } catch (e) {\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Given a URL, check if it is in the same domain (so we can get the source\r\n * via Ajax).\r\n *\r\n * @param url source url\r\n * @return False if we need a cross-domain request\r\n */\r\n isSameDomain: function (url) {\r\n return typeof location !== \"undefined\" && url.indexOf(location.hostname) !== -1; // location may not be defined, e.g. when running from nodejs.\r\n },\r\n\r\n /**\r\n * Get source code from given URL if in the same domain.\r\n *\r\n * @param url JS source URL\r\n * @return Array of source code lines\r\n */\r\n getSource: function (url) {\r\n // TODO reuse source from script tags?\r\n if (!(url in this.sourceCache)) {\r\n this.sourceCache[url] = this.ajax(url).split('\\n');\r\n }\r\n return this.sourceCache[url];\r\n },\r\n\r\n guessAnonymousFunctions: function (stack) {\r\n for (var i = 0; i < stack.length; ++i) {\r\n var reStack = /\\{anonymous\\}\\(.*\\)@(.*)/,\r\n reRef = /^(.*?)(?::(\\d+))(?::(\\d+))?(?: -- .+)?$/,\r\n frame = stack[i], ref = reStack.exec(frame);\r\n\r\n if (ref) {\r\n var m = reRef.exec(ref[1]);\r\n if (m) { // If falsey, we did not get any file/line information\r\n var file = m[1], lineno = m[2], charno = m[3] || 0;\r\n if (file && this.isSameDomain(file) && lineno) {\r\n var functionName = this.guessAnonymousFunction(file, lineno, charno);\r\n stack[i] = frame.replace('{anonymous}', functionName);\r\n }\r\n }\r\n }\r\n }\r\n return stack;\r\n },\r\n\r\n guessAnonymousFunction: function (url, lineNo, charNo) {\r\n var ret;\r\n try {\r\n ret = this.findFunctionName(this.getSource(url), lineNo);\r\n } catch (e) {\r\n ret = 'getSource failed with url: ' + url + ', exception: ' + e.toString();\r\n }\r\n return ret;\r\n },\r\n\r\n findFunctionName: function (source, lineNo) {\r\n // FIXME findFunctionName fails for compressed source\r\n // (more than one function on the same line)\r\n // function {name}({args}) m[1]=name m[2]=args\r\n var reFunctionDeclaration = /function\\s+([^(]*?)\\s*\\(([^)]*)\\)/;\r\n // {name} = function ({args}) TODO args capture\r\n // /['\"]?([0-9A-Za-z_]+)['\"]?\\s*[:=]\\s*function(?:[^(]*)/\r\n var reFunctionExpression = /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/;\r\n // {name} = eval()\r\n var reFunctionEvaluation = /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/;\r\n // Walk backwards in the source lines until we find\r\n // the line which matches one of the patterns above\r\n var code = \"\", line, maxLines = Math.min(lineNo, 20), m, commentPos;\r\n for (var i = 0; i < maxLines; ++i) {\r\n // lineNo is 1-based, source[] is 0-based\r\n line = source[lineNo - i - 1];\r\n commentPos = line.indexOf('//');\r\n if (commentPos >= 0) {\r\n line = line.substr(0, commentPos);\r\n }\r\n // TODO check other types of comments? Commented code may lead to false positive\r\n if (line) {\r\n code = line + code;\r\n m = reFunctionExpression.exec(code);\r\n if (m && m[1]) {\r\n return m[1];\r\n }\r\n m = reFunctionDeclaration.exec(code);\r\n if (m && m[1]) {\r\n //return m[1] + \"(\" + (m[2] || \"\") + \")\";\r\n return m[1];\r\n }\r\n m = reFunctionEvaluation.exec(code);\r\n if (m && m[1]) {\r\n return m[1];\r\n }\r\n }\r\n }\r\n return '(?)';\r\n }\r\n};","// *** Based on Service Calling Proxy Class (http://www.west-wind.com/weblog/posts/324917.aspx)\r\n/*\r\n*\r\n* JDP: added scope parameter to retain \"this\" context on callbacks & fixed errors in error callback mechanism\r\n*\r\n*/\r\nfunction wcfServiceProxy(serviceUrl, extraQueryString) {\r\n\r\n var _I = this;\r\n this.serviceUrl = serviceUrl;\r\n this.extraQueryString = extraQueryString;\r\n\r\n // *** Call a wrapped object\r\n this.invoke = function (method, timeout, data, callback, error, bare, scope, scopeArgs) {\r\n // *** Convert input data into JSON - REQUIRES Json2.js\r\n var json = JSON.stringify(data);\r\n\r\n // *** The service endpoint URL \r\n var url = _I.serviceUrl + method + '?QPS=' + _I.extraQueryString;\r\n\r\n $.ajax({\r\n url: url,\r\n data: json,\r\n type: \"POST\",\r\n processData: false,\r\n contentType: \"application/json\",\r\n timeout: timeout,\r\n dataType: \"text\", // not \"json\" we'll parse\r\n success:\r\n function (res) {\r\n if (!callback) return;\r\n\r\n // *** Use json library so we can fix up MS AJAX dates\r\n var result = JSON.parse(res);\r\n\r\n // *** Bare message IS result\r\n if (bare)\r\n { callback.call(scope, result, scopeArgs); return; }\r\n\r\n // *** Wrapped message contains top level object node\r\n // *** strip it off\r\n for (var property in result) {\r\n callback.call(scope, result[property], scopeArgs);\r\n break;\r\n }\r\n },\r\n error: function (xhr) {\r\n if (!error) return;\r\n\r\n try {\r\n var msg = xhr.status + ' ' + xhr.statusText;\r\n\r\n if (xhr.responseText) {\r\n msg += ' -- ' + xhr.responseText;\r\n\r\n // var err = JSON.parse(xhr.responseText);\r\n // if (err)\r\n // error.call(scope, err, scopeArgs);\r\n // else\r\n }\r\n error.call(scope, msg, scopeArgs)\r\n } catch (ex) {\r\n error.call(scope, \"Unknown server error.\", scopeArgs)\r\n }\r\n return;\r\n }\r\n });\r\n }\r\n}","/**\r\n* Formats the number according to the 'format' string; \r\n* adherses to the american number standard where a comma \r\n* is inserted after every 3 digits.\r\n* note: there should be only 1 contiguous number in the format, \r\n* where a number consists of digits, period, and commas\r\n* any other characters can be wrapped around this number, including '$', '%', or text\r\n* examples (123456.789):\r\n* '0′ - (123456) show only digits, no precision\r\n* '0.00′ - (123456.78) show only digits, 2 precision\r\n* '0.0000′ - (123456.7890) show only digits, 4 precision\r\n* '0,000′ - (123,456) show comma and digits, no precision\r\n* '0,000.00′ - (123,456.78) show comma and digits, 2 precision\r\n* '0,0.00′ - (123,456.78) shortcut method, show comma and digits, 2 precision\r\n*\r\n* @method format\r\n* @param format {string} the way you would like to format this text\r\n* @return {string} the formatted number\r\n* @public\r\n*\r\n* from: http://ntt.cc/2008/04/25/6-very-basic-but-very-useful-javascript-number-format-functions-for-web-developers.html\r\n*/\r\n\r\nNumber.prototype.format = function (format) {\r\n //if (! isType(format, 'string')) {return '';} // sanity check \r\n \r\n var hasComma = -1 < format.indexOf(','),\r\n psplit = format.split('.'),\r\n that = this;\r\n\r\n // compute precision\r\n if (1 < psplit.length) {\r\n // fix number precision\r\n that = that.toFixed(psplit[1].length);\r\n }\r\n // error: too many periods\r\n else if (2 < psplit.length) {\r\n throw ('NumberFormatException: invalid format, formats should have no more than 1 period: ' + format);\r\n }\r\n // remove precision\r\n else {\r\n that = that.toFixed(0);\r\n }\r\n\r\n // get the string now that precision is correct\r\n var fnum = that.toString();\r\n\r\n // format has comma, then compute commas\r\n if (hasComma) {\r\n // remove precision for computation\r\n psplit = fnum.split('.');\r\n\r\n var cnum = psplit[0],\r\n parr = [],\r\n j = cnum.length,\r\n m = Math.floor(j / 3),\r\n n = cnum.length % 3 || 3; // n cannot be ZERO or causes infinite loop \r\n\r\n // break the number into chunks of 3 digits; first chunk may be less than 3\r\n for (var i = 0; i < j; i += n) {\r\n if (i != 0) { n = 3; }\r\n parr[parr.length] = cnum.substr(i, n);\r\n m -= 1;\r\n }\r\n\r\n // put chunks back together, separated by comma\r\n fnum = parr.join(',');\r\n\r\n // add the precision back in\r\n if (psplit[1]) { fnum += '.' + psplit[1]; }\r\n }\r\n\r\n // replace the number portion of the format with fnum\r\n return format.replace(/[\\d,?\\.?]+/, fnum);\r\n};\r\n\r\n\r\nNumber.prototype.displayRounding = function () {\r\n if (this < 10) return Math.round(this * 1000.0) / 1000.0;\r\n if (this < 100) return Math.round(this * 100.0) / 100.0;\r\n if (this < 1000) return Math.round(this * 10.0) / 10.0;\r\n return Math.round(this);\r\n};\r\n\r\nNumber.prototype.addCommas = function () {\r\n\r\n var addCommas_rgx = /(\\d+)(\\d{3})/;\r\n\r\n nStr = this + '';\r\n\r\n x = nStr.split('.');\r\n x1 = x[0];\r\n x2 = x.length > 1 ? '.' + x[1] : '';\r\n while (addCommas_rgx.test(x1)) {\r\n x1 = x1.replace(addCommas_rgx, '$1' + ',' + '$2');\r\n }\r\n return x1 + x2;\r\n};\r\n","\r\nBeacon.Variables = {\r\n // should match with Variables.less items\r\n smallLayoutWidth: 470,\r\n mediumLayoutWidth: 700,\r\n\r\n isDesktopViewport: function () {\r\n return Beacon.Variables.viewportWidth() >= Beacon.Variables.mediumLayoutWidth;\r\n },\r\n\r\n viewportWidth: function () {\r\n\r\n // from https://github.com/ryanve/verge/blob/master/verge.js\r\n // -- seems to be more reliable than other methods\r\n\r\n var win = typeof window != 'undefined' && window;\r\n var doc = typeof document != 'undefined' && document;\r\n var docElem = doc && doc.documentElement;\r\n\r\n var a = docElem['clientWidth'], b = win['innerWidth'];\r\n return a < b ? b : a;\r\n\r\n }\r\n\r\n};\r\n","\r\nBeacon.PageInitialization = function (isGenericPage) {\r\n\r\n //IE detection\r\n if (!!window.document.documentMode) {\r\n if (Beacon.sessionStorage.getItem(\"IEWarning\") != \"1\") {\r\n window.location =\r\n \"/InternetExplorer?ReturnUrl=\"\r\n + encodeURIComponent(window.location.pathname + window.location.search)\r\n ;\r\n }\r\n }\r\n\r\n $(function () {\r\n\r\n function logException(ex, message) {\r\n if (ex) {\r\n var st = printStackTrace({ e: ex });\r\n var stacktrace = st.join(\"\\n\");\r\n console.error(stacktrace);\r\n Beacon.API.LogJsError(message, stacktrace);\r\n }\r\n }\r\n\r\n try {\r\n if (!isGenericPage) { Beacon.EULA.Initialize(); }\r\n } catch (ex) {\r\n logException(ex, \"Beacon.EULA.Initialize failed\");\r\n }\r\n\r\n //Beacon.Tabs.initialize(); -- moved to tabs.ascx so tabs generate without weird flash\r\n try {\r\n if (!isGenericPage) { Beacon.ModuleHeader.Initialize(); }\r\n } catch (ex) {\r\n logException(ex, \"Beacon.ModuleHeader.Initialize failed\");\r\n }\r\n\r\n try {\r\n if (!isGenericPage) { Beacon.Ping.init(); }\r\n } catch (ex) {\r\n logException(ex, \"Beacon.Ping.init failed\");\r\n }\r\n\r\n try {\r\n if (!isGenericPage) { Beacon.LazyLoader.initialize(); }\r\n } catch (ex) {\r\n logException(ex, \"Beacon.LazyLoader.initialize failed\");\r\n }\r\n\r\n\r\n try {\r\n Beacon.TabularDataSupport.init();\r\n } catch (ex) {\r\n logException(ex, \"Beacon.TabularDataSupport.init failed\");\r\n }\r\n\r\n try {\r\n if (!isGenericPage) { Beacon.PhotoEngine.initialize(); }\r\n } catch (ex) {\r\n logException(ex, \"Beacon.PhotoEngine.initialize failed\");\r\n }\r\n\r\n try {\r\n if (!isGenericPage) { Beacon.SearchBox.initialize(); }\r\n } catch (ex) {\r\n logException(ex, \"Beacon.SearchBox.initialize failed\");\r\n }\r\n\r\n try {\r\n if (!isGenericPage) { Beacon.PrintDialog.onPageLoad(); }\r\n } catch (ex) {\r\n logException(ex, \"Beacon.PrintDialog.onPageLoad failed\");\r\n }\r\n\r\n try {\r\n Beacon.WCAG.initialize();\r\n } catch (ex) {\r\n logException(ex, \"Beacon.WCAG.initialize failed\");\r\n }\r\n\r\n try {\r\n if (!isGenericPage) { Beacon.JqueryValidators.initialize(); }\r\n } catch (ex) {\r\n logException(ex, \"Beacon.JqueryValidators.initialize failed\");\r\n }\r\n\r\n try {\r\n // enable tooltip wrappers \r\n $('.tooltip-wrapper').tooltip();\r\n }\r\n catch (ex) {\r\n logException(ex, \"wireup tooltips\");\r\n }\r\n });\r\n\r\n};\r\n\r\n\r\n","// Google analytics helper\r\nBeacon.GA = {\r\n\r\n TrackEvent: function (action, label) {\r\n gtag && gtag('event', action, {\r\n 'event-label': label\r\n });\r\n },\r\n\r\n CLASS_NAME: 'Beacon.GA'\r\n};\r\n","\r\n// EULA pop over\r\nBeacon.EULA = {\r\n\r\n _affirmativeValue: \"v3 accepted\",\r\n\r\n Show: function (html) {\r\n\r\n Beacon.Dialogs.showWithHtml(\r\n null,\r\n \"Terms and Conditions\",\r\n html,\r\n true,\r\n \"Agree\", function () {\r\n if (mapConfig.EULAInEveryNewTab) {\r\n // if we want the EULA/Disclaimer to appear in _every_ new tab, use session storage\r\n Beacon.sessionStorage[\"EULA-\" + mapConfig.AppId] = Beacon.EULA._affirmativeValue;\r\n } else {\r\n // otherwise, use local storage\r\n Beacon.localStorage[\"EULA-\" + mapConfig.AppId] = Beacon.EULA._affirmativeValue;\r\n }\r\n \r\n Beacon.EULA.ShowAlertsIfNeeded();\r\n },\r\n \"Disagree\", function () {\r\n window.location = \"/\";\r\n });\r\n\r\n },\r\n\r\n ShowEulaIfNeeded: function () {\r\n let storageValue = null;\r\n if (mapConfig.EULAInEveryNewTab) {\r\n // if we want the EULA/Disclaimer to appear in _every_ new tab, use session storage\r\n storageValue = Beacon.sessionStorage[\"EULA-\" + mapConfig.AppId];\r\n } else {\r\n // otherwise, use local storage\r\n storageValue = Beacon.localStorage[\"EULA-\" + mapConfig.AppId];\r\n }\r\n\r\n if (storageValue != Beacon.EULA._affirmativeValue) {\r\n // show the eula...\r\n $.get(\"/services/fulldisclaimer.aspx?appid=\" + mapConfig.AppId).then(function (d) {\r\n Beacon.EULA.Show(Beacon.EULA._headerHtml + Beacon.EULA._headerDividerHtml + d);\r\n }).fail(function () {\r\n Beacon.EULA.Show(Beacon.EULA._headerHtml);\r\n });\r\n } else {\r\n Beacon.EULA.ShowAlertsIfNeeded();\r\n }\r\n },\r\n\r\n _headerHtml: \"Please read Global Terms of Service opens in a new tab\",\r\n _headerDividerHtml: \"

\",\r\n\r\n ShowAlertsIfNeeded: function () {\r\n if (mapConfig.BeaconSessionAlerts.length > 0) {\r\n Beacon.EULA.ShowAlert(mapConfig.BeaconSessionAlerts);\r\n }\r\n },\r\n\r\n ShowAlert: function (alerts) {\r\n var alrt = alerts[0];\r\n var ssKey = \"Alert-\" + alrt.ID + \"-\" + mapConfig.AppId;\r\n\r\n if (Beacon.sessionStorage[ssKey] !== \"viewed\") {\r\n Beacon.Dialogs.showWithHtml(\r\n null,\r\n alrt.Subject, alrt.Body, true,\r\n \"Close\", function () {\r\n Beacon.sessionStorage.setItem(ssKey, \"viewed\");\r\n if (alerts.length > 1) {\r\n Beacon.EULA.ShowAlert(alerts.slice(1));\r\n }\r\n });\r\n } else {\r\n // not viewed, see next one:\r\n if (alerts.length > 1) {\r\n Beacon.EULA.ShowAlert(alerts.slice(1));\r\n }\r\n }\r\n },\r\n\r\n\r\n //ShowBeta: function () {\r\n // Beacon.Dialogs.showWithHtml(\r\n // \"New Beacon Design\",\r\n // \"Welcome to the new version of Beacon.
What's new in Beacon\",\r\n // false,\r\n // \"OK\", function () {\r\n // // accepted = true;\r\n // localStorage[\"BETA-NEW\"] = \"true\";\r\n\r\n // // show the eula...\r\n // Beacon.EULA.ShowEulaIfNeeded();\r\n // },\r\n // \"Leave\", function () {\r\n // Beacon.VersionSwitcher.RedirectToOld();\r\n // });\r\n //},\r\n\r\n Initialize: function () {\r\n\r\n //if (localStorage[\"BETA-NEW\"] != \"true\") {\r\n // Beacon.EULA.ShowBeta();\r\n // return;\r\n //}\r\n\r\n Beacon.EULA.ShowEulaIfNeeded();\r\n },\r\n\r\n CLASS_NAME: 'Beacon.EULA'\r\n};\r\n\r\n","\r\nBeacon.TabularDataSupport = {\r\n\r\n init: function () {\r\n\r\n Beacon.TabularDataSupport.configureFootableDefaults();\r\n\r\n // Look for a stored search intent and flag the corrisponding column to be sorted...AL\r\n var searchIntentAttribute = Beacon.sessionStorage[\"SearchIntent\"];\r\n var searchIntent = \"\";\r\n var searchIntentOrder = \"ascending\";\r\n\r\n if (searchIntentAttribute && searchIntentAttribute.indexOf('|') > -1) {\r\n var searchIntentParts = searchIntentAttribute.split('|');\r\n searchIntent = searchIntentParts[0];\r\n searchIntentOrder = searchIntentParts[1].trim().toLowerCase();\r\n }\r\n else {\r\n searchIntent = searchIntentAttribute; // No sort order was specified - so the attribute is the full column name...AL\r\n }\r\n\r\n if (searchIntent) {\r\n var searchHeaders = $(\"th[data-sort-name]\");\r\n \r\n for (var i = 0; i < searchHeaders.length; i++) {\r\n if (searchHeaders[i].getAttribute(\"data-sort-name\").toString().trim().toLowerCase() == searchIntent.toString().trim().toLowerCase()) {\r\n searchHeaders[i].setAttribute(\"data-sort-initial\", searchIntentOrder);\r\n searchHeaders[i].setAttribute(\"aria-sort\", searchIntentOrder)\r\n // queue the fixup function if we've messed with the initial sort\r\n setTimeout(function () {\r\n Beacon.LazyLoader.fixupAfterGridSort();\r\n }, 1);\r\n }\r\n }\r\n }\r\n\r\n //eliminate this column that we don't want to be shown\r\n $('.footable').find(window.footable.options.columnDataSelector).each(function () {\r\n var name = $(this).data('name') || $.trim($(this).text());\r\n\r\n if (name === 'B_RawParcelID') {\r\n $(this).data('ignore', true);\r\n }\r\n });\r\n\r\n // wire up footable support\r\n $('.footable').footable({});\r\n\r\n // Provide unique labels for each of the expand/collapse buttons\r\n $('.footable').each(function (idx, element) {\r\n Beacon.TabularDataSupport.labelExpandCollapseButtons(element);\r\n })\r\n\r\n /**** Wire up the \"Set Reults\" column to the onlick of ordering so that the server always knows the order of the parcels (to facilitate the next/previous buttons)...AL ****/\r\n var table = $(\".footable\")[0];\r\n\r\n var B_RawParcelID_Idx = -1;\r\n\r\n if (table) {\r\n for (var i = 0, c = table.rows[0].cells.length; i < c; i++) {\r\n if (table.rows[0].cells[i].innerText == \"B_RawParcelID\") {\r\n B_RawParcelID_Idx = i;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (B_RawParcelID_Idx > -1) {\r\n $('.footable').bind({\r\n 'footable_sorted': function (e) {\r\n Beacon.TabularDataSupport.submitOrderedResultsToServer(this, B_RawParcelID_Idx);\r\n }\r\n });\r\n\r\n Beacon.TabularDataSupport.submitOrderedResultsToServer(table, B_RawParcelID_Idx);\r\n }\r\n /****/\r\n\r\n //remove the makeshift style attributes\r\n $('.responsive-table td').removeAttr('style');\r\n //if an align attribute is needed, please use CSS, and don't write it into the markup\r\n $('.responsive-table td').removeAttr('align');\r\n $('.responsive-table td').removeAttr('width');\r\n\r\n function checkboxToggle() {\r\n var row = $(this).closest('tr');\r\n\r\n if (this.checked) {\r\n row.removeClass('hidden-criterion');\r\n } else {\r\n row.addClass('hidden-criterion');\r\n }\r\n }\r\n\r\n $('.responsive-table').each(function () {\r\n //figure out which column the checkbox is in, if any\r\n var checkboxCol = null;\r\n for (var colNum = 0; colNum < 5; colNum++) {\r\n if ($(this).hasClass('column-' + colNum + '-checkbox')) {\r\n checkboxCol = colNum;\r\n break;\r\n }\r\n }\r\n if (checkboxCol === null) {\r\n // if there is no checkbox column, there's nothing to do\r\n return;\r\n }\r\n\r\n checkboxCol++; //CSS is base 1, so increment\r\n\r\n //initialize the visibility\r\n $(this)\r\n .find('tr > :nth-child(' + checkboxCol + ') input[type=checkbox]')\r\n .each(checkboxToggle)\r\n ;\r\n\r\n //register the toggle function\r\n $(this)\r\n .find('tr > :nth-child(' + checkboxCol + ') input[type=checkbox]')\r\n .change(checkboxToggle)\r\n ;\r\n\r\n //remove the 'use' label if there isn't actually a checkbox in that row\r\n //(sometimes there are empty rows for dubious reasons)\r\n $(this).find('tr > :nth-child(' + checkboxCol + ')').each(function () {\r\n if ($(this).find('input[type=checkbox]').length < 1) {\r\n $(this).addClass('no-checkbox');\r\n }\r\n })\r\n });\r\n },\r\n labelExpandCollapseButtons: function (tbl) {\r\n const uniqueColIdxs = Beacon.TabularDataSupport.getUniqueColumnIdxes(tbl);\r\n\r\n $(tbl).find('tbody > tr').each((idx, row) => {\r\n let titleText = 'Toggle additional data for';\r\n for (let col of uniqueColIdxs) {\r\n const cellText = $($(row).find('td,th')[col.colIdx]).text().trim();\r\n titleText += ` ${col.headerText} ${cellText}`;\r\n }\r\n\r\n const toggleButton = $(row).find('a.footable-toggle');\r\n $(toggleButton).attr('title', titleText);\r\n });\r\n },\r\n\r\n getUniqueColumnIdxes: function (tbl) {\r\n // see if the table has the attribute data-unique-columns\r\n const uniqueColAttr = $(tbl).attr('data-unique-columns');\r\n if (uniqueColAttr && uniqueColAttr !== '') {\r\n const attrCols = Beacon.TabularDataSupport.useUniqueColsAttr(tbl, uniqueColAttr);\r\n if (attrCols.length > 0) {\r\n return attrCols;\r\n }\r\n }\r\n\r\n // otherwise, see which row is supposed to be the row header\r\n const rowScopeCols = Beacon.TabularDataSupport.useRowScope(tbl);\r\n if (rowScopeCols.length > 0) {\r\n return rowScopeCols;\r\n }\r\n\r\n // and, if all else fails, just look for the first column that has text\r\n const firstHeaderFound = Beacon.TabularDataSupport.useFirstRow(tbl);\r\n if (firstHeaderFound.length > 0) {\r\n return firstHeaderFound;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n useUniqueColsAttr: function (tbl, uniqueColList) {\r\n const headerRow = Beacon.TabularDataSupport.getHeaderRow(tbl);\r\n\r\n let uniqueCols = [];\r\n uniqueColList.split(',').forEach((val) => {\r\n const num = parseInt(val);\r\n // make sure that it is actually a valid index\r\n if (num !== null && num >= 0 && num < $(headerRow).find('td,th').length) {\r\n const headerCell = $(headerRow).find('td,th')[num];\r\n uniqueCols.push({\r\n colIdx: num,\r\n headerText: $(headerCell).text().trim()\r\n });\r\n }\r\n });\r\n return uniqueCols;\r\n },\r\n useRowScope: function (tbl) {\r\n let uniqueCols = [];\r\n\r\n /* GridViewBeaconizer will set scope=\"row\" on data cells in the column on which\r\n * RowHeaderIndex is set. But it will only set this on data cells, so we have to\r\n * find the first data row, and find the index of the cell that is marked in\r\n * this way.\r\n */\r\n\r\n const firstDataRow = Beacon.TabularDataSupport.getFirstDataRow(tbl);\r\n const dataHeader = $(firstDataRow).find('td[scope=\"row\"]');\r\n const headerIdx = $(firstDataRow.find('td,th')).index(dataHeader);\r\n const columnHeader = $(tbl).find(`thead > tr:nth-child(${headerIdx + 1})`);\r\n if (columnHeader.length > 0) {\r\n uniqueCols.push({\r\n colIdx: headerIdx,\r\n headerText: $(columnHeader).text().trim()\r\n });\r\n }\r\n\r\n return uniqueCols;\r\n },\r\n useFirstRow: function (tbl) {\r\n let uniqueCols = [];\r\n\r\n // just find the first header cell that contains text\r\n\r\n const headerRow = Beacon.TabularDataSupport.getHeaderRow(tbl);\r\n $(headerRow).find('td,th').each((idx, element) => {\r\n if ($(element).text().trim() !== '') {\r\n uniqueCols.push({\r\n colIdx: idx,\r\n headerText: $(element).text().trim()\r\n });\r\n return false;\r\n }\r\n });\r\n\r\n return uniqueCols;\r\n },\r\n\r\n getHeaderRow: function (tbl) {\r\n return $(tbl).find('thead > tr:last-child');\r\n },\r\n getFirstDataRow: function (tbl) {\r\n return $(tbl).find('tbody > tr:first-child');\r\n },\r\n\r\n submitOrderedResultsToServer: function (table, B_RawParcelID_Idx) {\r\n\r\n // Get a list of the parcel ids from the table (in row order) and post that list back to the set results endpoint...AL\r\n var orderedPIDs = [];\r\n if (table && table.rows) {\r\n for (var i = 1, r = table.rows.length; i < r; i++) {\r\n var innerText = table.rows[i].cells[B_RawParcelID_Idx].innerText;\r\n if (innerText) orderedPIDs.push(innerText.trim());\r\n }\r\n\r\n Beacon.API.SetOrderedResults(mapConfig.LayerId, orderedPIDs);\r\n }\r\n },\r\n configureFootableDefaults: function () {\r\n\r\n footable.options.breakpoints = {\r\n 'footable-small': Beacon.Variables.smallLayoutWidth,\r\n 'footable-medium': Beacon.Variables.mediumLayoutWidth\r\n };\r\n\r\n footable.options.delay = 250;\r\n\r\n footable.options.parsers.address = function (cell) { // This will cause sorting to sort the 1st part of the address numerically, the rest by name\r\n var val = $(cell).text();\r\n\r\n //find ##### name...\r\n var a = val.match(/^(\\d+)\\s+(.*)$/);\r\n\r\n if (a) {\r\n var num = (\"0000000000\" + a[1]).slice(-10);\r\n var street = a[2];\r\n //return num + ' ' + a[2];\r\n return street + ' ' + num;\r\n }\r\n else {\r\n return val;\r\n }\r\n };\r\n\r\n // This isolates the first date in a multi-line cell\r\n footable.options.parsers.multilineDate = function (cell) {\r\n var val = $(cell).html();\r\n var parts = val.split(\"
\");\r\n return Date.parse(parts[0]);\r\n };\r\n\r\n // This isolates the first numeric in a multi-line cell\r\n footable.options.parsers.multilineNumeric = function (cell) {\r\n var val = $(cell).html();\r\n var parts = val.split(\"
\");\r\n var sortPart = parts[0];\r\n if (sortPart == ' ') {\r\n sortPart = '0'\r\n }\r\n return parseFloat(sortPart.replace(/[^\\d.]/g, ''));\r\n };\r\n\r\n footable.options.parsers.plss = function (cell) {\r\n var val = $(cell).text();\r\n\r\n //find #-#-# type of thing...\r\n var a = val.match(/^(\\d+)-(\\d+)-(\\d+)$/);\r\n\r\n if (a) {\r\n var num = (\"0000\" + a[1]).slice(-4);\r\n return (\"0000\" + a[1]).slice(-4) + '-' + (\"0000\" + a[2]).slice(-4) + '-' + (\"0000\" + a[3]).slice(-4);\r\n }\r\n else {\r\n return val;\r\n }\r\n };\r\n\r\n footable.options.parsers.date = function (cell) {\r\n var val = $(cell).text();\r\n return Date.parse(val);\r\n };\r\n }\r\n\r\n};\r\n\r\n","Beacon.Dialogs = {\r\n Node : function (element) {\r\n // constructor \r\n return {\r\n element: element,\r\n next: null\r\n }\r\n },\r\n\r\n linkedModals : {\r\n\r\n head: null,\r\n size: 0,\r\n add: function (element) {\r\n // creates a new node \r\n var node = new Beacon.Dialogs.Node(element);\r\n // to store current node \r\n var current;\r\n\r\n // if list is Empty add the \r\n // element and make it head \r\n if (this.head == null)\r\n this.head = node;\r\n else {\r\n current = this.head;\r\n\r\n // iterate to the end of the \r\n // list \r\n while (current.next) {\r\n current = current.next;\r\n }\r\n\r\n // add node \r\n current.next = node;\r\n }\r\n this.size++;\r\n },\r\n removeFrom: function (index) {\r\n var curr, prev, it = 0;\r\n curr = this.head;\r\n prev = curr;\r\n // deleting first element \r\n if (index === 0) {\r\n this.head = curr.next;\r\n }\r\n this.size--;\r\n return curr.element;\r\n }\r\n },\r\n\r\n // Wraps bootstrap's Modal dialog tool\r\n\r\n showDialog: function (chainedModal) {\r\n var me = this;\r\n if (chainedModal.Button1) {\r\n $(\"a.button-1\", chainedModal.m).click(chainedModal.Action1);\r\n Beacon.WCAG.addSpacebarSupport($(\"a.button-1\", chainedModal.m));\r\n }\r\n\r\n if (chainedModal.Button2) {\r\n $(\"a.button-2\", chainedModal.m).click(chainedModal.Action2);\r\n Beacon.WCAG.addSpacebarSupport($(\"a.button-2\", chainedModal.m));\r\n }\r\n\r\n chainedModal.m.on({\r\n 'hidden': function () {\r\n chainedModal.m.remove();\r\n linkedModals.removeFrom(0);\r\n var v = linkedModals.head;\r\n if (v) {\r\n me.showDialog(v.element);\r\n }\r\n },\r\n 'hidden.bs.modal': function () {\r\n // wcag - focus on element that opened the dialog.\r\n if (chainedModal.ReturnTargetelement) {\r\n aria.Utils.attemptFocus(chainedModal.ReturnTargetelement);\r\n }\r\n\r\n Beacon.Dialogs.linkedModals.removeFrom(0);\r\n var v =\r\n Beacon.Dialogs.linkedModals.head;\r\n if (v) {\r\n me.showDialog(v.element);\r\n }\r\n },\r\n 'shown.bs.modal': function () {\r\n // wcag - need to focus on first focusable item in the dialog\r\n aria.Utils.focusFirstDescendant($(\".modal-focus-target\", chainedModal.m)[0]);\r\n }\r\n });\r\n\r\n var options = {\r\n backdrop: 'static',\r\n keyboard: true\r\n };\r\n\r\n if (chainedModal.m.OnlyUseButtons) {\r\n\r\n options.backdrop = 'static';\r\n $(\".modal-header button\", chainedModal.m).hide();\r\n }\r\n\r\n // constrain the height of a dialog when shown on a larger window - to avoid the scrolling gunk\r\n if ($(window).height() > 500) {\r\n $(\".modal-body\", chainedModal.m).css({\r\n maxHeight: $(window).height() - 221,\r\n overflowY: \"auto\"\r\n });\r\n }\r\n\r\n chainedModal.m.modal(options);\r\n\r\n\r\n },\r\n\r\n\r\n showWithHtml: function (returnTargetelement, headerTitle, bodyHtml, onlyUseButtons, button1, action1, button2, action2) {\r\n\r\n var z = $(Beacon.Templates.modalDialogHtml({\r\n Title: headerTitle,\r\n Body: bodyHtml,\r\n Button1: button1,\r\n Button2: button2,\r\n ShowClose: !onlyUseButtons,\r\n \r\n }));\r\n chainedModal = {\r\n m: z,\r\n Action1: action1,\r\n Action2: action2,\r\n ReturnTargetelement: returnTargetelement,\r\n OnlyUseButtons: onlyUseButtons,\r\n Button1: button1,\r\n Button2: button2,\r\n nextModal :null\r\n };\r\n\r\n\r\n Beacon.Dialogs.linkedModals.add(chainedModal);\r\n\r\n if (\r\n Beacon.Dialogs.linkedModals.size===1) {\r\n var v =\r\n Beacon.Dialogs.linkedModals.head.element;\r\n this.showDialog(v);\r\n }\r\n },\r\n\r\n showFromIFrame: function (returnTargetelement, headerTitle, url) {\r\n\r\n var m = $(Beacon.Templates.modalDialogIFrame({\r\n Title: headerTitle,\r\n Url:url\r\n }));\r\n\r\n var modalbody = $(\".modal-body\", m);\r\n\r\n m.on({\r\n 'shown': function () {\r\n //recalc height after dialog is hydrated into the dom\r\n modalbody.innerHeight(m.outerHeight() - $(\".modal-header\", m).outerHeight());\r\n },\r\n 'hidden': function () {\r\n m.remove();\r\n },\r\n 'hidden.bs.modal': function () {\r\n // wcag - focus on element that opened the dialog.\r\n if (returnTargetelement) {\r\n aria.Utils.attemptFocus(returnTargetelement);\r\n }\r\n },\r\n 'shown.bs.modal': function () {\r\n // wcag - need to focus on first focusable item in the dialog\r\n aria.Utils.focusFirstDescendant($(\".modal-focus-target\", m)[0]);\r\n }\r\n });\r\n\r\n var options = {\r\n backdrop: 'static',\r\n keyboard: true\r\n };\r\n\r\n m.modal(options);\r\n\r\n },\r\n\r\n CLASS_NAME: 'Beacon.Dialogs'\r\n\r\n};\r\n\r\n\r\n(function () {\r\n\r\n // this code adapted from samples at http://w3c.github.io/aria-practices/examples/dialog-modal/dialog.html\r\n\r\n window.aria = window.aria || {};\r\n aria.Utils = aria.Utils || {};\r\n\r\n aria.Utils.isFocusable = function (element) {\r\n if (element.tabIndex > 0 || (element.tabIndex === 0 && element.getAttribute('tabIndex') !== null)) {\r\n return true;\r\n }\r\n\r\n if (element.disabled) {\r\n return false;\r\n }\r\n\r\n switch (element.nodeName) {\r\n case 'A':\r\n return !!element.href && element.rel != 'ignore';\r\n case 'INPUT':\r\n return element.type != 'hidden' && element.type != 'file';\r\n case 'BUTTON':\r\n case 'SELECT':\r\n case 'TEXTAREA':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n };\r\n\r\n /*\r\n * @desc Set focus on descendant nodes until the first focusable element is\r\n * found.\r\n * @param element\r\n * DOM node for which to find the first focusable descendant.\r\n * @returns\r\n * true if a focusable element is found and focus is set.\r\n */\r\n aria.Utils.focusFirstDescendant = function (element) {\r\n for (var i = 0; i < element.childNodes.length; i++) {\r\n var child = element.childNodes[i];\r\n if (aria.Utils.attemptFocus(child) ||\r\n aria.Utils.focusFirstDescendant(child)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }; // end focusFirstDescendant\r\n\r\n /*\r\n * @desc Find the last descendant node that is focusable.\r\n * @param element\r\n * DOM node for which to find the last focusable descendant.\r\n * @returns\r\n * true if a focusable element is found and focus is set.\r\n */\r\n aria.Utils.focusLastDescendant = function (element) {\r\n for (var i = element.childNodes.length - 1; i >= 0; i--) {\r\n var child = element.childNodes[i];\r\n if (aria.Utils.attemptFocus(child) ||\r\n aria.Utils.focusLastDescendant(child)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }; // end focusLastDescendant\r\n\r\n /*\r\n * @desc Set Attempt to set focus on the current node.\r\n * @param element\r\n * The node to attempt to focus on.\r\n * @returns\r\n * true if element is focused.\r\n */\r\n aria.Utils.attemptFocus = function (element) {\r\n if (!aria.Utils.isFocusable(element)) {\r\n return false;\r\n }\r\n\r\n try {\r\n element.focus();\r\n }\r\n catch (e) {\r\n }\r\n return (document.activeElement === element);\r\n }; // end attemptFocus\r\n\r\n }());\r\n","\r\nBeacon.Utils = {\r\n\r\n // Converts a utc date time string (ISO-8601 standard), to a local date time\r\n utcDTStringToLocalDTString: function (utcDTString) {\r\n\r\n if (utcDTString) {\r\n var localDT = new Date(utcDTString);\r\n if (localDT)\r\n return localDT.toLocaleString();\r\n }\r\n\r\n return \"[Unknown]\";\r\n },\r\n\r\n validateEmail: function (email) {\r\n var regEx = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regEx.test(email);\r\n },\r\n\r\n\r\n CLASS_NAME: 'Beacon.Utils'\r\n\r\n};\r\n\r\n","\r\nBeacon.PrintDialog = {\r\n\r\n loaded: false,\r\n\r\n defaultSettings: {\r\n paperSize: \"8.5x11\",\r\n mapQuality: 150,\r\n title: \"\",\r\n subtitle: \"\",\r\n author: \"\",\r\n showHeader: true,\r\n showTitleBar: true,\r\n showFooter: true,\r\n showOverview: true,\r\n showLegend: true,\r\n showScaleBar: true,\r\n showNorthArrow: true,\r\n showDetails: true,\r\n mapScale: \"FIT\"\r\n },\r\n\r\n settings: {},\r\n\r\n onPageLoad: function () {\r\n\r\n $(\"#btnToolbarPrint\").click(Beacon.PrintDialog.print);\r\n $(\"#btnToolbarPrintSetup\").click(Beacon.PrintDialog.printSetup);\r\n $(\"#btnToolbarBrowserPrint\").click(Beacon.PrintDialog.printViaBrowser);\r\n //$(\"#btnToolbarBrowserPrint2\").click(function () {\r\n // $(\"BODY\").addClass(\"print-compact-1\");\r\n // // window.print();\r\n // //$(\"BODY\").removeClass(\"print-compact-1\");\r\n //});\r\n\r\n //$(\"#dropdownMenuPrintSettings\").click(function (e) {\r\n // console.info(e);\r\n // //var layout = e.target.data.layout;\r\n // e.preventDefault();\r\n //});\r\n\r\n\r\n\r\n Beacon.PrintDialog.loadDefaultSettings();\r\n\r\n Beacon.PrintDialog.loadDefaultPrintLayout();\r\n\r\n },\r\n\r\n\r\n initializeSettingsDialog: function () {\r\n\r\n if (Beacon.PrintDialog.loaded) { return; }\r\n\r\n Beacon.PrintDialog.bindSettingsToUi();\r\n\r\n $(\"#print_title\").on(\"change keyup\", function () {\r\n $(\"#preview_title\").text($(this).val());\r\n });\r\n $(\"#print_subtitle\").on(\"change keyup\", function () {\r\n $(\"#preview_subtitle\").text($(this).val());\r\n });\r\n $(\"#print_author\").on(\"change keyup\", function () {\r\n $(\"#preview_author\").text($(this).val());\r\n });\r\n\r\n $(\"#print_showHeader\").change(function () {\r\n //console.info($(\"#print_showHeader\").val());\r\n //if ($(\"#print_showHeader\").val()) {\r\n // $(\"#preview_header_section\").show();\r\n //} else {\r\n // $(\"#preview_header_section\").hide();\r\n //}\r\n });\r\n\r\n $(\"#btnPrintSetDefault\").click(Beacon.PrintDialog.onSaveDefault);\r\n $(\"#btnPrintResetDefault\").click(Beacon.PrintDialog.onResetToDefaults);\r\n\r\n $(\"#btnPrintPdf\").click(Beacon.PrintDialog.print);\r\n\r\n $(\"#print_mapScale\").on('change', function () {\r\n var scale = $(\"#print_mapScale\").val();\r\n if (scale === \"CUSTOM\") {\r\n //sdc: This would not hide which is why the setTimeout is in there. Probably a better way to do this but I've spent way too much time trying to figure it out already\r\n console.log('show custom');\r\n setTimeout(function () {\r\n $(\"#print_customScaleDiv\").show();\r\n }, 100);\r\n } else {\r\n console.log('scale: ' + scale);\r\n console.log('hide custom');\r\n //sdc: This would not hide which is why the setTimeout is in there. Probably a better way to do this but I've spent way too much time trying to figure it out already\r\n setTimeout(function () {\r\n $(\"#print_customScaleDiv\").hide();\r\n }, 100);\r\n }\r\n });\r\n\r\n $(\"#print_paperSize\").on('change', function () {\r\n var size = $(\"#print_paperSize\").val();\r\n if (size === '17x22' || size === '22x17' || size === '22x34' || size === '34x22' || size === '24x24' || size === '24x36' || size === '36x24' || size === '32x32' || size === '34x22' || size === '22x34' || size === '36x36' || size === '36x48' || size === '48x36') {\r\n $(\"#print_mapQuality\").val(\"96\");\r\n Beacon.PrintDialog.settings.mapQuality = \"96\";\r\n $(\"#print_mapQuality\").attr('disabled','');\r\n $(\"#print_mapQuality\").attr('title', 'Not available for large format output');\r\n } else {\r\n $(\"#print_mapQuality\").removeAttr('disabled');\r\n $(\"#print_mapQuality\").removeAttr('title');\r\n }\r\n });\r\n $(\"#print_paperSize\").change();\r\n\r\n Beacon.PrintDialog.loaded = true;\r\n\r\n },\r\n\r\n loadDefaultSettings: function () {\r\n\r\n // populate defaults\r\n $.extend(Beacon.PrintDialog.settings, Beacon.PrintDialog.defaultSettings);\r\n\r\n if (Beacon.localStorage) {\r\n var settings = Beacon.localStorage.getItem(\"PrintOptions\");\r\n if (settings) {\r\n Beacon.PrintDialog.settings = JSON.parse(settings);\r\n }\r\n }\r\n },\r\n\r\n loadDefaultPrintLayout: function () {\r\n\r\n var layoutId = 1; //the default value\r\n\r\n if (Beacon.localStorage) {\r\n var settings = Beacon.localStorage.getItem(\"PrintLayout\");\r\n if (settings) {\r\n layoutId = settings;\r\n }\r\n }\r\n\r\n layoutId = Beacon.PrintDialog.validatePrintLayoutId(layoutId);\r\n\r\n Beacon.PrintDialog.setPrintLayout(layoutId);\r\n Beacon.WCAG.addSpacebarSupport($(\".main-toolbar #printSettingsDropdown a\"));\r\n Beacon.WCAG.addSpacebarSupport($(\".main-toolbar #shareDropDown a\"));\r\n \r\n // magic css to keep section headers with contents, but only for modules < 320px high\r\n $(\".page-center-pane section\").each(function (idx, el) {\r\n var div = $(\".module-content\", el);\r\n var h = div.height();\r\n if (h < 320 && !$(el).attr('LAYOUT')) { // also ignore photo and sketch modules, since their height isn't quite right at first\r\n $(el).addClass('avoid-page-break');\r\n }\r\n });\r\n\r\n },\r\n\r\n bindSettingsToUi: function () {\r\n\r\n Beacon.PrintDialog.bindControl(\"#print_title\", Beacon.PrintDialog.settings, \"title\");\r\n Beacon.PrintDialog.bindControl(\"#print_subtitle\", Beacon.PrintDialog.settings, \"subtitle\");\r\n Beacon.PrintDialog.bindControl(\"#print_author\", Beacon.PrintDialog.settings, \"author\");\r\n\r\n Beacon.PrintDialog.bindControl(\"#print_showHeader\", Beacon.PrintDialog.settings, \"showHeader\");\r\n Beacon.PrintDialog.bindControl(\"#print_showFooter\", Beacon.PrintDialog.settings, \"showFooter\");\r\n Beacon.PrintDialog.bindControl(\"#print_showTitleBar\", Beacon.PrintDialog.settings, \"showTitleBar\");\r\n Beacon.PrintDialog.bindControl(\"#print_showOverview\", Beacon.PrintDialog.settings, \"showOverview\");\r\n Beacon.PrintDialog.bindControl(\"#print_showLegend\", Beacon.PrintDialog.settings, \"showLegend\");\r\n Beacon.PrintDialog.bindControl(\"#print_showScaleBar\", Beacon.PrintDialog.settings, \"showScaleBar\");\r\n Beacon.PrintDialog.bindControl(\"#print_showNorthArrow\", Beacon.PrintDialog.settings, \"showNorthArrow\");\r\n Beacon.PrintDialog.bindControl(\"#print_showDetails\", Beacon.PrintDialog.settings, \"showDetails\");\r\n\r\n Beacon.PrintDialog.bindControl(\"#print_paperSize\", Beacon.PrintDialog.settings, \"paperSize\");\r\n Beacon.PrintDialog.bindControl(\"#print_mapQuality\", Beacon.PrintDialog.settings, \"mapQuality\");\r\n Beacon.PrintDialog.bindControl(\"#print_mapScale\", Beacon.PrintDialog.settings, \"mapScale\");\r\n },\r\n\r\n\r\n saveDefaultSettings: function () {\r\n if (Beacon.localStorage) {\r\n var mapScale = Beacon.PrintDialog.settings['mapScale'];\r\n\r\n //Only persist the mapScale as a default if it is FIT or CURRENT\r\n if (mapScale !== 'FIT' && mapScale !== 'CURRENT') {\r\n Beacon.PrintDialog.settings['mapScale'] = 'FIT';\r\n }\r\n\r\n Beacon.localStorage.setItem(\"PrintOptions\", JSON.stringify(Beacon.PrintDialog.settings));\r\n $(\"#fbPrintSetDefault\").show().delay(3000).fadeOut(500);\r\n }\r\n },\r\n\r\n onResetToDefaults: function () {\r\n // populate defaults\r\n //Beacon.PrintDialog.settings = {};\r\n //$.extend(Beacon.PrintDialog.settings, Beacon.PrintDialog.defaultSettings);\r\n\r\n // just remove the stored settings\r\n if (Beacon.localStorage) {\r\n Beacon.localStorage.removeItem(\"PrintOptions\");\r\n }\r\n },\r\n\r\n //bindUiToSettings: function () {\r\n // var s = Beacon.PrintDialog.settings;\r\n // s.title = $(\"#print_title\").val();\r\n //},\r\n\r\n onSaveDefault: function () {\r\n //Beacon.PrintDialog.bindUiToSettings();\r\n Beacon.PrintDialog.saveDefaultSettings();\r\n },\r\n\r\n selectCurrentMapScale: function () {\r\n\r\n var currentScale = Math.round(Beacon.MapJS.map.getScale() / 12.0);\r\n\r\n if (Beacon.PrintDialog.loaded) {\r\n var currentSelectedScale = $(\"#print_mapScale\").val();\r\n\r\n var opt = $(\"#print_mapScale option[value='CURRENT']\");\r\n\r\n if (currentScale < 5280) {\r\n opt.text(\"Current scale: 1in = \" + currentScale + \"ft\");\r\n } else {\r\n opt.text(\"Current scale: 1in = \" + Math.round(currentScale / 5280) + \"mi\");\r\n }\r\n\r\n return;\r\n }\r\n\r\n $(\"#print_mapScale\").empty();\r\n\r\n $(\"#print_mapScale\").append($(\"\"));\r\n\r\n var opt = $(\"\");\r\n opt.val('CURRENT'); //currentScale);\r\n if (currentScale < 5280) {\r\n opt.text(\"Current scale: 1in = \" + currentScale + \"ft\");\r\n } else {\r\n opt.text(\"Current scale: 1in = \" + Math.round(currentScale / 5280) + \"mi\");\r\n }\r\n $(\"#print_mapScale\").append(opt);\r\n\r\n $(\"#print_mapScale\").append($(\"\"));\r\n\r\n $(Beacon.MapJS.map.baseLayer.scales).each(function () {\r\n\r\n var scale = Math.round(this / 12.0);\r\n\r\n var opt = $(\"\");\r\n opt.val(scale);\r\n if (scale < 5280) {\r\n opt.text(\"1in = \" + scale + \"ft\");\r\n } else {\r\n opt.text(\"1in = \" + Math.round(scale / 5280) + \"mi\");\r\n }\r\n\r\n if (scale == currentScale) {\r\n opt.attr(\"selected\", \"\");\r\n }\r\n\r\n $(\"#print_mapScale\").append(opt);\r\n });\r\n\r\n\r\n //$(\"#print_mapScale\").append($(\"\"));\r\n //setTimeout(function () {\r\n $(\"#print_customScale\").val(currentScale);\r\n //},100); \r\n\r\n //$(\"#print_mapScale\").change(function () {\r\n // var scale = $(\"#print_mapScale\").val();\r\n // if (scale === \"CUSTOM\") {\r\n // //sdc: This would not hide which is why the setTimeout is in there. Probably a better way to do this but I've spent way too much time trying to figure it out already\r\n // console.log('show custom');\r\n // setTimeout(function () {\r\n // $(\"#print_customScaleDiv\").show();\r\n // }, 100);\r\n // } else {\r\n // console.log('scale: ' + scale);\r\n // console.log('hide custom');\r\n // //sdc: This would not hide which is why the setTimeout is in there. Probably a better way to do this but I've spent way too much time trying to figure it out already\r\n // setTimeout(function () {\r\n // $(\"#print_customScaleDiv\").hide();\r\n // }, 100); \r\n // }\r\n //}).change();\r\n },\r\n\r\n\r\n bindControl: function (element, data, prop) {\r\n\r\n var e = $(element);\r\n var inputType = e.attr('type');\r\n var nodeName = e[0].nodeName;\r\n\r\n if (inputType === 'text' || nodeName.toLowerCase() === 'select') {\r\n\r\n //set initial value:\r\n $(element).val(data[prop]);\r\n\r\n //track future changes:\r\n $(element).on(\"change keypress\", function () {\r\n data[prop] = $(element).val();\r\n });\r\n\r\n }\r\n\r\n if (inputType === 'checkbox') {\r\n\r\n //set initial value:\r\n $(element).prop('checked', data[prop]);\r\n\r\n //track future changes:\r\n $(element).on(\"change keypress\", function () {\r\n data[prop] = $(element).prop('checked');\r\n });\r\n\r\n }\r\n\r\n\r\n },\r\n\r\n printSetup: function () {\r\n\r\n if (Beacon.MapJS) {\r\n Beacon.PrintDialog.selectCurrentMapScale();\r\n }\r\n\r\n Beacon.PrintDialog.initializeSettingsDialog();\r\n\r\n if (Beacon.MapJS) {\r\n //Beacon.PrintDialog.selectCurrentMapScale();\r\n $(\".needs-map\").show();\r\n } else {\r\n $(\".needs-map\").hide();\r\n }\r\n\r\n $('#printSetupDialog').modal({\r\n backdrop: 'static', // WCAG requirement\n keyboard: true\n }).on({\r\n 'shown.bs.modal': function () {\n // wcag - need to focus on first focusable item in the dialog\n $(\"#print_paperSize\").focus();\r\n }\r\n });\r\n\r\n },\r\n\r\n print: function () {\r\n\r\n var settings = JSON.stringify(Beacon.PrintDialog.settings);\r\n\r\n var isMap = (!!Beacon.MapJS);\r\n\r\n var bbox;\r\n var keyvalue;\r\n var mapScale;\r\n\r\n if (isMap) {\r\n\r\n bbox = \"&bbox=\" + Beacon.MapJS.map.getExtent().toBBOX(0);\r\n\r\n keyvalue = Beacon.MapJS.selectionLayer.keyValue;\r\n\r\n if ($(\"#print_mapScale\").val() === 'CUSTOM') {\r\n mapScale = \"&Scale=\" + $(\"#print_customScale\").val();\r\n }\r\n else if ($(\"#print_mapScale\").val() === 'CURRENT') {\r\n var currentScale = Math.round(Beacon.MapJS.map.getScale() / 12.0);\r\n mapScale = \"&Scale=\" + currentScale;\r\n }\r\n else {\r\n mapScale = \"&Scale=\" + ($(\"#print_mapScale\").val() || \"FIT\");\r\n }\r\n\r\n } else {\r\n keyvalue = mapConfig.KeyValue;\r\n bbox = \"\";\r\n mapScale = \"\";\r\n }\r\n\r\n var url = Beacon.Tabs.getUrl(mapConfig.LayerId,\r\n mapConfig.PageTypeId,\r\n mapConfig.PageId,\r\n keyvalue,\r\n 'RenderPdf.aspx') +\r\n bbox +\r\n mapScale +\r\n \"&Q=\" + (new Date()).getTime() +\r\n \"&Options=\" + encodeURIComponent(settings);\r\n\r\n window.open(url, \"_blank\");\r\n\r\n Beacon.GA.TrackEvent(isMap ? 'PrintMap' : 'Print', 'Click');\r\n\r\n $('#printSetupDialog').modal('hide');\r\n },\r\n\r\n printViaBrowser: function () {\r\n try {\r\n if (Beacon.localStorage) {\r\n var id = Beacon.localStorage.getItem(\"PrintLayout\");\r\n Beacon.GA.TrackEvent('PrintLayout', id);\r\n }\r\n } catch(ex) {}\r\n window.print();\r\n },\r\n\r\n setPrintLayout: function (layoutId) {\r\n\r\n var id = Beacon.PrintDialog.validatePrintLayoutId(layoutId);\r\n\r\n $(\"BODY\")\r\n //.removeClass(\"print-layout-0\")\r\n .removeClass(\"print-layout-1\")\r\n .removeClass(\"print-layout-2\")\r\n .removeClass(\"print-layout-3\")\r\n .addClass(\"print-layout-\" + id);\r\n\r\n $(\".main-toolbar #printSettingsDropdown li a\").attr(\"aria-checked\", \"false\");\r\n $(\".main-toolbar #printSettingsDropdown li.print-layout-\" + id + \" a\").attr(\"aria-checked\", \"true\");\r\n\r\n if (Beacon.localStorage) {\r\n Beacon.localStorage.setItem(\"PrintLayout\", id);\r\n }\r\n\r\n },\r\n\r\n validatePrintLayoutId: function (layoutId) {\r\n try {\r\n var id = parseInt(layoutId);\r\n if (isNaN(id) || id < 1 || id > 3) { id = 1; }\r\n return id;\r\n } catch (ex) {\r\n return 1;\r\n }\r\n },\r\n\r\n CLASS_NAME: \"Beacon.PrintDialog\"\r\n};","\r\nBeacon.API = {\r\n\r\n pBeaconCore: null,\r\n\r\n Initialize: function () {\r\n this.pBeaconCore = new wcfServiceProxy('/api/beaconCore/', mapConfig.QPS);\r\n },\r\n\r\n UpdateMapExtent: function (ext, resolution, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"UpdateMapExtent\", 15000,\r\n {\r\n ext: { minx: ext.left, miny: ext.bottom, maxx: ext.right, maxy: ext.top },\r\n resolution: resolution,\r\n ts: (new Date()).getTime()\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n SetResults: function (layerId, keys, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SetResults\", 15000,\r\n {\r\n keys: keys,\r\n layerId: layerId,\r\n ts: (new Date()).getTime()\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n SetOrderedResults: function (layerId, keys, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SetOrderedResults\", 15000,\r\n {\r\n keys: keys,\r\n layerId: layerId,\r\n ts: (new Date()).getTime()\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n //SetSearchIntent: function (layerId, searchIntent, success, failure, scope, scopeArgs) {\r\n // this.pBeaconCore.invoke(\"SetSearchIntent\", 15000,\r\n // {\r\n // layerId: layerId,\r\n // searchIntent: searchIntent,\r\n // ts: (new Date()).getTime()\r\n // },\r\n // success, failure, false, scope, scopeArgs);\r\n //},\r\n\r\n\r\n GetVectorLayer: function (layerId, useSelection, ext, wkt, spatialRelation, featureLimit, success, failure, scope, scopeArgs, projectionOverride, auxKeyField) {\r\n this.pBeaconCore.invoke(\"GetVectorLayer\", 30000,\r\n {\r\n layerId: layerId,\r\n useSelection: useSelection,\r\n ext: ext ? { minx: ext.left, miny: ext.bottom, maxx: ext.right, maxy: ext.top } : null,\r\n wkt: wkt,\r\n spatialRelation: spatialRelation,\r\n featureLimit: featureLimit,\r\n projectionOverride: projectionOverride,\r\n auxKeyField: auxKeyField\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n InvokeGeoProcService: function (layerId, method, targetLayer, selectionKey, jobId, wkid, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"InvokeGeoProcService\", 30000,\r\n {\r\n layerId: layerId,\r\n method: method,\r\n targetLayer: targetLayer,\r\n selectionKey: selectionKey,\r\n wkid: wkid,\r\n jobId: jobId\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n GetAttributes: function (layerId, attributes, distinct, featureLimit, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetAttributes\", 30000,\r\n {\r\n layerId: layerId,\r\n attributes: attributes,\r\n distinct: distinct,\r\n featureLimit: featureLimit\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n QueryWithWhere: function (layerId, where, featureLimit, success, failure, scope, scopeArgs, projectionOverride, auxKeyField) {\r\n this.pBeaconCore.invoke(\"QueryWithWhere\", 30000,\r\n {\r\n layerId: layerId,\r\n where: where,\r\n featureLimit: featureLimit,\r\n projectionOverride: projectionOverride,\r\n auxKeyField: auxKeyField\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n \r\n SpatialRelation: {\r\n None: 0,\r\n Intersects: 1,\r\n Contains: 2,\r\n ContainsCentroid: 3\r\n },\r\n\r\n QueryMapDetail: function (layerId, key, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"QueryMapDetail\", 15000,\r\n {\r\n layerId: layerId,\r\n key: key\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n BufferGeometry: function (wkts, distance, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"BufferGeometry\", 31000,\r\n {\r\n distance: distance,\r\n wkt: wkts\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n ClearBufferGeometry: function (success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"ClearBufferGeometry\", 15000,\r\n {},\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n BufferAndExport: function (layerId, keys, distance, exportType, showParcelId, usePropertyAddress, skipLabelCount, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"BufferAndExport\", 60000,\r\n {\r\n layerId: layerId,\r\n keys: keys,\r\n distance: distance,\r\n exportType: exportType,\r\n showParcelId: showParcelId,\r\n usePropertyAddress: usePropertyAddress,\r\n skipLabelCount: skipLabelCount\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs\r\n )\r\n },\r\n\r\n GetTabs: function (layerId, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetTabs\", 15000,\r\n {\r\n layerId: layerId\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n AnnouncementAcknowledgement: function (layerId, announcementId, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"AnnouncementAcknowledgement\", 15000,\r\n {\r\n appId: layerId,\r\n announcementId: announcementId\r\n\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n GetModuleJurisdictions: function (ModuleName, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetModuleJurisdictions\", 15000,\r\n {\r\n ModuleName: ModuleName\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n GetVendorJurisdictions: function (VendorName, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetVendorJurisdictions\", 15000,\r\n {\r\n VendorName: VendorName\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n GetDisclaimers: function (layerIds, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetDisclaimers\", 15000,\r\n {\r\n layerIds: layerIds\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n GetQuickZoomList: function (layerId, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetQuickZoomList\", 15000,\r\n {\r\n layerId: layerId\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n LogJsError: function (message, stacktrace, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"LogJsError\", 60000,\r\n {\r\n msg: message,\r\n stacktrace: stacktrace\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n Ping: function (success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"Ping\", 15000,\r\n {},\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n SetLayerVisibility: function (layerId, visible, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SetLayerVisibility\", 15000,\r\n { layerId: layerId, visible: visible },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n SetLayersVisibility: function (layersVisibility, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SetLayersVisibility\", 15000,\r\n { layersVisibility: layersVisibility },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n SetLayersNotVisible: function (layerIds, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SetLayersNotVisible\", 15000,\r\n { layerIds: layerIds },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n SetLayersVisible: function (layerIds, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SetLayersVisible\", 15000,\r\n { layerIds: layerIds },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n SaveMapMarkup: function (markup, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SaveMapMarkup\", 15000,\r\n {\r\n markup: markup,\r\n ts: (new Date()).getTime()\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n LoadMapMarkup: function (success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"LoadMapMarkup\", 15000,\r\n {},\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n SaveMapMeasure: function (markup, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SaveMapMeasure\", 15000,\r\n {\r\n markup: markup,\r\n ts: (new Date()).getTime()\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n PostDataEdits: function (edits, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"PostDataEdits\", 60000,\r\n {\r\n data: edits\r\n },\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n GetCurrentBalance: function (success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetCurrentBalance\", 15000,\r\n {},\r\n success,\r\n failure,\r\n false,\r\n scope,\r\n scopeArgs);\r\n },\r\n\r\n GetMapState: function (name, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetMapState\", 15000,\r\n {\r\n name: name\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n SaveMapState: function (name, state, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"SaveMapState\", 15000,\r\n {\r\n name: name,\r\n state: state\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n DeleteMapState: function (name, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"DeleteMapState\", 15000,\r\n {\r\n name: name\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n GetLegendInfos: function (appId, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetLegendInfos\", 15000,\r\n {\r\n appId: appId\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n GetServiceLayerInfo: function (spatialServerId, layerId, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetServiceLayerInfo\", 15000,\r\n {\r\n spatialServerId: spatialServerId,\r\n layerId: layerId\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n GetServiceLegend: function (spatialServerId, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetServiceLegend\", 15000,\r\n {\r\n spatialServerId: spatialServerId\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n },\r\n\r\n\r\n GetMapImpage: function (bbox, width, height, dpi, clientGraphics, success, failure, scope, scopeArgs) {\r\n this.pBeaconCore.invoke(\"GetMapImpage\", 60000,\r\n {\r\n bbox: bbox,\r\n width: width,\r\n height: height,\r\n dpi: dpi,\r\n clientGraphics: clientGraphics\r\n },\r\n success, failure, false, scope, scopeArgs);\r\n }\r\n};\r\n","Beacon.LazyLoader = {\r\n\r\n trackedImages: null,\r\n debounceTimer: -1,\r\n settingsTag: 'ShowPhotos',\r\n offscreenPreloadBuffer: 200,\r\n iconUrl: '/Icons/Report/Report-16-Enabled.gif',\r\n blankUrl: '/Images/white_pixel.png',\r\n missingUrl: '/PhotoEngine/blank_house.png',\r\n\r\n // at pageload:\r\n initialize: function () {\r\n // remove the superfluous label\r\n var chkShowPhotos = $('.showImageCheckBox');\r\n let chkShowPhotosID = chkShowPhotos.attr('id');\r\n if (chkShowPhotosID && chkShowPhotos !== '') {\r\n $('label[for=\"' + chkShowPhotosID + '\"]').remove();\r\n }\r\n\r\n if ($('.showImageCheckBox').attr('aria-labelledby') !== undefined) {\r\n $('#' + $('.showImageCheckBox').attr('aria-labelledby')).remove();\r\n }\r\n $('.showImageCheckBox').replaceWith('')\r\n $('.showImageCheckBox').parent('label').replaceWith('');\r\n \r\n chkShowPhotos = $('.showImageCheckBox');\r\n if (chkShowPhotos.length > 0) {\r\n const parentContents = $(chkShowPhotos).parent().contents();\r\n const checkboxIdx = $(parentContents).index($(chkShowPhotos));\r\n if (checkboxIdx > -1 && parentContents.length > (checkboxIdx + 1)) {\r\n if ($(parentContents)[checkboxIdx + 1].nodeType === Node.TEXT_NODE) {\r\n $($(parentContents)[checkboxIdx + 1]).remove();\r\n }\r\n }\r\n\r\n chkShowPhotos.click(Beacon.LazyLoader.checkBoxHandler);\r\n\r\n var setting = Beacon.localStorage[Beacon.LazyLoader.settingsTag] === 'true';\r\n\r\n if (setting) {\r\n chkShowPhotos.attr('checked', 'YES');\r\n Beacon.LazyLoader.enableLazyImages();\r\n Beacon.GA.TrackEvent('ShowPhotos', 'On');\r\n $(chkShowPhotos).text('Click to Hide Photos');\r\n } else {\r\n Beacon.LazyLoader.disableLazyImages();\r\n Beacon.GA.TrackEvent('ShowPhotos', 'Off');\r\n }\r\n }\r\n },\r\n\r\n // from UI checkbox\r\n checkBoxHandler: function (event) {\r\n if (!$(event.target).hasClass('showImageCheckBox')) {\r\n return;\r\n }\r\n \r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (Beacon.localStorage[Beacon.LazyLoader.settingsTag] === 'false') {\r\n Beacon.LazyLoader.enableLazyImages();\r\n Beacon.localStorage[Beacon.LazyLoader.settingsTag] = 'true';\r\n Beacon.GA.TrackEvent('ShowPhotos', 'Turned On');\r\n $(event.target).text('Click to Hide Photos');\r\n } else {\r\n Beacon.LazyLoader.disableLazyImages();\r\n Beacon.localStorage[Beacon.LazyLoader.settingsTag] = 'false';\r\n Beacon.GA.TrackEvent('ShowPhotos', 'Turned Off');\r\n $(event.target).text('Click to Show Photos');\r\n }\r\n },\r\n\r\n\r\n // internal -------------------------------------\r\n\r\n enableLazyImages: function () {\r\n\r\n if (Beacon.LazyLoader.trackedImages != null) return; //already inited\r\n Beacon.LazyLoader.trackedImages = [];\r\n\r\n $('img[LAZYURL],input:image[LAZYURL]').each(function () {\r\n\r\n Beacon.LazyLoader.trackedImages.push({ image: $(this), loaded: false });\r\n\r\n //add blank image\r\n $(this)\r\n .attr('src', Beacon.LazyLoader.blankUrl)\r\n .height(48)\r\n .width(48);\r\n\r\n $(this).parent().width(\"56px\");\r\n\r\n });\r\n\r\n $(window).on(\"scroll resize\", Beacon.LazyLoader.onScrollAndResize);\r\n\r\n Beacon.LazyLoader.onScrollAndResize();\r\n\r\n },\r\n\r\n disableLazyImages: function () {\r\n\r\n if (Beacon.LazyLoader.trackedImages == null) return; //already killed\r\n\r\n if (Beacon.LazyLoader.debounceTimer != -1) clearTimeout(Beacon.LazyLoader.debounceTimer);\r\n Beacon.LazyLoader.debounceTimer = -1;\r\n\r\n $(window).unbind('scroll resize', Beacon.LazyLoader.onScrollAndResize);\r\n\r\n for (var i = 0; i < Beacon.LazyLoader.trackedImages.length; i++) {\r\n var img = Beacon.LazyLoader.trackedImages[i];\r\n img.image.attr('src', Beacon.LazyLoader.iconUrl);\r\n img.image.height(16);\r\n img.image.width(16);\r\n $(img.image).parent().width(\"16px\");\r\n }\r\n\r\n Beacon.LazyLoader.trackedImages = null;\r\n\r\n },\r\n\r\n fixupAfterGridSort: function () {\r\n if (!Beacon.LazyLoader.trackedImages) return;\r\n\r\n Beacon.LazyLoader.trackedImages.sort(function (a, b) {\r\n return a.image.offset().top - b.image.offset().top;\r\n });\r\n\r\n $(window).scroll();\r\n },\r\n\r\n\r\n onScrollAndResize: function () {\r\n\r\n if (Beacon.LazyLoader.debounceTimer != -1) {\r\n clearTimeout(Beacon.LazyLoader.debounceTimer);\r\n Beacon.LazyLoader.debounceTimer = -1;\r\n }\r\n\r\n Beacon.LazyLoader.debounceTimer = setTimeout(Beacon.LazyLoader.loadVisibleImages, 100);\r\n\r\n },\r\n\r\n loadVisibleImages: function () {\r\n\r\n var screenTop = $(window).scrollTop();\r\n var screenBottom = screenTop + $(window).height() + Beacon.LazyLoader.offscreenPreloadBuffer;\r\n\r\n for (var i = 0; i < Beacon.LazyLoader.trackedImages.length; i++) {\r\n\r\n var img = Beacon.LazyLoader.trackedImages[i];\r\n\r\n if (!img.loaded) {\r\n\r\n var imgTop = img.image.offset().top;\r\n var imgBot = imgTop + img.image.height();\r\n\r\n //short circuit if past bottom of screen or div: -- removed 5/10/13 jdp: dynamic sorting prevents this optimization from working\r\n if (imgTop > screenBottom) break;\r\n\r\n var visInScrn = (imgBot >= screenTop) && (imgTop <= screenBottom);\r\n\r\n //now, if visible, load\r\n if (visInScrn) {\r\n img.image.on(\"error\", Beacon.LazyLoader.imageLoadError);\r\n img.image.attr('src', img.image.attr('LAZYURL'));\r\n img.loaded = true;\r\n }\r\n\r\n }\r\n }\r\n },\r\n\r\n // this supports azure-based images, since we can't \r\n imageLoadError: function (e) { \r\n return Beacon.LazyLoader.swapImageOnFailure(e.target);\r\n //e.target.onerror = null;\r\n //e.target.src = Beacon.LazyLoader.missingUrl;\r\n //return null;\r\n },\r\n\r\n // this supports azure-based images for map tips and other one-off instances that dynamically load \r\n hideImageOnFailure: function (el) {\r\n $(el).off(\"error\").hide();\r\n return null;\r\n },\r\n\r\n swapImagesOnError: function (urls, el) {\r\n var src = $(el).attr('src');\r\n\r\n var splitUrls = urls ? urls.split(';') : [];\r\n var cnt = splitUrls.length - 1;\r\n\r\n var index = splitUrls.indexOf(src);\r\n\r\n if (index == cnt) {\r\n //The last image failed, remove the error handler and set the src to the missing image url\r\n $(el).off(\"error\").attr(\"src\", Beacon.LazyLoader.missingUrl);\r\n }\r\n else {\r\n //Set the src to the next image in the list\r\n $(el).attr(\"src\", splitUrls[index + 1]);\r\n }\r\n\r\n return null;\r\n },\r\n\r\n swapCarouselImageOnError: function (el) {\r\n var urls = $(el).attr('data-primaryPhotoUrls'); \r\n return Beacon.LazyLoader.swapImagesOnError(urls, el)\r\n },\r\n\r\n // this supports azure-based images for map tips and other one-off instances that dynamically load \r\n swapImageOnFailure: function (el) {\r\n var urls = $(el).attr('photoUrls');\r\n\r\n return Beacon.LazyLoader.swapImagesOnError(urls, el)\r\n }\r\n};","function LoadAsyncContent(data,moduleid) {\r\n \r\n var ac = $('.AsyncContent_' + moduleid); //parent to the rest\r\n\r\n var pu = $('.UserPrompt_' + moduleid);\r\n var pw = $('#PleaseWait_' + moduleid);\r\n var er = $('#ErrorMsg_' + moduleid);\r\n \r\n //show pleasewait\r\n\r\n pu.hide();\r\n er.hide();\r\n pw.show();\r\n\r\n $.ajax({\r\n url: '/Modules/Application/AsyncRenderer.aspx' + '?QPS=' + mapConfig.QPS,\r\n type: 'POST',\r\n data: data,\r\n timeout: 60000,\r\n success: function(data) {\r\n ac.html(data);\r\n },\r\n error: function(req, status, errthrown) {\r\n pw.hide();\r\n er.show();\r\n }\r\n });\r\n\r\n return false;\r\n}\r\n","// Wexford AppIntegration Support\r\n\r\nvar parcelId = \"\";\r\nvar ddlWexfordAction;\r\nvar wexford;\r\n\r\nfunction Wexford_Action()\r\n{\r\n var actionId = ddlWexfordAction.value;\r\n if(actionId==-1) return false;\r\n\r\n //ddlWexfordAction.disabled = true;\r\n\r\n try {\r\n wexford.Show(parcelId,actionId);\r\n }\r\n catch(ex) {\r\n alert(\"Unable to display: \" + ex);\r\n }\r\n \r\n //ddlWexfordAction.disabled = false;\r\n\r\n ddlWexfordAction.options[0].selected=true;\r\n \r\n return false;\r\n\r\n}\r\n\r\nfunction Wexford_SetMenuVisibility(visible)\r\n{\r\n if(visible) {\r\n document.getElementById(\"wexfordActionDiv\").style.display = '';\r\n }\r\n else {\r\n document.getElementById(\"wexfordActionDiv\").style.display = 'none';\r\n }\r\n}\r\n\r\nfunction Wexford_ParseURL()\r\n{\r\n var url = document.location;\r\n\r\n var r = /keyvalue=([^\\&\\s]+)/i; //find key=___\r\n var a = r.exec(url);\r\n \r\n if(a) {\r\n parcelId = a[1];\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n}\r\n\r\n\r\nfunction Wexford_Init()\r\n{ \r\n ddlWexfordAction = document.getElementById(\"ddlWexfordAction\");\r\n \r\n try {\r\n \r\n if(Wexford_ParseURL() == false) {\r\n Wexford_SetMenuVisibility(false);\r\n return false;\r\n }\r\n\r\n\ttry {\r\n wexford = new ActiveXObject(\"ripple.BrowserExtension.ActionInvoker\");\r\n\t} catch(ex) {}\r\n\r\n if(!wexford) {\r\n wexford = new ActiveXObject(\"Wexford.BrowserExtension.ActionInvoker\");\r\n }\r\n \r\n var actionCount = wexford.GetActionCount();\r\n if(actionCount==0) {\r\n Wexford_SetMenuVisibility(false);\r\n return false;\r\n }\r\n \r\n for(i=0; i= 0)) {\r\n document.writeln('\\n');\r\n document.writeln('\\n');\r\n}\r\n\r\n// --- end of hackery\r\n\r\n\r\n// Normal Code:\r\nBeacon.BrowserCompatibility = {\r\n\r\n unsupportedBrowser: false,\r\n legacyBrowser: false,\r\n limitResults: 0,\r\n\r\n Detect: function () {\r\n\r\n var v;\r\n var ua = navigator.userAgent;\r\n\r\n // detect IE and version\r\n if (/MSIE (\\d+\\.\\d+);/.test(ua)) {\r\n\r\n //This is Internet Explorer\r\n v = new Number(RegExp.$1);\r\n\r\n if (v && v < 9) Beacon.BrowserCompatibility.limitResults = 25;\r\n\r\n Beacon.BrowserCompatibility.unsupportedBrowser = (v < 8);\r\n Beacon.BrowserCompatibility.legacyBrowser = (v >= 8 && v < 9);\r\n\r\n var msg = \"\";\r\n\r\n }\r\n\r\n },\r\n\r\n Notify: function () {\r\n var msg = \"\";\r\n if (Beacon.BrowserCompatibility.unsupportedBrowser) {\r\n msg = \"Internet Explorer 6 and 7 are not suitable for viewing this site. Please consider upgrading to a modern browser.\";\r\n }\r\n\r\n if (Beacon.BrowserCompatibility.legacyBrowser) {\r\n msg = \"Internet Explorer 8 is not optimal for viewing this site. Please consider upgrading to a modern browser.\";\r\n }\r\n\r\n if (msg) {\r\n var n = $(\".headerNotifications\");\r\n var n1 = $(\".headerNotification1\");\r\n\r\n n1.html(msg);\r\n n.slideDown();\r\n }\r\n\r\n }\r\n}\r\n\r\n// on page load:\r\n$(function () {\r\n Beacon.BrowserCompatibility.Detect();\r\n Beacon.BrowserCompatibility.Notify();\r\n});\r\n\r\n\r\nfunction nukeSettings() {\r\n\r\n localStorage.clear();\r\n\r\n sessionStorage.clear();\r\n\r\n var cookies = document.cookie.split(\";\");\r\n\r\n for (var i = 0; i < cookies.length; i++) {\r\n var cookie = cookies[i];\r\n var eqPos = cookie.indexOf(\"=\");\r\n var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\r\n document.cookie = name + \"=;expires=Thu, 01 Jan 1970 00:00:00 GMT\";\r\n }\r\n\r\n}","\r\nBeacon.Ping = {\r\n\r\n timerId: null,\r\n interval: 887, // in seconds -- 30 minutes is the lifespan of sessionstate -- refresh it about 1/2 way through\r\n\r\n init: function () {\r\n this.timerId = setInterval(this.onTimer, this.interval * 1000);\r\n },\r\n\r\n onTimer: function () {\r\n // ping - to keep session alive\r\n Beacon.API.Ping();\r\n },\r\n\r\n CLASS_NAME: \"Beacon.Ping\"\r\n};\r\n\r\n","\r\nBeacon.SearchBox = {\r\n\r\n initialize: function () {\r\n\r\n Beacon.SearchBox.initializeGlobalSearchBox();\r\n Beacon.SearchBox.initializeNameSearchBox();\r\n Beacon.SearchBox.initializeAddressSearchBox();\r\n Beacon.SearchBox.initializeStreetNameSearchBox();\r\n Beacon.SearchBox.initializeParcelIdSearchBox();\r\n Beacon.SearchBox.initializeAlternateIdSearchBox();\r\n Beacon.SearchBox.initializeAlternateIdExactMatchSearchBox(); \r\n Beacon.SearchBox.initializeNeighborhoodSearchBox();\r\n Beacon.SearchBox.initializeBookSearchBox();\r\n Beacon.SearchBox.initializePageSearchBox();\r\n Beacon.SearchBox.initializeDBASearchBox();\r\n Beacon.SearchBox.initSearchIntentHandler();\r\n },\r\n\r\n /**\r\n * adds the module header to the labelledby of the elementID inserted.\r\n * it works it way up the DOM until it gets to the section and then works it's way back down to the title.\r\n * @param {string} elementId the id of the element (usually a button) to add the aria-labelledby attribute to.\r\n */\r\n initializeModuleHeaderToLabelTheInput : function (elementId) {\r\n \r\n $(elementId).attr('aria-labelledby', $(elementId).parentsUntil('section').last().parent().find('.title').first().attr('id'));\r\n },\r\n\r\n/**\r\n* adds the module header to the labelledby of the ButtonID inserted.\r\n* it works it way up the DOM until it gets to the section and then works it's way back down to the title.\r\n*adds the fieldset to the entire module that contains the button that needs labeled.\r\n* @param {string} fieldName the id of the element (usually a button) to add the aria-labelledby attribute to.\r\n*/\r\n initializeSearchButtonToFieldsets: function (fieldName) {\r\n \r\n //to function correctly the buttons need to be both lablelled by AND inside of a fieldset!\r\n $(fieldName).parent().each(function (btn_idx, btn) {\r\n $(btn).attr('aria-labelledby', $(btn).parentsUntil('section').last().parent().find('.title').first().attr('id'));\r\n var moduleElement = $(btn).parentsUntil('section').last().parent().find('.module-content');\r\n var item = moduleElement.has('fieldset');\r\n if (item.length == 0) {\r\n moduleChildren = moduleElement.children();\r\n moduleElement.append($('
').append($('')).append(moduleChildren));\r\n }\r\n });\r\n\r\n },\r\n\r\n initializeGlobalSearchBox: function () {\r\n\r\n var ctrl = $(\".tt-upm-global-search\");\r\n\r\n //ctrl.focus(function () { $(\"#topSearchControl\").animate({ width: 150 }, 200); })\r\n // .blur(function () { $(\"#topSearchControl\").animate({ width: 90 }, 200); });\r\n ctrl.keypress(function (event) {\r\n if (event.which === 13) {\r\n \r\n //alert(\"search happens now for: \" + $(this).val());\r\n //This is when the default layer needs to be made active\r\n // console.log(mapConfig);\r\n \r\n event.preventDefault();\r\n }\r\n \r\n \r\n });\r\n\r\n Handlebars.registerHelper('appId', function (object) {\r\n return mapConfig.AppId;\r\n });\r\n\r\n var searchArgs = [{\r\n minLength: 3,\r\n highlight: true,\r\n hint: false\r\n }];\r\n\r\n if (mapConfig.Search.Name) {\r\n searchArgs.push({\r\n name: 'owner-names',\r\n source: Beacon.SearchBox.createBloodhoundAdapter(\"name\", 5, \"OwnerName\", true),\r\n displayKey: 'OwnerName',\r\n templates: {\r\n header: Beacon.Templates.searchbox_Owners_header,\r\n suggestion: Beacon.Templates.searchbox_Owners,\r\n empty: \"none\"\r\n }\r\n });\r\n }\r\n\r\n if (mapConfig.Search.Address) {\r\n searchArgs.push({\r\n name: 'prop-addresses',\r\n //source: this.propAddressSource,\r\n source: Beacon.SearchBox.createBloodhoundAdapter(\"address\", 5, \"Address\", true),\r\n displayKey: 'Address',\r\n templates: {\r\n header: '
Property Addresses
',\r\n suggestion: Beacon.Templates.searchbox_Addresses,\r\n empty: \"none\"\r\n }\r\n });\r\n }\r\n\r\n if (mapConfig.Search.ParcelId) {\r\n searchArgs.push({\r\n name: 'parcel-ids',\r\n source: Beacon.SearchBox.createBloodhoundAdapter(\"parcelid\", 5, \"ParcelID\", false),\r\n displayKey: 'ParcelID',\r\n templates: {\r\n header: '
Parcel Numbers
',\r\n suggestion: Beacon.Templates.searchbox_Parcelids,\r\n empty: \"none\"\r\n }\r\n });\r\n }\r\n\r\n if (mapConfig.Search.AlternateId) {\r\n searchArgs.push({\r\n name: 'alternate-ids',\r\n source: Beacon.SearchBox.createBloodhoundAdapter('globalalternateid', 5, 'AlternateId', false),\r\n display: 'AlternateID', // the plugin will accept either 'display' or 'displayKey', but 'display' is used in documentation\r\n templates: {\r\n header: '
Alternate Parcel Numbers
',\r\n suggestion: Beacon.Templates.searchbox_Alternateids,\r\n empty: \"none\"\r\n }\r\n });\r\n }\r\n\r\n var tt = ctrl.typeahead.apply(ctrl, searchArgs);\r\n\r\n // tweak the css to make it right-justified\r\n $(\".tt-upm-global-search ~ .tt-dropdown-menu\").css({\r\n left: \"auto\",\r\n right: \"0\"\r\n });\r\n\r\n tt.on(\"keydown\", function (e) {\r\n switch (event.key) {\r\n case \"Down\": // IE/Edge specific value\r\n case \"ArrowDown\":\r\n case \"Up\": // IE/Edge specific value\r\n case \"ArrowUp\":\r\n case \"Left\": // IE/Edge specific value\r\n case \"ArrowLeft\":\r\n case \"Right\": // IE/Edge specific value\r\n case \"ArrowRight\":\r\n e.stopPropagation();\r\n break;\r\n }\r\n })\r\n\r\n\r\n tt.on(\"typeahead:cursorchanged\", function (e, suggestion, searchType) {\r\n\r\n ctrl.attr('aria-labeledby', \"Owner Name: \" + suggestion.OwnerName + \" Address:\" + suggestion.Address + \" Parcel ID:\" + suggestion.ParcelID);\r\n\r\n\r\n switch (searchType) {\r\n case \"owner-names\":\r\n ctrl.attr('aria-label', \"Address: \" + suggestion.Address + \" Parcel ID:\" + suggestion.ParcelID);\r\n break;\r\n case \"prop-addresses\":\r\n ctrl.attr('aria-label', \"Owner:\" + suggestion.OwnerName + \" Parcel ID:\" + suggestion.ParcelID);\r\n break;\r\n case \"parcel-ids\":\r\n ctrl.attr('aria-label', \"Owner:\" + suggestion.OwnerName + \" Address:\" + suggestion.Address);\r\n break;\r\n\r\n default:\r\n ctrl.attr('aria-label', \"Owner Name: \" + suggestion.OwnerName + \" Addres:\" + suggestion.Address + \" Parcel ID:\" + suggestion.ParcelID);\r\n\r\n }\r\n\r\n });\r\n // wire up selected item handler - for when a user clicks on one of the suggestions\r\n tt.on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n\r\n ctrl.typeahead('val', '');\r\n\r\n const id = suggestion.SourceId ? suggestion.SourceId + '\\267' + suggestion.ParcelID : suggestion.ParcelID;\r\n\r\n if (mapConfig.IsMapPage) { // If we are on a map page, then just call into the js that sets/zooms to the parcel by parcel id...AL\r\n //before we can do this, we need to make sure the active layer is the parcel layer (usually the default layer)\r\n\r\n if (Beacon.SearchBox.dMapZoom) // New Map\r\n Beacon.SearchBox.dMapZoom(suggestion.ParcelID);\r\n\r\n if (Beacon.MapJS.setDefaultLayerToActive) // Old Map\r\n Beacon.MapJS.setDefaultLayerToActive(function () {\r\n Beacon.MapJS.selectionLayer.zoomAndSelectByKeyValue(suggestion.ParcelID)\r\n });\r\n\r\n }\r\n else { // Otherwise, always target the default report...AL\r\n window.location = mapConfig.DefaultReportUrl.replace(\"{0}\", id);\r\n }\r\n });\r\n tt.on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n var noResultsDiv = $(missingHTMLElement.header() );\r\n noResultsDiv.text(noResultsDiv.text() + \" Has No Results\");\r\n $(\"#noTypeAheadResults\").html(noResultsDiv);\r\n });\r\n\r\n\r\n\r\n },\r\n\r\n initializeNameSearchBox: function () {\r\n // wire up other tt enabled search controls\r\n var sourceId = $(\".tt-upm-name-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n $(\".tt-upm-name-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'owner-names',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"Name\", 10, \"OwnerName\", true, sourceId, archiveTag),\r\n displayKey: 'OwnerName',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Owner Results
\"\r\n }\r\n })\r\n // wire up the on display item handler - for when the box gets displayed!\r\n\r\n\r\n .on(\"typeahead:updatehintcleared\", function (e, suggestion, dataset) {\r\n\r\n $(\".tt-upm-name-results-description\").hide();\r\n\r\n })\r\n\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-name-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n $(\".tt-upm-name-exact-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'owner-names',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"NameExact\", 10, \"OwnerName\", true, sourceId, archiveTag),\r\n displayKey: 'OwnerName',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Owner Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-name-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n\r\n\r\n },\r\n\r\n initializeAddressSearchBox: function () {\r\n var sourceId = $(\".tt-upm-address-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n $(\".tt-upm-address-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'addresses',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"Address\", 10, \"Address\", true, sourceId, archiveTag),\r\n displayKey: 'Address',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Address Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-address-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n\r\n $(\".tt-upm-address-exact-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'addresses',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"AddressExact\", 10, \"Address\", true, sourceId, archiveTag),\r\n displayKey: 'Address',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Address Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-address-exact-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n },\r\n\r\n initializeStreetNameSearchBox: function () {\r\n var sourceId = $(\".tt-upm-streetname-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n\r\n\r\n $(\".tt-upm-streetname-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'streetnames',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"StreetName\", 10, \"StreetName\", true, sourceId, archiveTag),\r\n displayKey: 'StreetName',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Street Name Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-streetname-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n },\r\n\r\n initializeParcelIdSearchBox: function () {\r\n var sourceId = $(\".tt-upm-parcelid-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n\r\n $(\".tt-upm-parcelid-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'parcelids',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"ParcelId\", 10, \"ParcelID\", false, sourceId, archiveTag),\r\n displayKey: 'ParcelID',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No ParcelID Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-parcelid-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n\r\n },\r\n\r\n initializeAlternateIdSearchBox: function () {\r\n var sourceId = $(\".tt-upm-alternateid-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n $(\".tt-upm-alternateid-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'alternateids',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"AlternateId\", 10, \"AlternateId\", true, sourceId, archiveTag),\r\n displayKey: 'AlternateID',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Alternate ID Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-alternateid-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n },\r\n\r\n initializeAlternateIdExactMatchSearchBox: function () {\r\n var sourceId = $(\".tt-upm-alternateid-exactmatch-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n\r\n $(\".tt-upm-alternateid-exactmatch-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'alternateidsexactmatch',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"AlternateIdExactMatch\", 10, \"AlternateIdExactMatch\", true, sourceId, archiveTag),\r\n displayKey: 'AlternateID',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No AlternateID Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-alternateid-exactmatch-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n },\r\n\r\n initializeNeighborhoodSearchBox: function () {\r\n var sourceId = $(\".tt-upm-neighborhood-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n\r\n $(\".tt-upm-neighborhood-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'neighborhoods',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"Neighborhood\", 10, \"Neighborhood\", true, sourceId, archiveTag),\r\n displayKey: 'Neighborhood',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Neighborhood Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-neighborhood-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n },\r\n\r\n initializeBookSearchBox: function () {\r\n var sourceId = $(\".tt-upm-book-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n\r\n $(\".tt-upm-book-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'books',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"Book\", 10, \"Book\", true, sourceId, archiveTag),\r\n displayKey: 'Book',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Book Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-book-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n\r\n },\r\n\r\n initializePageSearchBox: function () {\r\n var sourceId = $(\".tt-upm-page-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n\r\n $(\".tt-upm-page-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'pages',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"Page\", 10, \"Page\", true, sourceId, archiveTag),\r\n displayKey: 'Page',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No Page Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-page-search-btn\")[0].click();\r\n }) \r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n\r\n\r\n },\r\n\r\n initializeDBASearchBox: function () {\r\n var sourceId = $(\".tt-upm-dba-search\").attr('sourceid');\r\n var archiveTag = $(\".tt-upm-name-search\").attr('archiveTag');\r\n\r\n\r\n $(\".tt-upm-dba-search\")\r\n .typeahead({\r\n minLength: 2,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'dbas',\r\n source: Beacon.SearchBox.createBloodhoundAdapter2(\"DBA\", 10, \"DBA\", true, sourceId, archiveTag),\r\n displayKey: 'DBA',\r\n templates: {\r\n header: '',\r\n suggestion: '',\r\n empty: \"
No DBA Results
\"\r\n }\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\".tt-upm-dba-search-btn\")[0].click();\r\n })\r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n },\r\n\r\n // this is for the global search box:\r\n createBloodhoundAdapter: function (mode, maxResults, tokenizerFieldName, useNonword) {\r\n\r\n var tokenizer = useNonword ? Bloodhound.tokenizers.nonword : Bloodhound.tokenizers.whitespace;\r\n\r\n var bh = new Bloodhound({\r\n name: 'bh' + mode,\r\n limit: maxResults,\r\n remote: {\r\n url: \"/api/UpmTypeahead/UpmTypeahead?QPS=\" + mapConfig.QPS + \"&mode=\" + mode + \"&text=%QUERY\",\r\n rateLimitBy: 'throttle', // debounce || throttle\r\n rateLimitWait: 300\r\n },\r\n datumTokenizer: function (d) {\r\n return tokenizer(d[tokenizerFieldName]);\r\n },\r\n queryTokenizer: tokenizer\r\n });\r\n bh.initialize();\r\n return bh.ttAdapter();\r\n },\r\n\r\n // this is for the typeahead dropdowns in upm search\r\n createBloodhoundAdapter2: function (mode, maxResults, tokenizerFieldName, useNonword, sourceId, archiveTag) {\r\n\r\n if (archiveTag == null) {\r\n archiveTag = \"\";\r\n }\r\n\r\n var url = \"/api/UpmTypeahead/\" + mode + \"?QPS=\" + mapConfig.QPS + \"&text=%QUERY&sourceId=\" + sourceId + \"&archiveTag=\" + archiveTag;\r\n var tokenizer = useNonword ? Bloodhound.tokenizers.nonword : Bloodhound.tokenizers.whitespace;\r\n\r\n var bh = new Bloodhound({\r\n name: 'bh' + mode,\r\n limit: maxResults,\r\n remote: {\r\n url: url,\r\n rateLimitBy: 'throttle', // debounce || throttle\r\n rateLimitWait: 300\r\n },\r\n datumTokenizer: function (d) {\r\n return tokenizer(d[tokenizerFieldName]);\r\n },\r\n queryTokenizer: tokenizer\r\n });\r\n bh.initialize();\r\n return bh.ttAdapter();\r\n },\r\n\r\n\r\n initSearchControl: function (prefetch, url, txtElementId, btnElementId, moduleId, cacheThumbprint) {\r\n\r\n $(\"#\" + txtElementId)\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\"#\" + btnElementId)[0].click();\r\n });\r\n\r\n },\r\n\r\n // for GEN1_AutoCompleteSearch module:\r\n\r\n initTypeaheadControl: function (prefetch, url, txtElementId, btnElementId, moduleId, cacheThumbprint) {\r\n\r\n var bhOptions = {\r\n name: 'bloodhound-' + moduleId,\r\n limit: 10,\r\n datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),\r\n queryTokenizer: Bloodhound.tokenizers.whitespace\r\n };\r\n\r\n if (prefetch) {\r\n bhOptions.prefetch = {\r\n url: url,\r\n cacheKey: 'AutocompleteCache-' + moduleId,\r\n ttl: 8 * 60 * 60 * 1000, // 8 hours in ms\r\n thumbprint: cacheThumbprint,\r\n filter: function (list) {\r\n return $.map(list, function (d) { return { 'value': d }; });\r\n }\r\n };\r\n } else {\r\n bhOptions.remote = {\r\n url: url + '&text=%QUERY',\r\n rateLimitBy: 'throttle', // debounce || throttle\r\n rateLimitWait: 300,\r\n filter: function (list) {\r\n return $.map(list, function (d) { return { 'value': d }; });\r\n }\r\n };\r\n }\r\n\r\n var bh = new Bloodhound(bhOptions);\r\n bh.storage = null; // override localstorage caching - until we figure out how to limit/monitor how much gets stored there\r\n bh.initialize();\r\n\r\n\r\n $(\"#\" + txtElementId)\r\n .typeahead({\r\n minLength: 1,\r\n highlight: true,\r\n hint: false\r\n },\r\n {\r\n name: 'typeahead-' + moduleId,\r\n source: bh.ttAdapter(),\r\n displayKey: 'value'\r\n })\r\n .on(\"typeahead:selected\", function (e, suggestion, dataset) {\r\n $(\"#\" + btnElementId)[0].click();\r\n }) \r\n .on(\"typeahead:noresults\", function (e, missingHTMLElement) {\r\n $(\"#noTypeAheadResults\").html(missingHTMLElement.empty());\r\n });\r\n\r\n },\r\n\r\n // this supports azure-based images, since we can't \r\n imageLoadError: function (el) {\r\n return Beacon.LazyLoader.swapImageOnFailure(el);\r\n //el.onerror = null;\r\n //el.src = Beacon.LazyLoader.missingUrl;\r\n //return null;\r\n },\r\n\r\n //initSearchIntentHandler: function () {\r\n\r\n // $(\"a[SearchIntent],button[SearchIntent],input[SearchIntent]\").click(function (el) {\r\n // Beacon.API.SetResults(mapConfig.LayerId, this.getAttribute(\"SearchIntent\"));\r\n // });\r\n\r\n //},\r\n\r\n initSearchIntentHandler: function () {\r\n Beacon.sessionStorage.removeItem(\"SearchIntent\");\r\n $(\"a[SearchIntent],button[SearchIntent],input[SearchIntent]\").click(function (el) {\r\n Beacon.sessionStorage[\"SearchIntent\"] = this.getAttribute(\"SearchIntent\");\r\n });\r\n },\r\n\r\n getSearchIntent: function () {\r\n return Beacon.sessionStorage[\"SearchIntent\"];\r\n },\r\n\r\n CLASS_NAME: 'Beacon.SearchBox'\r\n};\r\n","Beacon.AdvancedDropdown = {\r\n\r\n keyCode: {\r\n RETURN: 13,\r\n SPACE: 32,\r\n PAGEUP: 33,\r\n PAGEDOWN: 34,\r\n END: 35,\r\n HOME: 36,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n SLASH: 191,\r\n ESCAPE: 27,\r\n TAB: 9\r\n },\r\n\r\n configureAdvancedDropdown: function (elementID, defaultValueID, onSelect) {\r\n var self = this;\r\n var mouseStateHolder = {\r\n mouseX: null,\r\n mouseY: null\r\n }\r\n\r\n var button = $('#' + elementID + ' .advanced-dropdown-button');\r\n var menu = $('#' + elementID + ' .advanced-dropdown-content');\r\n\r\n var openMenu = function () {\r\n //don't open the menu if it's already open\r\n if (!$(menu).hasClass('show')) {\r\n //clear search results\r\n $('#' + elementID).find('.no-match').removeClass('no-match');\r\n\r\n $(button).attr('aria-expanded', true);\r\n $(menu).addClass('show');\r\n }\r\n };\r\n var closeMenu = function () {\r\n var wasMenuOpen = $(menu).hasClass('show');\r\n\r\n if ($(button).attr('aria-activedescendant')) {\r\n //get the currently selected option by the ID of the aria active descendant\r\n var selectedOption = $('#' + $(button).attr('aria-activedescendant'));\r\n\r\n onSelect($(selectedOption));\r\n $(button).val($(selectedOption).text());\r\n //set this so that the options won't all be hidden next time the menu is opened\r\n $(button).data('previousSearchValue', $(button).val());\r\n }\r\n\r\n $(button).attr('aria-expanded', false);\r\n $(menu).removeClass('show');\r\n\r\n return wasMenuOpen;\r\n };\r\n var toggleMenu = function () {\r\n if ($(menu).hasClass('show')) {\r\n closeMenu();\r\n } else {\r\n openMenu();\r\n }\r\n };\r\n\r\n var getNextOption = function (option) {\r\n var availableOptions = $('#' + elementID).find(' .dropdown-option:not(.no-match,.unselected-state)');\r\n var selectedIdx = availableOptions.index($(option));\r\n if (selectedIdx < (availableOptions.length - 1)) {\r\n return $(availableOptions[selectedIdx + 1]);\r\n }\r\n return undefined;\r\n };\r\n var getPreviousOption = function (option) {\r\n var availableOptions = $('#' + elementID).find(' .dropdown-option:not(.no-match,.unselected-state)');\r\n var selectedIdx = availableOptions.index($(option));\r\n if (selectedIdx > 0) {\r\n return $(availableOptions[selectedIdx - 1]);\r\n }\r\n return undefined;\r\n }\r\n var getFirstOption = function () {\r\n return $(menu).find('.dropdown-option:not(.no-match,.unselected-state)').first();\r\n };\r\n var getLastOption = function () {\r\n return $(menu).find('.dropdown-option:not(.no-match,.unselected-state)').last();\r\n };\r\n\r\n var changeSelection = function (previousSelection, nextSelection) {\r\n if ($(previousSelection).length > 0) {\r\n $(previousSelection).removeClass('dropdown-selected');\r\n $(previousSelection).removeAttr('aria-selected');\r\n }\r\n\r\n $(button).attr('aria-activedescendant', $(nextSelection).attr('id'));\r\n\r\n $(nextSelection).addClass('dropdown-selected');\r\n $(nextSelection).attr('aria-selected', true);\r\n };\r\n\r\n $('#' + elementID + ' .advanced-dropdown-button').focusin(function (event) {\r\n openMenu();\r\n });\r\n\r\n $('#' + elementID + ' .advanced-dropdown-button').mousedown(function (event) {\r\n toggleMenu();\r\n });\r\n\r\n $('#' + elementID + ' .advanced-dropdown-button').keydown(function (event) {\r\n switch (event.keyCode) {\r\n case self.keyCode.UP:\r\n //select the previous option in order, or the last option if no\r\n //option is currently selected\r\n var currentSelection;\r\n var nextSelection;\r\n\r\n if ($(this).attr('aria-activedescendant')) { //is anything currently selected?\r\n currentSelection = $('#' + $(this).attr('aria-activedescendant'));\r\n nextSelection = getPreviousOption(currentSelection);\r\n } else {\r\n nextSelection = getLastOption();\r\n }\r\n\r\n changeSelection(currentSelection, nextSelection);\r\n\r\n $(menu).prop('scrollTop', $(nextSelection).prop('offsetTop') - 250);\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n case self.keyCode.DOWN:\r\n //select the next option in order, or the first option if no option\r\n //is currently selected\r\n var currentSelection;\r\n var nextSelection;\r\n\r\n if ($(this).attr('aria-activedescendant')) { //is anything currently selected?\r\n currentSelection = $('#' + $(this).attr('aria-activedescendant'));\r\n nextSelection = getNextOption(currentSelection);\r\n } else {\r\n nextSelection = getFirstOption();\r\n }\r\n\r\n changeSelection(currentSelection, nextSelection);\r\n\r\n $(menu).prop('scrollTop', $(nextSelection).prop('offsetTop') - 250);\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n case self.keyCode.HOME:\r\n case self.keyCode.PAGEUP:\r\n //select the first option in the list\r\n var currentSelection;\r\n var nextSelection;\r\n\r\n if ($(this).attr('aria-activedescendant')) {\r\n currentSelection = $('#' + $(this).attr('aria-activedescendant'));\r\n }\r\n nextSelection = getFirstOption();\r\n\r\n changeSelection(currentSelection, nextSelection);\r\n\r\n $(menu).prop('scrollTop', $(nextSelection).prop('offsetTop') - 250);\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n case self.keyCode.END:\r\n case self.keyCode.PAGEDOWN:\r\n //select the last option in the list\r\n var currentSelection;\r\n var nextSelection;\r\n\r\n if ($(this).attr('aria-activedescendant')) {\r\n currentSelection = $('#' + $(this).attr('aria-activedescendant'));\r\n }\r\n nextSelection = getLastOption();\r\n\r\n changeSelection(currentSelection, nextSelection);\r\n\r\n $(menu).prop('scrollTop', $(nextSelection).prop('offsetTop') - 250);\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n case self.keyCode.RETURN:\r\n toggleMenu();\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n case self.keyCode.ESCAPE:\r\n case self.keyCode.TAB:\r\n if (closeMenu()) {\r\n //if the menu was open, prevent the event from bubbling.\r\n //if the menu wasn't open, don't prevent the event from bubbling.\r\n //this means that if the key pressed was a tab, then the browser\r\n //won't immediately move focus to the next element before onSelect()\r\n //has a chance to do whatever it does\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n break;\r\n }\r\n });\r\n\r\n $('#' + elementID + ' .advanced-dropdown-content').mouseover(function (event) {\r\n //select the option that the user is hovering over, but don't close the menu\r\n if ($(event.target).hasClass('dropdown-option') && (mouseStateHolder.mouseX !== event.clientX || mouseStateHolder.mouseY !== event.clientY)) {\r\n var currentSelection;\r\n var nextSelection = $(event.target);\r\n\r\n if ($(button).attr('aria-activedescendant')) {\r\n currentSelection = $('#' + $(button).attr('aria-activedescendant'));\r\n }\r\n\r\n changeSelection(currentSelection, nextSelection);\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n //Track the position of the mouse. This is done in case the mouse happens to be in\r\n //the menu while the user is scrolling or navigating the menu with the arrow keys.\r\n //An element should only be selected if the user actually moves the mouse\r\n mouseStateHolder.mouseX = event.clientX;\r\n mouseStateHolder.mouseY = event.clientY;\r\n });\r\n\r\n $('#' + elementID + ' .advanced-dropdown-content').mousedown(function (event) {\r\n //select the option that the user clicked, and also close the menu\r\n if ($(event.target).hasClass('dropdown-option')) {\r\n var currentSelection;\r\n var nextSelection = $(event.target);\r\n\r\n if ($(button).attr('aria-activedescendant')) {\r\n currentSelection = $('#' + $(button).attr('aria-activedescendant'));\r\n }\r\n\r\n changeSelection(currentSelection, nextSelection);\r\n\r\n closeMenu();\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n });\r\n\r\n $('#' + elementID + ' .advanced-dropdown-button').focusout(function (event) {\r\n if ($(menu).hasClass('show')) {\r\n closeMenu();\r\n }\r\n });\r\n\r\n //configure the search box to search\r\n $('#' + elementID + ' .advanced-dropdown-button').keyup(function (event) {\r\n switch (event.keyCode) {\r\n case self.keyCode.RETURN:\r\n case self.keyCode.ESCAPE:\r\n case self.keyCode.TAB:\r\n return;\r\n }\r\n\r\n //if the user is editing the box, open the menu\r\n openMenu();\r\n\r\n //only do filtering of the user has actually changed the text in the box\r\n if ($(this).data('previousSearchValue') !== $(this).val()) {\r\n var searchText = $(this).val().toUpperCase().trim();\r\n $('#' + elementID + ' .dropdown-option:not(.all-option)').each(function () {\r\n if (searchText === '' || $(this).text().toUpperCase().indexOf(searchText) > -1) {\r\n $(this).removeClass('no-match');\r\n } else {\r\n $(this).addClass('no-match');\r\n }\r\n });\r\n $('#' + elementID + ' .state-group').each(function () {\r\n if ($(this).find('.dropdown-option:not(.no-match)').length < 1) {\r\n $(this).addClass('no-match');\r\n } else {\r\n $(this).removeClass('no-match');\r\n }\r\n });\r\n //next time the user types, we can compare against this value to determine\r\n //if the user has actually typed anything\r\n $(this).data('previousSearchValue', $(this).val());\r\n }\r\n });\r\n\r\n $('#' + elementID + ' > .glyphicon-chevron-down').mousedown(function (event) {\r\n if (!$(menu).hasClass('show')) {\r\n $('#' + elementID + ' .advanced-dropdown-button').focus();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n });\r\n\r\n if (defaultValueID && $('#' + defaultValueID).length > 0) {\r\n changeSelection($(), $('#' + defaultValueID));\r\n closeMenu();\r\n }\r\n },\r\n\r\n configureMultiSelect: function (elementID, onSelect, onDelete) {\r\n if (!onDelete) {\r\n onDelete = (deletedItem) => null; // just a function that does nothing\r\n }\r\n\r\n let destination = $('#' + elementID).find('.advanced-multiselect-destination');\r\n let onMultiSelect = function (selectedElement) {\r\n let newSelectionSpan = $('');\r\n\r\n let newSelection = $('' + $(selectedElement).text() + '');\r\n $(newSelectionSpan).append(newSelection);\r\n\r\n let deleteButton = $('X');\r\n $(deleteButton).on('click', function () {\r\n $(newSelectionSpan).remove();\r\n onDelete(newSelection);\r\n });\r\n $(newSelectionSpan).append($(deleteButton));\r\n\r\n $(destination).append($(newSelectionSpan));\r\n\r\n onSelect(selectedElement);\r\n };\r\n this.configureAdvancedDropdown(elementID, null, onMultiSelect);\r\n },\r\n\r\n CLASS_NAME: 'Beacon.AdvancedDropdown'\r\n};","Beacon.Tabs = {\r\n\r\n _templateHtmlPre: null,\r\n _templateHtmlPost: null,\r\n _templateTarget: null,\r\n\r\n _wizards: [], // formerly: the stearns user signup pages - special treatment where we only show one tab\r\n\r\n _userLoggedIn: false,\r\n\r\n hasPageType: function (pagetype) {\r\n\r\n for (var i = 0, len = mapConfig.Tabs.length; i < len; i++) {\r\n var tab = mapConfig.Tabs[i];\r\n\r\n if (tab.PageTypeId == pagetype) { //Reports and Forms\r\n return true;\r\n }\r\n\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n getReportLinks: function (key, pagetype) {\r\n\r\n\r\n if (!pagetype) pagetype = 4;\r\n\r\n var reports = [];\r\n for (var i = 0, len = mapConfig.Tabs.length; i < len; i++) {\r\n var tab = mapConfig.Tabs[i];\r\n\r\n if (tab.PageTypeId == pagetype) { //Reports and Forms\r\n reports.push({\r\n name: tab.Name.replace(/.+\\\\/g, ''),\r\n //url: tab.Url + '&KeyValue=' + escape(key)\r\n url: this.getUrl(mapConfig.LayerId, tab.PageTypeId, tab.PageId, key)\r\n });\r\n }\r\n }\r\n return reports;\r\n\r\n\r\n\r\n\r\n },\r\n\r\n getReportLinksHtml: function (key, pagetype, listPrefix, listSeparator, extraParams) {\r\n\r\n\r\n if (!listPrefix) listPrefix = \"View: \";\r\n if (!listSeparator) listSeparator = \" | \";\r\n if (!pagetype) pagetype = 4;\r\n if (!extraParams) extraParams = '';\r\n\r\n var reports = Beacon.Tabs.getReportLinks(key, pagetype);\r\n if (reports.length > 0) {\r\n var reportLinks = $.map(reports, function (d) {\r\n if (d.name) {\r\n return '' + d.name + '';\r\n } else {\r\n return null;\r\n }\r\n });\r\n // fabricate a gMaps link\r\n if (mapConfig.Permissions.Streetview) {\r\n reportLinks.push('Google Maps opens in a new tab');\r\n }\r\n return \"
\" + (listPrefix + reportLinks.join(listSeparator)) + \"
\";\r\n } else {\r\n return \"\";\r\n }\r\n\r\n\r\n },\r\n\r\n generateTabStrip: function (bItemSelected, keyValue) {\r\n if (!Handlebars.helpers.equals) {\r\n Handlebars.registerHelper('equals', function (operand1, operand2) {\r\n return operand2 === operand1;\r\n });\r\n }\r\n\r\n if (!Handlebars.helpers.isGroup) {\r\n Handlebars.registerHelper('isGroup', function (pages) {\r\n return pages.length > 1;\r\n });\r\n }\r\n\r\n //reinitialize the model for the tab strip\r\n this.tabStripModel = {\r\n tabs: {},\r\n activePage: null,\r\n loginUrl: Beacon.Tabs._userLoggedIn ? \"/Account\" : \"/Account/Login?ReturnUrl=\" + encodeURIComponent(window.location.href),\r\n loginText: Beacon.Tabs._userLoggedIn ? \"My Account\" : \"Login\"\r\n }\r\n\r\n\r\n var isThisLayerAWizard = _.contains(this._wizards, mapConfig.LayerId);\r\n if (keyValue === '') { keyValue = null; }\r\n var hasKey = (keyValue != null);\r\n var activePageId = mapConfig.PageId;\r\n var activePageTypeId = mapConfig.PageTypeId;\r\n var pages = mapConfig.Tabs;\r\n\r\n // for (page of pages) { I'd be nice to use modern JavaScript, but IE is still a thing I guess...\r\n for (var i = 0; i < pages.length; i++) {\r\n var page = pages[i];\r\n\r\n //get some information about the tab\r\n var isMapTab = (page.PageTypeId == activePageTypeId && page.PageTypeId == 1); //handles cases where pageid is zero for magically placed map tabs\r\n var isActivePage = (page.PageId == activePageId && page.PageTypeId == activePageTypeId) || isMapTab;\r\n var isTabEnabled = ((!page.nr || bItemSelected) && (!page.nk || hasKey));\r\n\r\n //only pages that will actually be present in the tab strip will be in this model\r\n if (!isTabEnabled) {\r\n continue;\r\n } else if (!page.Name) {\r\n continue;\r\n } else if (isActivePage) {\r\n this.tabStripModel.activeTab = page\r\n } else if (isThisLayerAWizard) {\r\n continue;\r\n }\r\n\r\n //get the tab that this page will live in\r\n var tabName = page.Name.indexOf('\\\\') > -1 ? page.Name.match(/.*(?=\\\\)/g)[0] : page.Name;\r\n if (!this.tabStripModel.tabs[tabName]) {\r\n this.tabStripModel.tabs[tabName] = {\r\n groupName: tabName,\r\n groupID: tabName.replace(/^[0-9]*|[^a-zA-Z0-9]/g, '').toLowerCase() + i,\r\n pages: [],\r\n hasActivePage: false\r\n };\r\n this.tabStripModel.numTabs++;\r\n \r\n }\r\n var tab = this.tabStripModel.tabs[tabName];\r\n\r\n //determine whether or not this tab contains the active page\r\n tab.hasActivePage = isActivePage || tab.hasActivePage;\r\n\r\n tab.pages.push({\r\n name: !(page.Name.indexOf('\\\\') > -1) ? page.Name : page.Name.match(/\\\\.*/g)[0].substring(1),\r\n pageType: page.PageTypeId,\r\n url: (page.NavigateUrl || this.getUrl(mapConfig.LayerId, page.PageTypeId, page.PageId, keyValue)),\r\n locked: !page.p,\r\n isActive: isActivePage,\r\n moreTabElementID: page.Name.replace(/^[0-9]*|[^a-zA-Z0-9]/g, '').toLowerCase() + 'moretab' + i\r\n });\r\n }\r\n\r\n var tabContent = $(\"#tabRow .tab-template-area\");\r\n tabContent.html(Beacon.Templates.tabs(this.tabStripModel));\r\n\r\n\r\n $(\"a[role=tab],a[role=button]\", $(\"#tabRow\")).keydown(function (e) {\r\n\r\n var tabEls = $(\"a[role=tab]:visible,a[role=button]:visible\", $(\"#tabRow\"));\r\n var selectedIndex = tabEls.index(e.target);\r\n\r\n switch (e.keyCode) {\r\n case Beacon.WCAG.keyCode.SPACE: //space\r\n e.target.click();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n case Beacon.WCAG.keyCode.LEFT: //left arrow\r\n if(selectedIndex > 0) selectedIndex -= 1;\r\n tabEls[selectedIndex].focus();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n case Beacon.WCAG.keyCode.RIGHT: //right arrow\r\n if (selectedIndex < (tabEls.length - 1)) selectedIndex += 1;\r\n tabEls[selectedIndex].focus();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if (mapConfig.PageTypeId == 1) {\r\n this.loadQuickZoomMenu(mapConfig.LayerId);\r\n }\r\n\r\n this.onResize();\r\n },\r\n\r\n onResize: function () {\r\n if (this.tabStripModel && this.tabStripModel.tabs) {\r\n var maxWidth;\r\n if ($('#tabAffix .container').length > 0) {\r\n //the container is the standard for tab strip width\r\n maxWidth = $('#tabAffix .container').width();\r\n } else {\r\n //otherwise go wor the width of the window\r\n maxWidth = $('#tabAffix').width();\r\n }\r\n //be sure to subtract out padding, if any\r\n maxWidth -= ($('#tabRow').outerWidth() - $('#tabRow').width()) + 1;\r\n var stripwidth = $('#tabMenuMore').width();\r\n //add up the widths of all the other stuff that is on the same bar\r\n $('#tabAffix .beacon-navbar-nav:not(.tab-template-area)').each(function () {\r\n stripwidth += $(this).width();\r\n });\r\n var stripFull = false;\r\n for (var tab in this.tabStripModel.tabs) {\r\n tab = this.tabStripModel.tabs[tab];\r\n\r\n stripFull = stripFull || (stripwidth + $('#' + tab.groupID).width()) > maxWidth;\r\n\r\n if (stripFull) {\r\n //if there's no more room in the tab strip, hide the remaining tabs and ensure\r\n //that all the pages contained in the tab are accessible in the 'more' tab\r\n $('#' + tab.groupID).addClass('tab-overflow');\r\n //for (let page of tab.pages) { //Alas, no modern JavaScript for us...\r\n for (var j = 0; j < tab.pages.length; j++) {\r\n var page = tab.pages[j];\r\n $('#' + page.moreTabElementID).removeClass('tab-underflow');\r\n }\r\n } else {\r\n //if there's still room in the tab strip, show this tab, and ensure that\r\n //the corresponding links are not visible in the 'more' tab\r\n $('#' + tab.groupID).removeClass('tab-overflow');\r\n stripwidth += $('#' + tab.groupID).width();\r\n for (var j = 0; j < tab.pages.length; j++) {\r\n var page = tab.pages[j];\r\n $('#' + page.moreTabElementID).addClass('tab-underflow');\r\n }\r\n }\r\n }\r\n }\r\n\r\n var someItemsHidden = $(\".tab-item-bar:hidden:not(#tabQuickZoomDropdown)\").length > 0;\r\n var desktopSize = $(\"#tabAffix\").width() >= Beacon.Variables.mediumLayoutWidth;\r\n //var smallSize = $(\"#tabRow\").width() >= Beacon.Variables.smallLayoutWidth;\r\n\r\n if (someItemsHidden || !desktopSize) {\r\n $(\"#tabMenuMore\").show();\r\n } else {\r\n $(\"#tabMenuMore\").hide();\r\n }\r\n\r\n // set max height for zoom dropdown\r\n if (window.mapConfig && (mapConfig.PageTypeId == 1)) {\r\n var mapViewHeight = $(\"#olMap\").height();\r\n $(\"#tabQuickzoomList\").css({\r\n \"max-height\": mapViewHeight - 32,\r\n \"overflow-y\": \"auto\"\r\n });\r\n }\r\n }, \r\n\r\n initialize_generic: function() {\r\n var self = this;\r\n $(window).bind(\"resize\", function () {\r\n self.onResize();\r\n });\r\n self.onResize();\r\n\r\n $(\"a[role=tab],a[role=button]\", $(\"#tabRow\")).keydown(function (e) {\r\n\r\n var tabEls = $(\"a[role=tab]:visible,a[role=button]:visible\", $(\"#tabRow\"));\r\n var selectedIndex = tabEls.index(e.target);\r\n\r\n switch (e.keyCode) {\r\n case Beacon.WCAG.keyCode.SPACE: //space\r\n e.target.click();\r\n e.preventDefault();\r\n break;\r\n case Beacon.WCAG.keyCode.LEFT: //left arrow\r\n if (selectedIndex > 0) selectedIndex -= 1;\r\n tabEls[selectedIndex].focus();\r\n break;\r\n case Beacon.WCAG.keyCode.RIGHT: //right arrow\r\n if (selectedIndex < (tabEls.length - 1)) selectedIndex += 1;\r\n tabEls[selectedIndex].focus();\r\n break;\r\n }\r\n });\r\n\r\n },\r\n\r\n initialize: function (userLoggedIn) {\r\n\r\n //Beacon.VersionSwitcher.AttachToButton();\r\n\r\n Beacon.Tabs._userLoggedIn = userLoggedIn;\r\n\r\n Beacon.Tabs.generateTabStrip(mapConfig.ResultCount, mapConfig.KeyValue);\r\n\r\n var self = this;\r\n $(window).bind(\"resize\", function () {\r\n self.onResize();\r\n });\r\n self.onResize();\r\n\r\n\r\n // map vs non-map layer menu display:\r\n if (mapConfig.PageTypeId != 1) {\r\n this.loadSimpleLayerList();\r\n\r\n } else {\r\n // TOC/Layer list support:\r\n $(\"#tabRow .ddl-layer-list\").click(this.toggleLayersMenu);\r\n\r\n if (!Beacon.Variables.isDesktopViewport()) {\r\n // queue this to happen a bit later - .map-wrap doesn't exist yet\r\n setTimeout(function () {\r\n $('.map-wrap').addClass('hide-map-pane-layers');\r\n }, 0);\r\n $('#tabRow .ddl-layer-list a[aria-expanded]').attr('aria-expanded', 'false');\r\n }\r\n else {\r\n $('#tabRow .ddl-layer-list a[aria-expanded]').attr('aria-expanded', 'true');\r\n }\r\n\r\n $(\"#tabRow .ddl-layer-list\").show();\r\n }\r\n\r\n },\r\n\r\n toggleLayersMenu: function (e) {\r\n // contect: click event of the dropdown menu as well as from the (x) button in the toc\r\n\r\n if ($('.map-wrap').hasClass('hide-map-pane-layers')) {\r\n $('.map-wrap').removeClass('hide-map-pane-layers');\r\n $('#tabRow .ddl-layer-list a[aria-expanded]').attr('aria-expanded', 'true');\r\n } else {\r\n $('.map-wrap').addClass('hide-map-pane-layers');\r\n $('#tabRow .ddl-layer-list a[aria-expanded]').attr('aria-expanded', 'false');\r\n }\r\n\r\n if (Beacon.MapJS.map?.updateSize) {\r\n Beacon.MapJS.map.updateSize();\r\n } if (Beacon.MapJS.forceTileCacheRedraw) {\r\n Beacon.MapJS.forceTileCacheRedraw();\r\n }\r\n },\r\n\r\n hideLayersMenu: function(e) {\r\n $('.map-wrap').addClass('hide-map-pane-layers');\r\n if (Beacon.MapJS.map?.updateSize) {\r\n Beacon.MapJS.map.updateSize();\r\n } if (Beacon.MapJS.forceTileCacheRedraw) {\r\n Beacon.MapJS.forceTileCacheRedraw();\r\n }\r\n },\r\n\r\n getUrl: function (layerId, pageTypeId, pageId, key, specialPage) {\r\n\r\n //derive spcial page url or generate using current url's page\r\n var page;\r\n if (specialPage) {\r\n page = '/' + specialPage;\r\n } else {\r\n page = window.location.pathname;\r\n }\r\n\r\n var a = [\r\n page,\r\n '?AppID=',\r\n mapConfig.AppId,\r\n '&LayerID=',\r\n layerId\r\n ];\r\n\r\n if (pageTypeId) {\r\n a.push(\"&PageTypeID=\");\r\n a.push(pageTypeId);\r\n }\r\n\r\n if (pageId) {\r\n a.push(\"&PageID=\");\r\n a.push(pageId);\r\n }\r\n\r\n\r\n if (key && (key != '')) {\r\n a.push('&KeyValue=');\r\n //a.push(escape(key));\r\n a.push(encodeURIComponent(key)); // Should be safe to use encodeURIComponent as we are only encoding the key (and we need a thorough encoding here)...AL\r\n }\r\n\r\n return a.join('');\r\n\r\n },\r\n\r\n loadQuickZoomMenu: function (layerId) {\r\n\r\n //$(\"#tabQuickzoomList\").html(\"
  • Loading data...
  • \");\r\n $(\"#tabQuickZoomDropdown\").hide();\r\n\r\n Beacon.QuickZoomService.requestQuickZoomData(layerId).then(function (id, data) {\r\n\r\n if (data && data.length > 0) {\r\n\r\n var t = Beacon.Templates.quickzoom;\r\n $(\"#tabQuickzoomList\").html(t({ QZ: data }));\r\n $(\"#tabQuickZoomDropdown\").show();\r\n\r\n // wire up events\r\n $(\"#tabQuickzoomList\").click(function (e) {\r\n var kv = e.target.getAttribute(\"keyvalue\");\r\n Beacon.MapJS.selectionLayer.zoomAndSelectByKeyValue(kv);\r\n });\r\n\r\n }\r\n });\r\n\r\n },\r\n\r\n\r\n loadSimpleLayerList: function () { // layer list for non-map pages \r\n\r\n var self = this;\r\n\r\n // build view model:\r\n\r\n var lyrs = [];\r\n _.forIn(mapConfig.LayerView, function (lyr) {\r\n // top level layers & groups\r\n if (lyr.GroupName) {\r\n // group layer:\r\n var qSubLyrs = $.map(lyr.Layers, function (slyr) {\r\n if (slyr.Query) {\r\n return {\r\n LayerName: slyr.LayerName,\r\n ActiveLayer: slyr.LayerId === mapConfig.LayerId,\r\n LayerChangeUrl: self.getUrl(slyr.LayerId)\r\n };\r\n } else {\r\n return null;\r\n }\r\n });\r\n if (qSubLyrs.length > 0) { //dont add a group if there are no sub layers visible\r\n // lyr.Layers = qSubLyrs;\r\n lyrs.push({ // create a new group object, because we mess with the layers list:\r\n GroupName: lyr.GroupName,\r\n Layers: qSubLyrs\r\n });\r\n }\r\n } else {\r\n // top level layer\r\n if (lyr.Query) {\r\n lyrs.push({\r\n LayerName: lyr.LayerName,\r\n ActiveLayer: lyr.LayerId === mapConfig.LayerId,\r\n LayerChangeUrl: self.getUrl(lyr.LayerId)\r\n });\r\n }\r\n }\r\n });\r\n\r\n\r\n // render the toc\r\n $(\"#ddlSimpleLayerList\").html(Beacon.Templates.simpleLayerList({\r\n Layers: lyrs,\r\n Links: mapConfig.Links\r\n }));\r\n\r\n $(\".simple-layer-dropdown-li\").on(\"show.bs.dropdown\", function () {\r\n $(\"#ddlSimpleLayerList\").css(\"max-height\", $(window).height() - 140);\r\n });\r\n\r\n $(\".simple-layer-dropdown-li\").show();\r\n },\r\n\r\n\r\n\r\n CLASS_NAME: \"Beacon.Tabs\"\r\n\r\n};\r\n","\r\nBeacon.ModuleHeader = {\r\n\r\n minusIcon: 'icon-minus-squared-alt',\r\n plusIcon: 'icon-plus-squared-alt',\r\n\r\n Initialize: function () {\r\n\r\n this.wireUpClickHandler();\r\n this.processInitialCookie();\r\n\r\n },\r\n\r\n wireUpClickHandler: function () {\r\n\r\n //was: $(\".toggle-collapse, .toggle-collapse ~ .title\").click(this.onClick); \r\n //todo: handle non-module headers\r\n\r\n $(\".toggle-collapse\").click(this.onClick); \r\n\r\n },\r\n\r\n onClick: function() {\r\n var btn = $(this);\r\n var header = btn.parent(\"header.module-header\");\r\n var content = header.next(\".module-content, .collapse-content\");\r\n var moduleId = header.attr(\"MODULEID\");\r\n\r\n var knob = $(\"span.toggle-collapse-icon\", header);\r\n var slipperyKnob=btn.find(\">:first-child\").hasClass('invisible');\r\n \r\n if (moduleId) {\r\n\r\n var hiddenModuleIds = Beacon.ModuleHeader.getHiddenModulesFromCookie();\r\n var visibleModuleIds = Beacon.ModuleHeader.getVisibleModulesFromCookie();\r\n var defaultVisibility = header.attr(\"DEFAULTVISIBILITY\");\r\n\r\n var moduleIsPreviouslyHidden = $.inArray(moduleId, hiddenModuleIds) > -1;\r\n var moduleIsPreviouslyVisible = $.inArray(moduleId, visibleModuleIds) > -1;\r\n\r\n\r\n if (!moduleIsPreviouslyHidden && !moduleIsPreviouslyVisible) {\r\n // We are here if there are no corresponding cookies, so populate list based off of default visiblity...AL\r\n if (defaultVisibility === \"True\") {\r\n visibleModuleIds.push(moduleId);\r\n }\r\n else {\r\n hiddenModuleIds.push(moduleId);\r\n }\r\n }\r\n\r\n\r\n\r\n if ($.inArray(moduleId, hiddenModuleIds) === -1) {\r\n // not found - so its visible, now hide it //if the knob isn't turned off\r\n if (!slipperyKnob) {\r\n content.slideUp();\r\n header.addClass(\"NoPrint\");\r\n knob.removeClass(Beacon.ModuleHeader.minusIcon).addClass(Beacon.ModuleHeader.plusIcon);\r\n btn.attr('aria-expanded', 'false');\r\n hiddenModuleIds.push(moduleId);\r\n visibleModuleIds = $.grep(visibleModuleIds, function (item, index) { return item !== moduleId });\r\n }\r\n } else {\r\n // found - so its hidden, now show it\r\n //console.info(\"showing \" + moduleId);\r\n content.slideDown();\r\n header.removeClass(\"NoPrint\");\r\n knob.removeClass(Beacon.ModuleHeader.plusIcon).addClass(Beacon.ModuleHeader.minusIcon);\r\n btn.attr('aria-expanded', 'true');\r\n visibleModuleIds.push(moduleId);\r\n hiddenModuleIds = $.grep(hiddenModuleIds, function (item, index) { return item !== moduleId });\r\n }\r\n Beacon.ModuleHeader.saveHiddenModulesToCookie(hiddenModuleIds);\r\n Beacon.ModuleHeader.saveVisibleModulesToCookie(visibleModuleIds);\r\n\r\n } else {\r\n // generic collapsable item\r\n if (content.is(\":visible\")) {\r\n content.slideUp();\r\n btn.attr('aria-expanded', 'false');\r\n knob.removeClass(Beacon.ModuleHeader.minusIcon).addClass(Beacon.ModuleHeader.plusIcon);\r\n //todo\r\n } else {\r\n content.slideDown();\r\n btn.attr('aria-expanded', 'true');\r\n knob.removeClass(Beacon.ModuleHeader.plusIcon).addClass(Beacon.ModuleHeader.minusIcon);\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n processInitialCookie: function () {\r\n\r\n var moduleIds = Beacon.ModuleHeader.getHiddenModulesFromCookie();\r\n $(moduleIds).each(function () {\r\n var moduleId = this;\r\n $(\"[MODULEID=\" + moduleId + \"] .toggle-collapse-icon\")\r\n .removeClass(Beacon.ModuleHeader.minusIcon)\r\n .addClass(Beacon.ModuleHeader.plusIcon);\r\n\r\n $(\"[MODULEID=\" + moduleId + \"].module-header\")\r\n .addClass(\"NoPrint\");\r\n\r\n $(\"[MODULEID = \" + moduleId + \"] .toggle-collapse\")\r\n .attr('aria-expanded', 'false');\r\n });\r\n\r\n\r\n var visibleModuleIds = Beacon.ModuleHeader.getVisibleModulesFromCookie();\r\n $(visibleModuleIds).each(function () {\r\n var moduleId = this;\r\n $(\"[MODULEID=\" + moduleId + \"] .toggle-collapse-icon\")\r\n .removeClass(Beacon.ModuleHeader.plusIcon)\r\n .addClass(Beacon.ModuleHeader.minusIcon);\r\n\r\n $(\"[MODULEID=\" + moduleId + \"].module-header\")\r\n .addClass(\"NoPrint\");\r\n\r\n $(\"[MODULEID = \" + moduleId + \"] .toggle-collapse\")\r\n .attr('aria-expanded', 'true');\r\n });\r\n\r\n },\r\n\r\n getHiddenModulesFromCookie: function () {\r\n var moduleList = $.cookie(\"MODULES\" + mapConfig.AppId);\r\n if (moduleList) {\r\n return moduleList.split(\"|\");\r\n } else {\r\n return [];\r\n }\r\n },\r\n\r\n saveHiddenModulesToCookie: function (moduleList) {\r\n\r\n if (moduleList) {\r\n $.cookie(\"MODULES\" + mapConfig.AppId, moduleList.join(\"|\"), { expires: 60 });\r\n } else {\r\n $.cookie(\"MODULES\" + mapConfig.AppId, null);\r\n }\r\n },\r\n\r\n getVisibleModulesFromCookie: function () {\r\n var moduleList = $.cookie(\"MODULESVISIBILE\" + mapConfig.AppId);\r\n if (moduleList) {\r\n return moduleList.split(\"|\");\r\n } else {\r\n return [];\r\n }\r\n },\r\n\r\n saveVisibleModulesToCookie: function (moduleList) {\r\n\r\n if (moduleList) {\r\n $.cookie(\"MODULESVISIBILE\" + mapConfig.AppId, moduleList.join(\"|\"), { expires: 60 });\r\n } else {\r\n $.cookie(\"MODULESVISIBILE\" + mapConfig.AppId, null);\r\n }\r\n },\r\n\r\n \r\n CLASS_NAME: \"Beacon.ModuleHeader\"\r\n};\r\n\r\n","\r\nBeacon.PhotoEngine = {\r\n\r\n initialize: function () {\r\n Beacon.PhotoEngine.initializeSketchModule();\r\n Beacon.PhotoEngine.initializePhotoModule();\r\n Beacon.PhotoEngine.initializeSummaryPhoto();\r\n Beacon.PhotoEngine.initializeGenericImagesModule();\r\n\r\n },\r\n\r\n initializeSketchModule: function () {\r\n $('.sketch-thumbnail img').click(function () {\r\n\r\n var index = $(this).data(\"index\");\r\n\r\n var rsdiv = $('
    ');\r\n $('body').append(rsdiv);\r\n\r\n // this gets mutated into the DOM needed to power a slideshow - clone it so it will work next time too\r\n var slides = $(\"#sketchlist a\").clone(true, true);\r\n\r\n\r\n\r\n var slider = rsdiv.royalSlider({\r\n startSlideId: index,\r\n autoScaleSlider: true,\r\n globalCaption: true,\r\n globalCaptionInside: true,\r\n fullscreen: {\r\n enabled: true,\r\n native: false\r\n },\r\n slides: slides\r\n }).data('royalSlider');\r\n\r\n slider.ev.on('rsExitFullscreen', function () {\r\n slider.destroy();\r\n rsdiv.remove();\r\n });\r\n\r\n slider.enterFullscreen();\r\n\r\n return false;\r\n });\r\n },\r\n\r\n initializePhotoModule: function () {\r\n $('.photo-thumbnail img').click(function () {\r\n\r\n var index = $(this).data(\"index\");\r\n\r\n var rsdiv = $('
    ');\r\n $('body').append(rsdiv);\r\n\r\n // this gets mutated into the DOM needed to power a slideshow - clone it so it will work next time too\r\n var slides = $(\"#photolist a.rsImg\").clone(true, true);\r\n\r\n var slider = rsdiv.royalSlider({\r\n startSlideId: index,\r\n autoScaleSlider: true,\r\n globalCaption: true,\r\n globalCaptionInside: true,\r\n fullscreen: {\r\n enabled: true,\r\n native: false\r\n },\r\n slides: slides\r\n }).data('royalSlider');\r\n\r\n slider.ev.on('rsExitFullscreen', function () {\r\n slider.destroy();\r\n rsdiv.remove();\r\n });\r\n\r\n slider.enterFullscreen();\r\n\r\n return false;\r\n });\r\n },\r\n\r\n initializeSummaryPhoto: function () {\r\n\r\n // in this instance, we do want to modify the rsdiv and turn it into a slideshow\r\n var rsdiv = $('.primary-photo-rs');\r\n\r\n if (rsdiv) {\r\n var slides = $(\"#photolist a.rsImg\").clone(true, true);\r\n\r\n if (slides.length > 0) {\r\n\r\n var ct = slides.length;\r\n var showBullets = (ct > 1 && ct < 15);\r\n\r\n var slider = rsdiv.royalSlider({\r\n autoScaleSlider: true,\r\n autoScaleSliderWidth: 256,\r\n autoScaleSliderHeight: 191,\r\n imageScalePadding: 1,\r\n numImagesToPreload: 2,\r\n controlNavigation: showBullets ? 'bullets' : 'none',\r\n globalCaption: true,\r\n //globalCaptionInside: true,\r\n //imageScaleMode: 'fit',\r\n fadeinLoadedSlide: false,\r\n fullscreen: {\r\n enabled: true,\r\n native: false\r\n },\r\n slides: slides\r\n }).data('royalSlider');\r\n\r\n if (showBullets) {\r\n // make css adjustment to comment line\r\n $('.primary-photo-rs .rsGCaption').css('bottom', '20px');\r\n } else {\r\n $('.primary-photo-rs .rsGCaption').css('bottom', '0');\r\n }\r\n\r\n }\r\n }\r\n },\r\n\r\n initializeGenericImagesModule: function () {\r\n // for GEN1_Images and GEN1_Images2\r\n\r\n var viewModules = $('.gen-image-viewer');\r\n viewModules.each(function () {\r\n\r\n var viewModule = $(this);\r\n\r\n $('img', viewModule).click(function () {\r\n\r\n var index = $(this).data(\"index\");\r\n\r\n var rsdiv = $('
    ');\r\n $('body').append(rsdiv);\r\n\r\n // this gets mutated into the DOM needed to power a slideshow - clone it so it will work next time too\r\n var slides = $(\".gen-image-viewer-list a\", viewModule).clone(true, true);\r\n\r\n var slider = rsdiv.royalSlider({\r\n startSlideId: index,\r\n autoScaleSlider: true,\r\n fullscreen: {\r\n enabled: true,\r\n native: false\r\n },\r\n slides: slides\r\n }).data('royalSlider');\r\n\r\n slider.ev.on('rsExitFullscreen', function () {\r\n slider.destroy();\r\n rsdiv.remove();\r\n });\r\n\r\n slider.enterFullscreen();\r\n\r\n return false;\r\n });\r\n\r\n });\r\n\r\n\r\n\r\n\r\n }\r\n};","Beacon.WCAG = {\r\n\r\n initialize: function () {\r\n //add spacebar support for ExpandCollapse elements\r\n $(\".expandCollapseIcon\").each(function () {\r\n Beacon.WCAG.addSpacebarSupport($(this));\r\n //add aria-expanded label support for expandCollapseIcon\r\n if ($(this).hasClass(\"icon-plus-squared-alt\")) {\r\n $(this).attr('aria-expanded', 'false');\r\n }\r\n $(this).click(function () {\r\n if ($(this).hasClass(\"icon-plus-squared-alt\")) {\r\n $(this).attr('aria-expanded', 'true');\r\n }\r\n else {\r\n $(this).attr('aria-expanded', 'false');\r\n }\r\n });\r\n });\r\n // end add spacebar support \r\n\r\n\r\n this.addPauseAnimation();\r\n this.addButtonPolyfill();\r\n this.fixTables_Presentation();\r\n this.fixTables_Data();\r\n \r\n this.HeadingsandLabels2_4_6.updateRowHeaders('.tabular-data-two-column td:nth-child(1)');\r\n this.HeadingsandLabels2_4_6.updateRowHeaders('.salesSearchTable td:nth-child(1)');\r\n this.HeadingsandLabels2_4_6.updateRowHeaders('.compSearchTable td:nth-child(2)');\r\n this.HeadingsandLabels2_4_6.updateColHeaders('.compSearchTable');\r\n // this.HeadingsandLabels2_4_6.updateColHeaders('.compSearchTableOne');\r\n // this.HeadingsandLabels2_4_6.updateRowHeaders('.compSearchTableOne td:nth-child(2)');\r\n // this.HeadingsandLabels2_4_6.updateColHeaders('.compSearchTableTwo');\r\n // this.HeadingsandLabels2_4_6.updateRowHeaders('.compSearchTableTwo td:nth-child(2)');\r\n // this.HeadingsandLabels2_4_6.updateColHeaders('.compSearchTableThree');\r\n // this.HeadingsandLabels2_4_6.updateRowHeaders('.compSearchTableThree td:nth-child(2)');\r\n this.HeadingsandLabels2_4_6.updateColHeaders('.salesSearchTable');\r\n\r\n this.restructureSearchModules();\r\n this.restructureExceptionalSearchModules();\r\n this.fixCompSearches();\r\n },\r\n/**\r\n* Wires up a link button to expand or collapse a list of div's with one button click.\r\n* @param {string[]} elementIds array with the div id's we are toggling on or off\r\n* @param {string} text sometimes we pass in additional text to toggle.\r\n* @param {string} buttonID (optional) The ID of the control element, that is, the button that toggles expand/collapse\r\n*/\r\n ExpandCollapse: function (elementIds,text,buttonID) {\r\n var elementId = \"\";\r\n //sometimes some rouge developer might call this function by passing in a single string elementId rather than an array.\r\n if (Array.isArray(elementIds)) {\r\n elementId = elementIds.shift();\r\n while (elementIds.length >= 1) { \r\n Beacon.WCAG.ExpandCollapse(elementIds,text);\r\n }\r\n } else {\r\n //not array, just a single string value;\r\n elementId = elementIds;\r\n }\r\n var div = document.getElementById(elementId);\r\n if (!buttonID) {\r\n buttonID = 'btn' + elementId;\r\n }\r\n var b = $('#' + buttonID);\r\n if (div.style.display === \"none\") {\r\n div.style.display = \"inline\";\r\n b.toggleClass(\"icon-minus-squared-alt\").toggleClass(\"icon-plus-squared-alt\");\r\n //I don't know why I would ever want to pass in an different text value, but that's the way some of them were ~20200122 jm\r\n b.text(text?\"Hide \" + text:b.text().replace(\"Show\",\"Hide\"));\r\n }\r\n else {\r\n b.toggleClass(\"icon-plus-squared-alt\").toggleClass(\"icon-minus-squared-alt\");\r\n div.style.display = \"none\";\r\n b.text(text ? \"Show \" + text : b.text().replace(\"Hide\", \"Show\"));\r\n }\r\n },\r\n\r\n addSpacebarSupport: function ($btn) {\r\n $btn.keydown(function (e) {\r\n if (e.keyCode === Beacon.WCAG.keyCode.SPACE) {\r\n e.preventDefault();\r\n e.target.click();\r\n }\r\n });\r\n },\r\n animationStatus: 1\r\n ,\r\n\r\n keyCode: {\r\n RETURN: 13,\r\n SPACE: 32,\r\n PAGEUP: 33,\r\n PAGEDOWN: 34,\r\n END: 35,\r\n HOME: 36,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n SLASH: 191,\r\n ESCAPE: 27\r\n },\r\n addPauseAnimation: function () {\r\n var pauseAnimation = function () {\r\n\r\n Beacon.WCAG.animationStatus = 1 - Beacon.WCAG.animationStatus;\r\n \r\n if (Beacon.WCAG.animationStatus === 0) {\r\n $(\".load-bar\").children().each(function () {\r\n w = ($(this).width());\r\n l = ($(this).css(\"left\"));\r\n $(this).css(\"width\", w);\r\n $(this).css(\"left\", l);\r\n $(this).css(\"animation\", 'none');\r\n });\r\n }\r\n else {\r\n $(\".load-bar\").children().each(function () {\r\n ($(this).removeAttr(\"style\"));\r\n });\r\n }\r\n };\r\n if (Beacon.WCAG.animationStatus == 0) {\r\n Beacon.WCAG.animationStatus = 1;\r\n pauseAnimation();\r\n\r\n }\r\n\r\n $(document).keydown(function (e) {\r\n if (event.keyCode === Beacon.WCAG.keyCode.ESCAPE) {\r\n e.preventDefault();\r\n pauseAnimation();\r\n }\r\n });\r\n \r\n },\r\n addButtonPolyfill: function () {\r\n // POLYFILL - allow spacebar to activate links that look like buttons\r\n // - it won't mess with links that already have a role defined\r\n\r\n $(\"a.btn\").not(\"[role]\").keydown(function (e) {\r\n if (e.keyCode === Beacon.WCAG.keyCode.SPACE) {\r\n e.preventDefault();\r\n e.target.click();\r\n }\r\n }).attr('role', 'button');\r\n },\r\n\r\n fixTables_Presentation: function () {\r\n\r\n // two-col tables - presentation\r\n $(\"table.tabular-data-two-column\").not(\"[role]\").attr(\"role\", \"presentation\");\r\n\r\n // tables with only one row and no thead (assume its just for display)\r\n $(\"table\").not(\"[role]\").has(\"tbody:only-child > tr:only-child\").attr(\"role\", \"presentation\");\r\n\r\n // tables with only one column and no thead\r\n $(\"table\").not(\"[role]\").has(\"tbody:only-child > tr:first > td:only-child\").attr(\"role\", \"presentation\");\r\n\r\n },\r\n\r\n HeadingsandLabels2_4_6:\r\n {\r\n //remove the presentation role\r\n \r\n updateColHeaders: function (tableClass) {\r\n \r\n $(tableClass).attr('role', 'table');\r\n if (($(tableClass).has('thead')).length === 0) {\r\n $(tableClass + ' tr:first-child').children('td,th').replaceWith(function (i, html) {\r\n if (html === ' ') {\r\n return ' ';\r\n } else if ($(this).text().trim() === '') {\r\n return '';\r\n } else {\r\n return '' + html + '';\r\n }\r\n });\r\n var headerRow = $(tableClass + ' tr:first-child');\r\n var tc = $(tableClass);\r\n headerRow.each(function (i, element) {\r\n $(tc[i]).prepend($('').append(headerRow[i]));\r\n });\r\n \r\n }\r\n },\r\n updateRowHeaders: function (className) {\r\n \r\n\r\n $(className).replaceWith(function (i, html) {\r\n if (html === ' ') {\r\n return ' ';\r\n } else if ($(this).text().trim() === '') {\r\n return '';\r\n } else {\r\n return '' + html + '';\r\n }\r\n });\r\n\r\n }\r\n },\r\n\r\n fixTables_Data: function () {\r\n\r\n // tables w/o caption\r\n var dataTables = $(\"table[role!='presentation']\").not(\":has(caption)\");\r\n dataTables.each(function () {\r\n var moduleTitle = $(this).parents(\"section\").find(\"div.title\").text();\r\n if (moduleTitle) {\r\n var caption = $(\"\");\r\n caption.text(moduleTitle).addClass(\"sr-only\");\r\n $(this).append(caption);\r\n }\r\n });\r\n\r\n },\r\n\r\n visualLintRules: function () {\r\n\r\n // table rows without th[scope=row] in the data row\r\n $(\"table[role!=presentation] > tbody > tr\").not(\":has(th[scope=row])\").each(function (index) {\r\n // figure out which cell is 'supposed' to be the header of the row\r\n var rowHeaderIndex = $(this).parents('table').first().attr('rowheaderindex');\r\n if (rowHeaderIndex === undefined) {\r\n rowHeaderIndex = 0;\r\n }\r\n\r\n // if that cell is blank, then it should not be a row header\r\n if ($($(this).children[rowHeaderIndex]).text().trim() !== '') {\r\n $(this).css('border', '2px solid red').attr(\"title\", \"WCAG ERROR: table rows don't have a , or table needs to set role=presentation\");\r\n }\r\n });\r\n\r\n // WCAG - nested tables flagged\r\n $(\"table[role!='presentation'] table[role!='presentation']\").css('border', '2px solid red').attr(\"title\", \"WCAG ERROR: nested tables - if outer table is for layout set role=presentation\");\r\n\r\n },\r\n\r\n fixCompSearches: function () {\r\n $('.compSearchTable,.salesSearchTable,.advanced-search-table').each(function (tableIdx, table) {\r\n $(table).find('tbody').find('tr').each(function (rowIdx, row) {\r\n // Zeroth, if the row is empty or only has 1 cell, then this is a spurious blank row\r\n if ($(row).children('td,th').length < 2) {\r\n return true;\r\n }\r\n\r\n // First, get the criterion cell\r\n const criterionCell = Beacon.WCAG.getCriterionCell(table, row);\r\n if (!criterionCell) {\r\n return true;\r\n }\r\n\r\n // Then get the category cell text\r\n const categoryLabel = Beacon.WCAG.getCategoryLabel(table, row);\r\n if (!categoryLabel) {\r\n return true;\r\n }\r\n\r\n const tableID = `search_table_${tableIdx}`;\r\n const idDomain = `${tableID}_${rowIdx}_`;\r\n\r\n const useCheckbox = Beacon.WCAG.getUseCheckbox(table, row);\r\n Beacon.WCAG.fixUseCheckbox(idDomain, categoryLabel, useCheckbox);\r\n\r\n // Then determine what type of input this row is\r\n\r\n // Sale date compound input\r\n if (Beacon.WCAG.isSaleDateCompoundInput(criterionCell)) {\r\n Beacon.WCAG.fixSaleDateCompoundInput(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Distance from subject compound input\r\n if (Beacon.WCAG.isDistanceFromSubjectCompoundInput(criterionCell)) {\r\n Beacon.WCAG.fixDistanceFromSubjectCompoundInput(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Low/high input range\r\n if (Beacon.WCAG.isLowHighInputRange(criterionCell)) {\r\n Beacon.WCAG.fixLowHighInputRange(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Low/high input range, with dropdown for selecting units\r\n if (Beacon.WCAG.isLowHighRangeWithUnit(criterionCell)) {\r\n Beacon.WCAG.fixLowHighWithUnitDropdown(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Single list box\r\n if (Beacon.WCAG.isSingleListBox(criterionCell)) {\r\n Beacon.WCAG.fixSingleListBoxInput(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Single text box\r\n if (Beacon.WCAG.isSingleTextBox(criterionCell)) {\r\n Beacon.WCAG.fixSingleTextBoxInput(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Single dropdown\r\n if (Beacon.WCAG.isSingleDropdown(criterionCell)) {\r\n Beacon.WCAG.fixSingleListBoxInput(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Single check box\r\n if (Beacon.WCAG.isSingleCheckbox(criterionCell)) {\r\n Beacon.WCAG.fixSingleCheckboxInput(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Radio buttons\r\n if (Beacon.WCAG.isRadioInput(criterionCell)) {\r\n Beacon.WCAG.fixRadioInput(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n\r\n // Subdivision typeahead\r\n if (Beacon.WCAG.isSubdivisionTypeaheadInput(criterionCell)) {\r\n Beacon.WCAG.fixSubdivisionTypeaheadInput(idDomain, categoryLabel, criterionCell);\r\n return true;\r\n }\r\n });\r\n });\r\n },\r\n getUseCheckbox: function (table, row) {\r\n const hasUseColumn = $(table).find('thead > tr:first-child').find('td,th').eq(0).text().trim().toLowerCase() === 'use';\r\n\r\n if (!hasUseColumn) {\r\n return null;\r\n }\r\n\r\n const useCheckbox = $(row).find('td,th').eq(0).find('input[type=\"checkbox\"]');\r\n if (useCheckbox.length < 1) {\r\n return null;\r\n }\r\n return useCheckbox;\r\n },\r\n getCriterionCell: function (table, row) {\r\n const hasUseColumn = $(table).find('thead > tr:first-child').find('td,th').eq(0).text().trim().toLowerCase() === 'use';\r\n\r\n if (hasUseColumn && $(row).find('td,th').length >= 3) {\r\n return $(row).find('td,th')[2];\r\n } else if (!hasUseColumn && $(row).find('td,th').length >= 2) {\r\n return $(row).find('td,th')[1];\r\n } else {\r\n return null;\r\n }\r\n },\r\n getCategoryLabel: function (table, row) {\r\n const categoryCell = Beacon.WCAG.getCategoryCell(table, row);\r\n if (!categoryCell) {\r\n return null;\r\n }\r\n\r\n if ($(categoryCell).children('span,label,strong').length !== 1) {\r\n return null;\r\n }\r\n\r\n return $(categoryCell).children('span,label,strong').eq(0);\r\n },\r\n getCategoryCell: function (table, row) {\r\n const hasUseColumn = $(table).find('thead > tr:first-child').find('td,th').eq(0).text().trim().toLowerCase() === 'use';\r\n\r\n if (hasUseColumn && $(row).find('td,th').length >= 2) {\r\n return $(row).find('td,th')[1];\r\n } else if (!hasUseColumn && $(row).find('td,th').length >= 2) {\r\n return $(row).find('td,th')[0];\r\n } else {\r\n return null;\r\n }\r\n },\r\n isSaleDateCompoundInput: function (criterionCell) {\r\n if ($(criterionCell).find('input,select').length !== 5) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('input[type=\"radio\"]').length !== 2) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('select').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('input[type=\"date\"],input[type=\"text\"]').length !== 2) {\r\n return false;\r\n }\r\n // Look for the words \"Low\" and \"High\"\r\n if ($(criterionCell).text().toLowerCase().indexOf('low') < 0 && $(criterionCell).text().toLowerCase().indexOf('from') < 0) {\r\n return false;\r\n }\r\n if ($(criterionCell).text().toLowerCase().indexOf('high') < 0 && $(criterionCell).text().toLowerCase().indexOf('to') < 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isDistanceFromSubjectCompoundInput: function (criterionCell) {\r\n if ($(criterionCell).find('input').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('select').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('select').find('option[value=\"mi\"]').length !== 1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isLowHighInputRange: function (criterionCell) {\r\n if ($(criterionCell).find('input,select,textarea').length !== 2) {\r\n return false;\r\n }\r\n // Look for the words \"Low\" and \"High\"\r\n if ($(criterionCell).text().toLowerCase().indexOf('low') < 0) {\r\n return false;\r\n }\r\n if ($(criterionCell).text().toLowerCase().indexOf('high') < 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isLowHighRangeWithUnit: function (criterionCell) {\r\n if ($(criterionCell).find('input,select,textarea').length !== 3) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('input').length !== 2) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('select').length !== 1) {\r\n return false;\r\n }\r\n // Look for the words \"Low\" and \"High\"\r\n if ($(criterionCell).text().toLowerCase().indexOf('low') < 0) {\r\n return false;\r\n }\r\n if ($(criterionCell).text().toLowerCase().indexOf('high') < 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isSingleListBox: function (criterionCell) {\r\n if ($(criterionCell).find('input,select').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('select[multiple=\"multiple\"]').length !== 1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isSingleTextBox: function (criterionCell) {\r\n if ($(criterionCell).find('input,select,textarea').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('input[type=\"text\"],textarea').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('input[type=\"hidden\"]').length !== 0) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isSingleDropdown: function (criterionCell) {\r\n if ($(criterionCell).find('input,select').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('select:not([multiple])').length !== 1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isSingleCheckbox: function (criterionCell) {\r\n if ($(criterionCell).find('input,select,textarea').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('input[type=\"checkbox\"]').length !== 1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isRadioInput: function (criterionCell) {\r\n if ($(criterionCell).find('input:not([type=\"radio\"])').length > 0) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('input[type=\"radio\"]').length < 1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n isSubdivisionTypeaheadInput: function (criterionCell) {\r\n if ($(criterionCell).find('input[type=\"hidden\"]').length !== 1) {\r\n return false;\r\n }\r\n if ($(criterionCell).find('input[type=\"text\"]').length !== 1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n fixUseCheckbox: function (idDomain, categoryLabel, useCheckbox) {\r\n if (!useCheckbox) {\r\n return;\r\n }\r\n if ($(categoryLabel).prop('tagName').toLowerCase() === 'label' && $(categoryLabel).attr('for') !== $(useCheckbox).attr('id')) {\r\n $(categoryLabel).attr('for', $(useCheckbox).attr('id'));\r\n } else if ($(categoryLabel).prop('tagName').toLowerCase() === 'span') {\r\n if ($(categoryLabel).attr('id')) {\r\n $(categoryLabel).attr('id', `${idDomain}useCheckboxLabel`);\r\n }\r\n const useCheckboxLabelID = $(categoryLabel).attr('id');\r\n\r\n $(useCheckbox).attr('aria-labelledby', useCheckboxLabelID);\r\n }\r\n },\r\n fixSaleDateCompoundInput: function (idDomain, categoryLabel, criterionCell) {\r\n const categoryText = $(categoryLabel).text().trim();\r\n\r\n const superLegendID = `${idDomain}superLegend`;\r\n const listLegendID = `${idDomain}listLegend`;\r\n const listLabelID = `${idDomain}listLabel`;\r\n const rangeLegendID = `${idDomain}rangeLegend`;\r\n const salesLabelID = `${idDomain}salesLabel`;\r\n const fromLabelID = `${idDomain}fromLabel`;\r\n const toLabelID = `${idDomain}toLabel`;\r\n\r\n const superFieldset = $('
    ');\r\n const superLegend = $(`${categoryText}`);\r\n const rbDateList = $(criterionCell).find('input[type=\"radio\"]').eq(0).detach();\r\n const listFieldset = $('
    ');\r\n const listLegend = $(`Choose sale date from list`);\r\n const listLabel = $(`Sales within the past `);\r\n const dateList = $(criterionCell).find('select').detach();\r\n const lineBreak = $('
    ');\r\n const rbDateRange = $(criterionCell).find('input[type=\"radio\"]').detach();\r\n const rangeFieldset = $('
    ');\r\n const rangeLegend = $(`Set sale date range`);\r\n const salesLabel = $(`Sales `);\r\n const fromLabel = $(`From `);\r\n const fromDate = $(criterionCell).find('input[type=\"date\"],input[type=\"text\"]').eq(0).detach();\r\n const toLabel = $(` To `);\r\n const toDate = $(criterionCell).find('input[type=\"date\"],input[type=\"text\"]').detach();\r\n\r\n $(rbDateList).attr('aria-labelledby', listLegendID);\r\n $(rbDateList).removeAttr('aria-label');\r\n $(dateList).attr('aria-labelledby', `${listLabelID} ${$(dateList).attr('id')}`);\r\n $(dateList).removeAttr('aria-label');\r\n $(rbDateRange).attr('aria-labelledby', rangeLegendID);\r\n $(rbDateRange).removeAttr('aria-label');\r\n $(fromDate).attr('aria-labelledby', `${salesLabelID} ${fromLabelID}`)\r\n $(fromDate).removeAttr('aria-label');\r\n $(toDate).attr('aria-labelledby', `${salesLabelID} ${toLabelID}`);\r\n $(toDate).removeAttr('aria-label');\r\n \r\n $(listFieldset).append(listLegend);\r\n $(listFieldset).append(listLabel);\r\n $(listFieldset).append(dateList);\r\n\r\n $(rangeFieldset).append(rangeLegend);\r\n $(rangeFieldset).append(salesLabel);\r\n $(rangeFieldset).append(fromLabel);\r\n $(rangeFieldset).append(fromDate);\r\n $(rangeFieldset).append(toLabel);\r\n $(rangeFieldset).append(toDate);\r\n\r\n $(superFieldset).append(superLegend);\r\n $(superFieldset).append(rbDateList);\r\n $(superFieldset).append(listFieldset);\r\n $(superFieldset).append(lineBreak);\r\n $(superFieldset).append(rbDateRange);\r\n $(superFieldset).append(rangeFieldset);\r\n\r\n $(criterionCell).empty();\r\n $(criterionCell).append(superFieldset);\r\n },\r\n fixDistanceFromSubjectCompoundInput: function (idDomain, categoryLabel, criterionCell) {\r\n const legendID = `${idDomain}legend`;\r\n\r\n const fieldset = $('
    ');\r\n const legend = $(`${$(categoryLabel).text().trim()}`);\r\n const magnitude = $(criterionCell).find('input').detach();\r\n const unit = $(criterionCell).find('select').detach();\r\n\r\n $(magnitude).attr('aria-labelledby', `${legendID} ${$(magnitude).attr('id')} ${$(unit).attr('id')}`);\r\n $(magnitude).removeAttr('aria-label');\r\n $(unit).attr('aria-labelledby', `${legendID} ${$(magnitude).attr('id')} ${$(unit).attr('id')}`);\r\n $(unit).removeAttr('aria-label');\r\n \r\n $(fieldset).append(legend);\r\n $(fieldset).append(magnitude);\r\n $(fieldset).append(unit);\r\n\r\n $(criterionCell).empty();\r\n $(criterionCell).append(fieldset);\r\n },\r\n fixLowHighInputRange: function (idDomain, categoryLabel, criterionCell) {\r\n const legendID = `${idDomain}legend`;\r\n const lowSpanID = `${idDomain}low`;\r\n const highSpanID = `${idDomain}high`;\r\n\r\n const unitNodes = Beacon.WCAG.findUnitTextNodes($(criterionCell).find('input').parent().contents());\r\n\r\n const fieldset = $('
    ');\r\n const legend = $(`${$(categoryLabel).text().trim()}`);\r\n const lowSpan = $(`Low `);\r\n const lowInput = $(criterionCell).find('input').eq(0).detach();\r\n const highSpan = $(` High `);\r\n const highInput = $(criterionCell).find('input').detach();\r\n\r\n $(lowInput).attr('aria-labelledby', `${legendID} ${lowSpanID}`);\r\n $(lowInput).removeAttr('aria-label');\r\n $(highInput).attr('aria-labelledby', `${legendID} ${highSpanID}`);\r\n $(highInput).removeAttr('aria-label');\r\n\r\n $(fieldset).append(legend);\r\n $(fieldset).append(lowSpan);\r\n $(fieldset).append(lowInput);\r\n $(fieldset).append(highSpan);\r\n $(fieldset).append(highInput);\r\n \r\n if (unitNodes.length > 0) {\r\n const unitID = `${idDomain}unit`;\r\n const unitLabel = $(``);\r\n for (let unitNode of unitNodes) {\r\n $(unitLabel).append(unitNode);\r\n }\r\n $(lowInput).attr('aria-labelledby', `${legendID} ${lowSpanID} ${unitID}`);\r\n $(highInput).attr('aria-labelledby', `${legendID} ${highSpanID} ${unitID}`);\r\n\r\n $(fieldset).append(unitLabel);\r\n }\r\n\r\n $(criterionCell).empty();\r\n $(criterionCell).append(fieldset);\r\n },\r\n fixLowHighWithUnitDropdown: function (idDomain, categoryLabel, criterionCell) {\r\n const legendID = `${idDomain}legend`;\r\n const lowSpanID = `${idDomain}low`;\r\n const highSpanID = `${idDomain}high`;\r\n\r\n const fieldset = $('
    ');\r\n const legend = $(`${$(categoryLabel).text().trim()}`);\r\n const lowSpan = $(`Low `);\r\n const lowInput = $(criterionCell).find('input').eq(0).detach();\r\n const highSpan = $(` High `);\r\n const highInput = $(criterionCell).find('input').detach();\r\n const unitInput = $(criterionCell).find('select').detach();\r\n \r\n $(lowInput).attr('aria-labelledby', `${legendID} ${lowSpanID} ${$(unitInput).attr('id')}`);\r\n $(lowInput).removeAttr('aria-label');\r\n $(highInput).attr('aria-labelledby', `${legendID} ${highSpanID} ${$(unitInput).attr('id')}`);\r\n $(highInput).removeAttr('aria-label');\r\n $(unitInput).attr('aria-label', 'Select measurement unit');\r\n\r\n $(fieldset).append(legend);\r\n $(fieldset).append(lowSpan);\r\n $(fieldset).append(lowInput);\r\n $(fieldset).append(highSpan);\r\n $(fieldset).append(highInput);\r\n $(fieldset).append(' ');\r\n $(fieldset).append(unitInput);\r\n\r\n $(criterionCell).empty();\r\n $(criterionCell).append(fieldset);\r\n },\r\n fixSingleListBoxInput: function (idDomain, categoryLabel, criterionCell) {\r\n // assign an ID to the label in the category cell\r\n if (!$(categoryLabel).attr('id')) {\r\n $(categoryLabel).attr('id', `${idDomain}categoryLabel`)\r\n }\r\n const categoryID = $(categoryLabel).attr('id');\r\n\r\n const instructionNodes = Beacon.WCAG.findInstructionText($(criterionCell).find('input,select').parent().contents());\r\n const instructionID = `${idDomain}instructions`;\r\n const lineBreak = $('
    ');\r\n const instructionsLabel = $(``);\r\n for (let instructionNode of instructionNodes) {\r\n $(instructionsLabel).append($(instructionNode).detach());\r\n }\r\n\r\n const input = $(criterionCell).find('input,select').detach();\r\n $(input).removeAttr('aria-label');\r\n $(input).attr('aria-labelledby', categoryID);\r\n\r\n $(criterionCell).empty();\r\n $(criterionCell).append(input);\r\n\r\n if (instructionNodes.length > 0) {\r\n $(criterionCell).append(lineBreak);\r\n $(criterionCell).append(instructionsLabel);\r\n $(input).attr('aria-describedby', instructionID);\r\n }\r\n },\r\n fixSingleTextBoxInput: function (idDomain, categoryLabel, criterionCell) {\r\n // assign an ID to the label in the category cell\r\n if (!$(categoryLabel).attr('id')) {\r\n $(categoryLabel).attr('id', `${idDomain}categoryLabel`)\r\n }\r\n const categoryID = $(categoryLabel).attr('id');\r\n\r\n const unitNodes = Beacon.WCAG.findUnitTextNodes($(criterionCell).find('input,select,textarea').parent().contents());\r\n const unitID = `${idDomain}unit`;\r\n const unitLabel = $(``);\r\n for (let unitNode of unitNodes) {\r\n $(unitLabel).append($(unitNode).detach());\r\n }\r\n\r\n const instructionNodes = Beacon.WCAG.findInstructionText($(criterionCell).find('input,select,textarea').parent().contents());\r\n const instructionID = `${idDomain}instructions`;\r\n const br = $('
    ');\r\n const instructionsLabel = $(``);\r\n for (let instructionNode of instructionNodes) {\r\n $(instructionsLabel).append($(instructionNode).detach());\r\n }\r\n\r\n const input = $(criterionCell).find('input,select,textarea').detach();\r\n\r\n $(input).removeAttr('aria-label');\r\n $(input).attr('aria-labelledby', `${categoryID}`);\r\n\r\n $(criterionCell).empty();\r\n\r\n $(criterionCell).append(input);\r\n \r\n if (unitNodes.length > 0) {\r\n $(criterionCell).append(unitLabel);\r\n $(input).attr('aria-labelledby', `${categoryID} ${$(input).attr('id')} ${unitID}`);\r\n }\r\n \r\n if (instructionNodes.length > 0) {\r\n $(criterionCell).append(br);\r\n $(criterionCell).append(instructionsLabel);\r\n $(input).attr('aria-describedby', instructionID);\r\n }\r\n },\r\n fixSingleCheckboxInput: function (idDomain, categoryLabel, criterionCell) {\r\n // we have to find the label\r\n const labelText = $(criterionCell)\r\n .find('input[type=\"checkbox\"]')\r\n .parents('fieldset,label,td,th')\r\n .first()\r\n .contents()\r\n .filter((idx, element) => {\r\n return !$(element).hasClass('sr-only');\r\n })\r\n .text()\r\n .trim();\r\n\r\n const fieldset = $('
    ');\r\n const legend = $(`${$(categoryLabel).text().trim()}`);\r\n const label = $(``);\r\n\r\n const checkbox = $(criterionCell).find('input[type=\"checkbox\"]').detach();\r\n $(checkbox).removeAttr('aria-label');\r\n $(checkbox).removeAttr('aria-labelledby');\r\n\r\n $(label).prepend(checkbox);\r\n\r\n $(fieldset).append(legend);\r\n $(fieldset).append(label);\r\n\r\n $(criterionCell).empty();\r\n $(criterionCell).append(fieldset);\r\n },\r\n fixRadioInput: function (idDomain, categoryLabel, criterionCell) {\r\n const fieldset = $('
    ');\r\n const legend = $(`${$(categoryLabel).text().trim()}`);\r\n const neededContent = $(criterionCell).find('input,label,br').detach();\r\n\r\n $(neededContent).removeAttr('aria-label');\r\n $(neededContent).removeAttr('aria-labelledby');\r\n\r\n $(fieldset).append(legend);\r\n $(fieldset).append(neededContent);\r\n\r\n $(criterionCell).empty();\r\n $(criterionCell).append(fieldset);\r\n },\r\n fixSubdivisionTypeaheadInput: function (idDomain, categoryLabel, criterionCell) {\r\n // Since this input is modified by a script in order to create the typeahead, we'll play it\r\n // safe and set the 'for' attribute on the label rather than the 'aria-labelledby'\r\n // attribute on the input\r\n const inputID = $(criterionCell).find('input[type=\"text\"]').attr('id');\r\n $(categoryLabel).attr('for', inputID);\r\n },\r\n findInstructionText: function (cellContents) {\r\n /*const cellContents = $(criterionCell).contents();*/\r\n\r\n // find the index of the last input\r\n const lastInput = $(cellContents).filter('input,select').last();\r\n const lastInputIdx = $(cellContents).index(lastInput);\r\n\r\n // find the index of the last
    , if there is one\r\n const lastBr = $(cellContents).filter('br').last();\r\n const lastBrIdx = $(cellContents).index(lastBr);\r\n\r\n if ((lastBrIdx < lastInputIdx) || ((lastBrIdx + 1) >= $(cellContents).length)) {\r\n return [];\r\n }\r\n\r\n const postBrElements = $(cellContents).slice(lastBrIdx + 1);\r\n return postBrElements.filter(function (idx, element) {\r\n return $(element).text().trim() !== '';\r\n }).toArray();\r\n },\r\n findUnitTextNodes: function (cellContents) {\r\n // The unit should be a text ndoe that comes right after the last input\r\n //const cellContents = $(criterionCell).contents();\r\n\r\n // find the index of the last input\r\n const lastInput = $(cellContents).filter('input,select').last();\r\n const lastInputIdx = $(cellContents).index(lastInput);\r\n\r\n // find the index of the last
    , if there is one\r\n const lastBr = $(cellContents).filter('br').last();\r\n const lastBrIdx = $(cellContents).index(lastBr);\r\n\r\n if (lastBrIdx > (lastInputIdx + 1)) {\r\n return $($(cellContents).slice(lastInputIdx + 1, lastBrIdx)).filter(function (idx, element) {\r\n return $(element).text().trim() !== '';\r\n }).toArray();\r\n } else {\r\n return $($(cellContents).slice(lastInputIdx + 1)).filter(function (idx, element) {\r\n return $(element).text().trim() !== '';\r\n }).toArray();\r\n }\r\n },\r\n\r\n restructureExceptionalSearchModules: function () {\r\n $('section').each(function (idx, section) {\r\n const repairContents = $(section).find('fieldset.wcag-repair');\r\n if (repairContents.length < 1) {\r\n return true;\r\n }\r\n\r\n const moduleTitle = $(section).find('.title');\r\n const searchButtons = $(section).find('.btn.btn-primary').has('.glyphicon.glyphicon-search');\r\n $(searchButtons).attr('aria-labelledby', $(moduleTitle).attr('id'));\r\n\r\n $(repairContents).prepend($(`${$(moduleTitle).text().trim()}`));\r\n });\r\n },\r\n restructureSearchModules: function () {\r\n $('section').each(function (idx, section) {\r\n /* The majority of cases are simple: 1 button in the whole module, which is a search button,\r\n * and one .help-block element, which is not associated with anything. In those cases, feel\r\n * free to associate them.\r\n * \r\n * Conditions:\r\n * - 1 .help-block element in the whole module\r\n * - That help-block element contains text\r\n * - 1 button (or input[type=\"button\"]) in the whole module\r\n * - That button has a search glyphicon\r\n * - That button does not have an aria-labelledby attribute\r\n */\r\n\r\n Beacon.WCAG.fixSearchButtonFieldset(section);\r\n Beacon.WCAG.fixSearchButtonLabel(section);\r\n Beacon.WCAG.fixSingleInputLabel(section);\r\n Beacon.WCAG.fixHelpBlock(section);\r\n Beacon.WCAG.addTypeaheadInstructios(section);\r\n });\r\n },\r\n hasOneSearchButton: function (section) {\r\n if ($(section).find('.btn.btn-primary').has('.glyphicon.glyphicon-search').length !== 1) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n fixSearchButtonFieldset: function (section) {\r\n const searchButton = $(section).find('.btn.btn-primary').has('.glyphicon.glyphicon-search');\r\n if (searchButton.length !== 1) {\r\n return;\r\n }\r\n if ($(searchButton).parentsUntil('.module-content', 'fieldset').length > 0) {\r\n return;\r\n }\r\n\r\n const moduleTitle = $(section).find('.title');\r\n if ($(moduleTitle).text().trim() === '') {\r\n return;\r\n }\r\n\r\n const newFieldset = $('
    ');\r\n const newLegend = $(`${$(moduleTitle).text().trim()}`);\r\n const moduleContent = $(section).find('.module-content').contents();\r\n\r\n $(newFieldset).append(newLegend);\r\n $(newFieldset).append(moduleContent);\r\n\r\n $(section).find('.module-content').append(newFieldset);\r\n },\r\n fixSearchButtonLabel: function (section) {\r\n const moduleTitle = $(section).find('.title');\r\n const searchButton = $(section).find('.btn.btn-primary').has('.glyphicon.glyphicon-search');\r\n if (searchButton.length !== 1) {\r\n return;\r\n }\r\n\r\n if ($(searchButton).attr('aria-labelledby') === $(moduleTitle).attr('id')) {\r\n return;\r\n }\r\n\r\n $(searchButton).attr('aria-labelledby', `${$(moduleTitle).attr('id')} ${$(searchButton).attr('id')}`);\r\n $(searchButton).removeAttr('aria-label');\r\n },\r\n fixSingleInputLabel: function (section) {\r\n // Per a discussion referenced in a comment on BEAC-3879, if there is only 1 input in the module,\r\n // then the input can be labelled by the module's title. If there is more than 1 input, then\r\n // they will need to be supplied with their own unique labels.\r\n\r\n const input = $(section).find('input,select,textarea').not('[type=\"checkbox\"]').not('[type=\"radio\"]');\r\n if (input.length !== 1) {\r\n return;\r\n }\r\n\r\n const moduleTitle = $(section).find('.title');\r\n $(input).attr('aria-labelledby', $(moduleTitle).attr('id'));\r\n\r\n // get rid of any sr-only labels, if any\r\n $(section).find('.sr-only').removeAttr('for');\r\n },\r\n addTypeaheadInstructios: function (section) {\r\n $(section).find('span.twitter-typeahead > input[type=\"text\"]').each(function (idx, input) {\r\n const descrID = `${$(input).attr('id')}_resultsDescription`;\r\n const resultsDescription = $(`
    Options are available upon partial entry, use arrow keys to navigate available options. Use Search button to return all results that match your entry on a seperate page.
    `);\r\n\r\n if ($(input).attr('aria-describedby') === undefined) {\r\n $(input).attr('aria-describedby', descrID);\r\n } else {\r\n $(input).attr('aria-describedby', `${$(input).attr('aria-describedby')} ${descrID}`);\r\n }\r\n \r\n $(section).append(resultsDescription);\r\n });\r\n },\r\n fixHelpBlock: function (section) {\r\n const helpBlock = $(section).find('.help-block');\r\n if (helpBlock.length !== 1) {\r\n return;\r\n }\r\n if ($(helpBlock).text().trim() === '') {\r\n return;\r\n }\r\n \r\n const input = $(section).find('input,select,textarea').not('[type=\"checkbox\"]').not('[type=\"radio\"]');\r\n const descrID = $(helpBlock).attr('id');\r\n if ($(input).attr('aria-describedby') === undefined) {\r\n $(input).attr('aria-describedby', descrID);\r\n } else {\r\n $(input).attr('aria-describedby', `${$(input).attr('aria-describedby')} ${descrID}`);\r\n }\r\n },\r\n\r\n CLASS_NAME: \"Beacon.WCAG\"\r\n};\r\n\r\n\r\n","Beacon.JqueryValidators = {\r\n initialize: function () {\r\n jQuery.validator.addMethod('zipCode', this.zipCode, 'Please enter a valid 5- or 9-digit ZIP Codeâ„¢.');\r\n\r\n \r\n\r\n if ($('#Form1').find('.beacon-captcha').length > 0) {\r\n\r\n /*\r\n * If a form module seeks to use reCAPTCHA, this is the way to do it:\r\n * * At least 1 element in the module must include the class 'beacon-captcha'.\r\n * * When the module calls Beacon.JqueryValidators.beaconModuleValidator(), it must pass 'true' as the 2nd\r\n * argument.\r\n * * Server-side, the module should check for the \"g-recaptcha-response\" in the request's form data. It should pass\r\n * that on to Beacon.RecaptchaHelper.ValidateInvisibleRecaptchaWithMothership(). That function will indicate\r\n * whether or not the request passed the reCAPTCHA test.\r\n * \r\n * This is how it works:\r\n * \r\n * Though there are many form _modules_ in Beacon, there can only be 1
    element: Form1. This is required for\r\n * Beacon to work. And since a may only have 1 jQuery validator at a time, if multiple form modules try to\r\n * attach validators, they will conflict. Beacon.JqueryValidators.beaconModuleValidator() manages this to an extent.\r\n * Validators are not attached until _after_ a user tries to submit, which, though not ideal, is the only way to make\r\n * this work.\r\n * \r\n * If that call to Beacon.JqueryValidators.beaconModuleValidator() also asks for a captcha verification, then the\r\n * validator will also have a submit handler.\r\n * \r\n * After the original event propagates up to Form1, the validator will run, and that handler will be executed if the\r\n * validator determines that the form is ready for submission. The handler will check to see if the reCAPTCHA has\r\n * been executed. Seeing that it has not, the handler will manually trigger it with grecaptcha.execute(). Crucially,\r\n * the form will _not_ be submitted at that point.\r\n * \r\n * Instead, reCAPTCHA will do whatever, and then it will execute a callback. Since it demands that that callback be\r\n * in the global namespace, it is so defined here: beaconCaptchaSubmit(). That callback will simply call\r\n * requestSubmit() on Form1. It _must_ call requestSubmit() rather than submit() because the latter does not trigger\r\n * a form submission in the same way. If submit() is used, the form will post, but ASP will not know which button was\r\n * pressed, and its server-side logic will not be triggered.\r\n * \r\n * After the callback triggers the form submission (again), the validator will validate the form again, and the submit\r\n * handler will be executed for the second time. This time, it will observe that reCAPTCHA has been run, and the form\r\n * is ready to submit. It will post the form as usual.\r\n */\r\n\r\n window.beaconCaptchaLoad = function () {\r\n let captchaElement = $('#Form1').find('div[data-sitekey]');\r\n if (captchaElement.length < 1) {\r\n return;\r\n }\r\n\r\n grecaptcha.render(captchaElement[0], {\r\n 'sitekey': $(captchaElement).attr('data-sitekey'),\r\n 'callback': 'beaconCaptchaSubmit'\r\n });\r\n };\r\n\r\n window.beaconCaptchaSubmit = function () {\r\n /* We have to use requestSubmit(), _not_ submit(). The latter will not trigger the submit event in the same\r\n * way, and the difference is such that ASP.NET will not know which button originally triggered this event.\r\n */\r\n document.getElementById('Form1').requestSubmit();\r\n }\r\n } else {\r\n // No elements on the page have requested CAPTCHA, so don't bother doing anything here\r\n window.beaconCaptchaLoad = function () {\r\n return;\r\n }\r\n }\r\n },\r\n currentValidator: null,\r\n destroy: function () {\r\n // Cleans up all forms and elements, removes validator-specific events\r\n this.currentValidator.resetForm();\r\n $(this.currentValidator.currentForm)\r\n .off(\".validate\")\r\n .removeData(\"validator\")\r\n .find(\".validate-equalTo-blur\")\r\n .off(\".validate-equalTo\")\r\n .removeClass(\"validate-equalTo-blur\")\r\n .find(\".validate-lessThan-blur\")\r\n .off(\".validate-lessThan\")\r\n .removeClass(\"validate-lessThan-blur\")\r\n .find(\".validate-lessThanEqual-blur\")\r\n .off(\".validate-lessThanEqual\")\r\n .removeClass(\"validate-lessThanEqual-blur\")\r\n .find(\".validate-greaterThanEqual-blur\")\r\n .off(\".validate-greaterThanEqual\")\r\n .removeClass(\"validate-greaterThanEqual-blur\")\r\n .find(\".validate-greaterThan-blur\")\r\n .off(\".validate-greaterThan\")\r\n .removeClass(\"validate-greaterThan-blur\");\r\n\r\n\r\n },\r\n\r\n errorPlacementBetter: function (error,element) {\r\n var find = '\\\\$';\r\n var re = new RegExp(find, 'g');\r\n betterErrorID = ($(error).attr('id')).replace(re, '_');\r\n $(error).attr('id', betterErrorID);\r\n\r\n element.attr('aria-describedby', ($(error).attr('id') + ' ' + element.attr('aria-describedby')).trim());\r\n element.attr('aria-invalid', 'true');\r\n\r\n //fix the id with dollarsigns...\r\n //this is because jquery validator automatically makes the error id the same as the input control name{-error} that it is validating. \r\n //then jquery doesn't like ID's with a $ in them.. so we need to fix it before it gets added. We remove it and add the new on so the\r\n // event listeners are still attached.\r\n var prevElementToError = $('#' + betterErrorID).prev();\r\n $('#' + $(error).attr('id')).remove();\r\n if (prevElementToError.length>0) {\r\n error.insertAfter(prevElementToError);\r\n } else {\r\n error.insertAfter(element);\r\n }\r\n \r\n },\r\n //wires up the validator for Beacon Modules\r\n beaconModuleValidator: function (moduleRules, useRecaptcha = false) {\r\n\r\n if (this.currentValidator !== null) {\r\n this.destroy();\r\n }\r\n//hijack the existing errorPlacement and run my own after it.\r\n var f = moduleRules.errorPlacement;\r\n moduleRules.errorPlacement = function (error, element) {\r\n if (f) {\r\n f(error, element);\r\n }\r\n Beacon.JqueryValidators.errorPlacementBetter(error, element);\r\n }\r\n //we can't use the label type anymore because the control is aria-describedby not label for='inputid' anymore.\r\n moduleRules.errorElement = \"span\";\r\n\r\n if (useRecaptcha) {\r\n moduleRules.submitHandler = function (form, submitevent) {\r\n if (grecaptcha.getResponse()) {\r\n /* After reCAPTCHA is done, it will call beaconCaptchaSubmit() (defined above), which will\r\n * trigger the form submission again. Eventually, the logic will proceed back to this function.\r\n * Seeing that reCAPTCHA _has_ run, it will submit the form.\r\n */\r\n document.getElementById('Form1').submit();\r\n } else {\r\n /* The first time that this handler is called, reCAPTCHA will probably not have run. So trigger\r\n * it manually here, and _do_ _not_ proceeed to submit the form. We have to wait for reCAPTCHA\r\n * to do whatever first.\r\n */\r\n grecaptcha.execute();\r\n }\r\n };\r\n }\r\n \r\n this.currentValidator = $(\"form\").validate(moduleRules);\r\n var isvalid = $(\"form\").valid();\r\n if (isvalid) {\r\n //sometimes I need to do a form submit..\r\n\r\n } else {\r\n\r\n event.preventDefault();\r\n this.currentValidator.focusInvalid();\r\n }\r\n },\r\n buildDependentRadio: function (dependentLblName, dependentRdoName, controllingRadioUnRequiredValue, controllingRadio) {\r\n //wire up the onclick event for the controlling radio button to add errors and required *\r\n\r\n $('#' + controllingRadio).click(function () {\r\n \r\n\r\n var t = (t == null) ? $(\"#\" + dependentLblName + \" > abbr\") : '*'; //get the required * element\r\n if (Beacon.JqueryValidators.isRadioButtonRequired(controllingRadio, controllingRadioUnRequiredValue)) {\r\n\r\n t = (t.html() == undefined) ? '*' : t;\r\n\r\n $(\"#\" + dependentLblName).append(t);\r\n //if the dependentRdo Button isn't filled in then throw an error behind it.\r\n if (!Beacon.JqueryValidators.isRadioButtonRequired(dependentRdoName, \"\")) {\r\n $('#' + dependentRdoName).addClass(\"error\"); //if the controlling radiobutton has the dependsValue then throw an error\r\n }\r\n\r\n\r\n }\r\n else {\r\n $('#' + dependentRdoName).removeClass(\"error\");\r\n $(\"#\" + dependentLblName + \" > abbr\").remove();\r\n $('#' + dependentRdoName).removeClass(\"error\");\r\n $('#' + dependentRdoName + '-error').remove();\r\n\r\n t.remove();\r\n }\r\n });\r\n $('#' + dependentRdoName).click(function () {\r\n $('#' + dependentRdoName).removeClass(\"error\");\r\n $('#' + dependentRdoName + '-error').remove();\r\n\r\n });\r\n },\r\n isRadioButtonRequired: function (requiredRadioButtonName, unRequiredValue) {\r\n \r\n var radioButtonValue = ($('input[name=\"' + requiredRadioButtonName + '\"]:checked').val());\r\n radioButtonValue = (radioButtonValue == undefined) ? \"\" : radioButtonValue;\r\n \r\n return (radioButtonValue != unRequiredValue);\r\n },\r\n\r\n isDate: function (txtDate) {\r\n var currVal = txtDate;\r\n if (currVal == '')\r\n return false;\r\n var rxDatePattern = /^(\\d{1,2})(\\/|-)(\\d{1,2})(\\/|-)(\\d{4})$/;\r\n var dtArray = currVal.match(rxDatePattern);\r\n\r\n if (dtArray == null)\r\n return false;\r\n\r\n dtMonth = dtArray[1];\r\n dtDay = dtArray[3];\r\n dtYear = dtArray[5];\r\n\r\n if (dtMonth < 1 || dtMonth > 12)\r\n return false;\r\n else if (dtDay < 1 || dtDay > 31)\r\n return false;\r\n else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31)\r\n return false;\r\n else if (dtMonth == 2) {\r\n var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));\r\n if (dtDay > 29 || (dtDay == 29 && !isleap))\r\n return false;\r\n }\r\n return true;\r\n },\r\n\r\n isEmail: function (value, element) {\r\n\r\n return /^\\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\\b$/.test(value);\r\n\r\n\r\n },\r\n isNumber: function (value, element) {\r\n\r\n return !isNaN(value);\r\n },\r\n isPDFFile: function (value, element) {\r\n\r\n return /([a-zA-Z0-9]+\\.pdf)$/.test(value);\r\n }\r\n ,\r\n isPhoneNumber: function(value,element){\r\n validPhone =/^[1-9]\\d{2}-\\d{3}-\\d{4}$/.test(value);\r\n //console.log(\"is phone valid?: \" + validPhone)\r\n return validPhone;\r\n },\r\n isCityStateZip:function(value,element){\r\n validCityStateZip =/^\\s*[a-zA-Z\\s]+,+\\s(A[LKSZRAP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADL N]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD] |T[NX]|UT|V[AIT]|W[AIVY])\\x20(?!0{5})\\d{5}(-\\d{4})?$/.test(value);\r\n // console.log(\"is city state zipe valid?: \" + validCityStateZip)\r\n return validCityStateZip;\r\n },\r\n zipCode: function (value, element) {\r\n return /^[0-9]{5}(-\\d{4})?$/.test(value) || value === '';\r\n },\r\n\r\n CLASS_NAME: \"Beacon.WCAG\"\r\n};\r\n\r\n\r\n","Beacon.Notifications = {\r\n _activeId: null,\r\n _announcementData: null,\r\n _userId: null,\r\n me: null,\r\n ackedCount: 0,\r\n newAcks: 0,\r\n init: function (activeId,userId) {\r\n me = this;\r\n me._userId = userId;\r\n me._activeId = activeId\r\n var updateMinutes = .5;\r\n //figure out what announcement data is currently in the storage.\r\n //get the values currently in localStorage.\r\n _announcementData = Beacon.localStorage.getItem('announcementData') ? Beacon.localStorage.getItem('announcementData') : '{}';\r\n //Parse it into a json object since localStoarge only stores strings.\r\n _announcementData = JSON.parse(_announcementData);\r\n \r\n //this is a lodash call to see if local storage doesn't have any values yes.... first time load\r\n if (_.isEmpty(_announcementData)) {\r\n var refreshTime = Date.now() - (updateMinutes * 60000);\r\n var refreshTimeISO = new Date(refreshTime).toISOString();\r\n _announcementData['SignalUpdate'] = {};\r\n _announcementData['SignalUpdate']['BrowserUpdateTime'] = refreshTimeISO;\r\n _announcementData['notifications'] = [];\r\n _announcementData['acknowledgements'] = [];\r\n _announcementData['trash'] = [];\r\n _announcementData['SignalUpdate']['UserUpdateChange'] = \"<%= Me.AppBase.Security.User.Email %>\";\r\n\r\n }\r\n\r\n var currentTime = new Date().toISOString();\r\n var refreshTimeISO = _announcementData['SignalUpdate']['BrowserUpdateTime'];\r\n var refreshTime = Date.now() + (updateMinutes * 60000);\r\n var refreshTimeISO = new Date(refreshTime).toISOString();\r\n _announcementData['SignalUpdate']['BrowserUpdateTime'] = refreshTimeISO;\r\n\r\n //stringify them and put them in the database.\r\n Beacon.localStorage.setItem('announcementData', JSON.stringify(_announcementData));\r\n _announcementData = JSON.parse(Beacon.localStorage.getItem('announcementData'))\r\n var list = $('#notificationDropDown');\r\n if (notificationAnnouncementJS.data.length > 0) {\r\n //var orderedNotifications\r\n this.updateNotificationList(notificationAnnouncementJS);\r\n }\r\n _announcementData['noMessages'] = false;\r\n \r\n\r\n },\r\n updateBadge: function (value) {\r\n\r\n $(\".notificationbadge\").text(value);\r\n if (value == 0) {\r\n $(\".notificationbadge\").hide();\r\n $(\".dropdown-menu\").removeClass(\"unread\")\r\n } else {\r\n $(\".dropdown-menu\").addClass(\"unread\")\r\n $(\".notificationbadge\").show();\r\n }\r\n },\r\n allTheNotificationsTrashed:function (n) {\r\n //find out if all the notifications in n are also in the locally stored trashed property.\r\n var untrashedNotifications = n.data.filter(function (notification) {\r\n var element = _announcementData['trash'].filter(function (element) { return ((element.notificationID == notification.ID) && (element.UserID == me._userId)) });\r\n return (element.length == 0);\r\n });\r\n return (untrashedNotifications.length==0);\r\n },\r\n updateNotificationList: function (n) {\r\n //update the notifications pane from local storage.\r\n //read the notifications from local storage.\r\n var list = $('#notificationDropDown');\r\n var bottomAnnouncements = new Array();\r\n n.data.forEach(function (x, i) {\r\n\r\n //trashed\r\n var element = _announcementData['trash'].filter(function (element) { return ((element.notificationID == x.ID) && (element.UserID == me._userId)) })\r\n if (element.length > 0) {\r\n x.trashed = true;\r\n } else {\r\n x.trashed = false;\r\n }\r\n\r\n var trashedClass = x['trashed'] ? 'trashed' : ''\r\n x['trashedClass'] = trashedClass;\r\n \r\n //acknowledgements\r\n var element = _announcementData['acknowledgements'].filter(function (element) { return ((element.notificationID == x.ID) && (element.UserID == me._userId)) })\r\n if (element.length > 0) {\r\n x.acked = true;\r\n } else {\r\n\r\n if (!x.trashed) {\r\n me.newAcks += 1;\r\n me.updateBadge(me.newAcks);\r\n }\r\n x.acked = false;\r\n }\r\n var ackedClass = x['acked'] ? 'read' : 'unread'\r\n x['ackedClass'] = ackedClass;\r\n });\r\n\r\n const sorter = function(a, b) {\r\n if ((a.acked == false) && (b.acked == false)) { return 0 }\r\n if (a.acked == false) { return -1 }\r\n if (a.acked == true) { return 1 }\r\n };\r\n n.data.sort(sorter);\r\n list.append(Beacon.Templates.notifications(n));\r\n //notification-card\r\n if (n.data.length > 0) {\r\n //if I trash it and all the messages are trashed notify the users there are no messages, or hide the bell\r\n $('.notification').show();\r\n if (this.allTheNotificationsTrashed(n)) {\r\n \r\n $(\"#nomessages\").show();\r\n $('.notification').hide();\r\n }\r\n $(\".notificationbadge\").addClass(\"badge\");\r\n //this prevents the div from collapsing when there is a link...\r\n $('ul li .notification-data-text a').on('click', function (e) {\r\n e.stopPropagation();\r\n });\r\n $('.dropdown-submenu div.notification-data ul').on(\"click\", function (e) {\r\n $(this).toggle();\r\n $(this).prev('ul').toggle();\r\n $(this).next('ul').toggle();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n\r\n $(\".notification-trash\").on(\"click\", function (e) {\r\n var likeSection = $(this).parent();\r\n var notes = $('.trash', this);\r\n notes.each(function (idx, r) {\r\n var trashElement = $(r).first();\r\n var noteId = trashElement.data(\"trash_id\");\r\n\r\n _announcementData['trash'].push({ 'notificationID': noteId, 'UserID': me._userId });\r\n Beacon.localStorage.setItem('announcementData', JSON.stringify(_announcementData));\r\n var hasbeenread = ($('[not_id=\"' + noteId + '\"]').hasClass(\"unread\"));\r\n $('[not_id=\"' + noteId + '\"]').addClass(\"trashed\");\r\n //if I trash it and all the messages are trashed notify the users there are no messages, or hide the bell\r\n if (me.allTheNotificationsTrashed(n)) {\r\n $(\"#nomessages\").show();\r\n }\r\n if (hasbeenread) {\r\n me.newAcks -= 1;\r\n me.updateBadge(me.newAcks);\r\n }\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n });\r\n\r\n $(\".notification-like\").on(\"click\", function (e) {\r\n var likeSection = $(this).parent();\r\n var notes = $('.like-badge', this);\r\n notes.each(function (idx, r) {\r\n var badgeElement = $(r).first();\r\n var noteId = badgeElement.data(\"noteid\");\r\n\r\n Beacon.API.AnnouncementAcknowledgement(me._activeId, noteId, function (value) {\r\n\r\n if (value.success == \"true\") {\r\n badgeElement.text(value.count);\r\n } else {\r\n var likeFailure = $('.like-failure', likeSection);\r\n likeFailure.text('Registered User Feature');\r\n likeFailure.show().delay(5000).fadeOut();\r\n }\r\n\r\n }\r\n );\r\n }\r\n );\r\n\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n\r\n var acknowlegeAnnouncment = function (e, j) {\r\n\r\n var value = _announcementData['acknowledgements'].filter(function (element) {\r\n return ((element.notificationID == parseInt(j.attr('not_id'))) && (element.UserID == me._userId));\r\n })\r\n\r\n if (value.length > 0) {\r\n //it's already acknowledged...do nothing\r\n } else {\r\n $('[not_id=\"' + j.attr('not_id') + '\"]').removeClass(\"unread\");\r\n me.newAcks=me.newAcks - 1\r\n me.updateBadge(me.newAcks);\r\n _announcementData['acknowledgements'].push({ 'notificationID': j.attr('not_id'), 'UserID': me._userId });\r\n Beacon.localStorage.setItem('announcementData', JSON.stringify(_announcementData));\r\n }\r\n if (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n $('.subject-top').on(\"click\", function (e) {\r\n\r\n $(this).next('div').children('ul').toggle();\r\n var z = $($(this).next('div').first('ul'));\r\n var b = z.next('ul');\r\n var v = $('.dropdown-submenu', $(this).next('div'));\r\n\r\n acknowlegeAnnouncment(null, $(v));\r\n b.toggle();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n\r\n $('.dropdown-submenu').on(\"click\", function (e) { acknowlegeAnnouncment(e, $(this)); })\r\n }\r\n else {\r\n //there is no notification to display.\r\n $('.notification').hide();\r\n }\r\n }\r\n \r\n};","Beacon.Charts = {\r\n\r\n CaptureTableData: function (ft) {\r\n var rows = [];\r\n var tbody = $(ft.table).find(\"> tbody\");\r\n tbody.find('> tr').each(function () {\r\n var $row = $(this);\r\n\r\n var rowHeadText = $row.find(\"th\").text();\r\n\r\n var cellValues = [];\r\n var cellHash = {};\r\n\r\n for (var i in ft.columns) {\r\n var column = ft.columns[i];\r\n var value = ft.parse(this.cells[column.sort.match], column);\r\n cellValues.push(value);\r\n if (column.name) {\r\n cellHash[column.name] = value;\r\n }\r\n }\r\n\r\n var row = { 'cells': cellValues, cells2: cellHash, rowHeader: rowHeadText };\r\n rows.push(row);\r\n return true;\r\n })\r\n\r\n var colHeaders = $.map(ft.columns, function (o) { return o.name });\r\n return { colHeaders: colHeaders, rows: rows };\r\n },\r\n\r\n // undefined/null for not found\r\n FindRow: function (ftData, indexOrName) {\r\n if (typeof indexOrName === 'number') {\r\n if (indexOrName < 0) {\r\n indexOrName = ftData.rows.length + indexOrName;\r\n }\r\n if (indexOrName >= ftData.rows.length) {\r\n return undefined;\r\n }\r\n return ftData.rows[indexOrName];\r\n } else {\r\n return _.find(ftData.rows, { 'rowHeader': indexOrName });\r\n }\r\n },\r\n\r\n // -1 for not found\r\n FindRowIndex: function (ftData, indexOrName) {\r\n if (typeof indexOrName === 'number') {\r\n if (indexOrName < 0) {\r\n indexOrName = ftData.rows.length + indexOrName;\r\n }\r\n if (indexOrName >= ftData.rows.length) {\r\n indexOrName = -1;\r\n }\r\n return indexOrName;\r\n } else {\r\n return _.findIndex(ftData.rows, { 'rowHeader': indexOrName });\r\n }\r\n },\r\n\r\n // -1 for not found\r\n FindColumnIndex: function (ftData, indexOrName) {\r\n if (typeof indexOrName === 'number') {\r\n if (indexOrName < 0) {\r\n indexOrName = ftData.colHeaders.length + indexOrName;\r\n }\r\n if (indexOrName >= ftData.colHeaders.length) {\r\n indexOrName = -1;\r\n }\r\n return indexOrName;\r\n } else {\r\n return _.indexOf(ftData.colHeaders, indexOrName);\r\n }\r\n },\r\n\r\n GetHorizontalSeries: function (ftData, startColumnIndexOrName, endColumnIndexOrName, rowIndexesOrNames, rowHeadIndexOrName, reverseSeries, colSeriesName) {\r\n\r\n var startCol = Beacon.Charts.FindColumnIndex(ftData, startColumnIndexOrName);\r\n var endCol = Beacon.Charts.FindColumnIndex(ftData, endColumnIndexOrName);\r\n\r\n // get categories:\r\n var categories = [];\r\n if (rowHeadIndexOrName != null) {\r\n // use row data\r\n var rowHeadIndex = Beacon.Charts.FindRowIndex(ftData, rowHeadIndexOrName); // x axis categories/values\r\n for (var i = startCol; i <= endCol; i++) {\r\n categories.push(ftData.rows[rowHeadIndex].cells[i]);\r\n }\r\n } else {\r\n // use the table column headings\r\n for (var colIndex = startCol; colIndex <= endCol; colIndex++) {\r\n categories.push(ftData.colHeaders[colIndex])\r\n }\r\n }\r\n\r\n if (reverseSeries) {\r\n categories.reverse();\r\n }\r\n categories.unshift('x-axis');\r\n\r\n // data series names:\r\n var colSeriesNameIndex;\r\n if (colSeriesName == null) {\r\n // default - null - use row header\r\n colSeriesNameIndex = null;\r\n } else {\r\n // find the column to use for series names\r\n colSeriesNameIndex = Beacon.Charts.FindColumnIndex(ftData, colSeriesName);\r\n }\r\n\r\n // data cols:\r\n var dataColumns = [categories];\r\n\r\n for (var i = 0; i < rowIndexesOrNames.length; i++) {\r\n var rowIndex = rowIndexesOrNames[i];\r\n var row = Beacon.Charts.FindRow(ftData, rowIndex);\r\n\r\n if (row) {\r\n var cols = [];\r\n\r\n for (var colIndex = startCol; colIndex <= endCol; colIndex++) {\r\n var cell = row.cells[colIndex];\r\n var v = Beacon.Charts.ParseValue(cell);\r\n cols.push(v);\r\n }\r\n\r\n if (reverseSeries) {\r\n cols.reverse();\r\n }\r\n\r\n // get data series name\r\n if (colSeriesNameIndex == null) {\r\n cols.unshift(row.rowHeader);\r\n } else {\r\n cols.unshift(row.cells[colSeriesNameIndex]);\r\n }\r\n\r\n dataColumns.push(cols);\r\n } else {\r\n console.warn(\"Missing row header: \" + rowIndex)\r\n }\r\n }\r\n\r\n return dataColumns;\r\n },\r\n\r\n GetVerticalSeries: function (ftData, startRowIndexOrName, endRowIndexOrName, colIndexesOrNames, colHeadIndexOrName, reverseSeries) {\r\n\r\n var startRow = Beacon.Charts.FindRowIndex(ftData, startRowIndexOrName);\r\n var endRow = Beacon.Charts.FindRowIndex(ftData, endRowIndexOrName);;\r\n var colHeadIndex = Beacon.Charts.FindColumnIndex(ftData, colHeadIndexOrName); // x axis categories/values\r\n\r\n // get categories:\r\n var categories = [];\r\n for (var i = startRow; i <= endRow; i++) {\r\n categories.push(ftData.rows[i].cells[colHeadIndex]);\r\n }\r\n if (reverseSeries) {\r\n categories.reverse();\r\n }\r\n categories.unshift('x-axis');\r\n\r\n // data rows:\r\n var dataColumns = [categories];\r\n\r\n for (var i = 0; i < colIndexesOrNames.length; i++) {\r\n var colIndex = colIndexesOrNames[i];\r\n\r\n var col = Beacon.Charts.FindColumnIndex(ftData, colIndex);\r\n\r\n if (col >= 0) {\r\n var cols = [];\r\n\r\n for (var rowIndex = startRow; rowIndex <= endRow; rowIndex++) {\r\n var cell = ftData.rows[rowIndex].cells[col];\r\n var v = Beacon.Charts.ParseValue(cell);\r\n cols.push(v);\r\n }\r\n if (reverseSeries) {\r\n cols.reverse();\r\n }\r\n cols.unshift(ftData.colHeaders[col]);\r\n\r\n dataColumns.push(cols);\r\n } else {\r\n console.warn(\"Missing column header: \" + colIndex)\r\n }\r\n }\r\n\r\n return dataColumns;\r\n },\r\n\r\n ParseValue: function (cell) {\r\n var val = cell.replace(/[^0-9.\\-\\(]/g, '').replace(/\\(/, '-'); // strip non numerics, and turn parens into negative numbers\r\n val = parseFloat(val);\r\n if (isNaN(val)) val = 0;\r\n return val;\r\n },\r\n\r\n CleanMissingCategoryData: function (chartData) {\r\n\r\n if (chartData.length === 0) {\r\n return;\r\n }\r\n\r\n for (var i = chartData[0].length - 1; i > 0; i--) {\r\n if (!chartData[0][i]) {\r\n // no value - nuke the corresponding data to keep c3 happy\r\n for (var j = 0; j < chartData.length; j++) {\r\n chartData[j].splice(i, 1);\r\n }\r\n }\r\n }\r\n },\r\n\r\n CreateChart: function (divId, colData, type) {\r\n\r\n\r\n\r\n // types: category | timeseries\r\n\r\n var chartConfig = {\r\n bindto: divId,\r\n data: {},\r\n axis: {\r\n x: {\r\n tick: {},\r\n padding: {}\r\n },\r\n y: {\r\n tick: {\r\n format: d3.format(\"$,.0f\")\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Configuration reference: https://c3js.org/reference.html\r\n // d3 number format reference: https://github.com/d3/d3-format\r\n\r\n switch (type) {\r\n case 'category':\r\n chartConfig.data.x = 'x-axis';\r\n chartConfig.data.columns = colData;\r\n chartConfig.axis.x.type = 'category';\r\n break;\r\n\r\n case 'timeseries':\r\n chartConfig.data.x = 'x-axis';\r\n chartConfig.data.columns = colData;\r\n chartConfig.data.xFormat = '%m/%d/%Y';\r\n chartConfig.axis.x.type = 'timeseries';\r\n chartConfig.axis.x.tick.format = '%m/%d/%Y';\r\n chartConfig.axis.x.padding.left = 1000 * 3600 * 24 * 365; // 120 days\r\n chartConfig.axis.x.padding.right = chartConfig.axis.x.padding.left;\r\n break;\r\n\r\n case 'bar':\r\n chartConfig.data.type = 'bar';\r\n chartConfig.data.columns = colData.slice(1);\r\n chartConfig.axis.x.type = 'category';\r\n chartConfig.axis.x.categories = colData[0].slice(1);\r\n break;\r\n\r\n case 'stackedbar':\r\n chartConfig.data.type = 'bar';\r\n chartConfig.data.columns = colData.slice(1);\r\n chartConfig.axis.x.type = 'category';\r\n chartConfig.axis.x.categories = colData[0].slice(1);\r\n chartConfig.data.groups = [$.map(colData, function (cd, idx) { return (idx === 0) ? null : cd[0] })];\r\n break;\r\n\r\n default:\r\n console.error(\"Invalid chart type: \" + type);\r\n\r\n }\r\n\r\n var chart = c3.generate(chartConfig);\r\n\r\n },\r\n\r\n\r\n\r\n _loaderPromise: null,\r\n\r\n LoadC3: function (onloadCallback) {\r\n\r\n if (Beacon.Charts._loaderPromise) {\r\n return Beacon.Charts._loaderPromise;\r\n }\r\n\r\n var p1 = new $.Deferred();\r\n var p2 = new $.Deferred();\r\n\r\n // chain the 3 promises\r\n Beacon.Charts._loaderPromise = $.when(p1, p2).promise();\r\n\r\n // use beacon CDN folder\r\n var path = Beacon._cdnUrl;\r\n\r\n //c3 css file has been added to lib.css, since its really small\r\n\r\n // but these JS files are pretty big, so we load them on demand\r\n var d3js = document.createElement('script');\r\n d3js.onload = function () { p1.resolve(); };\r\n d3js.src = path + '/js/d3.min.js';\r\n document.head.appendChild(d3js);\r\n\r\n var c3js = document.createElement('script');\r\n c3js.onload = function () { p2.resolve(); };\r\n c3js.src = path + '/js/c3.min.js';\r\n document.head.appendChild(c3js);\r\n\r\n return Beacon.Charts._loaderPromise;\r\n\r\n },\r\n\r\n InsertChart: function (ft, chartDom, options) {\r\n\r\n Beacon.Charts.LoadC3().then(function () {\r\n try {\r\n var ftData = Beacon.Charts.CaptureTableData(ft);\r\n var tableData;\r\n switch (options.tableType) {\r\n case 'H':\r\n tableData = Beacon.Charts.GetHorizontalSeries(ftData, options.dataStart, options.dataEnd, options.dataSeries, options.heading, options.reverseData, options.seriesName);\r\n break;\r\n case 'V':\r\n tableData = Beacon.Charts.GetVerticalSeries(ftData, options.dataStart, options.dataEnd, options.dataSeries, options.heading, options.reverseData);\r\n break;\r\n default:\r\n console.error(\"Invalid table read mode (H or V): \" + options.tableType);\r\n }\r\n Beacon.Charts.CleanMissingCategoryData(tableData);\r\n Beacon.Charts.CreateChart(chartDom, tableData, options.chartType);\r\n } catch (ex) {\r\n console.error('Failed to initialize chart for module',options,ex);\r\n }\r\n });\r\n\r\n },\r\n\r\n InitChart: function (ft, chartInfo, moduleId) {\r\n\r\n var dataTable = $(ft.table);\r\n \r\n var btn = $(''); \r\n\r\n dataTable.after(btn);\r\n\r\n var divChart = null; // track the div so we can just toggle visibility after is gets created\r\n\r\n var visible = false;\r\n var shouldShow = IsShown(moduleId);\r\n var icon = $(\"span.icon\", btn);\r\n var label = $(\"span.chart-toggle-label\", btn);\r\n\r\n btn.click(function () {\r\n if (!divChart) {\r\n // create and show\r\n CreateAndShow()\r\n AddToShownList(moduleId);\r\n } else {\r\n // after it exists, just toggle visibility\r\n if (visible) {\r\n $(divChart).hide();\r\n RemoveFromShownList(moduleId);\r\n icon.removeClass(\"icon-minus-squared-alt\").addClass(\"icon-plus-squared-alt\");\r\n label.text(\"Show chart\");\r\n btn.html();\r\n visible = false;\r\n } else {\r\n $(divChart).show();\r\n AddToShownList(moduleId);\r\n icon.removeClass(\"icon-plus-squared-alt\").addClass(\"icon-minus-squared-alt\");\r\n label.text(\"Hide chart\");\r\n visible = true;\r\n }\r\n }\r\n\r\n });\r\n\r\n\r\n if (shouldShow || chartInfo.autoShow) {\r\n _.defer(function () { // this lets most of the pending layout finish first\r\n CreateAndShow();\r\n })\r\n }\r\n\r\n function CreateAndShow() {\r\n // create and show\r\n divChart = document.createElement('div');\r\n var bodyZoom = $(\"body\").css(\"zoom\");\r\n if (bodyZoom !== 1.0) {\r\n // If the body element has a zoom applied, we need to reverse it for the chart. Not sure why.\r\n $(divChart).css({ \"zoom\": 1.0 / bodyZoom });\r\n }\r\n //dataTable.after(divChart);\r\n btn.after(divChart);\r\n Beacon.Charts.InsertChart(ft, divChart, chartInfo);\r\n visible = true;\r\n icon.removeClass(\"icon-plus-squared-alt\").addClass(\"icon-minus-squared-alt\");\r\n label.text(\"Hide chart\");\r\n }\r\n\r\n function ReadList() {\r\n try {\r\n return JSON.parse(Beacon.localStorage.getItem(\"CHARTS\") || \"[]\");\r\n } catch (e) {\r\n return [];\r\n }\r\n }\r\n\r\n function WriteList(l) {\r\n Beacon.localStorage.setItem(\"CHARTS\", JSON.stringify(l));\r\n }\r\n\r\n function IsShown(moduleId) {\r\n return _.indexOf(ReadList(), moduleId) >= 0;\r\n }\r\n\r\n function RemoveFromShownList(moduleId) {\r\n var l = ReadList();\r\n l = _.without(l, moduleId);\r\n WriteList(l);\r\n }\r\n\r\n function AddToShownList(moduleId) {\r\n var l = ReadList();\r\n l.push(moduleId);\r\n WriteList(l);\r\n }\r\n },\r\n\r\n CLASS_NAME: \"Beacon.Charts\"\r\n\r\n};\r\n\r\n\r\n(function ($, w, undefined) {\r\n if (w.footable === undefined || w.foobox === null)\r\n throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.');\r\n\r\n var defaults = {\r\n enabled: true\r\n };\r\n\r\n function BeaconCharts(ftmid) {\r\n var p = this;\r\n p.name = 'Footable Beacon Charting Plugin';\r\n p.init = function (ft) {\r\n\r\n // INIT: \r\n $(ft.table).bind({\r\n 'footable_initialized': function (e) {\r\n\r\n try {\r\n // get index of this table in the module\r\n var moduleSection = $(e.ft.table).parents(\".module-content\");\r\n var moduleId = parseInt(moduleSection.parent().find(\".module-header\").attr('moduleid'));\r\n\r\n var ftTables = moduleSection.find(\"table.footable\");\r\n\r\n var ftIndex = _.indexOf(ftTables, e.ft.table);\r\n if (ftIndex < 0) {\r\n return;\r\n }\r\n\r\n // find script template - only 1 per module\r\n var chartOptionScript = moduleSection.find(\"SCRIPT[type='text/x-beacon-chart']\");\r\n if (chartOptionScript.length === 0) {\r\n return;\r\n }\r\n\r\n var chartOption = JSON.parse(chartOptionScript.text());\r\n\r\n // check each one for matching index\r\n chartOption.tableIndex = chartOption.tableIndex || 0;\r\n if (chartOption.tableIndex === ftIndex) {\r\n // init chart support\r\n Beacon.Charts.InitChart(ft, chartOption, moduleId);\r\n }\r\n } catch (ex) {\r\n console.error(ex);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n\r\n w.footable.plugins.register(BeaconCharts, defaults);\r\n\r\n})(jQuery, window);","Beacon.FileUploader = {\r\n\r\n ShowUploadDialog: function (url, acceptedFiles, callback, parallelUploads) {\r\n /*\r\n * url - upload endpoint (required)\r\n * callback - null will do a page refresh, otherwise call 'callback' when upload queue has been completed (optional)\r\n * acceptedFiles - comma-sep list of mimetypes and/or file extensions: image/*,application/pdf,.psd (optional)\r\n * parallelUploads - optional - default value is 1\r\n */\r\n\r\n var dzOptions =\r\n {\r\n method: \"POST\",\r\n url: url,\r\n timeout: 10 * 60 * 1000, // 10 minutes\r\n maxFilesize: 1000, // MB\r\n parallelUploads: parallelUploads || 1,\r\n addRemoveLinks: false,\r\n createImageThumbnails: false,\r\n disablePreviews: false,\r\n clickable: true,\r\n chunking: true,\r\n forceChunking: true,\r\n chunkSize: 1024 * 1024, // 1MB\r\n parallelChunkUploads: false,\r\n retryChunks: false, // seems useful, but backend probably doesn't support this\r\n retryChunksLimit: 3,\r\n previewTemplate: Beacon.Templates.DropzoneUpload(),\r\n acceptedFiles: acceptedFiles,\r\n\r\n init: function () {\r\n var dz = this;\r\n this.on(\"queuecomplete\", function (files, response) {\r\n if (dz.getRejectedFiles().length === 0) {\r\n if (callback) {\r\n setTimeout(function () {\r\n callback();\r\n $(\"div.modal\").modal('hide');\r\n }, 1000);\r\n } else {\r\n setTimeout(function () { window.location.reload(); }, 1000);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n var myDzId = \"dz_\" + (new Date()).valueOf();\r\n var formHtml = \"
    \";\r\n Beacon.Dialogs.showWithHtml(null, \"Upload files\", formHtml, false, \"Close\", function () { myDz.disable(); $(\"#\" + myDzId).remove(); });\r\n var myDz = new Dropzone(\"#\" + myDzId, dzOptions);\r\n\r\n },\r\n\r\n CLASS_NAME: 'Beacon.FileUploader'\r\n\r\n};\r\n\r\n","// the prototypelib was lifted from openlayers... which I think got it from some other project? I just changed the name to prevent forest fires.\r\n\r\nPrototypeLib = {}; \r\n \r\nPrototypeLib.Class = function () {\r\n var len = arguments.length;\r\n var P = arguments[0];\r\n var F = arguments[len - 1];\r\n\r\n var C = typeof F.initialize == \"function\" ?\r\n F.initialize :\r\n function () { P.apply(this, arguments); };\r\n\r\n if (len > 1) {\r\n var newArgs = [C, P].concat(\r\n Array.prototype.slice.call(arguments).slice(1, len - 1), F);\r\n PrototypeLib.inherit.apply(null, newArgs);\r\n } else {\r\n C.prototype = F;\r\n }\r\n return C;\r\n};\r\n\r\nPrototypeLib.inherit = function (C, P) {\r\n var F = function () { };\r\n F.prototype = P.prototype;\r\n C.prototype = new F;\r\n var i, l, o;\r\n for (i = 2, l = arguments.length; i < l; i++) {\r\n o = arguments[i];\r\n if (typeof o === \"function\") {\r\n o = o.prototype;\r\n }\r\n PrototypeLib.Util.extend(C.prototype, o);\r\n }\r\n};\r\n\r\nPrototypeLib.Util = PrototypeLib.Util || {};\r\nPrototypeLib.Util.extend = function (destination, source) {\r\n destination = destination || {};\r\n if (source) {\r\n for (var property in source) {\r\n var value = source[property];\r\n if (value !== undefined) {\r\n destination[property] = value;\r\n }\r\n }\r\n\r\n /**\r\n * IE doesn't include the toString property when iterating over an object's\r\n * properties with the for(property in object) syntax. Explicitly check if\r\n * the source has its own toString property.\r\n */\r\n\r\n /*\r\n * FF/Windows < 2.0.0.13 reports \"Illegal operation on WrappedNative\r\n * prototype object\" when calling hawOwnProperty if the source object\r\n * is an instance of window.Event.\r\n */\r\n\r\n var sourceIsEvt = typeof window.Event == \"function\"\r\n && source instanceof window.Event;\r\n\r\n if (!sourceIsEvt\r\n && source.hasOwnProperty && source.hasOwnProperty(\"toString\")) {\r\n destination.toString = source.toString;\r\n }\r\n }\r\n return destination;\r\n};\r\n\r\n// define DataEditor class:\r\n\r\nBeacon.DataEditor = PrototypeLib.Class({\r\n\r\n editConfig: null,\r\n saveButtonDiv: null,\r\n editItems: null,\r\n defaultEmail: null,\r\n newGroupCounter: null,\r\n \r\n initialize: function (editConfig, defaultEmail) {\r\n this.editConfig = editConfig;\r\n this.defaultEmail = defaultEmail;\r\n this.newGroupCounter = {};\r\n this.hookup();\r\n //this.hookupAddRowButtons();\r\n this.hookupTemplates($('.editorNewRowTempate'));\r\n },\r\n \r\n\r\n hookup: function () {\r\n var editConfig = this.editConfig;\r\n var me = this;\r\n\r\n this.editItems = [];\r\n\r\n // create the save button\r\n var btn = $(\"
    Submit Changes
    \");\r\n $('.page-center-pane').prepend(btn);\r\n btn.click(function () { me.showConfirmation(); });\r\n\r\n\r\n this.saveButtonDiv = btn;\r\n\r\n\r\n // attach the edit ui to each item\r\n var nontemplateitems = $('[editKey]');\r\n nontemplateitems.each(function () {\r\n if ($(this).parents('.editorNewRowTempate').length == 0) {\r\n me.hookupEditItem(this, me, editConfig);\r\n }\r\n //me.hookupEditItem(this, me, editConfig);\r\n });\r\n\r\n // process hidden admin areas\r\n $('.editorHiddenForNormalUsers').removeClass('editorHiddenForNormalUsers');\r\n\t\t$('.editorHiddenForEditUsers').hide();\r\n\r\n },\r\n\r\n redrawContent: function () {\r\n if (this.isChanged()) {\r\n //show save button\r\n this.saveButtonDiv.slideDown();\r\n } else {\r\n //hide save button\r\n this.saveButtonDiv.slideUp();\r\n }\r\n },\r\n\r\n isChanged: function () {\r\n for (var i = 0; i < this.editItems.length; i++) {\r\n var editItem = this.editItems[i];\r\n if (editItem.isChanged()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n clear: function () {\r\n for (var i = 0; i < this.editItems.length; i++) {\r\n var editItem = this.editItems[i];\r\n editItem.clear();\r\n }\r\n },\r\n\r\n showConfirmation: function () { // formerly had parameters: html, title\r\n\r\n var tmpl = $('#editorTemplate_SendEmailForm');\r\n var html = tmpl.html();\r\n\r\n $.colorbox({\r\n title: \"\", // title,\r\n open: true,\r\n html: html,\r\n width: '500px',\r\n height: '300px'\r\n });\r\n\r\n var me = this;\r\n $('#editorSendButton').click(function () { me.sendData(); });\r\n $('#editorCancelButton').click(function () { $.colorbox.close(); });\r\n $('#editorUpdatesSentText').text(\"\");\r\n $('#editorEmailAddress').val(this.defaultEmail);\r\n },\r\n\r\n sendData: function () {\r\n $('#editorButtonSpan').hide();\r\n $('#editorAjaxImage').show();\r\n $('#editorUpdatesSentText').text(\"Sending data to server...\");\r\n\r\n //gather data:\r\n\r\n var o = {\r\n email: $('#editorEmailAddress').val(),\r\n url: document.location.href,\r\n keyValue: mapConfig.KeyValue,\r\n html: $(\".page-center-pane\").html(),\r\n values: []\r\n };\r\n\r\n for (var i = 0; i < this.editItems.length; i++) {\r\n var editItem = this.editItems[i];\r\n if (editItem.isChanged()) {\r\n\r\n //make everything into an array\r\n var value = (editItem.value instanceof Array) ? editItem.value : [editItem.value];\r\n\r\n o.values.push({\r\n title: editItem.config.title,\r\n value: value,\r\n group: editItem.editGroup\r\n });\r\n }\r\n }\r\n\r\n //sent the data!\r\n Beacon.API.PostDataEdits(o, function () {\r\n //success\r\n $('#editorButtonSpan').show();\r\n $('#editorAjaxImage').hide();\r\n $('#editorUpdatesSentText').text(\"Your updates have been sent.\");\r\n }, function () {\r\n console.dir(arguments);\r\n //fail\r\n $('#editorButtonSpan').show();\r\n $('#editorAjaxImage').hide();\r\n $('#editorUpdatesSentText').text(\"Failure to send data to server.\");\r\n },\r\n this);\r\n\r\n },\r\n\r\n hookupEditItem: function (element, me, editConfig) {\r\n var span = $(element);\r\n var editKey = span.attr('editKey');\r\n var cfg = editConfig[editKey];\r\n if (cfg) {\r\n var edititem = new Beacon.DataEditor.EditItem(cfg, editKey, span, me);\r\n me.editItems.push(edititem);\r\n } else {\r\n span.addClass('editorUnknownItem')\r\n .attr('title', 'The edit key [' + editKey + '] was not found in the editor configuration.');\r\n }\r\n },\r\n\r\n\r\n hookupTemplates: function (templates) {\r\n var editConfig = this.editConfig;\r\n var me = this;\r\n\r\n templates.each(function () {\r\n \r\n var targetElement = $(this); // this is the template we are going to copy\r\n\r\n // if we descend from another template, then don't do anything\r\n if (targetElement.parents(\".editorNewRowTempate\").length == 0) { \r\n\r\n var addbutton = $('
    ');\r\n addbutton.html(' ' + targetElement.attr('editAddNewButtonText') || \"New\"); // set button text from attribute, if available\r\n\r\n if (targetElement.is(\"tr\")) {\r\n // table row - need to add button after table\r\n targetElement.closest(\"table\").after(addbutton);\r\n } else {\r\n // normal div or something - add button after template\r\n targetElement.after(addbutton);\r\n }\r\n\r\n\r\n // add click events\r\n addbutton.click(function () {\r\n\r\n //clone row\r\n var tmpHtml = targetElement.clone();\r\n tmpHtml.removeClass('editorNewRowTempate');\r\n tmpHtml.addClass('editorNewRow');\r\n tmpHtml.hide();\r\n\r\n me.hookupTemplates($('.editorNewRowTempate',tmpHtml));\r\n\r\n // add delete button\r\n var deleteBtn = $(\"\");\r\n deleteBtn.html(' ' + (targetElement.attr('editDeleteButtonText') || \"Delete\"));\r\n\r\n deleteBtn.click(function() {\r\n \r\n //remove deleted edit controls\r\n var tmpItems = $(\"[editKey]\", tmpHtml);\r\n for (var i = 0; i < tmpItems.length; i++) {\r\n var tmpItem = tmpItems[i];\r\n var newEditItems = $(me.editItems).filter(function(j) {\r\n var editItem = me.editItems[j];\r\n\r\n if (editItem.originalElement[0] === tmpItem) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n });\r\n me.editItems = newEditItems;\r\n }\r\n\r\n deleteBtn.remove();\r\n tmpHtml.remove();\r\n\r\n me.redrawContent();\r\n });\r\n \r\n if (tmpHtml.is(\"tr\")) {\r\n // table row - need to add button into 1st cell\r\n deleteBtn.attr(\"title\", \"Delete this row\");\r\n var td = $(\"\");\r\n $(tmpHtml).append(td.append(deleteBtn));\r\n } else {\r\n // normal div or something - add button after template\r\n deleteBtn.attr(\"title\", \"Delete this new item\");\r\n $(tmpHtml).prepend(deleteBtn);\r\n }\r\n\r\n // insert new item right above template\r\n targetElement.before(tmpHtml);\r\n\r\n tmpHtml.fadeIn();\r\n\r\n // set up new group id\r\n var tmpGroupName = tmpHtml.attr('editGroup');\r\n if (!tmpGroupName) {\r\n tmpGroupName = \"New item\";\r\n }\r\n\r\n var groupCounter = me.newGroupCounter[tmpGroupName];\r\n if (!groupCounter) {\r\n groupCounter = 0;\r\n }\r\n groupCounter++;\r\n me.newGroupCounter[tmpGroupName] = groupCounter;\r\n\r\n // wire up events\r\n $('[editKey]', tmpHtml).each(function () {\r\n if ( $(this).parents(\".editorNewRowTempate\").length == 0) { \r\n // poke in new edit group or append group name\r\n var itemGroupName = $(this).attr(\"editGroup\");\r\n if (itemGroupName) {\r\n $(this).attr(\"editGroup\", tmpGroupName + ' ' + groupCounter + ' ' + itemGroupName);\r\n } else {\r\n $(this).attr(\"editGroup\", tmpGroupName + ' ' + groupCounter);\r\n }\r\n me.hookupEditItem(this, me, editConfig);\r\n }\r\n });\r\n\r\n\r\n \r\n });\r\n\r\n }\r\n\r\n });\r\n\r\n },\r\n\r\n \r\n CLASS_NAME: \"Beacon.DataEditor\"\r\n});\r\n\r\n\r\n\r\nBeacon.DataEditor.EditItem = PrototypeLib.Class({\r\n\r\n config: null,\r\n editKey: null,\r\n editGroup: null,\r\n\r\n dataEditor: null, //parent editor object\r\n\r\n originalElement: null, //jquery object\r\n originalText: null,\r\n containerDiv: null, //jquery object\r\n editButtonDiv: null, //jquery object\r\n deleteButtonDiv: null,\r\n isDeleted: false,\r\n\r\n\r\n value: null, // null (no input) | string (single value input) | [] (multi value inputs)\r\n keep: false, // set to true when user wants to keep original value\r\n\r\n html: null, // string - template for ui\r\n\r\n initialize: function (config, editKey, element, editor) {\r\n this.config = config;\r\n this.editKey = editKey,\r\n this.originalElement = element;\r\n this.dataEditor = editor;\r\n this.isDeleted = false;\r\n\r\n this.hookup();\r\n },\r\n\r\n hookup: function () {\r\n\r\n // make sure template exists\r\n if (!this.isValidTemplate()) {\r\n this.originalElement.addClass('editorUnknownItem')\r\n\t\t\t .attr('title', 'Invalid editor template specified [' + this.config.mode + '] for edit key [' + this.editKey + ']');\r\n return; //don't configure anything else\r\n }\r\n\r\n // get template\r\n var tmpl = $('#editorTemplate_' + this.config.mode);\r\n this.html = tmpl.html();\r\n this.valueTemplate = tmpl.attr('valuetemplate');\r\n\r\n // original value\r\n this.originalElement.addClass('editorOriginalItem');\r\n this.originalText = this.originalElement.text() || '(blank)';\r\n this.editGroup = this.originalElement.attr('editGroup');\r\n\r\n // create edit container\r\n this.containerDiv = $(\"
    \");\r\n this.originalElement.after(this.containerDiv);\r\n\r\n // create edit/delete buttons\r\n this.editButtonDiv = $(\"
    \");\r\n this.deleteButtonDiv = $(\"
    \");\r\n this.originalElement.before(this.editButtonDiv);\r\n //this.editButtonDiv.addClass(this.config.multiItem ? 'editorEditButtonAppend' : 'editorEditButtonUpdate');\r\n this.editButtonDiv.addClass(this.config.multiItem ? 'glyphicon glyphicon-plus' : 'glyphicon glyphicon-pencil');\r\n this.editButtonDiv.attr('title', this.config.multiItem ? 'Add an update to this value' : 'Update this value');\r\n\r\n \r\n\r\n // wire up events\r\n var me = this; // useful for jQuery event functions using different 'this' context\r\n\r\n this.deleteButtonDiv.click(function () {\r\n me.originalElement.addClass('editorOriginalItemChanged');\r\n me.keep = false;\r\n if (me.config.multiItem) {\r\n if (!me.value) {\r\n me.value = ['DELETE: ' + me.originalText];\r\n }\r\n } else {\r\n if (!me.value) {\r\n me.value = \"DELETE: \" + me.originalText;\r\n }\r\n } \r\n me.redrawContent();\r\n });\r\n\r\n this.originalElement\r\n\t\t .hover(function () { $(this).addClass('editorOriginalItemHover'); },\r\n\t\t\t function () { $(this).removeClass('editorOriginalItemHover'); })\r\n\t\t .click(function () { me.editItemClick(); });\r\n\r\n this.editButtonDiv\r\n\t\t .hover(function () { $(this).addClass('editorEditButtonHover'); },\r\n\t\t\t function () { $(this).removeClass('editorEditButtonHover'); })\r\n\t\t .click(function () { me.editItemClick(); });\r\n\r\n this.redrawContent();\r\n },\r\n\r\n editItemClick: function () {\r\n\r\n // poor man's template engine:\r\n var html = this.renderTemplate(this.config, this.html);\r\n html = html.replace('${originalText}', this.originalText);\r\n\r\n // display overlay\r\n $.colorbox({\r\n title: this.config.title,\r\n open: true,\r\n html: html,\r\n width: '580px',\r\n height: '500px'\r\n });\r\n\r\n\r\n //set initial values - specified default, unless there was a previous value (for single items)\r\n var theDefaultValue = (this.config.multiItem ? null : this.value) || this.config.defaultValue;\r\n if (this.config.multiItem) {\r\n $('#editorKeepOriginalValue').prop(\"checked\", true);\r\n } else {\r\n $('#divKOV').hide();\r\n }\r\n \r\n\r\n switch (this.config.mode) {\r\n\r\n case 'number':\r\n $(\"#editorTemplate_textbox\").val(theDefaultValue);\r\n this.setupNumericInput($(\"#editorTemplate_textbox\"), $('#editorSaveButton'));\r\n break;\r\n\r\n case 'text':\r\n $(\"#editorTemplate_textbox\").val(theDefaultValue);\r\n this.setupTextInput($(\"#editorTemplate_textbox\"), $('#editorSaveButton'));\r\n break;\r\n\r\n case 'largetext':\r\n $(\"#editorTemplate_textbox\").val(theDefaultValue);\r\n break;\r\n\r\n case 'dropdownlargetext':\r\n var ddl = $(\"#editorTemplate_codeDdl\");\r\n this.setupDropdownList(ddl, this.config.values, theDefaultValue, true);\r\n $(\"#editorTemplate_textbox\").val(theDefaultValue);\r\n ddl.change(function () {\r\n var txt = $(\"#editorTemplate_textbox\").val();\r\n if (ddl.val()) {\r\n $(\"#editorTemplate_textbox\").val(txt + ddl.val() + \" \");\r\n ddl.val(\"\");\r\n }\r\n });\r\n break;\r\n\r\n case 'pickone':\r\n var ul = $(\".editorPickOne\");\r\n this.setupPickList(ul, this.config.values, null, false);\r\n break;\r\n\r\n case 'pickmany':\r\n var ul = $(\".editorPickOne\");\r\n this.setupPickList(ul, this.config.values, null, true, theDefaultValue);\r\n break;\r\n case 'pickmanywithqty':\r\n var ul = $(\".editorPickOne\");\r\n this.setupPickList(ul, this.config.values, null, true, theDefaultValue, true);\r\n break;\r\n case 'dropdownlistpickmany':\r\n var ddl = $(\"#editorTemplate_ddl\");\r\n var ul = $(\".editorPickOne\");\r\n this.setupDropdownList(ddl, this.config.values, theDefaultValue, false);\r\n this.setupPickList(ul, this.config.values2, null, true, this.config.defaultValue2);\r\n break;\r\n\r\n case 'dropdownlist':\r\n var ddl = $(\"#editorTemplate_ddl\");\r\n this.setupDropdownList(ddl, this.config.values, theDefaultValue, false);\r\n break;\r\n\r\n case 'dropdownlistquantity':\r\n var ddl = $(\"#editorTemplate_ddl\");\r\n this.setupDropdownList(ddl, this.config.values, theDefaultValue, false);\r\n this.setupNumericInput($(\"#editorTemplate_textbox\"), $('#editorSaveButton'));\r\n break;\r\n\r\n case 'dropdownlisttext':\r\n var ddl = $(\"#editorTemplate_ddl\");\r\n this.setupDropdownList(ddl, this.config.values, theDefaultValue, false);\r\n this.setupTextInput($(\"#editorTemplate_textbox\"), $('#editorSaveButton'));\r\n break;\r\n\r\n case 'doubledropdownlist':\r\n var ddl = $(\"#editorTemplate_ddl\");\r\n this.setupDropdownList(ddl, this.config.values, theDefaultValue, false);\r\n var ddl2 = $(\"#editorTemplate_ddl2\");\r\n this.setupDropdownList(ddl2, this.config.values2, this.config.defaultValue2, false);\r\n break;\r\n\r\n case 'doubledropdownlistquantity':\r\n var ddl = $(\"#editorTemplate_ddl\");\r\n this.setupDropdownList(ddl, this.config.values, theDefaultValue, false);\r\n var ddl2 = $(\"#editorTemplate_ddl2\");\r\n this.setupDropdownList(ddl2, this.config.values2, this.config.defaultValue2, false);\r\n this.setupNumericInput($(\"#editorTemplate_textbox\"), $('#editorSaveButton'));\r\n break;\r\n\r\n case 'tripledropdownlist':\r\n var ddl = $(\"#editorTemplate_ddl\");\r\n this.setupDropdownList(ddl, this.config.values, theDefaultValue, false);\r\n var ddl2 = $(\"#editorTemplate_ddl2\");\r\n this.setupDropdownList(ddl2, this.config.values2, this.config.defaultValue2, false);\r\n var ddl3 = $(\"#editorTemplate_ddl3\");\r\n this.setupDropdownList(ddl3, this.config.values3, this.config.defaultValue3, false);\r\n break;\r\n\r\n case 'dimensions':\r\n $(\"#editorTemplate_textbox1\").val(theDefaultValue);\r\n $(\"#editorTemplate_textbox2\").val(theDefaultValue);\r\n this.setupTextInput($(\"#editorTemplate_textbox1\"), $('#editorSaveButton'));\r\n this.setupTextInput($(\"#editorTemplate_textbox2\"), $('#editorSaveButton'));\r\n break;\r\n\r\n case 'dimensionsheight':\r\n this.setupTextInput($(\"#editorTemplate_textbox1\"), $('#editorSaveButton'));\r\n this.setupTextInput($(\"#editorTemplate_textbox2\"), $('#editorSaveButton'));\r\n this.setupTextInput($(\"#editorTemplate_textbox3\"), $('#editorSaveButton'));\r\n break;\r\n\r\n case 'pickonewithdimensions':\r\n var ul = $(\".editorPickOne\");\r\n this.setupPickList(ul, this.config.values, null, true);\r\n this.setupTextInput($(\"#editorTemplate_textbox1\"), $('#editorSaveButton'));\r\n this.setupTextInput($(\"#editorTemplate_textbox2\"), $('#editorSaveButton'));\r\n break;\r\n\r\n case 'pickonewithdimensionsyear':\r\n var ul = $(\".editorPickOne\");\r\n this.setupPickList(ul, this.config.values, null, true);\r\n this.setupTextInput($(\"#editorTemplate_textbox1\"), $('#editorSaveButton'));\r\n this.setupTextInput($(\"#editorTemplate_textbox2\"), $('#editorSaveButton'));\r\n this.setupTextInput($(\"#editorTemplate_textbox3\"), $('#editorSaveButton'));\r\n break;\r\n\r\n }\r\n\r\n //hook up events - connects to all objects with the editorSaveButton class\r\n this.setupSaveButton($(\"#editorSaveButton\"));\r\n\r\n },\r\n\r\n setupSaveButton: function (btn) {\r\n var me = this;\r\n if (this.config.multiItem) {\r\n btn.attr('value', 'Add Item');\r\n } else {\r\n btn.attr('value', 'Update');\r\n }\r\n btn.click(function () {\r\n me.onSaveButtonClick();\r\n });\r\n },\r\n\r\n setupDropdownList: function (ddl, values, selectedValue, showBlankItem) {\r\n if (showBlankItem) {\r\n var opt = $(\"\");\r\n ddl.append(opt);\r\n }\r\n for (var i = 0; i < values.length; i++) {\r\n var opt = $(\"\");\r\n if (values[i] == selectedValue) {\r\n opt.attr('selected', 'selected');\r\n }\r\n opt.text(values[i]);\r\n ddl.append(opt);\r\n }\r\n },\r\n\r\n setupPickList: function (ul, values, selectedValue, toggleMode, theDefaultValue,showItemQty) {\r\n var defs = [];\r\n if (theDefaultValue) {\r\n defs = theDefaultValue.split(\"; \");\r\n }\r\n\r\n for (var i = 0; i < values.length; i++) {\r\n var li = null;\r\n if (showItemQty) {\r\n li = $(\"
  • Qty:
  • \");\r\n }\r\n else {\r\n li = $(\"
  • \");\r\n }\r\n \r\n li.children('span').text(values[i]);\r\n if (values[i] == selectedValue) {\r\n li.child('span').addClass('editorPickOneDefault');\r\n }\r\n if ($.inArray(values[i], defs) > -1) {\r\n li.child('span').addClass('editorPickOneSelect');\r\n }\r\n ul.append(li);\r\n };\r\n\r\n var me = this;\r\n\r\n $(\"LI\", ul)\r\n .click(function () {\r\n if (toggleMode) {\r\n $(this).toggleClass('editorPickOneSelect');\r\n } else {\r\n me.onSaveButtonClick($(this).text());\r\n }\r\n })\r\n .hover(function () { $(this).addClass('editorPickOneHover'); },\r\n function () { $(this).removeClass('editorPickOneHover'); });\r\n\r\n $(\"LI .itemQty\", ul)\r\n .click(function (e) {\r\n if (e && e.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n });\r\n },\r\n\r\n setupNumericInput: function (element, saveButton) {\r\n element.keypress(function (event) {\r\n if (($.inArray(event.keyCode, [8, 35, 36, 37, 39]) == -1) &&\r\n\t\t ($.inArray(event.which, [45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57]) == -1)) {\r\n event.preventDefault();\r\n }\r\n if (event.which == 13) {\r\n saveButton.click();\r\n }\r\n });\r\n },\r\n\r\n setupTextInput: function (element, saveButton) {\r\n if (event.which == 13) {\r\n saveButton.click();\r\n }\r\n },\r\n\r\n onSaveButtonClick: function (value) {\r\n\r\n var input1, input2, input3, input4;\r\n\r\n switch (this.config.mode) {\r\n\r\n case 'number':\r\n input1 = $(\"#editorTemplate_textbox\").val();\r\n if (!input1) { return; }\r\n break;\r\n\r\n case 'largetext':\r\n input1 = $(\"#editorTemplate_textbox\").val();\r\n if (!input1) { return; }\r\n break;\r\n\r\n case 'dropdownlargetext':\r\n input1 = $(\"#editorTemplate_textbox\").val();\r\n if (!input1) { return; }\r\n break;\r\n\r\n case 'text':\r\n input1 = $(\"#editorTemplate_textbox\").val();\r\n if (!input1) { return; }\r\n break;\r\n\r\n case 'pickone':\r\n input1 = value;\r\n break;\r\n\r\n case 'pickmany':\r\n input1 = $('.editorPickOneSelect').map(function () { return $(this).text(); }).toArray().join(\"; \");\r\n break;\r\n case 'pickmanywithqty':\r\n input1 = $('.editorPickOneSelect SPAN').map(function () { return $(this).text(); }).toArray().join(\"; \");\r\n input2 = $('.editorPickOneSelect .itemQty').map(function () { return $(this).val(); }).toArray().join(\"; \");\r\n\r\n var input1Items = input1.split(';');\r\n var input2Items = input2.split(';');\r\n var formattedInput = '';\r\n\r\n for (var x = 0; x < input1Items.length; x++) {\r\n if (input1Items[x].trim() != '' && input2Items[x].trim() === '') {\r\n return false;\r\n }\r\n else {\r\n formattedInput += input1Items[x].trim() + ' (' + input2Items[x].trim() + ')' + (x < input1Items.length ? '; ' : '');\r\n }\r\n }\r\n\r\n input1 = formattedInput;\r\n break;\r\n\r\n case 'dropdownlistpickmany':\r\n input1 = $(\"#editorTemplate_ddl\").val();\r\n input2 = $('.editorPickOneSelect').map(function () { return $(this).text(); }).toArray().join(\", \");\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n break;\r\n\r\n case 'dropdownlist':\r\n input1 = $(\"#editorTemplate_ddl\").val();\r\n if (!input1) { return; }\r\n break;\r\n\r\n case 'dropdownlistquantity':\r\n input1 = $(\"#editorTemplate_ddl\").val();\r\n input2 = $(\"#editorTemplate_textbox\").val();\r\n if (!input1) { return; }\r\n if (this.config.optionalQtyValues) {\r\n if (this.config.optionalQtyValues.indexOf(input1) === -1) {\r\n if (!input2) { return; }\r\n }\r\n }\r\n else {\r\n if (!input2) { return; }\r\n }\r\n break;\r\n\r\n case 'dropdownlisttext':\r\n input1 = $(\"#editorTemplate_ddl\").val();\r\n input2 = $(\"#editorTemplate_textbox\").val();\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n break;\r\n\r\n case 'doubledropdownlist':\r\n input1 = $(\"#editorTemplate_ddl\").val();\r\n input2 = $(\"#editorTemplate_ddl2\").val();\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n break;\r\n\r\n case 'doubledropdownlistquantity':\r\n input1 = $(\"#editorTemplate_ddl\").val();\r\n input2 = $(\"#editorTemplate_ddl2\").val();\r\n input3 = $(\"#editorTemplate_textbox\").val();\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n if (!input3) { return; }\r\n break;\r\n\r\n case 'tripledropdownlist':\r\n input1 = $(\"#editorTemplate_ddl\").val();\r\n input2 = $(\"#editorTemplate_ddl2\").val();\r\n input3 = $(\"#editorTemplate_ddl3\").val();\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n if (!input3) { return; }\r\n break;\r\n\r\n case 'dimensions':\r\n input1 = $(\"#editorTemplate_textbox1\").val();\r\n input2 = $(\"#editorTemplate_textbox2\").val();\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n break;\r\n case 'dimensionsheight':\r\n input1 = $(\"#editorTemplate_textbox1\").val();\r\n input2 = $(\"#editorTemplate_textbox2\").val();\r\n input3 = $(\"#editorTemplate_textbox3\").val();\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n if (!input3) { return; }\r\n break;\r\n case 'pickonewithdimensions':\r\n input1 = $('.editorPickOneSelect').map(function () { return $(this).text(); }).toArray().join(\"; \");\r\n input2 = $(\"#editorTemplate_textbox1\").val();\r\n input3 = $(\"#editorTemplate_textbox2\").val();\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n if (!input3) { return; }\r\n break;\r\n case 'pickonewithdimensionsyear':\r\n input1 = $('.editorPickOneSelect').map(function () { return $(this).text(); }).toArray().join(\"; \");\r\n input2 = $(\"#editorTemplate_textbox1\").val();\r\n input3 = $(\"#editorTemplate_textbox2\").val();\r\n input4 = $(\"#editorTemplate_textbox3\").val();\r\n if (!input1) { return; }\r\n if (!input2) { return; }\r\n if (!input3) { return; }\r\n if (!input4) { return; }\r\n break;\r\n }\r\n\r\n var keepOrig = $('#editorKeepOriginalValue').prop(\"checked\");\r\n\r\n if (keepOrig) {\r\n this.keep = true;\r\n } else {\r\n this.keep = false;\r\n }\r\n\r\n $.colorbox.close();\r\n\r\n var formattedInput = this.config.valueTemplate ?\r\n this.renderTemplate({ value: input1, value2: input2, value3: input3, value4: input4 }, this.config.valueTemplate)\r\n : input1;\r\n\r\n if (this.config.multiItem) {\r\n // add new value:\r\n if (!this.value) { this.value = []; }\r\n if (this.keep) {\r\n this.value.push('ADD: ' + formattedInput);\r\n } else {\r\n if (!this.isDeleted) {\r\n //this.value.push('DELETE: ' + this.originalText);\r\n this.isDeleted = true;\r\n }\r\n this.value.push('UPDATE: ' + formattedInput);\r\n }\r\n \r\n \r\n }else{\r\n if (formattedInput) {\r\n //set new value\r\n this.value = formattedInput;\r\n } else {\r\n this.value = 'DELETE: ' + this.originalText;\r\n }\r\n\r\n }\r\n\r\n this.redrawContent();\r\n },\r\n\r\n redrawContent: function () {\r\n this.containerDiv.empty();\r\n\r\n if (this.isChanged()) {\r\n\r\n // make everything into an array\r\n var values = this.config.multiItem ? this.value : [this.value];\r\n\r\n this.containerDiv.show();\r\n\r\n for (var i = 0; i < values.length; i++) {\r\n\r\n var btn = $(\"
    \");\r\n btn.attr('index', i);\r\n this.containerDiv.append(btn);\r\n\r\n var div = $(\"
    \");\r\n div.html(values[i]);\r\n this.containerDiv.append(div);\r\n\r\n var me = this;\r\n\r\n btn.click(function () {\r\n if (me.config.multiItem) {\r\n var idx = $(this).attr('index');\r\n me.removeOneItem(idx);\r\n } else {\r\n me.clear();\r\n }\r\n });\r\n\r\n btn.hover(function () { $(this).addClass('editorDeleteItemButtonHover'); },\r\n\t\t\t function () { $(this).removeClass('editorDeleteItemButtonHover'); });\r\n\r\n this.containerDiv.append($(\"
    \"));\r\n }\r\n\r\n }else{\r\n this.containerDiv.hide();\r\n }\r\n\r\n\r\n // cross out original value if new data is present\r\n //alert(this.keep);\r\n if (this.isChanged() && !this.keep) {\r\n this.originalElement.addClass('editorOriginalItemChanged');\r\n } else {\r\n this.originalElement.removeClass('editorOriginalItemChanged');\r\n }\r\n\r\n this.dataEditor.redrawContent();\r\n\r\n },\r\n\r\n isChanged: function () {\r\n if (this.config.multiItem) {\r\n return (this.value && this.value.length > 0);\r\n } else {\r\n return (this.value) ? true : false;\r\n }\r\n },\r\n\r\n clear: function () {\r\n this.value = null;\r\n this.redrawContent();\r\n },\r\n\r\n removeOneItem: function (index) {\r\n this.value.splice(index, 1);\r\n this.redrawContent();\r\n },\r\n\r\n isValidTemplate: function () {\r\n return $('#editorTemplate_' + this.config.mode).length > 0;\r\n },\r\n\r\n renderTemplate: function (obj, template) {\r\n var output = template;\r\n for (var prop in obj) {\r\n output = output.replace('${' + prop + '}', obj[prop]);\r\n }\r\n return output;\r\n },\r\n\r\n CLASS_NAME: \"Beacon.DataEditor.EditItem\"\r\n});\r\n\r\n"]}