{"version":3,"sources":["ScreenerFilters.js","Function.1.js","ScreenerUtility.js","Inputs.js","Arguments.js","Plugin-CustomColumns.js","basedatamodule.js","customizetablecolumns.js","ScreenerComponents.js","BaseScreenerPage.js","ScreenerPage.js","ScreenerPageExpanded.js","BaseAnalytics.js","ScreenerAnalytics.js"],"names":["setMinMaxFromArg","arg","fromSaved","minValue","maxValue","Clauses","length","Operator","indexOf","Values","$component","this","el","find","setComponentValue","setValuesSimple","values","$","map","clause","setValueSimple","value","Function","getClassName","prototype","Extend","superClass","getSuperClass","Super","context","methodName","args","method","apply","call","Implements","obj","members","tObj","i","len","o","WSDOM","Util","copyObject","Context","fnReference","arguments","eventContext","oArgs","fHandler","data","delay","innerFnRef","setTimeout","EmptyFunction","Namespace","ScreenerUtility","_Setup","CreateInstance","IsValidSortDirection","iValue","bIsValid","key","SORT_DIRECTION","IsValidOperator","OPERATORS","IsValidArgOrValueOperator","ARGS_OPERATORS","Equals","GreaterThanOrEqualTo","GreaterThan","LessThanOrEqualTo","Like","LessThan","NotEqualTo","NotLike","AND","OR","VALUE_OPERATORS","Ascending","Descending","fn","_Inputs","_PreSceenURL","_SceenURL","_SaveScreenURL","_DeleteScreenURL","_SetDefaultScreenURL","_AdditionalAJAXData","_BeforeSendDataListeners","_SendDataReturnCompletedListeners","_SendDataReturnSuccessListeners","_SendDataReturnFailureListeners","_BeforePreScreenListeners","_PreScreenCompletedListeners","_PreScreenSuccessListeners","_PreScreenFailureListeners","_BeforeSaveScreenListeners","_SaveScreenCompleteListeners","_SaveScreenSuccessListeners","_SaveScreenFailureListeners","_BeforeDeleteScreenListeners","_DeleteScreenCompleteListeners","_DeleteScreenSuccessListeners","_DeleteScreenFailureListeners","_BeforeSetDefaultScreenListeners","_SetDefaultScreenCompleteListeners","_SetDefaultScreenSuccessListeners","_SetDefaultScreenFailureListeners","SetInputs","Inputs","_Type","SetPreScreenURL","sURL","SetScreenURL","SetSaveScreenURL","SetDeleteSaveScreenURL","SetDefaultScreenURL","SetAdditionalAJAXData","objData","extend","GetInputs","bJustData","GetData","GetSendDataURL","_SendDataURL","GetAdditionalAJAXData","DoScreen","bAllowAbortion","DataToSend","JSON","stringify","SendDataXHR","abort","e","ajax","type","dataType","traditional","url","resolveUrl","complete","jqXHR","textStatus","_SendDataComplete","success","Response","_SendDataSuccess","error","errorThrown","_SendDataFailure","DoPreScreen","SendPreScreenXHR","_PreScreenComplete","_PreScreenSuccess","_PreScreenFailure","OnBeforeScreen","sKey","fCallback","OnScreenComplete","OnScreenSuccess","OnScreenFail","OffBeforeScreen","OffScreenComplete","OffScreenSuccess","OffScreenFail","OnBeforePreScreen","OnPreScreenComplete","OnPreScreenSuccess","OnPreScreenFail","OffBeforePreScreen","OffPreScreenComplete","OffPreScreenSuccess","OffPreScreenFail","OnBeforeSaveScreen","OnSaveScreenComplete","OnSaveScreenSuccess","OnSaveScreenFail","OffBeforeSaveScreen","OffSaveScreenComplete","OffSaveScreenSuccess","OffSaveScreenFail","OnBeforeDeleteScreen","OnDeleteScreenComplete","OnDeleteScreenSuccess","OnDeleteScreenFail","OffBeforeDeleteScreen","OffDeleteScreenComplete","OffDeleteScreenSuccess","OffDeleteScreenFail","OnBeforeSetDefaultScreen","OnSetDefaultScreenComplete","OnSetDefaultScreenSuccess","OnSetDefaultScreenFail","OffBeforeSetDefaultScreen","OffSetDefaultScreenComplete","OffSetDefaultScreenSuccess","OffSetDefaultScreenFail","DoSaveScreen","name","description","_BeforeSaveScreen","Type","Name","Description","_SaveScreenComplete","_SaveScreenSuccess","_SaveScreenFailure","DoDeleteScreen","_BeforeDeleteScreen","_DeleteScreenComplete","_DeleteScreenSuccess","_DeleteScreenFailure","DoSetDefaultScreen","_BeforeSetDefaultScreen","_SetDefaultScreenComplete","_SetDefaultScreenSuccess","_SetDefaultScreenFailure","Instance","window","MOD","WSOD","_Data","Arguments","Label","ScreenerID","Parse","Input","bFieldAndSafeNameAreTheSame","parse","j","Arg","Argument","AddArgument","objArg","push","RemoveArgumentByField","sFieldToRemove","arArgumentsToKeep","_SafeName","Field","RemoveArguments","ContainsArgumentFor","sField","GetArgument","SetScreenerID","iScreenID","SetName","sName","SetLabel","sLabel","SetArguments","arArguments","ReturnData","GetScreenerID","GetName","GetLabel","GetArguments","bGetDataOnly","arArgData","ScreenInputs","LocalInitData","FirstRow","RowCount","ResultFields","SortArguments","passedArgData","SortArg","SortArgument","Direction","AddSortArgument","SetFirstRow","iFirstRow","SetRowCount","iRowCount","SetResultFields","arResultFields","GetResultFields","AddResultField","RemoveResultField","arFieldsToKeep","RemoveResultFieldAt","iIndex","splice","SetSortArguments","arSortArguments","GetSortArguments","RemoveSortArgument","RemoveSortArgumentAt","RemoveSortArguments","DataToReturn","BaseReturn","SetField","SetDirection","ArgsOperator","ValueOperator","ClauseGroups","Identifiers","Style","SetSafeName","Clause","AddClause","ClauseGroup","AddClauseGroup","RemoveAllClauses","RemoveClauseAt","_DataClauses","RemoveClauseByValue","sValue","bAllInstances","trim","arClausesToKeep","bFoundFirst","objCurrClause","join","GetClauses","RemoveAllClauseGroups","GetStyle","SetStyle","sStyle","GetIdentifiers","SetIdentifiers","arIdentifiers","AddIdentifier","sIdentifier","RemoveIdentifier","arNewIdentifiers","lenght","Identifier","sRemove","SetArgsOperator","SetValueOperator","GetArgsOperator","GetValueOperator","GetField","GetSafeName","RemoveAllArguments","ReturnObj","arClauseGroup","it","jt","SetOperator","SetValues","bDoNotThrowError","arValues","AddValue","GetOperator","GetValues","mod","modules","define","$window","$documentBody","init","params","tableId","maxColumns","document","body","showModal","id","widgetId","$modalWrapper","append","modal","backdrop","show","off","on","$modal","currentTop","position","top","windowTop","scrollTop","spacing","css","widgetapi","load","widgets","appId","TableId","MaxColumns","removeClass","widgetClass","dispose","remove","tooltip","maxWidth","defaultValue","handle_moduleExpand","extraContext","addClass","stopPropagation","getContext","ajax_error","xhr","events",".module-error button","click","$el","lastRequest","reload",".module-options [data-size]:not(.selected):not(.module-expand-link)","showLoading","newSize","attr","newId","getKeyFromTypeSize","observer","trigger",".module-hide",".view-toggle","parents","toggleClass","text",".module-expand-link",".action-download","#module_download .module-close","cancelBubble","cache","$selectedTable","$hiddenTable","base","_init_dragging","$table","self","tableDnD","onDragClass","onDrop","table","row","updateTableIndexes","onDragStart","$labelBoxes","eq","updateMsg","tables","add","rows","hide","next","moveRowToTable","$row","tableDnDUpdate","saveColumns","$td","apiData","createApiData","eventData","createEventData","columns","alert","parent","result","field","fields","split","x","handleAction","newText","closest","action","toLowerCase","selectedRows","a.customizecolumns-action","table.data:not(.customizetablecolumns-dragging) tr","mouseenter","mouseleave","button[data-action=save]","components","factory","create","baseModule","valueNone","valueAll","targetId","$target","getValue","targetType","targetClass","getAsync","componentType","safeName","receivingClass","receiveAsync","response","receiveAsyncError","beforeSend","hideLoading","resetPaging","parseActions","actions","setValue","getIdentifier","getClause","operator","format","output","cleanValue","Number","toFixed","Math","round","nStr","x1","x2","rgx","test","replace","unFormat","clean","parseFloat","button[data-action=filter-button]","textarea","val","$input","getAttribute","setAttribute","a","filter","container","error_msgContainer","tickersliststr","results","error_msg","wsodIssue","invalidTickers","duplicateTickers","html","minValueRaw","maxValueRaw","undefined","updateLabels","min","max","formatType","$textBoxes","fromValue","toValue","gtValue","ltValue","isNaN","tmpMin","tmpMax","res","button","first","select","change","currentTarget","$option","options","selectedIndex","actionsJson","Reload","addMinutes","date","minutes","Date","getTime","days","now","then","$optionTracker","$options","children","$valSelect","trackSelectedValue","label","isAlreadyAdded","$newOption","renderTrackedOption",".multiselectOptionTracker a","$buttons","$button","$slider","handleSliderStop","ui","clauses","minOperator","maxOperator","slider","concat","$rangeLabel","stepValue","parseInt","initSlider","step","range","slide","proxy","updateRangeLabel","stop","formattedMinValue","formattedMaxValue","$errorWrapper","siblings","$contentWrapper","fromInput","toInput","$inputs","encodedRangeList","jsonRangeList","fromBase64","rangeList","setRangeList","pixelMap","mapValuesToPixelLine","pixelRatio","handleSliderSlide","setValueFromSlider","input","handleXPosition","handle","floor","ceil","getValueFromInput","valueFormat","valueDisplay","status","rangelist","translatedValues","translateActualToPerceivedValue","actual","xPosition","getPixelFromValue","sliderValue","index","diffBefore","diffAfter","width","Width","X","Max","Min","datepicker","getOADateFromString","$dateInputs","startDate","moment","fromOADate","endDate","dateString","parts","day","month","year","msDate","UTC","filters","screenerNamespace","initComponents","argument","digestArgument","$filters","each","component","initFn","getComponentController","getArgument","getArgumentSafeName","getArgumentOperators","getArgumentValues","getArgumentClauses","identifiers","getArgumentIdentifiers","nameParts","$namers","$namer","namerClass","namePart","$operatorSwitchers","$switcher","valuerClass","$valuer","wsodIssues","aryRawIssues","aryIssues","currItem","Array","$components","componentClass","componentClauses","$keyComponent","$valComponent","keyComponentClass","valComponentClass",".removeCriterion","op","isMulti","option","selected","opOptionValue","$opSelect","$opComponent","$switch",".switch","hasClass","toString","$clauseControl","controlType","$prefixOpSelect","$suffixOpSelect","prefixValue","suffixValue","ajaxStop","excludedIssueIds","pageSize","customColumns","defaultColumns","defaultSortSafeName","customColumnsId","CustomColumnsPlugin","addPlugin","wsodIssueSafeName","initScreener","stopScreening","isPreScreening","isScreening","startScreening","ScreenerUtilNamespace","ScreenerUtilityInstance","ScreenerInputs","screenerId","resetSorting","screenRequestCallback","preScreenRequestCallback","resultTable","$response","$wrapper","empty","fixedTable","numColumns","activeTab","buildScreenInputs","resultFields","addExcludedIssueIdArgs","issueId","addToWatchlist","watchlistId","issueIds","logError","removeFromResults","runScreen","restoreRemovedResults","Object","keys","downloadResults","callback","inputString","$form","submit","newSortSafeName","newSortDir","$screenerContent","handlePDFClickResult","request","docURL","message","open",".num-results-selector","[data-sortfield]","direction","serverDirection",".pager-wrap a[data-pageindex]:not([disabled])",".pager-select-page","[data-action=download-data]","[data-action=download-screen]","$selectedInput","selectedType","[data-action=customize-columns]","select.action-switcher","$checkedInputs","$screenerContainer","get","input.table-selector","isChecked","is","prop",".screener-results-table a[data-toggle='tab']:not(.active a)","fieldsJson","select.sub-field-switcher","a.industryReportPDF, a.stockReportPDF","target","apiURL","docType","item","postData","itemQuery","$screenerNav","$screenerFilterArea","$showAvailableStocksOnly","$screenerCreateScreenBtn","$screenerUpdateScreenBtn","$criteriaTab","$customTab","hasRunScreenerBefore","showAvailableFilterIsOn","savedScreenId","predefinedScreenId","savedScreenName","predefinedScreenName","loadSavedScreen","initFilterDraggable","numFiltersAllowed","initTooltips","sortable","axis","containment","disableScreening","handleNoFilters","runPreScreen","safeNames","$filter","filterController","$subFilter","screenerUtil","filterTotals","totalCompanies","matches","formattedMatches","formatAddCommas","percentOfTotal","formattedTotal","hiddenTotal","hiddenCount","saveScreen","isNew","filterTypes","filterCategories","screenInputs","screenId","redirectToScreen","deleteSavedScreen","location","pathname","random","Filters","Screen","category","CategoryType","FilterType","addFilterModule","ShowAvailableFilter","updateFilterCounts","console","warn","handleSaveScreen","$modalBody","$errorMsg","getFilterModule","filterType","categoryType","filterHtml","filterCategory","toggleFilterCollapse","removeFilterModule","skipScreen","sortArgs","$filterGroups","$group","$activeFilters","$bucketNum","hasCriteria","forceOpen","speed","isCollapsed","$tabLink","slideDown","slideUp","redirectToPredefinedScreen","msg","launchExpandedWindow","currentInputs","filterFields","windowOptions","button[data-action=create-screen]:not([disabled])","button[data-action=update-screen]:not([disabled])","#screener_create_screen [data-action=save]","$parent","#screener_update_screen [data-action=save]","div.modal [data-action=cancel]","button[data-action=delete-screen]","button[data-action=delete-screen-prompt]","[data-screenid]","[data-predefinedscreenid]","div.screener-content [data-filtertype]","numCurrentFilters","[data-action=resetfilters]","$allFilters",".icon-screenerexpand",".screenFooter .tab a","a.criteriaBucket","observables","screener - screen","screener - showAvailableFilter","screener - remove filter","custom columns saved","newFields","customFields","tab","inputs","criteriaColumns","initialArgs"],"mappings":"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","file":"screener.min.js","sourcesContent":["// Create the component factory\r\nmod.filters = mod.factory.create(mod.baseModule);\r\n\r\n// ----------------------------------------------------------------------------\r\n// Base\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.filters.define(\"Base\", function(fn) {\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.screenerNamespace = params.screenerNamespace;\r\n\r\n\t\t// Init all the components that have a controller class\r\n\t\tthis.initComponents();\r\n\r\n\t\tif (params.argument) {\r\n\t\t\tthis.digestArgument(params.argument);\r\n\t\t}\r\n\t};\r\n\r\n\t// Initialize all the components that require controlling js classes\r\n\tfn.prototype.initComponents = function() {\r\n\t\tvar $filters = this.$el.find(\"div.screener-component\");\r\n\t\t$filters.each(function (i, component) {\r\n\t\t\tvar success = component.getAttribute(\"data-success\");\r\n\r\n\t\t\tif (success === \"true\") {\r\n\t\t\t\tvar $component = $(component);\r\n\t\t\t\tvar initFn = $component.attr(\"data-initfn\");\r\n\r\n\t\t\t\tif (initFn) {\r\n\t\t\t\t\t// Save off the controller on the dom node\r\n\t\t\t\t\t$component.data(\"controller\", mod.components.create(initFn, $component));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tfn.prototype.setComponentValue = function($component, values, fromSaved) {\r\n\t\tif ($component.attr(\"data-success\") === \"true\") {\r\n\t\t\tthis.getComponentController($component).setValue(values, fromSaved);\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.getComponentController = function(component) {\r\n\t\treturn $(component).data(\"controller\");\r\n\t};\r\n\r\n\t// There should only be 1 argument per filter\r\n\t// Arguments may have many clauses however\r\n\tfn.prototype.getArgument = function () {\r\n\t\tvar argument = new this.screenerNamespace.Argument();\r\n\t\tvar field = this.getArgumentSafeName();\r\n\t\tvar operator = this.getArgumentOperators();\r\n\t\tvar values = this.getArgumentValues();\r\n\t\tvar clauses = this.getArgumentClauses();\r\n\t\tvar identifiers = this.getArgumentIdentifiers();\r\n\t\t// Add the safe name\r\n\t\tif (field) {\r\n\t\t\targument.SetField(field);\r\n\t\t\targument.SetSafeName(field);\r\n\t\t}\r\n\r\n\t\t// Arguments with \"NOTLIKE\" need to be linked with \"AND\"\r\n\t\tif (operator === 'NotLike' && values && values.length) {\r\n\t\t\targument.SetValueOperator(0);\r\n\t\t}\r\n\r\n\t\t// Add single operator and values\r\n\t\tif (operator && values) {\r\n\t\t\tfor (var i = 0; i < values.length; i++) {\r\n\t\t\t\tvar value = values[i];\r\n\r\n\t\t\t\targument.AddClause(\r\n\t\t\t\t\tnew this.screenerNamespace.Argument.Clause(\r\n\t\t\t\t\t\tthis.screenerNamespace.OPERATORS[operator],\r\n\t\t\t\t\t\t[value]\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Set the identitiers whether we have any or not (to wipe out removed ones)\r\n\t\targument.SetIdentifiers(identifiers);\r\n\r\n\t\t// Add clauses\r\n\t\tif (clauses) {\r\n\t\t\tfor (var i = 0; i < clauses.length; i++) {\r\n\t\t\t\tvar clause = clauses[i];\r\n\r\n\t\t\t\targument.AddClause(\r\n\t\t\t\t\tnew this.screenerNamespace.Argument.Clause(\r\n\t\t\t\t\t\tthis.screenerNamespace.OPERATORS[clause.operator],\r\n\t\t\t\t\t\t[clause.value]\r\n\t\t\t\t\t)\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn argument;\r\n\t};\r\n\r\n\tfn.prototype.getArgumentSafeName = function () {\r\n\r\n\t //debugger;\r\n\r\n\t\t// Try to get a fixed safeName from the filter itself\r\n\t\tvar safeName = this.$el.attr(\"data-safename\") || \"\";\r\n\t\tvar nameParts = [];\r\n\t\t//var $namers = this.$el.find(\"[data-role-safename]:visible\");\r\n\t\tvar $namers = this.$el.find(\"[data-role-safename]\");\r\n\r\n\t\tfor (var i = 0; i < $namers.length; i++) {\r\n\t\t\tvar $namer = $namers.eq(i);\r\n\r\n\t\t\t// Get the js class that handles this component\r\n\t\t\tvar namerClass = this.getComponentController($namer);\r\n\t\t\tvar namePart = namerClass.getValue();\r\n\r\n\t\t\t// Sometimes, only a couple of the options will have safe name parts\r\n\t\t\t// We should allow those parts to skip this concatenation\r\n\t\t\tif (namePart) {\r\n\t\t\t\tnameParts.push(namePart);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (nameParts.length) {\r\n\t\t\tsafeName += nameParts.join(\"\");\r\n\t\t}\r\n\r\n\t\tif (!safeName) {\r\n\t\t\talert(\"No safe name!\");\r\n\t\t}\r\n\r\n\t\treturn safeName;\r\n\t};\r\n\r\n\tfn.prototype.getArgumentOperators = function() {\r\n\t\t// Do we have a fixed safe name on the filter?\r\n\t\tvar operator = this.$el.attr(\"data-operator\");\r\n\r\n\t\t//The if condition is for ticker list filter as this filter works on inputs by user as opossed to other filters which populate arguments from screener qid.\r\n\t\tif (this.$el.attr(\"data-safename\") == \"WSODIssueID\") {\r\n\t\t\treturn \"Equals\";\r\n\t\t}\r\n\r\n\t\t// Look for controls that dynamically change the field\r\n\t\tif (!operator) {\r\n\t\t\tvar $operatorSwitchers = this.$el.find(\"[data-role-operator]:visible\");\r\n\r\n\t\t\tif ($operatorSwitchers.length) {\r\n\t\t\t\t// Get the value from the control\r\n\t\t\t\tvar $switcher = $operatorSwitchers.eq(0);\r\n\t\t\t\tvar valuerClass = this.getComponentController($switcher);\r\n\t\t\t\toperator = valuerClass.getValue();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn operator;\r\n\t};\r\n\r\n\tfn.prototype.getArgumentValues = function() {\r\n\t\tvar values = [];\r\n\t\tvar $valuer = this.$el.find(\"[data-role-value]:visible\").first();\r\n\t\tvar safeName = this.$el.attr(\"data-safename\");\r\n\r\n\t\t//The if condition is for ticker list filter as this filter works on inputs by user as opossed to other filters which populate arguments from screener qid.\r\n\t\tif (safeName == \"WSODIssueID\") {\r\n\t\t\tvar wsodIssues = this.$el.find('[data-wsodissue]').attr('data-wsodissue');\r\n\t\t\tif (wsodIssues) {\r\n\t\t\t\t//get issues and scrub them\r\n\t\t\t\tvar aryRawIssues = wsodIssues.split(\",\");\r\n\t\t\t\tvar aryIssues = [];\r\n\t\t\t\tfor (var i = 0, j = aryRawIssues.length; i < j; i++) {\r\n\t\t\t\t\tvar currItem = aryRawIssues[i].replace(/^\\D/, \"\");\r\n\t\t\t\t\tif (currItem.length > 0) {\r\n\t\t\t\t\t\taryIssues.push(currItem);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn aryIssues;\r\n\t\t\t} else {\r\n\t\t\t\t// on intitial load return a default non existing wsod issue Id\r\n\t\t\t\treturn [\"0000\"];\r\n\t\t\t}\r\n\t\t} else if (safeName == \"ShowAvailable\") { \r\n\t\t\tvar val = this.$el.data(\"role-value\");\r\n\t\t\tvalues = val;\r\n\t\t}\r\n\r\n\t\tif ($valuer.length) {\r\n\t\t\tvar valuerClass = this.getComponentController($valuer);\r\n\t\t\tvalues = valuerClass.getValue();\r\n\r\n\t\t\t// Always make \"value\" an array\r\n\t\t\tif (values instanceof Array == false) {\r\n\t\t\t\tvalues = [values];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t};\r\n\r\n\tfn.prototype.getArgumentClauses = function() {\r\n\t\tvar clauses = [];\r\n\t\tvar $components = this.$el.find(\"[data-role-clause]:visible\");\r\n\r\n\t\tif (this.$el.attr(\"data-safename\") != \"WSODIssueID\") {\r\n\t\t\tfor (var i = 0; i < $components.length; i++) {\r\n\t\t\t\tvar $component = $components.eq(i);\r\n\r\n\t\t\t\tif ($component.attr(\"data-success\") === \"true\") {\r\n\t\t\t\t\tvar componentClass = this.getComponentController($component);\r\n\t\t\t\t\tvar componentClauses = componentClass.getValue();\r\n\r\n\t\t\t\t\t// Make sure it's an array\r\n\t\t\t\t\tif (componentClauses instanceof Array == false) {\r\n\t\t\t\t\t\tcomponentClauses = [componentClauses];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Add all the clauses\r\n\t\t\t\t\tfor (var x = 0; x < componentClauses.length; x++) {\r\n\t\t\t\t\t\tvar clause = componentClauses[x];\r\n\t\t\t\t\t\tif (clause) {\r\n\t\t\t\t\t\t\tclauses.push(clause);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn clauses;\r\n\t};\r\n\r\n\tfn.prototype.getArgumentIdentifiers = function() {\r\n\t\tvar identifiers = [];\r\n\r\n\t\tvar $keyComponent = this.$el.find(\"[data-role-identifierkey]:visible\").first();\r\n\t\tvar $valComponent = this.$el.find(\"[data-role-identifiervalue]:visible\").first();\r\n\r\n\t\t// Must have a key and a value\r\n\t\tif ($keyComponent.length || $valComponent.length) {\r\n\t\t\tvar keyComponentClass = this.getComponentController($keyComponent);\r\n\t\t\tvar valComponentClass = this.getComponentController($valComponent);\r\n\t\t\tvar key, value;\r\n\r\n\t\t\tif (keyComponentClass) {\r\n\t\t\t\tkey = keyComponentClass.getIdentifier();\r\n\t\t\t}\r\n\r\n\t\t\tif (valComponentClass) {\r\n\t\t\t\tvalue = valComponentClass.getIdentifier();\r\n\t\t\t}\r\n\r\n\t\t\tif (key && value) {\r\n\t\t\t\t// Smash the parts together\r\n\t\t\t\tidentifiers.push(key + '|' + value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn identifiers;\r\n\t};\r\n\r\n\tfn.prototype.digestArgument = function(argument) {\r\n\t\tthrow 'Not implemented';\r\n\t};\r\n\r\n\tfn.prototype.events = {\r\n\t\t\".removeCriterion\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tthis.$el.remove();\r\n\r\n\t\t\t\t// Tell the screener that we removed this filter\r\n\t\t\t\tmod.observer.trigger(\"screener - remove filter\", this.$el);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Utility\r\n// ----------------------------------------------------------------------------\r\n\r\n// Set a multiple values on a [data-role-clause]\r\nfunction setMinMaxFromArg(arg, fromSaved) {\r\n\tvar minValue, maxValue;\r\n\r\n\tif (arg.Clauses && arg.Clauses.length) {\r\n\t\tif (arg.Clauses[0].Operator.indexOf('GreaterThan') === 0) {\r\n\t\t\tminValue = arg.Clauses[0].Values[0];\r\n\r\n\t\t\tif (arg.Clauses.length > 1) {\r\n\t\t\t\tmaxValue = arg.Clauses[1].Values[0];\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tmaxValue = arg.Clauses[0].Values[0];\r\n\r\n\t\t\tif (arg.Clauses.length > 1) {\r\n\t\t\t\tminValue = arg.Clauses[1].Values[0];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Find the right component and let it set values\r\n\tvar $component = this.el.find('div[data-role-clause]:visible');\r\n\tthis.setComponentValue($component, [minValue, maxValue], fromSaved);\r\n}\r\n\r\n// Set a multiple values on a [data-role-value]\r\nfunction setValuesSimple(arg) {\r\n\tvar values = $.map(arg.Clauses, function(clause) {\r\n\t\treturn clause.Values[0];\r\n\t});\r\n\r\n\t// Find the right component and let it set values\r\n\tvar $component = this.el.find('div[data-role-value]');\r\n\tthis.setComponentValue($component, values);\r\n}\r\n\r\n// Set a single value on a [data-role-value]\r\nfunction setValueSimple(arg) {\r\n\tvar value = '';\r\n\r\n\tif (arg.Clauses && arg.Clauses.length && arg.Clauses[0].Values.length) {\r\n\t\tvalue = arg.Clauses[0].Values[0];\r\n\t}\r\n\r\n\tvar $component = this.el.find('div[data-role-value]');\r\n\tthis.setComponentValue($component, value);\r\n}\r\n\r\n// ----------------------------------------------------------------------------\r\n// Specific\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.filters.define(\"IsIsNotFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = function (arg) {\r\n\t\tif (arg.Clauses && arg.Clauses.length === 0) {\r\n\t\t\targ.Clauses = [\r\n\t\t\t\t{\r\n\t\t\t\t\t\"Operator\": \"Like\",\r\n\t\t\t\t\t\"Values\": [\r\n\t\t\t\t\t\t\"-32768\"\r\n\t\t\t\t\t]\r\n\t\t\t\t}\r\n\t\t\t]\r\n }\r\n\t\tvar op = arg.Clauses[0].Operator;\r\n\t\tvar values = $.map(arg.Clauses, function(clause) {\r\n\t\t\treturn clause.Values;\r\n\t\t});\r\n\t\tvar isMulti = values.length > 1;\t\r\n\r\n\t\t// --------------------\r\n\t\t// Set operator\r\n\t\t// --------------------\r\n\r\n\t\t// Loop over all the options till we find the one we want\r\n\t\t// We can't just set the value, because multiple options share the same value\r\n\t\tthis.el.find('div.screener-component[data-role-operator] select').find('option').each(function(i, option) {\r\n\t\t\tif (option.value === op) {\r\n\t\t\t\tif (!isMulti || (isMulti && option.getAttribute('data-ismulti') === 'true')) {\r\n\t\t\t\t\toption.selected = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}).change();\r\n\r\n\t\t// --------------------\r\n\t\t// Set value\r\n\t\t// --------------------\r\n\r\n\t\t// Find the right component and let it set values\r\n\t\tvar $component = this.el.find('div.screener-component[data-role-value][data-ismulti=' + isMulti + ']');\r\n\t\tthis.setComponentValue($component, values);\r\n\t};\r\n\r\n});\r\n\r\nmod.filters.define(\"IsSymbolsFilter\", \"Base\", function (fn) {\r\n\r\n\tfn.prototype.digestArgument = function (arg) {\r\n\r\n\t};\r\n\r\n});\r\n\r\nmod.filters.define(\"ButtonGroupFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = setValuesSimple;\r\n\r\n});\r\n\r\nmod.filters.define(\"FinancialStrengthFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = setValuesSimple;\r\n\r\n});\r\n\r\nmod.filters.define(\"PercentileFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = function(arg) {\r\n\t\t// --------------------\r\n\t\t// Set operator\r\n\t\t// --------------------\r\n\r\n\t\tvar opOptionValue;\r\n\t\tvar $opSelect = this.el.find('div[data-role-safename] select');\r\n\r\n\t\t$opSelect.find('option').each(function(i, option) {\r\n\t\t\tif (option.value && arg.Field.indexOf(option.value) !== -1) {\r\n\t\t\t\topOptionValue = option.value;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$opSelect.val(opOptionValue).change();\r\n\r\n\t\t// --------------------\r\n\t\t// Set value\r\n\t\t// --------------------\r\n\r\n\t\tsetMinMaxFromArg.call(this, arg);\r\n\t};\r\n\r\n});\r\n\r\nmod.filters.define(\"HistogramFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = setMinMaxFromArg;\r\n\r\n});\r\n\r\nmod.filters.define(\"SliderFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = setMinMaxFromArg;\r\n\r\n});\r\n\r\nmod.filters.define(\"DateFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = function(arg) {\r\n\t\t// Try to ignore the clauses and look at the identifiers instead\r\n\t\tif (arg.Identifiers && arg.Identifiers.length) {\r\n\t\t\tvar parts = arg.Identifiers[0].split('|');\r\n\t\t\tvar key = parts[0];\r\n\t\t\tvar value = parts[1];\r\n\r\n\t\t\t// Set operator\r\n\t\t\tvar $opComponent = this.el.find('div[data-role-identifierkey]');\r\n\t\t\tthis.setComponentValue($opComponent, key);\r\n\r\n\t\t\t// Set value\r\n\t\t\tvar $valComponent = this.el.find('div[data-role-identifiervalue]');\r\n\t\t\tthis.setComponentValue($valComponent, value);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// --------------------\r\n\t\t\t// Set operator\r\n\t\t\t// --------------------\r\n\r\n\t\t\tvar $opSelect = this.el.find('div[data-role-operator] select');\r\n\t\t\t$opSelect.val('').change();\r\n\r\n\t\t\t// --------------------\r\n\t\t\t// Set value\r\n\t\t\t// --------------------\r\n\r\n\t\t\tsetMinMaxFromArg.call(this, arg);\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\nmod.filters.define(\"DropDownFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = setValueSimple;\r\n\r\n});\r\n\r\nmod.filters.define(\"YesNoFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = setValueSimple;\r\n\r\n});\r\n\r\nmod.filters.define(\"TextRangeFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = setMinMaxFromArg;\r\n\r\n});\r\n\r\nmod.filters.define(\"Text\", \"Base\", function (fn) {\r\n});\r\n\r\n\r\nmod.filters.define(\"ShowAvailableFilter\", \"Base\", function (fn) {\r\n\r\n\tfn.prototype.init = function (params) {\r\n\t\tthis.base(\"init\", params);\r\n\t\tthis.$switch = $('div.switch', this.$el);\r\n\r\n\t\tif (params.argument && params.argument == true) {\r\n\t\t\tthis.$switch.addClass(\"icon-switch-on\").removeClass(\"icon-switch-off\");\r\n\t\t\tthis.$el.data(\"role-value\", params.argument ? \"1\" : \"0\");\r\n\r\n\t\t\t// The correct button will be selected by the time we build inputs for the screener call\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tmod.observer.trigger(\"screener - showAvailableFilter\", { resetPaging: true });\r\n\t\t\t}, 0);\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.digestArgument = function () { };\r\n\r\n\tfn.prototype.events = {\r\n\t\t\".switch\": {\r\n\t\t\t\"click\": function (e, $el) {\r\n\t\t\t\tvar val = 0;\r\n\t\t\t\tif (this.$switch.hasClass(\"icon-switch-on\")) {\r\n\t\t\t\t\tthis.$switch.removeClass(\"icon-switch-on\").addClass(\"icon-switch-off\");\r\n\t\t\t\t\tval = 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.$switch.addClass(\"icon-switch-on\").removeClass(\"icon-switch-off\");\r\n\t\t\t\t\tval = 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.$el.data(\"role-value\", val.toString());\r\n\r\n\t\t\t\t// Kick the handler into the event queue so the normal button behavior will run first\r\n\t\t\t\t// The correct button will be selected by the time we build inputs for the screener call\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\tmod.observer.trigger(\"screener - showAvailableFilter\", { resetPaging: true });\r\n\t\t\t\t}, 0);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n});\r\n\r\nmod.filters.define(\"ActualEstimateProjectedFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = function(arg) {\r\n\t\t// Figure out what control we're dealing with\r\n\t\tvar $clauseControl = this.el.find('div[data-role-clause]');\r\n\t\tvar controlType = $clauseControl.attr('data-initfn');\r\n\r\n\t\t// Find the safe name controls\r\n\t\tvar $opSelect = this.el.find('div[data-role-safename] select');\r\n\r\n\t\tif (controlType === 'TextRange') {\r\n\t\t\t// Set operator\r\n\t\t\t$opSelect.val(arg.Field).change();\r\n\t\t}\r\n\t\telse if (controlType === 'BucketSlider' || controlType === 'HistogramSlider') {\r\n\t\t\t// Make a local copy of the field so we can mutate it\r\n\t\t\tvar field = arg.Field;\r\n\r\n\t\t\tvar $prefixOpSelect = $opSelect.eq(0);\r\n\t\t\tvar $suffixOpSelect = $opSelect.eq(1);\r\n\t\t\tvar prefixValue = '';\r\n\t\t\tvar suffixValue = '';\r\n\r\n\t\t\t// --------------------\r\n\t\t\t// Set operator suffix\r\n\t\t\t// --------------------\r\n\r\n\t\t\t$suffixOpSelect.find('option').each(function(i, option) {\r\n\t\t\t\tif (option.value && field.indexOf(option.value) !== -1) {\r\n\t\t\t\t\tsuffixValue = option.value;\r\n\r\n\t\t\t\t\t// Remove the matched part so we can more easily match the prefix\r\n\t\t\t\t\tfield = field.replace(option.value, '');\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t$suffixOpSelect.val(suffixValue).change();\r\n\r\n\t\t\t// --------------------\r\n\t\t\t// Set operator prefix\r\n\t\t\t// --------------------\r\n\r\n\t\t\t// Set the prefix now that we know the exact value we're looking for\r\n\t\t\t$prefixOpSelect.find('option').each(function(i, option) {\r\n\t\t\t\tif (option.value === field) {\r\n\t\t\t\t\tprefixValue = option.value;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t$prefixOpSelect.val(prefixValue).change();\r\n\t\t}\r\n\r\n\t\t// --------------------\r\n\t\t// Set values\r\n\t\t// --------------------\r\n\r\n\t\tvar fromSaved = true;\r\n\r\n\t\tsetMinMaxFromArg.call(this, arg, fromSaved);\r\n\r\n\t\t// VL-260 This is to clear out the saved values after all the saved screen reloads & screens are copmlete (otherwise, the saved values get stuck.)\r\n\t\t$(document).ajaxStop(function () {\r\n\t\t\t$clauseControl.find(\"input[data-saved]\").each(function () { this.setAttribute(\"data-saved\", \"\"); });\r\n\t\t});\r\n\t};\r\n\r\n});\r\n\r\nmod.filters.define(\"AnnualizedCumulativeFilter\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.digestArgument = function(arg) {\r\n\t\t// --------------------\r\n\t\t// Set operator\r\n\t\t// --------------------\r\n\r\n\t\tvar opOptionValue;\r\n\t\tvar $opSelect = this.el.find('div[data-role-safename] select');\r\n\r\n\t\t$opSelect.find('option').each(function(i, option) {\r\n\t\t\tif (option.value && arg.Field.indexOf(option.value) !== -1) {\r\n\t\t\t\topOptionValue = option.value;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$opSelect.val(opOptionValue).change();\r\n\r\n\t\t// --------------------\r\n\t\t// Set value\r\n\t\t// --------------------\r\n\r\n\t\tsetMinMaxFromArg.call(this, arg);\r\n\t};\r\n\r\n});","Function.getClassName = function() {\r\n\treturn \"Function\";\r\n};\r\n\r\n\r\n/* Extend from another prototyped Function */\r\nFunction.prototype.Extend = function(superClass) {\r\n\tthis.prototype = new superClass();\r\n\r\n\tthis.prototype.getSuperClass = function() {\r\n\t\treturn superClass;\r\n\t};\r\n\tthis.getSuperClass = this.prototype.getSuperClass;\r\n\treturn this;\r\n};\r\n\r\n/*\r\nThe Super method allows us to do the constructor (or any super call) chaining more easily. It looks like this:\r\n\r\nvar A = function() {\r\n this.value = [\"1\"]\r\n}\r\n\r\nvar B = function() {\r\n B.Super(this);\r\n this.value.push(\"2\");\r\n}\r\n\r\nSuper calls for non constructor methods look like:\r\nClass.Super(this, \"methodName\", arguments);\r\n*/\r\n\r\nFunction.prototype.Super = function(context, methodName, args) {\r\n\tif (null != methodName) {\r\n\t\tvar method = this.getSuperClass().prototype[methodName];\r\n\t}\r\n\telse {\r\n\t\tvar method = this.getSuperClass();\r\n\t}\r\n\r\n\tif (!args) {\r\n\t\treturn method.call(context);\r\n\t}\r\n\telse {\r\n\t\treturn method.apply(context, args);\r\n\t}\r\n};\r\n\r\n/*\r\nFunction.Implements\r\nIt takes either an instanciated object or a functor, and a list of properties/methods and add\r\nthem to the calling functor. Be careful not to apply methods that call other methods/object in\r\nthe passed functor/object that do not exist in the calling functor.\r\n*/\r\nFunction.prototype.Implements = function(obj, members) {\r\n\tif(typeof obj == \"function\") {\r\n\t\tobj = obj.prototype;\r\n\t}\r\n\tvar tObj = {}\r\n\tfor(var i = 0, len = members.length; i < len; ++i) {\r\n\t\ttObj[members[i]] = obj[members[i]] || null;\r\n\t}\r\n\tvar o = WSDOM.Util.copyObject(tObj);\r\n\tfor(var i in o) {\r\n\t\tthis.prototype[i] = o[i];\r\n\t}\r\n};\r\n\r\n/* Used to be 'hitch'. Now it works right. */\r\nFunction.prototype.Context = function(obj) {\r\n\tvar fnReference = this;\r\n\treturn function () {\r\n\t\treturn typeof fnReference == \"function\" ? fnReference.apply(obj, arguments) : obj[fnReference].apply(obj, arguments);\r\n\t};\r\n};\r\n/* Use to get WSDOM.Events - like control w/ jQuery Events */\r\nFunction.prototype.eventContext = function(obj, oArgs){\r\n\t\r\n\tvar fnReference = this; \r\n\toArgs = oArgs || {};\r\n\tvar fHandler = function () { \r\n\t\treturn fnReference.apply(obj, [arguments[0], this, oArgs.data]);\r\n\t};\r\n\t\r\n\tif(oArgs.delay){\r\n\t\t\tfHandler = function(){ \r\n\t\t\t\tvar innerFnRef = this;\r\n\t\t\t\tvar args = arguments;\r\n\t\t\t\tsetTimeout(function()\t{ return fnReference.apply(obj, [args[0], innerFnRef, oArgs.data]);}, oArgs.delay);\r\n\t\t\t}\r\n\t}\r\n\treturn fHandler;\r\n}\r\nFunction.prototype.EmptyFunction = function() {};","(function(Namespace) {\r\n\tvar ScreenerUtility = function() {\r\n\t\tthis._Setup();\r\n\t};\r\n\r\n\tScreenerUtility.CreateInstance = function() {\r\n\t\treturn new Namespace.ScreenerUtility();\r\n\t};\r\n\r\n\tScreenerUtility.IsValidSortDirection = function(iValue) {\r\n\t\tif (!iValue && iValue != 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar bIsValid = false;\r\n\r\n\t\tfor (var key in Namespace.ScreenerUtility.SORT_DIRECTION) {\r\n\t\t\tif (iValue === Namespace.ScreenerUtility.SORT_DIRECTION[key]) {\r\n\t\t\t\tbIsValid = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn bIsValid;\r\n\t};\r\n\r\n\tScreenerUtility.IsValidOperator = function(iValue) {\r\n\t\tif (!iValue && iValue != 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar bIsValid = false;\r\n\r\n\t\tfor (var key in Namespace.ScreenerUtility.OPERATORS) {\r\n\t\t\tif (iValue === Namespace.ScreenerUtility.OPERATORS[key]) {\r\n\t\t\t\tbIsValid = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn bIsValid;\r\n\t};\r\n\r\n\tScreenerUtility.IsValidArgOrValueOperator = function(iValue) {\r\n\t\tif (!iValue && iValue != 0) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar bIsValid = false;\r\n\r\n\t\tfor (var key in Namespace.ScreenerUtility.ARGS_OPERATORS) {\r\n\t\t\tif (iValue === Namespace.ScreenerUtility.ARGS_OPERATORS[key]) {\r\n\t\t\t\tbIsValid = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn bIsValid;\r\n\t};\r\n\r\n\t/*\r\n\t*\r\n\t* [Start] Operator Constants\r\n\t*\r\n\t*/\r\n\r\n\tScreenerUtility.OPERATORS = {\r\n\t\tEquals: 0,\r\n\t\tGreaterThanOrEqualTo: 1,\r\n\t\tGreaterThan: 2,\r\n\t\tLessThanOrEqualTo: 3,\r\n\t\tLike: 4,\r\n\t\tLessThan: 5,\r\n\t\tNotEqualTo: 6,\r\n\t\tNotLike: 7\r\n\t};\r\n\r\n\tScreenerUtility.ARGS_OPERATORS = {\r\n\t\tAND: 0,\r\n\t\tOR: 1\r\n\t};\r\n\r\n\tScreenerUtility.VALUE_OPERATORS = {\r\n\t\tAND: 0,\r\n\t\tOR: 1\r\n\t};\r\n\r\n\tScreenerUtility.SORT_DIRECTION = {\r\n\t\tAscending: 0,\r\n\t\tDescending: 1\r\n\t};\r\n\r\n\t/*\r\n\t*\r\n\t* [Start] Operator Constants\r\n\t*\r\n\t*/\r\n\r\n\t// setup fn as prototype\r\n\tScreenerUtility.fn = ScreenerUtility.prototype;\r\n\r\n\tScreenerUtility.fn._Setup = function() {\r\n\t\tthis._Inputs = null;\r\n\t\tthis._PreSceenURL = \"~/API/PreScreen\";\r\n\t\tthis._SceenURL = \"~/API/Screen\";\r\n\r\n\t\tthis._SaveScreenURL = \"~/API/SaveScreen\";\r\n\t\tthis._DeleteScreenURL = \"~/API/DeleteScreen\";\r\n\t\tthis._SetDefaultScreenURL = \"~/API/SetDefaultScreen\";\r\n\r\n\t\tthis._AdditionalAJAXData = {};\r\n\r\n\t\t// Setup Listener objects. These will each get a special key. That way they can be removed if need be.\r\n\t\tthis._BeforeSendDataListeners = {};\r\n\t\tthis._SendDataReturnCompletedListeners = {};\r\n\t\tthis._SendDataReturnSuccessListeners = {};\r\n\t\tthis._SendDataReturnFailureListeners = {};\r\n\r\n\t\t// Setup prescreen listeners\r\n\t\tthis._BeforePreScreenListeners = {};\r\n\t\tthis._PreScreenCompletedListeners = {};\r\n\t\tthis._PreScreenSuccessListeners = {};\r\n\t\tthis._PreScreenFailureListeners = {};\r\n\r\n\t\t// Setup save screen listeners\r\n\t\tthis._BeforeSaveScreenListeners = {};\r\n\t\tthis._SaveScreenCompleteListeners = {};\r\n\t\tthis._SaveScreenSuccessListeners = {};\r\n\t\tthis._SaveScreenFailureListeners = {};\r\n\r\n\t\t// Setup delete save screen listeners\r\n\t\tthis._BeforeDeleteScreenListeners = {};\r\n\t\tthis._DeleteScreenCompleteListeners = {};\r\n\t\tthis._DeleteScreenSuccessListeners = {};\r\n\t\tthis._DeleteScreenFailureListeners = {};\r\n\r\n\t\t// Setup set default screen listeners\r\n\t\tthis._BeforeSetDefaultScreenListeners = {};\r\n\t\tthis._SetDefaultScreenCompleteListeners = {};\r\n\t\tthis._SetDefaultScreenSuccessListeners = {};\r\n\t\tthis._SetDefaultScreenFailureListeners = {};\r\n\t};\r\n\r\n\tScreenerUtility.fn.SetInputs = function(Inputs) {\r\n\t\tif (Inputs && (Inputs._Type == \"Inputs\" || Inputs._Type == \"ScreenInputs\")) {\r\n\t\t\tthis._Inputs = Inputs;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.SetInputs(Inputs): Inputs can not be null and must be of type ScreenerUtility.Inputs or ScreenerUtility.ScreenInputs. Please check our input and try again.\");\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.SetPreScreenURL = function(sURL) {\r\n\t\tthis._PreSceenURL = sURL;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.SetScreenURL = function(sURL) {\r\n\t\tthis._SceenURL = sURL;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.SetSaveScreenURL = function(sURL) {\r\n\t\tthis._SaveScreenURL = sURL;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.SetDeleteSaveScreenURL = function(sURL) {\r\n\t\tthis._DeleteScreenURL = sURL;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.SetDefaultScreenURL = function(sURL) {\r\n\t\tthis._SetDefaultScreenURL = sURL;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.SetAdditionalAJAXData = function(objData) {\r\n\t\t$.extend(true, this._AdditionalAJAXData, objData);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.GetInputs = function(bJustData) {\r\n\t\tif (bJustData) {\r\n\t\t\treturn this._Inputs.GetData();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._Inputs;\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn.GetSendDataURL = function() {\r\n\t\treturn this._SendDataURL;\r\n\t};\r\n\r\n\tScreenerUtility.fn.GetAdditionalAJAXData = function() {\r\n\t\treturn this._AdditionalAJAXData;\r\n\t};\r\n\r\n\tScreenerUtility.fn.DoScreen = function(bAllowAbortion) {\r\n\t\t// check if we are actually allowed to send the inputs\r\n\t\tif (this._Inputs._Type != \"ScreenInputs\") {\r\n\t\t\tthrow (\"Cannot do Screen call because inputs are not of type ScreenInputs. Please check the set inputs and try again.\");\r\n\t\t}\r\n\r\n\t\tfor (var key in this._BeforeSendDataListeners) {\r\n\t\t\tthis._BeforeSendDataListeners[key]();\r\n\t\t}\r\n\r\n\t\tvar context = this;\r\n\r\n\t\tvar DataToSend = {\r\n\t\t\tInputs: JSON.stringify(this.GetInputs(true))\r\n\t\t};\r\n\r\n\t\t// add additional data\r\n\t\t$.extend(true, DataToSend, this._AdditionalAJAXData);\r\n\r\n\t\t// only abort if we are allowed to.\r\n\t\tif (bAllowAbortion) {\r\n\t\t\ttry {\r\n\t\t\t\tthis.SendDataXHR.abort();\r\n\t\t\t}\r\n\t\t\tcatch (e) { }\r\n\t\t}\r\n\r\n\t\tthis.SendDataXHR = $.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\tdata: DataToSend,\r\n\t\t\tdataType: \"json\",\r\n\t\t\ttraditional: true,\r\n\t\t\turl: context._SceenURL.resolveUrl(),\r\n\t\t\tcomplete: function(jqXHR, textStatus) {\r\n\t\t\t\tcontext._SendDataComplete(jqXHR, textStatus);\r\n\t\t\t},\r\n\t\t\tsuccess: function(Response, textStatus, jqXHR) {\r\n\t\t\t\tcontext._SendDataSuccess(Response, textStatus, jqXHR);\r\n\t\t\t},\r\n\t\t\terror: function(jqXHR, textStatus, errorThrown) {\r\n\t\t\t\tcontext._SendDataFailure(jqXHR, textStatus, errorThrown);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.DoPreScreen = function(bAllowAbortion) {\r\n\t\t// check if we are actually allowed to send the inputs\r\n\t\tif (this._Inputs._Type != \"Inputs\" && this._Inputs._Type != \"ScreenInputs\") {\r\n\t\t\tthrow (\"Cannot do PreScreen call because inputs are not of base type Inputs. Please check the set inputs and try again.\");\r\n\t\t}\r\n\r\n\t\tfor (var key in this._BeforePreScreenListeners) {\r\n\t\t\tthis._BeforePreScreenListeners[key]();\r\n\t\t}\r\n\r\n\t\tvar context = this;\r\n\r\n\t\tvar DataToSend = {\r\n\t\t\tInputs: JSON.stringify(this.GetInputs(true))\r\n\t\t};\r\n\r\n\t\t// add additional data\r\n\t\t$.extend(true, DataToSend, this._AdditionalAJAXData);\r\n\r\n\t\t// only abort if we are allowed to.\r\n\t\tif (bAllowAbortion) {\r\n\t\t\ttry {\r\n\t\t\t\tthis.SendPreScreenXHR.abort();\r\n\t\t\t}\r\n\t\t\tcatch (e) {\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.SendPreScreenXHR = $.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\tdata: DataToSend,\r\n\t\t\tdataType: \"json\",\r\n\t\t\turl: context._PreSceenURL.resolveUrl(),\r\n\t\t\tcomplete: function(jqXHR, textStatus) { context._PreScreenComplete(jqXHR, textStatus); },\r\n\t\t\tsuccess: function(Response, textStatus, jqXHR) { context._PreScreenSuccess(Response, textStatus, jqXHR); },\r\n\t\t\terror: function(jqXHR, textStatus, errorThrown) { context._PreScreenFailure(jqXHR, textStatus, errorThrown); }\r\n\t\t});\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/************************************\r\n\t*\r\n\t* [Start] Send Data Methods\r\n\t*\r\n\t************************************/\r\n\r\n\tScreenerUtility.fn._SendDataComplete = function(jqXHR, textStatus) {\r\n\t\tfor (var key in this._SendDataReturnCompletedListeners) {\r\n\t\t\tthis._SendDataReturnCompletedListeners[key](jqXHR, textStatus);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._SendDataSuccess = function(Response, textStatus, jqXHR) {\r\n\t\tfor (var key in this._SendDataReturnSuccessListeners) {\r\n\t\t\tthis._SendDataReturnSuccessListeners[key](Response, textStatus, jqXHR);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._SendDataFailure = function(jqXHR, textStatus, errorThrown) {\r\n\t\tfor (var key in this._SendDataReturnFailureListeners) {\r\n\t\t\tthis._SendDataReturnFailureListeners[key](jqXHR, textStatus, errorThrown);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._PreScreenComplete = function(jqXHR, textStatus) {\r\n\t\tfor (var key in this._PreScreenCompletedListeners) {\r\n\t\t\tthis._PreScreenCompletedListeners[key](jqXHR, textStatus);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._PreScreenSuccess = function(Response, textStatus, jqXHR) {\r\n\t\tfor (var key in this._PreScreenSuccessListeners) {\r\n\t\t\tthis._PreScreenSuccessListeners[key](Response, textStatus, jqXHR);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._PreScreenFailure = function(jqXHR, textStatus, errorThrown) {\r\n\t\tfor (var key in this._PreScreenFailureListeners) {\r\n\t\t\tthis._PreScreenFailureListeners[key](jqXHR, textStatus, errorThrown);\r\n\t\t}\r\n\t};\r\n\r\n\t/************************************\r\n\t*\r\n\t* [End] Send Data Methods\r\n\t*\r\n\t************************************/\r\n\r\n\t/************************************\r\n\t*\r\n\t* [Start] Register And Unregister methods\r\n\t*\r\n\t************************************/\r\n\r\n\t/* On/Register methods */\r\n\tScreenerUtility.fn.OnBeforeScreen = function(sKey, fCallback) {\r\n\t\tthis._BeforeSendDataListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnScreenComplete = function(sKey, fCallback) {\r\n\t\tthis._SendDataReturnCompletedListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnScreenSuccess = function(sKey, fCallback) {\r\n\t\tthis._SendDataReturnSuccessListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnScreenFail = function(sKey, fCallback) {\r\n\t\tthis._SendDataReturnFailureListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* Off/Unregister methods */\r\n\tScreenerUtility.fn.OffBeforeScreen = function(sKey) {\r\n\t\tif (sKey && this._BeforeSendDataListeners[sKey]) {\r\n\t\t\tdelete this._BeforeSendDataListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffScreenComplete = function(sKey) {\r\n\t\tif (sKey && this._SendDataReturnCompletedListeners[sKey]) {\r\n\t\t\tdelete this._SendDataReturnCompletedListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffScreenSuccess = function(sKey) {\r\n\t\tif (sKey && this._SendDataReturnSuccessListeners[sKey]) {\r\n\t\t\tdelete this._SendDataReturnSuccessListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffScreenFail = function(sKey) {\r\n\t\tif (sKey && this._SendDataReturnFailureListeners[sKey]) {\r\n\t\t\tdelete this._SendDataReturnFailureListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* {Start} PreScreen Register and unRegister callbacks */\r\n\r\n\tScreenerUtility.fn.OnBeforePreScreen = function(sKey, fCallback) {\r\n\t\tthis._BeforePreScreenListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnPreScreenComplete = function(sKey, fCallback) {\r\n\t\tthis._PreScreenCompletedListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnPreScreenSuccess = function(sKey, fCallback) {\r\n\t\tthis._PreScreenSuccessListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnPreScreenFail = function(sKey, fCallback) {\r\n\t\tthis._PreScreenFailureListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/**/\r\n\tScreenerUtility.fn.OffBeforePreScreen = function(sKey) {\r\n\t\tif (sKey && this._BeforePreScreenListeners[sKey]) {\r\n\t\t\tdelete this._BeforePreScreenListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffPreScreenComplete = function(sKey) {\r\n\t\tif (sKey && this._PreScreenCompletedListeners[sKey]) {\r\n\t\t\tdelete this._PreScreenCompletedListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffPreScreenSuccess = function(sKey) {\r\n\t\tif (sKey && this._PreScreenSuccessListeners[sKey]) {\r\n\t\t\tdelete this._PreScreenSuccessListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffPreScreenFail = function(sKey) {\r\n\t\tif (sKey && this._PreScreenFailureListeners[sKey]) {\r\n\t\t\tdelete this._PreScreenFailureListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* {End} PreScreen Register and unRegister callbacks */\r\n\r\n\t/* {Start} Save Screen Register and unRegister callbacks */\r\n\r\n\tScreenerUtility.fn.OnBeforeSaveScreen = function(sKey, fCallback) {\r\n\t\tthis._BeforeSaveScreenListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnSaveScreenComplete = function(sKey, fCallback) {\r\n\t\tthis._SaveScreenCompleteListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnSaveScreenSuccess = function(sKey, fCallback) {\r\n\t\tthis._SaveScreenSuccessListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnSaveScreenFail = function(sKey, fCallback) {\r\n\t\tthis._SaveScreenFailureListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* Unregister */\r\n\r\n\tScreenerUtility.fn.OffBeforeSaveScreen = function(sKey) {\r\n\t\tif (sKey && this._BeforeSaveScreenListeners[sKey]) {\r\n\t\t\tdelete this._BeforeSaveScreenListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffSaveScreenComplete = function(sKey) {\r\n\t\tif (sKey && this._SaveScreenCompleteListeners[sKey]) {\r\n\t\t\tdelete this._SaveScreenCompleteListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffSaveScreenSuccess = function(sKey) {\r\n\t\tif (sKey && this._SaveScreenSuccessListeners[sKey]) {\r\n\t\t\tdelete this._SaveScreenSuccessListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffSaveScreenFail = function(sKey) {\r\n\t\tif (sKey && this._SaveScreenFailureListeners[sKey]) {\r\n\t\t\tdelete this._SaveScreenFailureListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* {End} Save Screen Register call backs */\r\n\r\n\t/* {Start} Delete Screen Register and unRegister callbacks */\r\n\r\n\tScreenerUtility.fn.OnBeforeDeleteScreen = function(sKey, fCallback) {\r\n\t\tthis._BeforeDeleteScreenListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnDeleteScreenComplete = function(sKey, fCallback) {\r\n\t\tthis._DeleteScreenCompleteListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnDeleteScreenSuccess = function(sKey, fCallback) {\r\n\t\tthis._DeleteScreenSuccessListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnDeleteScreenFail = function(sKey, fCallback) {\r\n\t\tthis._DeleteScreenFailureListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* Unregister */\r\n\r\n\tScreenerUtility.fn.OffBeforeDeleteScreen = function(sKey) {\r\n\t\tif (sKey && this._BeforeDeleteScreenListeners[sKey]) {\r\n\t\t\tdelete this._BeforeDeleteScreenListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffDeleteScreenComplete = function(sKey) {\r\n\t\tif (sKey && this._DeleteScreenCompleteListeners[sKey]) {\r\n\t\t\tdelete this._DeleteScreenCompleteListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffDeleteScreenSuccess = function(sKey) {\r\n\t\tif (sKey && this._DeleteScreenSuccessListeners[sKey]) {\r\n\t\t\tdelete this._DeleteScreenSuccessListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffDeleteScreenFail = function(sKey) {\r\n\t\tif (sKey && this._DeleteScreenFailureListeners[sKey]) {\r\n\t\t\tdelete this._DeleteScreenFailureListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* {End} Delete Screen Register call backs */\r\n\r\n\t/* {Start} Set Default Screen Register and unRegister callbacks */\r\n\r\n\tScreenerUtility.fn.OnBeforeSetDefaultScreen = function(sKey, fCallback) {\r\n\t\tthis._BeforeSetDefaultScreenListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnSetDefaultScreenComplete = function(sKey, fCallback) {\r\n\t\tthis._SetDefaultScreenCompleteListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnSetDefaultScreenSuccess = function(sKey, fCallback) {\r\n\t\tthis._SetDefaultScreenSuccessListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OnSetDefaultScreenFail = function(sKey, fCallback) {\r\n\t\tthis._SetDefaultScreenFailureListeners[sKey] = fCallback;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* Unregister */\r\n\r\n\tScreenerUtility.fn.OffBeforeSetDefaultScreen = function(sKey) {\r\n\t\tif (sKey && this._BeforeSetDefaultScreenListeners[sKey]) {\r\n\t\t\tdelete this._BeforeSetDefaultScreenListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffSetDefaultScreenComplete = function(sKey) {\r\n\t\tif (sKey && this._SetDefaultScreenCompleteListeners[sKey]) {\r\n\t\t\tdelete this._SetDefaultScreenCompleteListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffSetDefaultScreenSuccess = function(sKey) {\r\n\t\tif (sKey && this._SetDefaultScreenSuccessListeners[sKey]) {\r\n\t\t\tdelete this._SetDefaultScreenSuccessListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tScreenerUtility.fn.OffSetDefaultScreenFail = function(sKey) {\r\n\t\tif (sKey && this._SetDefaultScreenFailureListeners[sKey]) {\r\n\t\t\tdelete this._SetDefaultScreenFailureListeners[sKey];\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t/* {End} Set Default Screen Register call backs */\r\n\r\n\t/************************************\r\n\t*\r\n\t* [End] Register And Unregister methods\r\n\t*\r\n\t************************************/\r\n\r\n\tScreenerUtility.fn.DoSaveScreen = function(type, name, description) {\r\n\t\tvar context = this;\r\n\r\n\t\tthis._BeforeSaveScreen();\r\n\r\n\t\tvar DataToSend = {\r\n\t\t\tType: type,\r\n\t\t\tName: name,\r\n\t\t\tDescription: description,\r\n\t\t\tInputs: JSON.stringify(this.GetInputs(true))\r\n\t\t};\r\n\r\n\t\t$.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\tdata: DataToSend,\r\n\t\t\tdataType: \"json\",\r\n\t\t\turl: this._SaveScreenURL.resolveUrl(),\r\n\t\t\tcomplete: function(jqXHR, textStatus) { context._SaveScreenComplete(jqXHR, textStatus); },\r\n\t\t\tsuccess: function(Response, textStatus, jqXHR) { context._SaveScreenSuccess(Response, textStatus, jqXHR); },\r\n\t\t\terror: function(jqXHR, textStatus, errorThrown) { context._SaveScreenFailure(jqXHR, textStatus, errorThrown); }\r\n\t\t});\r\n\t};\r\n\r\n\t/************************************\r\n\t*\r\n\t* [Start] Send Data Methods\r\n\t*\r\n\t************************************/\r\n\r\n\tScreenerUtility.fn._BeforeSaveScreen = function() {\r\n\t\tfor (var key in this._BeforeSaveScreenListeners) {\r\n\t\t\tthis._BeforeSaveScreenListeners[key]();\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._SaveScreenComplete = function(jqXHR, textStatus) {\r\n\t\tfor (var key in this._SaveScreenCompleteListeners) {\r\n\t\t\tthis._SaveScreenCompleteListeners[key](jqXHR, textStatus);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._SaveScreenSuccess = function(Response, textStatus, jqXHR) {\r\n\t\tfor (var key in this._SaveScreenSuccessListeners) {\r\n\t\t\tthis._SaveScreenSuccessListeners[key](Response, textStatus, jqXHR);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._SaveScreenFailure = function(jqXHR, textStatus, errorThrown) {\r\n\t\tfor (var key in this._SaveScreenFailureListeners) {\r\n\t\t\tthis._SaveScreenFailureListeners[key](jqXHR, textStatus, errorThrown);\r\n\t\t}\r\n\t};\r\n\r\n\t/************************************\r\n\t*\r\n\t* [End] Send Data Methods\r\n\t*\r\n\t************************************/\r\n\r\n\tScreenerUtility.fn.DoDeleteScreen = function(type, name) {\r\n\t\tvar context = this;\r\n\r\n\t\tthis._BeforeDeleteScreen();\r\n\r\n\t\tvar DataToSend = {\r\n\t\t\tType: type,\r\n\t\t\tName: name\r\n\t\t};\r\n\r\n\t\t$.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\tdata: DataToSend,\r\n\t\t\tdataType: \"json\",\r\n\t\t\turl: this._DeleteScreenURL.resolveUrl(),\r\n\t\t\tcomplete: function(jqXHR, textStatus) { context._DeleteScreenComplete(jqXHR, textStatus); },\r\n\t\t\tsuccess: function(Response, textStatus, jqXHR) { context._DeleteScreenSuccess(Response, textStatus, jqXHR); },\r\n\t\t\terror: function(jqXHR, textStatus, errorThrown) { context._DeleteScreenFailure(jqXHR, textStatus, errorThrown); }\r\n\t\t});\r\n\t};\r\n\r\n\t/************************************\r\n\t*\r\n\t* [Start] Send Data Methods\r\n\t*\r\n\t************************************/\r\n\r\n\tScreenerUtility.fn._BeforeDeleteScreen = function() {\r\n\t\tfor (var key in this._BeforeDeleteScreenListeners) {\r\n\t\t\tthis._BeforeDeleteScreenListeners[key]();\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._DeleteScreenComplete = function(jqXHR, textStatus) {\r\n\t\tfor (var key in this._DeleteScreenCompleteListeners) {\r\n\t\t\tthis._DeleteScreenCompleteListeners[key](jqXHR, textStatus);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._DeleteScreenSuccess = function(Response, textStatus, jqXHR) {\r\n\t\tfor (var key in this._DeleteScreenSuccessListeners) {\r\n\t\t\tthis._DeleteScreenSuccessListeners[key](Response, textStatus, jqXHR);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._DeleteScreenFailure = function(jqXHR, textStatus, errorThrown) {\r\n\t\tfor (var key in this._DeleteScreenFailureListeners) {\r\n\t\t\tthis._DeleteScreenFailureListeners[key](jqXHR, textStatus, errorThrown);\r\n\t\t}\r\n\t};\r\n\r\n\t/************************************\r\n\t*\r\n\t* [End] Send Data Methods\r\n\t*\r\n\t************************************/\r\n\r\n\tScreenerUtility.fn.DoSetDefaultScreen = function(type, name) {\r\n\t\tvar context = this;\r\n\r\n\t\tthis._BeforeSetDefaultScreen();\r\n\r\n\t\tvar DataToSend = {\r\n\t\t\tType: type,\r\n\t\t\tName: name\r\n\t\t};\r\n\r\n\t\t$.ajax({\r\n\t\t\ttype: \"POST\",\r\n\t\t\tdata: DataToSend,\r\n\t\t\tdataType: \"json\",\r\n\t\t\turl: this._SetDefaultScreenURL.resolveUrl(),\r\n\t\t\tcomplete: function(jqXHR, textStatus) { context._SetDefaultScreenComplete(jqXHR, textStatus); },\r\n\t\t\tsuccess: function(Response, textStatus, jqXHR) { context._SetDefaultScreenSuccess(Response, textStatus, jqXHR); },\r\n\t\t\terror: function(jqXHR, textStatus, errorThrown) { context._SetDefaultScreenFailure(jqXHR, textStatus, errorThrown); }\r\n\t\t});\r\n\t};\r\n\r\n\t/************************************\r\n\t*\r\n\t* [Start] Send Data Methods\r\n\t*\r\n\t************************************/\r\n\r\n\tScreenerUtility.fn._BeforeSetDefaultScreen = function() {\r\n\t\tfor (var key in this._BeforeSetDefaultScreenListeners) {\r\n\t\t\tthis._BeforeSetDefaultScreenListeners[key]();\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._SetDefaultScreenComplete = function(jqXHR, textStatus) {\r\n\t\tfor (var key in this._SetDefaultScreenCompleteListeners) {\r\n\t\t\tthis._SetDefaultScreenCompleteListeners[key](jqXHR, textStatus);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._SetDefaultScreenSuccess = function(Response, textStatus, jqXHR) {\r\n\t\tfor (var key in this._SetDefaultScreenSuccessListeners) {\r\n\t\t\tthis._SetDefaultScreenSuccessListeners[key](Response, textStatus, jqXHR);\r\n\t\t}\r\n\t};\r\n\r\n\tScreenerUtility.fn._SetDefaultScreenFailure = function(jqXHR, textStatus, errorThrown) {\r\n\t\tfor (var key in this._SetDefaultScreenFailureListeners) {\r\n\t\t\tthis._SetDefaultScreenFailureListeners[key](jqXHR, textStatus, errorThrown);\r\n\t\t}\r\n\t};\r\n\r\n\t/************************************\r\n\t*\r\n\t* [End] Send Data Methods\r\n\t*\r\n\t************************************/\r\n\r\n\t// Create default instance of the screener utility\r\n\tNamespace.ScreenerUtility = ScreenerUtility;\r\n\r\n\tNamespace.ScreenerUtility.Instance = Namespace.ScreenerUtility.CreateInstance();\r\n\r\n\t/********************************************\r\n\t*\r\n\t* End - ScreenerUtility\r\n\t*\r\n\t********************************************/\r\n\r\n})(window.MOD || window.WSOD || window);","(function (Namespace)\r\n{\r\n\t/********************************************\r\n\t*\r\n\t* Start - Inputs\r\n\t*\r\n\t********************************************/\r\n\r\n\tNamespace.ScreenerUtility.Inputs = function ()\r\n\t{\r\n\t\tthis._Data = {\r\n\t\t\tArguments: [],\r\n\t\t\tLabel: \"\",\r\n\t\t\tName: \"\",\r\n\t\t\tScreenerID: 0\r\n\t\t};\r\n\r\n\t\tthis._Type = \"Inputs\";\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn = Namespace.ScreenerUtility.Inputs.prototype;\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.Parse = function (Input, bFieldAndSafeNameAreTheSame)\r\n\t{\r\n\t\tif (!Input) { throw (\"Error Occurred in Inputs.Parse(Input, bFieldAndSafeNameAreTheSame). Input can not be null. Please check your inputs and try again.\"); }\r\n\r\n\t\t// turn it into an object if you can.\r\n\t\tif (typeof (Input) == \"string\") { Input = JSON.parse(Input); }\r\n\r\n\t\tif (Input.Label)\r\n\t\t{\r\n\t\t\tthis._Data.Label = Input.Label;\r\n\t\t}\r\n\r\n\t\tif (Input.Name)\r\n\t\t{\r\n\t\t\tthis._Data.Name = Input.Name;\r\n\t\t}\r\n\r\n\t\tif (Input.ScreenerID)\r\n\t\t{\r\n\t\t\tthis._Data.ScreenerID = Input.ScreenerID;\r\n\t\t}\r\n\r\n\t\tif (Input.Arguments)\r\n\t\t{\r\n\t\t\tthis._Data.Arguments = [];\r\n\r\n\t\t\tfor (var i = 0, j = Input.Arguments.length; i < j; i++)\r\n\t\t\t{\r\n\t\t\t\tvar Arg = new Namespace.ScreenerUtility.Argument();\r\n\r\n\t\t\t\tArg.Parse(Input.Arguments[i], bFieldAndSafeNameAreTheSame);\r\n\r\n\t\t\t\tthis.AddArgument(Arg);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.AddArgument = function (objArg)\r\n\t{\r\n\t\t// check if object and has secret type and then add the reference rather than just the data\r\n\t\t// that way we can remove things if need be.\r\n\t\tif (objArg && objArg._Type == \"Argument\")\r\n\t\t{\r\n\t\t\tthis._Data.Arguments.push(objArg);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.Inputs.AddArgument(objArg): Argument passed is not a valid ScreenerUtility.Argument. Please check your inputs and try again\");\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.RemoveArgumentByField = function (sFieldToRemove)\r\n\t{\r\n\t\tvar arArgumentsToKeep = [];\r\n\r\n\t\tfor (var i = 0; i < this._Data.Arguments.length; i++)\r\n\t\t{\r\n\t\t\tif (\r\n\t\t\t\tthis._Data.Arguments[i]._SafeName != sFieldToRemove &&\r\n\t\t\t\t(this._Data.Arguments[i]._Data && this._Data.Arguments[i]._Data.Field != sFieldToRemove)\r\n\t\t\t)\r\n\t\t\t{\r\n\t\t\t\tarArgumentsToKeep.push(this._Data.Arguments[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._Data.Arguments = arArgumentsToKeep;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.RemoveArguments = function ()\r\n\t{\r\n\t\tthis._Data.Arguments = [];\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.ContainsArgumentFor = function (sField)\r\n\t{\r\n\t\treturn (this.GetArgument(sField) != null);\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.GetArgument = function (sField)\r\n\t{\r\n\t\tfor (var i = 0; i < this._Data.Arguments.length; i++)\r\n\t\t{\r\n\t\t\tif (\r\n\t\t\t\tthis._Data.Arguments[i]._SafeName == sField ||\r\n\t\t\t\t(this._Data.Arguments[i]._Data && this._Data.Arguments[i]._Data.Field == sField)\r\n\t\t\t)\r\n\t\t\t{\r\n\t\t\t\treturn this._Data.Arguments[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.SetScreenerID = function (iScreenID)\r\n\t{\r\n\t\tthis._Data.ScreenerID = iScreenID;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.SetName = function (sName)\r\n\t{\r\n\t\tthis._Data.Name = sName;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.SetLabel = function (sLabel)\r\n\t{\r\n\t\tthis._Data.Label = sLabel;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.SetArguments = function (arArguments)\r\n\t{\r\n\t\t$.extend(true, this._Data.Arguments, arArguments);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.GetData = function ()\r\n\t{\r\n\t\tvar ReturnData = {};\r\n\r\n\t\t$.extend(true, ReturnData, this._Data);\r\n\r\n\t\tReturnData.Arguments = [];\r\n\r\n\t\tfor (var i = 0, j = this._Data.Arguments.length; i < j; i++)\r\n\t\t{\r\n\t\t\tReturnData.Arguments.push(this._Data.Arguments[i].GetData());\r\n\t\t}\r\n\r\n\t\treturn ReturnData;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.GetScreenerID = function ()\r\n\t{\r\n\t\treturn this._Data.ScreenerID;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.GetName = function ()\r\n\t{\r\n\t\treturn this._Data.Name;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.GetLabel = function ()\r\n\t{\r\n\t\treturn this._Data.Label;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Inputs.fn.GetArguments = function (bGetDataOnly)\r\n\t{\r\n\t\tif (bGetDataOnly && this._Data.Arguments)\r\n\t\t{\r\n\t\t\tvar arArgData = [];\r\n\r\n\t\t\tfor (var i = 0, j = this._Data.Arguments.length; i < j; i++)\r\n\t\t\t{\r\n\t\t\t\tarArgData.push(this._Data.Arguments[i]._Data);\r\n\t\t\t}\r\n\r\n\t\t\treturn arArgData;\r\n\t\t}\r\n\r\n\t\treturn this._Data.Arguments;\r\n\t};\r\n\r\n\t/********************************************\r\n\t*\r\n\t* End - Inputs\r\n\t*\r\n\t********************************************/\r\n\r\n\t/*****************************************************************/\r\n\r\n\t/********************************************\r\n\t*\r\n\t* Start - ScreenInputs\r\n\t*\r\n\t********************************************/\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs = function ()\r\n\t{\r\n\t\tNamespace.ScreenerUtility.ScreenInputs.Super(this);\r\n\r\n\t\tvar LocalInitData = {\r\n\t\t\tFirstRow: 0,\r\n\t\t\tRowCount: 10,\r\n\t\t\tResultFields: [],\r\n\t\t\tSortArguments: []\r\n\t\t};\r\n\r\n\t\t$.extend(true, this._Data, LocalInitData);\r\n\r\n\t\tthis._Type = \"ScreenInputs\";\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t// Extend the Inputs class\r\n\tNamespace.ScreenerUtility.ScreenInputs.Extend(Namespace.ScreenerUtility.Inputs);\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn = Namespace.ScreenerUtility.ScreenInputs.prototype;\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.Parse = function (Input, bFieldAndSafeNameAreTheSame)\r\n\t{\r\n\t\tNamespace.ScreenerUtility.ScreenInputs.Super(this, \"Parse\", [Input, bFieldAndSafeNameAreTheSame]);\r\n\r\n\t\t// turn it into an object if you can.\r\n\t\tif (typeof (Input) == \"string\") { Input = JSON.parse(Input); }\r\n\r\n\t\tif (Input.FirstRow)\r\n\t\t{\r\n\t\t\tthis._Data.FirstRow = Input.FirstRow;\r\n\t\t}\r\n\r\n\t\tif (Input.RowCount)\r\n\t\t{\r\n\t\t\tthis._Data.RowCount = Input.RowCount;\r\n\t\t}\r\n\r\n\t\tif (Input.ResultFields)\r\n\t\t{\r\n\t\t\tthis._Data.ResultFields = Input.ResultFields;\r\n\t\t}\r\n\r\n\t\tif (Input.SortArguments)\r\n\t\t{\r\n\t\t\tthis._Data.SortArguments = [];\r\n\r\n\t\t\tfor (var i = 0, j = Input.SortArguments.length; i < j; i++)\r\n\t\t\t{\r\n\t\t\t\tvar passedArgData = Input.SortArguments[i];\r\n\t\t\t\tvar SortArg = new Namespace.ScreenerUtility.ScreenInputs.SortArgument(passedArgData.Field, passedArgData.Direction);\r\n\t\t\t\tthis.AddSortArgument(SortArg);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.SetFirstRow = function (iFirstRow)\r\n\t{\r\n\t\tthis._Data.FirstRow = iFirstRow;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.SetRowCount = function (iRowCount)\r\n\t{\r\n\t\tthis._Data.RowCount = iRowCount;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.SetResultFields = function (arResultFields)\r\n\t{\r\n\t\tif (arResultFields)\r\n\t\t{\r\n\t\t\tthis._Data.ResultFields = arResultFields;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.GetResultFields = function ()\r\n\t{\r\n\t\treturn this._Data.ResultFields;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.AddResultField = function (sField)\r\n\t{\r\n\t\tthis._Data.ResultFields.push(sField);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.RemoveResultField = function (sFieldToRemove)\r\n\t{\r\n\t\tvar arFieldsToKeep = [];\r\n\r\n\t\tfor (var i = 0, j = this._Data.ResultFields.length; i < j; i++)\r\n\t\t{\r\n\t\t\tif (this._Data.ResultFields[i] != sFieldToRemove)\r\n\t\t\t{\r\n\t\t\t\tarFieldsToKeep.push(this._Data.ResultFields[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._Data.ResultFields = arFieldsToKeep;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.RemoveResultFieldAt = function (iIndex)\r\n\t{\r\n\t\tthis._Data.ResultFields.splice(iIndex, 1);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.SetSortArguments = function (arSortArguments)\r\n\t{\r\n\t\tthis._Data.SortArguments = arSortArguments;\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.GetSortArguments = function ()\r\n\t{\r\n\t\treturn this._Data.SortArguments;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.AddSortArgument = function (SortArgument)\r\n\t{\r\n\t\tif (!SortArgument || SortArgument._Type != \"SortArgument\")\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in AddSortArgument(SortArgument): SortArgument cannot be null and must be of type Namespace.ScreenerUtility.ScreenInputs.SortArgument\");\r\n\t\t}\r\n\r\n\t\tthis._Data.SortArguments.push(SortArgument);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.RemoveSortArgument = function (sFieldToRemove)\r\n\t{\r\n\t\tvar arArgumentsToKeep = [];\r\n\r\n\t\tfor (var i = 0, j = this._Data.SortArguments.length; i < j; i++)\r\n\t\t{\r\n\t\t\tif (this._Data.SortArguments[i].Field != sFieldToRemove)\r\n\t\t\t{\r\n\t\t\t\tarArgumentsToKeep.push(this._Data.SortArguments[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._Data.SortArguments = arArgumentsToKeep;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.RemoveSortArgumentAt = function (iIndex)\r\n\t{\r\n\t\tthis._Data.SortArguments.splice(iIndex, 1);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.RemoveSortArguments = function ()\r\n\t{\r\n\t\tthis._Data.SortArguments = [];\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.fn.GetData = function ()\r\n\t{\r\n\t\tvar DataToReturn = {};\r\n\r\n\t\t// make a new instance of all the data we already have\r\n\t\t$.extend(true, DataToReturn, this._Data);\r\n\r\n\t\t// call the base GetData Method\r\n\t\tvar BaseReturn = Namespace.ScreenerUtility.ScreenInputs.Super(this, \"GetData\", arguments);\r\n\r\n\t\t// update the properties in DataToReturn with the information in BaseReturn\r\n\t\t$.extend(true, DataToReturn, BaseReturn);\r\n\r\n\t\t// reset sort arguments because we want to grab the data for each item.\r\n\t\tDataToReturn.SortArguments = [];\r\n\r\n\t\t// loop through all the sort arguments and get the data we need and push that into our sort arguments\r\n\t\t// so we can send back an array of everything we really need.\r\n\t\tfor (var i = 0, j = this._Data.SortArguments.length; i < j; i++)\r\n\t\t{\r\n\t\t\tDataToReturn.SortArguments.push(this._Data.SortArguments[i].GetData());\r\n\t\t}\r\n\r\n\t\treturn DataToReturn;\r\n\t};\r\n\r\n\t/********************************************\r\n\t*\r\n\t* End - ScreenInputs\r\n\t*\r\n\t********************************************/\r\n\r\n})(window.MOD || window.WSOD || window);","(function (Namespace)\r\n{\r\n\t/********************************************\r\n\t*\r\n\t* Start - Sort Argument\r\n\t*\r\n\t********************************************/\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.SortArgument = function (Field, Direction)\r\n\t{\r\n\t\tthis._Type = \"SortArgument\";\r\n\r\n\t\tthis._Data = {\r\n\t\t\tField: \"\",\r\n\t\t\tDirection: 0\r\n\t\t};\r\n\r\n\t\tthis.SetField(Field);\r\n\t\tthis.SetDirection(Direction);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.SortArgument.fn = Namespace.ScreenerUtility.ScreenInputs.SortArgument.prototype;\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.SortArgument.fn.SetField = function (Field)\r\n\t{\r\n\t\tthis._Data.Field = Field;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.SortArgument.fn.SetDirection = function (Direction)\r\n\t{\r\n\t\tif (!Namespace.ScreenerUtility.IsValidSortDirection(Direction))\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenInputs.SortArgument.SetDirection(Direction): SortDirection cannot be null and must be type of ScreenerUtility.SORT_DIRECTION.\");\r\n\t\t}\r\n\r\n\t\tthis._Data.Direction = Direction;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.ScreenInputs.SortArgument.fn.GetData = function ()\r\n\t{\r\n\t\treturn this._Data;\r\n\t};\r\n\r\n\t/********************************************\r\n\t*\r\n\t* End - Sort Argument\r\n\t*\r\n\t********************************************/\r\n\r\n\t/*-----------------------------------------*/\r\n\r\n\t/********************************************\r\n\t*\r\n\t* Start - Argument\r\n\t*\r\n\t********************************************/\r\n\r\n\tNamespace.ScreenerUtility.Argument = function ()\r\n\t{\r\n\t\tthis._Type = \"Argument\";\r\n\t\tthis._SafeName = \"\";\r\n\r\n\t\tthis._Data = {\r\n\t\t\tArgsOperator: null,\r\n\t\t\tValueOperator: null,\r\n\t\t\tArguments: [],\r\n\t\t\tClauses: [],\r\n\t\t\tClauseGroups: [],\r\n\t\t\tField: \"\",\r\n\t\t\tIdentifiers: [],\r\n\t\t\tStyle: \"\"\r\n\t\t};\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn = Namespace.ScreenerUtility.Argument.prototype;\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.Parse = function (Input, bFieldAndSafeNameAreTheSame)\r\n\t{\r\n\t\t// turn it into an object if you can.\r\n\t\tif (typeof (Input) == \"string\") { Input = JSON.parse(Input); }\r\n\r\n\t\tif (Input.ArgsOperator)\r\n\t\t{\r\n\t\t\tthis._Data.ArgsOperator = Input.ArgsOperator;\r\n\t\t}\r\n\r\n\t\tif (Input.ValueOperator)\r\n\t\t{\r\n\t\t\tthis._Data.ValueOperator = Input.ValueOperator;\r\n\t\t}\r\n\r\n\t\tif (Input.Identifiers)\r\n\t\t{\r\n\t\t\tthis._Data.Identifiers = Input.Identifiers;\r\n\t\t}\r\n\r\n\t\tif (Input.Style)\r\n\t\t{\r\n\t\t\tthis._Data.Style = Input.Style;\r\n\t\t}\r\n\r\n\t\tif (Input.Field)\r\n\t\t{\r\n\t\t\tthis._Data.Field = Input.Field;\r\n\r\n\t\t\tif (bFieldAndSafeNameAreTheSame)\r\n\t\t\t{\r\n\t\t\t\tthis.SetSafeName(Input.Field);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (Input.Arguments)\r\n\t\t{\r\n\t\t\tfor (var i = 0, j = Input.Arguments.length; i < j; i++)\r\n\t\t\t{\r\n\t\t\t\tvar Arg = new Namespace.ScreenerUtility.Argument();\r\n\r\n\t\t\t\tArg.Parse(Input.Arguments[i]);\r\n\r\n\t\t\t\tthis.AddArgument(Arg);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (Input.Clauses)\r\n\t\t{\r\n\t\t\tfor (var i = 0, j = Input.Clauses.length; i < j; i++)\r\n\t\t\t{\r\n\t\t\t\tvar Clause = new Namespace.ScreenerUtility.Argument.Clause();\r\n\r\n\t\t\t\tClause.Parse(Input.Clauses[i]);\r\n\r\n\t\t\t\tthis.AddClause(Clause);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (Input.ClauseGroups)\r\n\t\t{\r\n\t\t\tfor (var i = 0, j = Input.ClauseGroups.length; i < j; i++)\r\n\t\t\t{\r\n\t\t\t\tvar ClauseGroup = new Namespace.ScreenerUtility.Argument.ClauseGroups();\r\n\r\n\t\t\t\tClauseGroup.Parse(Input.ClauseGroups[i]);\r\n\r\n\t\t\t\tthis.AddClauseGroup(ClauseGroup);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.AddClause = function (Clause)\r\n\t{\r\n\t\tif (Clause && Clause._Type == \"Clause\")\r\n\t\t{\r\n\t\t\tthis._Data.Clauses.push(Clause);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.Argument.AddClause(Cluase): Argument can not be null and must be an instance of ScreenerUtility.Argument.Clause. Please check your input and try again.\");\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.RemoveAllClauses = function ()\r\n\t{\r\n\t\tthis._Data.Clauses = [];\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.RemoveClauseAt = function (iIndex)\r\n\t{\r\n\t\t// if index is out of range just ignore it\r\n\t\tif (iIndex < this._Data.Clauses.length && (this._DataClauses[iIndex] || this._DataClauses[iIndex] == 0))\r\n\t\t{\r\n\t\t\tthis._Data.Clauses.splice(iIndex, 1);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in Argument.RemoveClauseAt(iIndex): iIndex was out of range or null. Check your inputs and try again.\");\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.RemoveClauseByValue = function (sValue, bAllInstances)\r\n\t{\r\n\t\tif (!sValue || $.trim(sValue) == \"\")\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in Argument.RemoveClauseByValue(sValue, bAllInstances): sValue is null or empty. Check your inputs and try again.\");\r\n\t\t}\r\n\r\n\t\tvar arClausesToKeep = [];\r\n\t\tvar bFoundFirst = false;\r\n\r\n\t\tfor (var i = 0, j = this._Data.Clauses.length; i < j; i++)\r\n\t\t{\r\n\t\t\tvar objCurrClause = this._Data.Clauses[i];\r\n\r\n\t\t\t// if we already found the first instance and we don't want to remove all instances\r\n\t\t\tif (bFoundFirst && !bAllInstances)\r\n\t\t\t{\r\n\t\t\t\tarClausesToKeep.push(objCurrClause);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (objCurrClause._Data && objCurrClause._Data.Values && objCurrClause._Data.Values.length > 0)\r\n\t\t\t{\r\n\t\t\t\tif (\r\n\t\t\t\t\t(objCurrClause._Data.Values.length == 1 && objCurrClause._Data.Values == sValue) ||\r\n\t\t\t\t\t(objCurrClause._Data.Values.length > 1 && objCurrClause._Data.Values.join(\"|~|\").indexOf(sValue + \"|~|\") > -1)\r\n\t\t\t\t)\r\n\t\t\t\t{\r\n\t\t\t\t\tbFoundFirst == true;\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tarClausesToKeep.push(objCurrClause);\r\n\t\t}\r\n\r\n\t\t// set the clauses we want to keep\r\n\t\tthis._Data.Clauses = arClausesToKeep;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.GetClauses = function ()\r\n\t{\r\n\t\treturn this._Data.Clauses;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.AddClauseGroup = function (ClauseGroup)\r\n\t{\r\n\t\tif (ClauseGroup && ClauseGroup.length)\r\n\t\t{\r\n\t\t\tthis._Data.ClauseGroups.push(ClauseGroup);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.Argument.AddClauseGroup(ClauseGroup): Argument can not be null and must be an array containing instances of ScreenerUtility.Argument.Clause. Please check your input and try again.\");\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.RemoveAllClauseGroups = function ()\r\n\t{\r\n\t\tthis._Data.ClauseGroups = [];\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.SetSafeName = function (sName)\r\n\t{\r\n\t\tthis._SafeName = sName;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.GetStyle = function ()\r\n\t{\r\n\t\treturn this._Data.Style;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.SetStyle = function (sStyle)\r\n\t{\r\n\t\tthis._Data.Style = sStyle;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.GetIdentifiers = function ()\r\n\t{\r\n\t\treturn this._Data.Identifiers;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.SetIdentifiers = function (arIdentifiers)\r\n\t{\r\n\t\tthis._Data.Identifiers = arIdentifiers || [];\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.AddIdentifier = function (sIdentifier)\r\n\t{\r\n\t\tthis._Data.Identifiers.push(sIdentifier);\r\n\t\t\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.RemoveIdentifier = function (sIdentifier)\r\n\t{\r\n\t\tif (!this._Data.Identifiers)\r\n\t\t{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\t\r\n\t\tvar arNewIdentifiers = [];\r\n\r\n\t\tfor (var i = 0, j = this._Data.Identifiers.lenght; i < j; i++)\r\n\t\t{\r\n\t\t\tif (this._Data.Identifier[i] != sRemove)\r\n\t\t\t{\r\n\t\t\t\tarNewIdentifiers.push(this._Data.Identifier[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._Data.Identifiers = arNewIdentifiers;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.SetArgsOperator = function (ArgsOperator)\r\n\t{\r\n\t\tif ((!ArgsOperator && ArgsOperator != 0) || !Namespace.ScreenerUtility.IsValidOperator(ArgsOperator))\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.Argument.SetArgsOperator(ArgsOperator): ArgsOperator is a required input and must be one of ScreenerUtility.ARGS_OPERATORS. Please check your inputs and try again\");\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis._Data.ArgsOperator = ArgsOperator;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.SetValueOperator = function (ValueOperator)\r\n\t{\r\n\t\tif ((!ValueOperator && ValueOperator != 0) || !Namespace.ScreenerUtility.IsValidArgOrValueOperator(ValueOperator))\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.Argument.SetValueOperator(ValueOperator): ValueOperator is a required input and must be one of ScreenerUtility.VALUE_OPERATORS. Please check your inputs and try again\");\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthis._Data.ValueOperator = ValueOperator;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.SetField = function (sField)\r\n\t{\r\n\t\tthis._Data.Field = sField;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.GetArgsOperator = function ()\r\n\t{\r\n\t\treturn this._Data.ArgsOperator;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.GetValueOperator = function ()\r\n\t{\r\n\t\treturn this._Data.ValueOperator;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.GetField = function ()\r\n\t{\r\n\t\treturn this._Data.Field;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.GetSafeName = function ()\r\n\t{\r\n\t\treturn this._SafeName;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.AddArgument = function (Argument)\r\n\t{\r\n\t\tif (Argument && Argument._Type == \"Argument\")\r\n\t\t{\r\n\t\t\tthis._Data.Arguments.push(Argument);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.Argument.AddArgument(Argument): Argument can not be null and must be an instance of ScreenerUtility.Argument. Please check your input and try again.\");\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.RemoveAllArguments = function ()\r\n\t{\r\n\t\tthis._Data.Arguments = [];\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.fn.GetData = function ()\r\n\t{\r\n\t\tvar ReturnObj = {};\r\n\r\n\t\t$.extend(true, ReturnObj, this._Data);\r\n\r\n\t\tReturnObj.Arguments = [];\r\n\r\n\t\tfor (var i = 0, j = this._Data.Arguments.length; i < j; i++)\r\n\t\t{\r\n\t\t\tReturnObj.Arguments.push(this._Data.Arguments[i].GetData());\r\n\t\t}\r\n\r\n\t\tReturnObj.Clauses = [];\r\n\r\n\t\tfor (var i = 0, j = this._Data.Clauses.length; i < j; i++)\r\n\t\t{\r\n\t\t\tReturnObj.Clauses.push(this._Data.Clauses[i].GetData());\r\n\t\t}\r\n\r\n\t\tReturnObj.ClauseGroups = [];\r\n\r\n\t\tfor (var i = 0, j = this._Data.ClauseGroups.length; i < j; i++)\r\n\t\t{\r\n\t\t\tvar arClauseGroup = [];\r\n\r\n\t\t\tfor (var it = 0, jt = this._Data.ClauseGroups[i]; it < jt; it++)\r\n\t\t\t{\r\n\t\t\t\tarClauseGroup.push(this._Data.ClauseGroups[i][it].GetData());\r\n\t\t\t}\r\n\r\n\t\t\tReturnObj.ClauseGroups.push(arClauseGroup);\r\n\t\t}\r\n\r\n\t\treturn ReturnObj;\r\n\t};\r\n\r\n\t/********************************************\r\n\t*\r\n\t* End - Argument\r\n\t*\r\n\t********************************************/\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause = function (Operator, Values)\r\n\t{\r\n\t\tthis._Type = \"Clause\";\r\n\r\n\t\tthis._Data = {\r\n\t\t\tOperator: null,\r\n\t\t\tValues: []\r\n\t\t};\r\n\r\n\t\tthis.SetOperator(Operator, true);\r\n\t\tthis.SetValues(Values, true);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause.fn = Namespace.ScreenerUtility.Argument.Clause.prototype;\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause.fn.Parse = function (Input)\r\n\t{\r\n\t\tif (typeof (Input) == \"string\") { Input = JSON.parse(Input); }\r\n\r\n\t\tthis._Data = {\r\n\t\t\tOperator: (Input.Operator || Input.Operator == 0) ? Input.Operator : null,\r\n\t\t\tValues: Input.Values || []\r\n\t\t};\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause.fn.SetOperator = function (Operator, bDoNotThrowError)\r\n\t{\r\n\t\tif (!bDoNotThrowError && (!Operator || !Namespace.ScreenerUtility.IsValidOperator(Operator)))\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.Argument.Clause.SetOperator(Operator, bDoNotThrowError): Operator is a required input and must be one of ScreenerUtility.OPERATORS. Please check your inputs and try again\");\r\n\t\t}\r\n\r\n\t\tthis._Data.Operator = Operator;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause.fn.SetValues = function (arValues, bDoNotThrowError)\r\n\t{\r\n\t\tif (!bDoNotThrowError && (!arValues || !arValues.length))\r\n\t\t{\r\n\t\t\tthrow (\"Error occured in ScreenerUtility.Argument.Clause.SetValues(arValues, bDoNotThrowError): arValues is a required input and must be an array of values. Please check your inputs and try again\");\r\n\t\t}\r\n\r\n\t\tthis._Data.Values = arValues;\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause.fn.AddValue = function (sValue)\r\n\t{\r\n\t\tthis._Data.Values.push(sValue);\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause.fn.GetOperator = function ()\r\n\t{\r\n\t\treturn this._Data.Operator;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause.fn.GetValues = function ()\r\n\t{\r\n\t\treturn this._Data.Values;\r\n\t};\r\n\r\n\tNamespace.ScreenerUtility.Argument.Clause.fn.GetData = function ()\r\n\t{\r\n\t\treturn this._Data;\r\n\t};\r\n})(window.MOD || window.WSOD || window);","mod.modules.define(\"Plugin-CustomColumns\", function(fn) {\r\n\r\n\tvar $window = null;\r\n\tvar $documentBody = null;\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.tableId = params.tableId || \"\";\r\n\t\tthis.maxColumns = params.maxColumns || 5;\r\n\r\n\t\t$window = $(window);\r\n\t\t$documentBody = $(document.body);\r\n\t};\r\n\r\n\tfn.prototype.showModal = function() {\r\n\t\tvar id = \"com_customizetablecolumns\";\r\n\t\tvar widgetId = \"widget-\" + id;\r\n\r\n\t\t// Create a wrapper for the modal\r\n\t\tvar $modalWrapper = $(\"
\").append(\r\n\t\t\t// Add a placeholder that will be replaced by the new widget\r\n\t\t\t$(\"\")\r\n\t\t).modal({\r\n\t\t\tbackdrop: \"static\", // Prevent the modal from closing on blur\r\n\t\t\tshow: false\r\n\t\t})\r\n\t\t.off(\"show.bs.modal\")\r\n\t\t.on(\"show.bs.modal\", function() {\r\n\t\t\t// Reposition the modal\r\n\t\t\tvar $modal = $(this);\r\n\t\t\tvar currentTop = $modal.position().top;\r\n\t\t\tvar windowTop = $window.scrollTop();\r\n\t\t\tvar spacing = 100;\r\n\t\t\t$modal.css(\"top\", currentTop + windowTop + spacing);\r\n\t\t})\r\n\t\t.modal(\"show\");\r\n\r\n\t\t// Load the new widget\r\n\t\tmod.modules.widgetapi.load({\r\n\t\t\twidgets: {\r\n\t\t\t\tappId: id,\r\n\t\t\t\tcontext: {\r\n\t\t\t\t\tTableId: this.tableId,\r\n\t\t\t\t\tMaxColumns: this.maxColumns\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tsuccess: function() {\r\n\t\t\t\t$modalWrapper.removeClass(\"loading\");\r\n\r\n\t\t\t\t$modalWrapper.on(\"hide.bs.modal\", function () {\r\n\t\t\t\t\t// Remove the widget completely when the modal is closed\r\n\t\t\t\t\tvar widgetClass = $(\"#\" + widgetId).data(\"widget\");\r\n\r\n\t\t\t\t\tif (widgetClass) {\r\n\t\t\t\t\t\twidgetClass.dispose(true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(this).remove();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n});","/*global mod*/\r\n\r\nmod.modules.define(\"BaseModule\", function(fn) {\r\n\r\n\tvar $window = null;\r\n\tvar $documentBody = null;\r\n\r\n\tfn.prototype.init = function() {\r\n\t\t// Cache\r\n\t\t$window = $(window);\r\n\t\t$documentBody = $(document.body);\r\n\r\n\t\t// Init the tooltips\r\n\t\tthis.el.find(\"a[rel=tooltip]\").tooltip({\r\n\t\t\tmaxWidth: 215\r\n\t\t});\r\n\r\n\t\t// Init any inputs with a default value\r\n\t\tthis.el.find(\"input[placeholder]\").defaultValue();\r\n\t};\r\n\r\n\tfn.prototype.handle_moduleExpand = function(id, extraContext) {\r\n\t\textraContext = extraContext || {};\r\n\r\n\t\tvar widgetId = \"widget-\" + id;\r\n\r\n\t\t// Create a wrapper for the modal\r\n\t\tvar $modalWrapper = $(\"\").append(\r\n\t\t\t// Add a placeholder that will be replaced by the new widget\r\n\t\t\t$(\"\")).modal({\r\n\t\t\t\tbackdrop: \"static\", // Prevent the modal from closing on blur\r\n\t\t\t\tshow: false\r\n\t\t\t});\r\n\t\t\r\n\t\t$modalWrapper\r\n\t\t\t.off(\"show.bs.modal\")\r\n\t\t\t.on(\"show.bs.modal\", function () {\r\n\t\t\t\t// Reposition the modal\r\n\t\t\t\tvar $modal = $(this);\r\n\t\t\t\tvar currentTop = $modal.position().top;\r\n\t\t\t\tvar windowTop = $window.scrollTop();\r\n\t\t\t\tvar spacing = 100;\r\n\t\t\t\t$modal.css(\"top\", currentTop + windowTop + spacing);\r\n\r\n\t\t\t\t$documentBody.addClass(\"covered\");\r\n\t\t\t})\r\n\t\t\t.off(\"focusin.bs.modal\")\r\n\t\t\t.on(\"focusin.bs.modal\", function (e) {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t})\r\n\t\t\t.off(\"hide.bs.modal\")\r\n\t\t\t.on(\"hide.bs.modal\", function () {\r\n\t\t\t\t$documentBody.removeClass(\"covered\");\r\n\r\n\t\t\t\t// Remove the widget completely when the modal is closed\r\n\t\t\t\tvar widgetClass = $(\"#\" + widgetId).data(\"widget\");\r\n\r\n\t\t\t\tif (widgetClass) {\r\n\t\t\t\t\twidgetClass.dispose(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(this).remove();\r\n\t\t\t})\r\n\t\t\t.modal(\"show\");\r\n\t\t\t\r\n\r\n\t\t// Load the new widget\r\n\t\tmod.modules.widgetapi.load({\r\n\t\t\twidgets: {\r\n\t\t\t\tappId: id,\r\n\t\t\t\tcontext: $.extend(true, {}, this.getContext(), extraContext)\r\n\t\t\t},\r\n\t\t\tsuccess: function() {\r\n\t\t\t\t$modalWrapper.removeClass(\"loading\");\r\n\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tfn.prototype.ajax_error = function(xhr) {\r\n\t\t// Throw the request onto the button so we can retry the call\r\n\t\tthis.el.find(\"div.module-error button\").data(\"xhr\", xhr);\r\n\t};\r\n\r\n\tfn.prototype.events = {\r\n\t\t\".module-error button\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t// Retry the last request\r\n\t\t\t\tvar lastRequest = $el.data(\"xhr\");\r\n\r\n\t\t\t\tif (lastRequest) {\r\n\t\t\t\t\t// Repeat the last request\r\n\t\t\t\t\t$.ajax(lastRequest);\r\n\r\n\t\t\t\t\t// Clear out the stored request\r\n\t\t\t\t\t$el.data(\"xhr\", null);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.reload();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t// Change the size of the module\r\n\t\t\".module-options [data-size]:not(.selected):not(.module-expand-link)\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tthis.showLoading();\r\n\r\n\t\t\t\tvar newSize = $el.attr(\"data-size\");\r\n\t\t\t\tvar type = this.el.attr(\"data-type\");\r\n\t\t\t\tvar newId = mod.modules.getKeyFromTypeSize(type, newSize);\r\n\t\t\t\tvar context = this.getContext();\r\n\r\n\t\t\t\tmod.modules.widgetapi.load({\r\n\t\t\t\t\twidgets: {\r\n\t\t\t\t\t\tappId: newId,\r\n\t\t\t\t\t\tcontext: context\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\tmod.observer.trigger(\"module - resized\");\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t// Remove the module from the page\r\n\t\t\".module-hide\": {\r\n\t\t\t\"click\": function() {\r\n\t\t\t\tmod.observer.trigger(\"module - removed\", this);\r\n\t\t\t\tthis.dispose(true);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\".view-toggle\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t$(\"div[data-view]\", $el.parents(\"div.module-content\")).toggleClass(\"none\");\r\n\t\t\t\tvar text = $(\"span\", $el).text();\r\n\t\t\t\t$(\"span\", $el).text(text == \"Show\" ? \"Hide\" : \"Show\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t// Show the expanded version of the module\r\n\t\t\".module-expand-link\": {\r\n\t\t\t\"click\": function (e, $el) {\r\n\t\t\t\t\r\n\t\t\t\tvar newSize = 4;\r\n\t\t\t\tvar type = this.el.attr(\"data-type\");\r\n\t\t\t\tvar newId = mod.modules.getKeyFromTypeSize(type, newSize);\r\n\t\t\t\tvar context = $el.attr(\"data-context\");\r\n\r\n\t\t\t\tif (context) {\r\n\t\t\t\t\tcontext = JSON.parse(context) || {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.handle_moduleExpand(newId, context);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\".action-download\": {\r\n\t\t\t\"click\": function (e, $el) {\r\n\t\t\t\t$(\"#module_download\").removeClass(\"hide\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"#module_download .module-close\": {\r\n\t\t\t\"click\": function (e, $el) {\r\n\t\t\t\t$(\"#module_download\").addClass(\"hide\");\r\n\r\n\t\t\t\tif (e.stopPropagation) {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t}\r\n\t\t\t\t\t//IE8 and Lower\r\n\t\t\t\telse {\r\n\t\t\t\t\te.cancelBubble = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});","mod.modules.define(\"CustomizeTableColumns\", \"BaseModule\", function(fn) {\r\n\r\n\tvar cache = {\r\n\t\t$selectedTable: null,\r\n\t\t$hiddenTable: null\r\n\t};\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.base(\"init\", params);\r\n\r\n\t\tthis.tableId = params.tableId || \"\";\r\n\t\tthis.maxColumns = params.maxColumns || 5;\r\n\r\n\t\t// Cache\r\n\t\tcache.$selectedTable = this.el.find(\".customizecolumns-table-selected table\");\r\n\t\tcache.$hiddenTable = this.el.find(\".customizecolumns-table-hidden table\");\r\n\r\n\t\tthis._init_dragging(cache.$selectedTable);\r\n\t};\r\n\r\n\tfn.prototype._init_dragging = function($table) {\r\n\t\tvar self = this;\r\n\r\n\t\t$table.tableDnD({\r\n\t\t\tonDragClass: \"customizetablecolumns-highlightDrag\",\r\n\t\t\tonDrop: function(table, row) {\r\n\t\t\t\tvar $table = $(table);\r\n\t\t\t\tself.updateTableIndexes();\r\n\t\t\t\t$table.removeClass(\"customizetablecolumns-dragging\");\r\n\t\t\t},\r\n\t\t\tonDragStart: function() {\r\n\t\t\t\t$table.addClass(\"customizetablecolumns-dragging\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfn.prototype.updateTableIndexes = function() {\r\n\t\tvar $labelBoxes = cache.$selectedTable.find(\".customizecolumns-numbox\");\r\n\r\n\t\tfor (var i = 0; i < $labelBoxes.length; i++) {\r\n\t\t\t$labelBoxes.eq(i).text(i + 1);\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.updateMsg = function() {\r\n\t\tvar tables = cache.$selectedTable.add(cache.$hiddenTable);\r\n\r\n\t\tfor (var i = 0; i < tables.length; i++) {\r\n\t\t\tvar $table = tables.eq(i);\r\n\t\t\tvar rows = $table.find(\"tbody tr\");\r\n\r\n\t\t\tif (rows.length == 0) {\r\n\t\t\t\t$table.hide();\r\n\t\t\t\t$table.next(\"p.customizecolumns-msg\").show();\r\n\t\t\t}\r\n\t\t\telse if (rows.length == 1) {\r\n\t\t\t\t$table.show();\r\n\t\t\t\t$table.next(\"p.customizecolumns-msg\").hide();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.moveRowToTable = function($row, $table) {\r\n\t\t// Pull the row out of the dom\r\n\t\t$row.remove();\r\n\r\n\t\t// Add the row to the end of the table body\r\n\t\t$table.find(\"tbody\").append($row);\r\n\r\n\t\t// Re-init dragging when rows are updated\r\n\t\tcache.$selectedTable.tableDnDUpdate();\r\n\t};\r\n\r\n\tfn.prototype.saveColumns = function() {\r\n\t\t//create data object for columns\r\n\t\tvar $td = cache.$selectedTable.find(\"td[data-field]\");\r\n\t\tvar apiData = this.createApiData($td);\r\n\t\tvar eventData = this.createEventData($td);\r\n\r\n\t\tif (apiData.length > 0 && eventData.length > 0) {\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: \"~/API/SaveCustomColumns\".resolveUrl(),\r\n\t\t\t\ttype: \"POST\",\r\n\t\t\t\tdata: {\r\n\t\t\t\t\ttableId: this.tableId,\r\n\t\t\t\t\tcolumns: JSON.stringify(apiData)\r\n\t\t\t\t},\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t//fire event to trigger table reload\r\n\t\t\t\t\tmod.observer.trigger(\"custom columns saved\", eventData);\r\n\t\t\t\t},\r\n\t\t\t\terror: function() {\r\n\t\t\t\t\talert(\"There was an error saving the columns.\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.el.parent().modal(\"hide\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\talert(\"Please select at least one custom column to save.\");\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.createApiData = function($td) {\r\n\t\tvar result = [];\r\n\r\n\t\tfor (var i = 0; i < $td.length; i++) {\r\n\t\t\tvar field = $td.eq(i).data(\"field\");\r\n\r\n\t\t\tresult.push(field);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tfn.prototype.createEventData = function($td) {\r\n\t\tvar result = [];\r\n\r\n\t\tfor (var i = 0; i < $td.length; i++) {\r\n\t\t\tvar fields = $td.eq(i).data(\"field\").split(\"|\");\r\n\r\n\t\t\tfor (var x = 0; x < fields.length; x++) {\r\n\t\t\t\tresult.push(fields[x]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\t\r\n\r\n\tfn.prototype.handleAction = function($el) {\r\n\t\tvar $row = $el.closest(\"tr\");\r\n\t\tvar action = $el.text().toLowerCase();\r\n\t\tvar table;\r\n\t\tvar newText;\r\n\r\n\t\tif (action == \"add\") {\r\n\t\t\tvar selectedRows = cache.$selectedTable.find(\"tbody tr\");\r\n\r\n\t\t\tif (selectedRows.length >= this.maxColumns) {\r\n\t\t\t\talert(\"You have reached the the maximum number of custom columns that can be selected.\");\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\ttable = cache.$selectedTable;\r\n\t\t\tnewText = \"Hide\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttable = cache.$hiddenTable;\r\n\t\t\tnewText = \"Add\";\r\n\r\n\t\t\t$row.find(\"span.customizecolumns-numbox\").text(\"-\");\r\n\t\t}\r\n\r\n\t\tthis.moveRowToTable($row, table);\r\n\t\t$el.text(newText);\r\n\t\t$row.removeClass(\"customizetablecolumns-highlight\");\r\n\t\tthis.updateTableIndexes();\r\n\t\tthis.updateMsg();\r\n\t};\r\n\r\n\tfn.prototype.events = {\r\n\t\t\"a.customizecolumns-action\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tthis.handleAction($el);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"table.data:not(.customizetablecolumns-dragging) tr\": {\r\n\t\t\t\"mouseenter\": function(e, $el) {\r\n\t\t\t\t$el.addClass(\"customizetablecolumns-highlight\");\r\n\t\t\t},\r\n\t\t\t\"mouseleave\": function(e, $el) {\r\n\t\t\t\t$el.removeClass(\"customizetablecolumns-highlight\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"button[data-action=save]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tthis.saveColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});","// Create the component factory\r\nmod.components = mod.factory.create(mod.baseModule);\r\n\r\n// ----------------------------------------------------------------------------\r\n// Base\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"Base\", function(fn) {\r\n\r\n\t// Default values\r\n\tfn.prototype.valueNone = \"-32768\";\r\n\tfn.prototype.valueAll = \"%\";\r\n\r\n\t// Perform the selected action on the target\r\n\t// e.g., \"show\", \"industry_val_select\"\r\n\tfn.prototype.handleAction = function(type, targetId) {\r\n\t\ttype = type.toLowerCase();\r\n\t\tvar $target = $(\"#\" + targetId);\r\n\r\n\t\tif (type == \"show\") {\r\n\t\t\t$target.show();\r\n\t\t}\r\n\t\telse if (type == \"hide\") {\r\n\t\t\t$target.hide();\r\n\t\t}\r\n\t\telse if (type == \"reload\") {\r\n\t\t\tvar value = this.getValue();\r\n\t\t\tvar targetType = $target.attr(\"data-initfn\");\r\n\t\t\tvar targetClass = $target.data(\"controller\");\r\n\r\n\t\t\tthis.getAsync(targetType, value, targetClass);\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.getAsync = function(componentType, safeName, receivingClass) {\r\n\t\tif (receivingClass && receivingClass.receiveAsync) {\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: (\"~/Screener/GetComponentAsync\").resolveUrl(),\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tcomponentType: componentType,\r\n\t\t\t\t\tsafeName: safeName\r\n\t\t\t\t},\r\n\t\t\t\tcache: false,\r\n\t\t\t\tcontext: this,\r\n\t\t\t\tsuccess: function(response) {\r\n\t\t\t\t\tif (response) {\r\n\t\t\t\t\t\treceivingClass.receiveAsync(response);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terror: this.receiveAsyncError,\r\n\t\t\t\tbeforeSend: function() {\r\n\t\t\t\t\tthis.showLoading();\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: function() {\r\n\t\t\t\t\tthis.hideLoading();\r\n\t\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.showLoading = function() {\r\n\t\tthis.$el.addClass(\"loading\");\r\n\t};\r\n\r\n\tfn.prototype.hideLoading = function() {\r\n\t\tthis.$el.removeClass(\"loading\");\r\n\t};\r\n\r\n\tfn.prototype.receiveAsync = function(response) { };\r\n\r\n\tfn.prototype.receiveAsyncError = function(response) {\r\n\t\talert(\"Component failed to load.\");\r\n\t};\r\n\r\n\t// Interpret the actions json and run each action\r\n\tfn.prototype.parseActions = function(actions) {\r\n\t\tfor (var action in actions) {\r\n\t\t\tfor (var i = 0; i < actions[action].length; i++) {\r\n\t\t\t\tthis.handleAction(action, actions[action][i]);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.getValue = function() { };\r\n\r\n\tfn.prototype.setValue = function(value) { };\r\n\r\n\tfn.prototype.getIdentifier = function() { };\r\n\r\n\tfn.prototype.getClause = function(operator, value) {\r\n\t\treturn {\r\n\t\t\toperator: operator,\r\n\t\t\tvalue: value\r\n\t\t};\r\n\t};\r\n\r\n\tfn.prototype.format = function(type, value) {\r\n\t\tvar output = this.cleanValue(value);\r\n\r\n\t\tif (type === 'magnitude1000000') {\r\n\t\t\toutput *= 1000000;\r\n\t\t\ttype = 'magnitudemil';\r\n\t\t}\r\n\r\n\t\tif (type === 'percent100') {\r\n\t\t\toutput *= 100;\r\n\t\t}\r\n\t\telse if (type === 'magnitudemil') {\r\n\t\t\toutput /= 1000000;\r\n\t\t}\r\n\t\telse if (type === 'currency') {\r\n\t\t\toutput = Number(output).toFixed(2);\r\n\t\t}\r\n\r\n\t\t// Round the decimals if there are any\r\n\t\tif (output > 0 && output % 1 > 0) {\r\n\t\t\toutput = Number(output).toFixed(2);\r\n\t\t}\r\n\r\n\t\t// Trim the decimals off large numbers\r\n\t\tif (output > 1000) {\r\n\t\t\toutput = Math.round(output);\r\n\t\t}\r\n\r\n\t\tvar nStr = output + '';\r\n\t\tvar x = nStr.split('.');\r\n\t\tvar x1 = x[0];\r\n\t\tvar x2 = x.length > 1 ? '.' + x[1] : '';\r\n\t\tvar rgx = /(\\d+)(\\d{3})/;\r\n\t\twhile (rgx.test(x1)) {\r\n\t\t\tx1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n\t\t}\r\n\t\toutput = x1 + x2;\r\n\r\n\t\treturn output;\r\n\t};\r\n\r\n\tfn.prototype.unFormat = function(type, value) {\r\n\t\tvar output = this.cleanValue(value);\r\n\r\n\t\tif (type === 'percent100') {\r\n\t\t\toutput /= 100;\r\n\t\t}\r\n\t\telse if (type === 'magnitudemil') {\r\n\t\t\toutput *= 1000000;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t};\r\n\r\n\tfn.prototype.cleanValue = function(value) {\r\n\t\tvar output = value || 0;\r\n\r\n\t\tif (typeof output === 'string') {\r\n\t\t\tvar clean = output.replace(/[^0-9-.]/g, '').replace(/,/g, '');\r\n\t\t\toutput = parseFloat(clean, 10);\r\n\t\t}\r\n\r\n\t\treturn Number(output);\r\n\t};\r\n\r\n});\r\n\r\n\r\n// ----------------------------------------------------------------------------\r\n// Fixed Value Component\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"FixedValue\", \"Base\", function (fn) {\r\n\r\n fn.prototype.init = function (params) {\r\n this.base(\"init\", params);\r\n this.value = this.el.attr('data-value');\r\n }\r\n\r\n fn.prototype.getValue = function () {\r\n return this.value;\r\n };\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Button\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"Button\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.events = {\r\n\t\t\"button[data-action=filter-button]\": {\r\n\t\t\t\"click\": function (e, $el) {\r\n\t\t\t \r\n\t\t\t\tif ($el.parents(\"div#tickerlist_ticker_filter\").length > 0) {\r\n\t\t\t\t\tvar textarea = $el.parents(\"[data-safename='WSODIssueID']\").find('textarea');\r\n\t\t\t\t\ttextarea.trigger('filter');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// TextBox\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"TextBox\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.getValue = function() {\r\n\t\treturn this.$el.find(\"input[type=text]\").val();\r\n\t};\r\n\r\n\tfn.prototype.setValue = function (value, fromSaved) {\r\n\t\t$input = this.$el.find(\"input[type=text]\");\r\n\t\tvalue = $input.getAttribute(\"data-saved\") || value;\r\n\t\t$input.val(value);\r\n\r\n\t\tif (fromSaved) {\r\n\t\t\t$input.setAttribute(\"data-saved\", value);\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\nmod.components.define(\"Text\", \"Base\", function(fn) {\r\n\r\n});\r\n\r\nmod.components.define(\"WatchlistSelect\", \"Base\", function (fn) {\r\n\r\n\tfn.prototype.events = {\r\n\t\t\"a\": {\r\n\t\t\t\"click\": function (e, $el) {\r\n\t\t\t\tvar textarea = $el.parents(\"[data-safename='WSODIssueID']\").find('textarea');\r\n\t\t\t\ttextarea.val($el.data(\"symbol-list\"));\r\n\t\t\t\ttextarea.trigger('filter');\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// TextArea\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"TextArea\", \"Base\", function (fn) {\r\n\r\n\tfn.prototype.getValue = function () {\r\n\t\treturn this.$el.find(\"textarea\").val();\r\n\t};\r\n\r\n\tfn.prototype.setValue = function (value) {\r\n\t\tthis.$el.find(\"textarea\").val(value);\r\n\t};\r\n\r\n\r\n\tfn.prototype.getIdentifier = fn.prototype.getValue;\r\n\r\n\tfn.prototype.events = {\r\n\t\t\"textarea\": {\r\n\t\t\t\"filter\": function (e, $el) {\r\n\r\n\t\t\t\tvar container = $el.parent('div.screener-component-textarea');\r\n\t\t\t\tvar error_msgContainer = container.parents(\".TickerListFilter\").find('#tickerlist_error_msg');\r\n\t\t\t\terror_msgContainer.hide();\r\n\t\t\t\tif (this.getIdentifier() != \"\") {\r\n\t\t\t\t\t$el.parents('div.screener-content').addClass(\"loading\");\r\n\t\t\t\t\t$.ajax({\r\n\t\t\t\t\t\turl: \"GetWsodIssueByTicker\",\r\n\t\t\t\t\t\ttype: \"post\",\r\n\t\t\t\t\t\tdataType: \"json\",\r\n\t\t\t\t\t\tdata: {\r\n\t\t\t\t\t\t\ttickersliststr: this.getIdentifier()\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcontext: this,\r\n\t\t\t\t\t\tsuccess: function(results) {\r\n\t\t\t\t\t\t\tif (results) {\r\n\t\t\t\t\t\t\t\tvar error_msg = \"\";\r\n\t\t\t\t\t\t\t\tcontainer.attr(\"data-wsodissue\", results.wsodIssue);\r\n\t\t\t\t\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t\t\t\t\t\tif (results.invalidTickers != \"\") {\r\n\t\t\t\t\t\t\t\t\terror_msgContainer.attr(\"invalid-symbol\", results.invalidTickers);\r\n\t\t\t\t\t\t\t\t\terror_msg += \" The ticker \" + results.invalidTickers + \" is not valid and could not be added.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (results.duplicateTickers != \"\") {\r\n\t\t\t\t\t\t\t\t\terror_msgContainer.attr(\"duplicate-symbol\", results.duplicateTickers);\r\n\t\t\t\t\t\t\t\t\terror_msg += \" The ticker \" + results.duplicateTickers + \" is already in screener.\";\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (error_msg != \"\") {\r\n\t\t\t\t\t\t\t\t\terror_msgContainer.html(error_msg);\r\n\t\t\t\t\t\t\t\t\terror_msgContainer.show();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\terror: function error() {\r\n\t\t\t\t\t\t\talert(\"There was an error with ticker list filter.\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\terror_msgContainer.html(\"Please add a ticker(s) before filtering\");\r\n\t\t\t\t\terror_msgContainer.show();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// TextRange\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"TextRange\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.base(\"init\", params);\r\n\r\n\t\tvar minValueRaw = this.el.attr('data-min');\r\n\t\tvar maxValueRaw = this.el.attr('data-max');\r\n\r\n\t\tif (minValueRaw !== undefined) {\r\n\t\t\tthis.minValue = parseFloat(this.el.attr('data-min'), 10);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.minValue = 0;\r\n\t\t}\r\n\r\n\t\tif (maxValueRaw !== undefined) {\r\n\t\t\tthis.maxValue = parseFloat(this.el.attr('data-max'), 10);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.maxValue = 0;\r\n\t\t}\r\n\r\n\t\tthis.updateLabels(this.minValue, this.maxValue);\r\n\t};\r\n\r\n\tfn.prototype.updateLabels = function(min, max) {\r\n\t\tthis.el.find('.detail-min .detail-value').html(this.format(this.formatType, min));\r\n\t\tthis.el.find('.detail-max .detail-value').html(this.format(this.formatType, max));\r\n\t};\r\n\r\n\tfn.prototype.getValue = function() {\r\n\t\tvar $textBoxes = this.$el.find(\"input[type=text]\");\r\n\t\tvar fromValue = $.trim($textBoxes[0].value);\r\n\t\tvar toValue = $.trim($textBoxes[1].value);\r\n\t\tvar gtValue = this.cleanValue(fromValue);\r\n\t\tvar ltValue = this.cleanValue(toValue);\r\n\r\n\t\t// Default the min/max values if the user entered nothing or gibberish\r\n\t\tif (fromValue === '' || isNaN(fromValue) || toValue === '' || isNaN(toValue)) {\r\n\t\t\tif (fromValue === '' || isNaN(fromValue)) {\r\n\t\t\t\tgtValue = this.minValue;\r\n\t\t\t}\r\n\r\n\t\t\tif (toValue === '' || isNaN(toValue)) {\r\n\t\t\t\tltValue = this.maxValue;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tvar tmpMin = gtValue;\r\n\t\t\tvar tmpMax = ltValue;\r\n\r\n\t\t\tgtValue = Math.min(tmpMin, tmpMax);\r\n\t\t\tltValue = Math.max(tmpMin, tmpMax);\r\n\t\t}\r\n\r\n\t\t// Make sure the to/from values are within the range\r\n\t\tgtValue = Math.max(this.minValue, gtValue);\r\n\t\tltValue = Math.min(this.maxValue, ltValue);\r\n\r\n\t\tthis.setValue([gtValue, ltValue]);\r\n\r\n\t\treturn [\r\n\t\t\tthis.getClause(\"GreaterThanOrEqualTo\", gtValue),\r\n\t\t\tthis.getClause(\"LessThanOrEqualTo\", ltValue)\r\n\t\t];\r\n\t};\r\n\r\n\tfn.prototype.setValue = function (values, fromSaved) {\r\n\r\n\t\tif (values && values.length) {\r\n\t\t\tvar $textBoxes = this.$el.find(\"input[type=text]\");\r\n\t\t\t\r\n\t\t\tif (fromSaved) {\r\n\t\t\t\t$textBoxes[0].setAttribute(\"data-saved\", values[0]);\r\n\t\t\t\t$textBoxes[1].setAttribute(\"data-saved\", values[1]);\r\n\t\t\t}\r\n\r\n\t\t\t$textBoxes[0].value = $textBoxes[0].getAttribute(\"data-saved\") || values[0];\r\n\t\t\t$textBoxes[1].value = $textBoxes[1].getAttribute(\"data-saved\") || values[1];\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.receiveAsync = function(res) {\r\n\t\tthis.minValue = res.min;\r\n\t\tthis.maxValue = res.max;\r\n\r\n\t\tthis.setValue([this.minValue, this.maxValue]);\r\n\t\tthis.updateLabels(this.minValue, this.maxValue);\r\n\t};\r\n\r\n\tfn.prototype.events = {\r\n\t\t\"button\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t// Trigger a new screen call\r\n\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Single Select\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"SingleSelect\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.getValue = function () {\r\n\t\tvar val = this.$el.find(\"select\").val();\r\n\r\n\t\tif (!val) {\r\n\t\t\tval = $(this.$el.find(\"option\").first()).val()\r\n\t\t}\r\n\r\n\t\treturn val;\r\n\t};\r\n\r\n\tfn.prototype.setValue = function(value) {\r\n\t\tthis.$el.find(\"select\").val(value);\r\n\t};\r\n\r\n\tfn.prototype.getIdentifier = fn.prototype.getValue;\r\n\r\n\tfn.prototype.events = {\r\n\t\t\"select\": {\r\n\t\t\t\"change\": function(e, $el) {\r\n\t\t\t\tvar select = e.currentTarget;\r\n\t\t\t\tvar $option = $(select.options[select.selectedIndex]);\r\n\r\n\t\t\t\t// Look for actions to handle\r\n\t\t\t\tvar actionsJson = $option.attr(\"data-actions\");\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (actionsJson) {\r\n\t\t\t\t\t\tvar actions = JSON.parse(actionsJson);\r\n\t\t\t\t\t\tthis.parseActions(actions);\r\n\r\n\t\t\t\t\t\tif (!actions.Reload) {\r\n\t\t\t\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tcatch (e) { }\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Single Select (Date)\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"SingleSelectDate\", \"SingleSelect\", function(fn) {\r\n\r\n\tfunction addMinutes(date, minutes) {\r\n\t\treturn new Date(date.getTime() + minutes * 60000);\r\n\t}\r\n\r\n\tfn.prototype.getValue = function() {\r\n\t\tvar days = this.$el.find(\"select\").val();\r\n\t\tvar minutes = days * 60 * 24; // TODO: subtract minutes in today so we look at 12:00am\r\n\t\tvar now = new Date();\r\n\t\tvar then = addMinutes(now, minutes);\r\n\r\n\t\treturn then;\r\n\t};\r\n\r\n\tfn.prototype.getIdentifier = function() {\r\n\t\treturn this.$el.find(\"select\").val();\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Multi Select\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"MultiSelect\", \"Base\", function(fn) {\r\n\r\n\t// Node that holds all the \"selected\" options\r\n\tfn.prototype.$optionTracker = null;\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\t// Cache\r\n\t\tthis.$optionTracker = this.$el.find(\"div.multiselectOptionTracker\");\r\n\t};\r\n\r\n\tfn.prototype.getValue = function() {\r\n\t\tvar values = [];\r\n\t\tvar $options = this.$optionTracker.children();\r\n\r\n\t\tif ($options.length) {\r\n\t\t\tfor (var i = 0; i < $options.length; i++) {\r\n\t\t\t\tvar $option = $options.eq(i);\r\n\t\t\t\tvar value = $option.attr(\"data-value\");\r\n\t\t\t\tvalues.push(value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t};\r\n\r\n\tfn.prototype.setValue = function(values) {\r\n\t\tvar $valSelect = this.el.find('select');\r\n\r\n\t\t// Set the values\r\n\t\tfor (var i = 0; i < values.length; i++) {\r\n\t\t\t$valSelect.val(values[i]).change();\r\n\t\t}\r\n\r\n\t\t// Move the index back to the first value\r\n\t\t$valSelect.val('%');\r\n\t};\r\n\r\n\t// Add the value to our list of \"selected\" options\r\n\tfn.prototype.trackSelectedValue = function(label, value) {\r\n\t\tvar $options = this.$optionTracker.children();\r\n\t\tvar isAlreadyAdded = false;\r\n\r\n\t\t// See if we've already added this value\r\n\t\tfor (var i = 0; i < $options.length; i++) {\r\n\t\t\tvar $option = $options.eq(i);\r\n\r\n\t\t\tif ($option.attr(\"data-value\") == value) {\r\n\t\t\t\tisAlreadyAdded = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!isAlreadyAdded) {\r\n\t\t\tvar $newOption = this.renderTrackedOption(label, value);\r\n\t\t\tthis.$optionTracker.append($newOption);\r\n\t\t}\r\n\t};\r\n\r\n\t// Create the DOM node for the tracked option\r\n\tfn.prototype.renderTrackedOption = function(label, value) {\r\n\t\treturn $('').append(\r\n\t\t\t$(\"\" + label + \"\"),\r\n\t\t\t$('')\r\n\t\t);\r\n\t};\r\n\r\n\tfn.prototype.events = {\r\n\t\t\"select\": {\r\n\t\t\t\"change\": function(e, $el) {\r\n\t\t\t\tvar select = e.currentTarget;\r\n\t\t\t\tvar $option = $(select.options[select.selectedIndex]);\r\n\r\n\t\t\t\t// Make sure it's not a dummy option\r\n\t\t\t\tif (!$option.attr(\"data-placeholder\")) {\r\n\t\t\t\t\tthis.trackSelectedValue($option.text(), $option.val());\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Reset the drop down\r\n\t\t\t\tselect.selectedIndex = 0;\r\n\r\n\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t}\r\n\t\t},\r\n\t\t\".multiselectOptionTracker a\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t$el.remove();\r\n\r\n\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Button Group\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"ButtonGroup\", \"Base\", function(fn) {\r\n\r\n\t// Grab all the active buttons\r\n\tfn.prototype.getValue = function() {\r\n\t\tvar values = [];\r\n\t\tvar $buttons = this.$el.find(\"button.active\");\r\n\r\n\t\tif ($buttons.length) {\r\n\t\t\tfor (var i = 0; i < $buttons.length; i++) {\r\n\t\t\t\tvar $button = $buttons.eq(i);\r\n\t\t\t\tvar value = $button.attr(\"data-value\");\r\n\r\n\t\t\t\tvalues.push(value);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tvalues.push(this.valueNone);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t};\r\n\r\n\tfn.prototype.setValue = function(values) {\r\n\t\tfor (var i = 0; i < values.length; i++) {\r\n\t\t\tthis.el.find('button[data-value=\"' + values[i] + '\"]').trigger('click');\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.events = {\r\n\t\t\"button\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t// Kick the handler into the event queue so the normal button behavior will run first\r\n\t\t\t\t// The correct button will be selected by the time we build inputs for the screener call\r\n\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t\t\t\t}, 0);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Base Slider\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"BaseSlider\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.base(\"init\", params);\r\n\r\n\t\tthis.$slider = null;\r\n\t\tthis.minValue = null;\r\n\t\tthis.maxValue = null;\r\n\r\n\t\t// Cache\r\n\t\tthis.$slider = this.$el.find(\"div.slider\");\r\n\r\n\t\t// Get Min Value off the container\r\n\t\tif (this.$el.attr(\"data-slider-min\")) {\r\n\t\t\tthis.minValue = parseFloat(this.$el.attr(\"data-slider-min\"), 10);\r\n\t\t}\r\n\r\n\t\t// Get Max Value off the container\r\n\t\tif (this.$el.attr(\"data-slider-max\")) {\r\n\t\t\tthis.maxValue = parseFloat(this.$el.attr(\"data-slider-max\"), 10);\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.handleSliderStop = function(e, ui) {\r\n\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t};\r\n\r\n\tfn.prototype.getValue = function() {\r\n\t\tvar clauses = [];\r\n\t\tvar minOperator = \"GreaterThanOrEqualTo\";\r\n\t\tvar maxOperator = \"LessThanOrEqualTo\";\r\n\t\tvar values = this.$slider.slider(\"values\");\r\n\r\n\t\tif (values) {\r\n\t\t\tvar minValue = values[0];\r\n\t\t\tvar maxValue = values[1];\r\n\r\n\t\t\tclauses = [\r\n\t\t\t\tthis.getClause(minOperator, minValue),\r\n\t\t\t\tthis.getClause(maxOperator, maxValue)\r\n\t\t\t];\r\n\t\t}\r\n\r\n\t\treturn clauses;\r\n\t};\r\n\r\n\tfn.prototype.setValue = function(values) {\r\n\t\tvalues = [].concat(values);\r\n\r\n\t\tif (!values.length || !values[0]) {\r\n\t\t\tvalues[0] = this.minValue;\r\n\t\t}\r\n\r\n\t\tif (values.length < 2 || !values[1]) {\r\n\t\t\tvalues[1] = this.maxValue;\r\n\t\t}\r\n\r\n\t\tthis.$slider.slider(\"values\", values);\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Bucket Slider\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"BucketSlider\", \"BaseSlider\", function(fn) {\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.base(\"init\", params);\r\n\r\n\t\tthis.$rangeLabel = null;\r\n\t\tthis.stepValue = null;\r\n\r\n\t\t// Get values off our container\r\n\t\tthis.stepValue = parseInt(this.$el.attr(\"data-slider-step\"), 10);\r\n\r\n\t\tthis.initSlider(this.minValue, this.maxValue, this.stepValue);\r\n\t};\r\n\r\n\tfn.prototype.initSlider = function(min, max, step) {\r\n\t\t// Setup the slider\r\n\t\tthis.$slider.slider({\r\n\t\t\trange: true,\r\n\t\t\tmin: min,\r\n\t\t\tmax: max,\r\n\t\t\tvalues: [min, max],\r\n\t\t\tstep: step,\r\n\t\t\tslide: $.proxy(this.updateRangeLabel, this),\r\n\t\t\tstop: $.proxy(this.handleSliderStop, this),\r\n\t\t\tchange: $.proxy(this.updateRangeLabel, this)\r\n\t\t});\r\n\r\n\t\t// Inject a new DOM node into the range\r\n\t\tthis.$rangeLabel = $(\"\");\r\n\t\tthis.$slider.find(\".ui-slider-range\").append(this.$rangeLabel);\r\n\r\n\t\t// Set up the initial label\r\n\t\tthis.updateRangeLabel();\r\n\t};\r\n\r\n\tfn.prototype.updateRangeLabel = function(e, ui) {\r\n\t\tvar values = (ui) ? ui.values : this.$slider.slider(\"values\");\r\n\t\tvar formattedMinValue = this.format(\"percent\", values[0]);\r\n\t\tvar formattedMaxValue = this.format(\"percent\", values[1]);\r\n\r\n\t\t// Update the label\r\n\t\tthis.$rangeLabel.text(formattedMinValue + \" - \" + formattedMaxValue);\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Histogram Slider\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"HistogramSlider\", \"BaseSlider\", function(fn) {\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.base(\"init\", params);\r\n\r\n\t\tthis.$errorWrapper = this.$el.parent(\"div.component-content\").siblings(\"div.component-error\");\r\n\t\tthis.$contentWrapper = this.$el.parent(\"div.component-content\");\r\n\r\n\t\tthis.fromInput = null;\r\n\t\tthis.toInput = null;\r\n\t\tthis.formatType = null;\r\n\t\tthis.minOperator = \"GreaterThanOrEqualTo\";\r\n\t\tthis.maxOperator = \"LessThanOrEqualTo\";\r\n\r\n\t\t// Cache\r\n\t\tvar $inputs = this.$el.find(\"div.label-group input\");\r\n\t\tthis.fromInput = $inputs[0];\r\n\t\tthis.toInput = $inputs[1];\r\n\r\n\t\t// Pull our format type off the container\r\n\t\tthis.formatType = this.$el.attr(\"data-formatType\") || \"number\";\r\n\r\n\t\tthis.initSlider(this.minValue, this.maxValue);\r\n\r\n\t\t// Map the values to pixels\r\n\t\tvar encodedRangeList = this.$el.attr(\"data-rangelist\").replace('B64ENC', '');\r\n\t\tvar jsonRangeList = $.fromBase64(encodedRangeList);\r\n\t\tvar rangeList = [].concat(JSON.parse(jsonRangeList));\r\n\t\tthis.setRangeList(rangeList);\r\n\t};\r\n\r\n\tfn.prototype.setRangeList = function(range) {\r\n\t\tthis.pixelMap = this.mapValuesToPixelLine(range);\r\n\t\tthis.pixelMap.push(this.maxValue);\r\n\t\tthis.pixelRatio = (this.maxValue - this.minValue) / this.pixelMap.length; // How much each pixel is \"worth\"\r\n\t};\r\n\r\n\tfn.prototype.initSlider = function(min, max) {\r\n\t\t// Setup the slider\r\n\t\tthis.$slider.slider({\r\n\t\t\trange: true,\r\n\t\t\tmin: min,\r\n\t\t\tmax: max,\r\n\t\t\t//step: (max - min) / 100,\r\n\t\t\tstep: 0.01,\r\n\t\t\tvalues: [min, max],\r\n\t\t\tslide: $.proxy(this.handleSliderSlide, this),\r\n\t\t\tstop: $.proxy(this.handleSliderStop, this)\r\n\t\t});\r\n\r\n\t\t// Setup the inputs\r\n\t\tthis.fromInput.value = this.format(this.formatType, min);\r\n\t\tthis.fromInput.setAttribute('data-raw', min);\r\n\t\tthis.toInput.value = this.format(this.formatType, max);\r\n\t\tthis.toInput.setAttribute('data-raw', max);\r\n\t};\r\n\r\n\tfn.prototype.setValueFromSlider = function(e, ui) {\r\n\t\tvar input = (ui.value == ui.values[0])\r\n\t\t\t? this.fromInput\r\n\t\t\t: this.toInput;\r\n\r\n\t\t// Figure out where the handle is relative to the left hand side\r\n\t\tvar handleXPosition = parseFloat($(ui.handle).css('left'), 10);\r\n\r\n\t\t// See if we should round up or down\r\n\t\tif (handleXPosition < this.pixelMap.length / 2) {\r\n\t\t\thandleXPosition = Math.floor(handleXPosition);\r\n\t\t}\r\n\t\telse {\r\n\t\t\thandleXPosition = Math.ceil(handleXPosition);\r\n\t\t}\r\n\r\n\t\t// Don't the handle fall outside the range\r\n\t\thandleXPosition = Math.min(handleXPosition, this.pixelMap.length + 1);\r\n\t\thandleXPosition = Math.max(1, handleXPosition);\r\n\r\n\t\t// Pull the actual value from out pixel map\r\n\t\tvar value = this.pixelMap[handleXPosition - 1];\r\n\r\n\t\t// Update the input box\r\n\t\tinput.setAttribute('data-raw', value);\r\n\t\tinput.value = this.format(this.formatType, value);\r\n\t};\r\n\r\n\tfn.prototype.handleSliderSlide = function(e, ui) {\r\n\t\tthis.setValueFromSlider(e, ui);\r\n\t};\r\n\r\n\tfn.prototype.handleSliderStop = function(e, ui) {\r\n\t\tthis.setValueFromSlider(e, ui);\r\n\t\tmod.observer.trigger(\"screener - screen\", { resetPaging: true });\r\n\t};\r\n\r\n\tfn.prototype.getValue = function() {\r\n\t\tvar fromValue = this.getValueFromInput(this.fromInput);\r\n\t\tvar toValue = this.getValueFromInput(this.toInput);\r\n\r\n\t\t// Figure out which is bigger\r\n\t\tvar minValue = Math.min(fromValue, toValue);\r\n\t\tvar maxValue = Math.max(fromValue, toValue);\r\n\r\n\t\t// Make sure the min and max aren't out of bounds\r\n\t\tminValue = Math.min(minValue, this.maxValue);\r\n\t\tmaxValue = Math.max(maxValue, this.minValue);\r\n\r\n\t\t// Make sure the slider is updated\r\n\t\tthis.setValue([minValue, maxValue]);\r\n\r\n\t\treturn [\r\n\t\t\tthis.getClause(this.minOperator, minValue),\r\n\t\t\tthis.getClause(this.maxOperator, maxValue)\r\n\t\t];\r\n\t};\r\n\r\n\tfn.prototype.getValueFromInput = function(input) {\r\n\t\tvar value = parseFloat(input.getAttribute('data-raw')); // The original raw value\r\n\t\tvar valueFormat = this.format(this.formatType, value);\t// The raw value formatted\r\n\t\tvar valueDisplay = input.value;\t// The formatted value from the input\r\n\r\n\t\t// If the displayed value doesn't match the formatted value then the user must have changed it\r\n\t\tif (valueFormat !== valueDisplay) {\r\n\t\t\tvalue = this.unFormat(this.formatType, valueDisplay);\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t};\r\n\r\n\tfn.prototype.receiveAsync = function(response) {\r\n\t\tif (response.status === 1) {\r\n\t\t\tthis.$errorWrapper.hide();\r\n\t\t\tthis.$contentWrapper.show();\r\n\r\n\t\t\t// Update our values\r\n\t\t\tthis.minValue = response.min;\r\n\t\t\tthis.maxValue = response.max;\r\n\r\n\t\t\tthis.setRangeList([].concat(response.rangelist));\r\n\r\n\t\t\t// Restart the slider with the new values\r\n\t\t\tthis.initSlider(this.minValue, this.maxValue);\r\n\r\n\t\t\t// Update the chart url\r\n\t\t\tif (response.url) {\r\n\t\t\t\tthis.$el.find(\"img\").attr(\"src\", response.url);\r\n\t\t\t}\r\n\r\n\t\t\tthis.setValue([this.minValue, this.maxValue]);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.$errorWrapper.show();\r\n\t\t\tthis.$contentWrapper.hide();\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.setValue = function(values, fromSaved) {\r\n\t\tvar translatedValues = [0, 0];\r\n\r\n\t\tif (values) {\r\n\t\t\t// Set \"min\" value\r\n\t\t\tif (values.length) {\r\n\t\t\t\tvar minValue = Math.max(this.minValue, values[0]);\r\n\t\t\t\tminValue = this.fromInput.getAttribute(\"data-saved\") || minValue;\r\n\r\n\t\t\t\t// Figure out what the slider thinks the value should be\r\n\t\t\t\ttranslatedValues[0] = this.translateActualToPerceivedValue(minValue);\r\n\r\n\t\t\t\tif (translatedValues[0] === this.minValue) {\r\n\t\t\t\t\tminValue = this.minValue;\r\n\t\t\t\t}\r\n\t\t\t\telse if (minValue === 0) {\r\n\t\t\t\t\t// Show SOMETHING if the minValue is 0\r\n\t\t\t\t\t// This often happens when the translated value is 0.054321 and minValue is 0\r\n\t\t\t\t\tminValue = translatedValues[0];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.fromInput.value = this.format(this.formatType, minValue);\r\n\t\t\t\tthis.fromInput.setAttribute('data-raw', minValue);\r\n\t\t\t\tif (fromSaved) {\r\n\t\t\t\t\tthis.fromInput.setAttribute('data-saved', minValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set \"max\" value\r\n\t\t\tif (values.length > 1) {\r\n\t\t\t\tvar maxValue = Math.min(this.maxValue, values[1]);\r\n\r\n\t\t\t\tmaxValue = this.toInput.getAttribute(\"data-saved\") || maxValue;\r\n\r\n\t\t\t\t// Figure out what the slider thinks the value should be\r\n\t\t\t\ttranslatedValues[1] = this.translateActualToPerceivedValue(maxValue);\r\n\r\n\t\t\t\tif (translatedValues[1] === this.maxValue) {\r\n\t\t\t\t\tmaxValue = this.maxValue;\r\n\t\t\t\t}\r\n\t\t\t\telse if (isNaN(maxValue) || maxValue === undefined) {\r\n\t\t\t\t\tmaxValue = this.maxValue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.toInput.value = this.format(this.formatType, maxValue);\r\n\t\t\t\tthis.toInput.setAttribute('data-raw', maxValue);\r\n\t\t\t\tif (fromSaved) {\r\n\t\t\t\t\tthis.toInput.setAttribute('data-saved', maxValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.$slider.slider(\"values\", translatedValues);\r\n\t};\r\n\r\n\tfn.prototype.translateActualToPerceivedValue = function(actual) {\r\n\t\t// Figure out what the slider thinks the value should be\r\n\t\tvar xPosition = this.getPixelFromValue(actual);\r\n\r\n\t\t// Do a little smart snapping at both ends\r\n\t\t//if (xPosition < 3) {\r\n\t\t//\txPosition = 0;\r\n\t\t//}\r\n\t\t//else if (this.pixelMap.length - xPosition < 3) {\r\n\t\t//\txPosition = this.pixelMap.length - 1;\r\n\t\t//}\r\n\r\n\t\t// Add 1 if we're on the upper end of the range\r\n\t\tif (xPosition > this.pixelMap.length / 2) {\r\n\t\t\txPosition += 1;\r\n\t\t}\r\n\r\n\t\tvar sliderValue;\r\n\r\n\t\tif (xPosition === this.pixelMap.length) {\r\n\t\t\tsliderValue = this.maxValue;\r\n\t\t}\r\n\t\telse if (xPosition === 0) {\r\n\t\t\tsliderValue = this.minValue;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsliderValue = (xPosition * this.pixelRatio) + this.minValue;\r\n\t\t\tsliderValue = Math.max(this.minValue, sliderValue);\r\n\t\t\tsliderValue = Math.min(this.maxValue, sliderValue);\r\n\t\t}\r\n\r\n\t\treturn sliderValue;\r\n\t};\r\n\r\n\tfn.prototype.getPixelFromValue = function(value) {\r\n\t\tvar index = 0;\r\n\r\n\t\t// Exit early if we're returning max\r\n\t\tif (value >= this.maxValue) {\r\n\t\t\tindex = this.pixelMap.length - 1;\r\n\t\t}\r\n\t\telse if (value <= this.minValue) {\r\n\t\t\tindex = 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tfor (var i = 0, len = this.pixelMap.length; i < len; i++) {\r\n\t\t\t\tif (this.pixelMap[i] === value) {\r\n\t\t\t\t\tindex = i;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.pixelMap[i] > value) {\r\n\t\t\t\t\tvar diffBefore = value - this.pixelMap[i - 1];\r\n\t\t\t\t\tvar diffAfter = this.pixelMap[i] - value;\r\n\r\n\t\t\t\t\t// See which index is closer to the number\r\n\t\t\t\t\tif (diffBefore < diffAfter) {\r\n\t\t\t\t\t\tindex = i - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tindex = i;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t};\r\n\r\n\tfn.prototype.mapValuesToPixelLine = function(range) {\r\n\t\tvar values = [];\r\n\r\n\t\t// Go over every item in the range\r\n\t\tfor (var i = 0, len = range.length; i < len; i++) {\r\n\t\t\tvar width = range[i].Width;\r\n\r\n\t\t\t// See if we skipped any x positions b/w bars\r\n\t\t\tif (i != 0) {\r\n\t\t\t\twidth += range[i].X - range[i - 1].X - width;\r\n\t\t\t}\r\n\r\n\t\t\tvar step = (range[i].Max - range[i].Min) / width;\r\n\r\n\t\t\t// Add an index for each pixel\r\n\t\t\tfor (var x = 0; x < width; x++) {\r\n\t\t\t\tvalues.push(range[i].Min + (x * step));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// Date Range\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"DateRangePicker\", \"Base\", function(fn) {\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.base(\"init\", params);\r\n\r\n\t\tthis.$el.find(\"input.datepicker\").datepicker();\r\n\t};\r\n\r\n\tfn.prototype.getValue = function() {\r\n\t\tvar $inputs = this.$el.find(\"input.datepicker\");\r\n\r\n\t\tvar fromValue = $.trim($inputs.eq(0).val());\r\n\t\tvar toValue = $.trim($inputs.eq(1).val());\r\n\r\n\t\tvar minValue = this.getOADateFromString(fromValue);\r\n\t\tvar maxValue = this.getOADateFromString(toValue);\r\n\r\n\t\tif (fromValue === '' || toValue === '') {\r\n\t\t\tfromValue = fromValue || this.valueAll;\r\n\t\t\ttoValue = toValue || this.valueAll;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tvar tmpMin = minValue;\r\n\t\t\tvar tmpMax = maxValue;\r\n\r\n\t\t\tminValue = Math.min(tmpMin, tmpMax);\r\n\t\t\tmaxValue = Math.max(tmpMin, tmpMax);\r\n\t\t}\r\n\r\n\t\tthis.setValue([minValue, maxValue]);\r\n\r\n\t\treturn [\r\n\t\t\tthis.getClause(\"GreaterThanOrEqualTo\", minValue),\r\n\t\t\tthis.getClause(\"LessThanOrEqualTo\", maxValue)\r\n\t\t];\r\n\t};\r\n\r\n\tfn.prototype.setValue = function(values) {\r\n\t\tvar $inputs = this.$el.find(\"input.datepicker\");\r\n\r\n\t\tif (values && values.length) {\r\n\t\t\tvar $dateInputs = this.$el.find(\"input.datepicker\");\r\n\t\t\tvar format = 'MM/DD/YY';\r\n\r\n\t\t\t// Set \"Start date\"\r\n\t\t\tif (values[0] && values[0] !== this.valueAll) {\r\n\t\t\t\tvar startDate = moment.fromOADate(values[0]).format(format);\r\n\t\t\t\t$dateInputs.eq(0).datepicker('setDate', startDate);\r\n\t\t\t}\r\n\r\n\t\t\t// Set \"End date\"\r\n\t\t\tif (values.length > 1 && values[1] && values[1] !== this.valueAll) {\r\n\t\t\t\tvar endDate = moment.fromOADate(values[1]).format(format);\r\n\t\t\t\t$dateInputs.eq(1).datepicker('setDate', endDate);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Expects \"mm/dd/yyyy\" format\r\n\tfn.prototype.getOADateFromString = function(dateString) {\r\n\t\tvar parts = dateString.split(\"/\");\r\n\r\n\t\t// Create a sane structure for the values\r\n\t\tvar components = {\r\n\t\t\tday: parseInt(parts[1]),\r\n\t\t\tmonth: parseInt(parts[0]),\r\n\t\t\tyear: parseInt(parts[2])\r\n\t\t};\r\n\r\n\t\t// Make a new date obj\r\n\t\tvar date = new Date(components.year, components.month - 1, components.day);\r\n\r\n\t\t// Convert the date into universal ms date\r\n\t\tvar msDate = (date - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\r\n\r\n\t\treturn msDate;\r\n\t};\r\n\r\n});\r\n\r\n// ----------------------------------------------------------------------------\r\n// ShowAvailableToggle On/Off Toggle\r\n// ----------------------------------------------------------------------------\r\n\r\nmod.components.define(\"ShowAvailableToggle\", \"Base\", function (fn) {\r\n\r\n});\r\n","mod.modules.define(\"BaseScreenerPage\", function(fn) {\r\n\r\n fn.prototype.init = function (params) {\r\n\r\n\t\t// Track which issueIds have been removed\r\n\t\tthis.excludedIssueIds = {};\r\n\r\n\t this.pageSize = params.pageSize || 50;\r\n\r\n\r\n\t\t// Set up the initial user's custom columns\r\n\t\tthis.customColumns = params.customColumns || [];\r\n\r\n\t\t// Set up the list of columns that are always included\r\n\t\tthis.defaultColumns = params.defaultColumns || [];\r\n\r\n\t\t// Set the default sort\r\n\t\tif (params.defaultSortSafeName) {\r\n\t\t\tthis.defaultSortSafeName = params.defaultSortSafeName;\r\n\t\t}\r\n\r\n\t\t// Add the plugin that will launch the customize columns modal\r\n\t\tif (params.customColumnsId) {\r\n\t\t\tthis.CustomColumnsPlugin = this.addPlugin(\"Plugin-CustomColumns\", {\r\n\t\t\t\ttableId: params.customColumnsId,\r\n\t\t\t\tmaxColumns: params.maxColumns || 5\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Capture the safe name for the wsodIssue field\r\n\t\tif (params.wsodIssueSafeName) {\r\n\t\t\tthis.wsodIssueSafeName = params.wsodIssueSafeName;\r\n\t\t}\r\n\r\n \t// Init the tooltips\r\n\t\tthis.el.find(\"span.icon-pdf.off[rel=tooltip]\").tooltip({\r\n\t\t\tmaxWidth: 215\r\n\t\t});\r\n\t};\r\n\r\n\tfn.prototype.initScreener = function() {\r\n\t\tvar self = this;\r\n\t\tvar isPreScreening = false;\r\n\t\tvar isScreening = false;\r\n\r\n\t\t// Step 1\r\n\t\tthis.ScreenerUtilNamespace = (typeof (WSOD.ScreenerUtility) == \"undefined\") ? window : WSOD;\r\n\t\tthis.ScreenerUtilityInstance = this.ScreenerUtilNamespace.ScreenerUtility.CreateInstance();\r\n\t\tthis.ScreenerInputs = new this.ScreenerUtilNamespace.ScreenerUtility.ScreenInputs();\r\n\r\n\t\t// Setup the paging inputs\r\n\t\tthis.ScreenerInputs.SetFirstRow(0);\r\n\t\tthis.ScreenerInputs.SetRowCount(this.pageSize);\r\n\r\n\t\t// Set the id\r\n\t\tvar screenerId = this.el.attr(\"data-screenerid\");\r\n\t\tthis.ScreenerInputs.SetScreenerID(screenerId);\r\n\r\n\t\t// Set sorting\r\n\t\tthis.resetSorting();\r\n\r\n\t\tfunction stopScreening(type) {\r\n\t\t\tif (type == \"prescreen\") {\r\n\t\t\t\tisPreScreening = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (type == \"screen\") {\r\n\t\t\t\tisScreening = false;\r\n\t\t\t}\r\n\r\n\t\t\t// Only stop if both are finished\r\n\t\t\tif (!isPreScreening && !isScreening) {\r\n\t\t\t\tself.hideLoading();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction startScreening(type) {\r\n\t\t\tif (type == \"prescreen\") {\r\n\t\t\t\tisPreScreening = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (type == \"screen\") {\r\n\t\t\t\tisScreening = true;\r\n\t\t\t}\r\n\r\n\t\t\tself.showLoading();\r\n\t\t}\r\n\r\n\t\tthis.ScreenerUtilityInstance\r\n\t\t\t// Register Screen\r\n\t\t\t.SetScreenURL(\"~/Screener/DoScreen\")\r\n\t\t\t.SetInputs(this.ScreenerInputs)\r\n\t\t\t.OnBeforeScreen(\"ShowLoader\", function() { startScreening(\"screen\"); })\r\n\t\t\t.OnScreenComplete(\"HideLoader\", function() { stopScreening(\"screen\"); })\r\n\t\t\t.OnScreenSuccess(\"ShowResults\", $.proxy(this.screenRequestCallback, this))\r\n\t\t\t// Register prescreen\r\n\t\t\t.SetPreScreenURL(\"~/Screener/DoPreScreen\")\r\n\t\t\t.OnBeforePreScreen(\"ShowLoader\", function() { startScreening(\"prescreen\"); })\r\n\t\t\t.OnPreScreenComplete(\"HideLoader\", function() { stopScreening(\"prescreen\"); })\r\n\t\t\t.OnPreScreenSuccess(\"ShowResults\", $.proxy(this.preScreenRequestCallback, this));\r\n\t};\r\n\r\n\tfn.prototype.screenRequestCallback = function(response) {\r\n\t\tif (response && response.resultTable) {\r\n\t\t\tvar $response = $(response.resultTable);\r\n\t\t\tvar $wrapper = $('div.table-wrapper').empty();\r\n\r\n\t\t\t// Add the header\r\n\t\t\t$wrapper.append(\r\n\t\t\t\t$response.find('div.screener-results-header')\r\n\t\t\t);\r\n\r\n\t\t\t// Make the new composite tables\r\n\t\t\t$response.find('table').fixedTable({\r\n\t\t\t\tcontainer: $wrapper,\r\n\t\t\t\tnumColumns: 2\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.activeTab === \"custom\") {\r\n\t\t $(\"div.screener-results-header button[data-action='customize-columns']\").show();\r\n\t\t $(\"div.custom-tab-display-options\").show();\r\n\t\t $(\"div:not('.custom-tab-display-options') > .num-results-per-page\").hide();\r\n\t\t}\r\n\t\telse {\r\n\t\t $(\"div.screener-results-header button[data-action='customize-columns']\").hide();\r\n\t\t $(\"div.custom-tab-display-options\").hide();\r\n\t\t $(\"div:not('.custom-tab-display-options') > .num-results-per-page\").show();\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.preScreenRequestCallback = function(response) { };\r\n\r\n\tfn.prototype.buildScreenInputs = function(resultFields) {\r\n\t\t// Clear out the old arguments\r\n\t\tthis.ScreenerInputs.RemoveArguments();\r\n\r\n\t\tthis.ScreenerInputs.SetResultFields(resultFields);\r\n\t};\r\n\r\n\tfn.prototype.addExcludedIssueIdArgs = function(excludedIssueIds) {\r\n\t\t// Add the excluded issueIds\r\n\t\tfor (var issueId in excludedIssueIds) {\r\n\t\t\tvar argument = new ScreenerUtility.Argument();\r\n\t\t\targument.SetField(this.wsodIssueSafeName);\r\n\t\t\targument.SetSafeName(this.wsodIssueSafeName);\r\n\t\t\targument.AddClause(\r\n\t\t\t\tnew ScreenerUtility.Argument.Clause(ScreenerUtility.OPERATORS.NotEqualTo, [issueId])\r\n\t\t\t);\r\n\t\t\tthis.ScreenerInputs.AddArgument(argument);\r\n\t\t}\r\n\t};\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Actions\r\n\t// --------------------------------------------------------------------------\r\n\r\n\tfn.prototype.addToWatchlist = function(watchlistId, issueIds) {\r\n\t\tif (watchlistId && issueIds && issueIds.length) {\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: \"AddToWatchlist\",\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\ttraditional: true,\r\n\t\t\t\tdata: {\r\n\t\t\t\t\twatchlistId: watchlistId,\r\n\t\t\t\t\tissueIds: issueIds\r\n\t\t\t\t},\r\n\t\t\t\tcache: false,\r\n\t\t\t\tcontext: this,\r\n\t\t\t\tsuccess: function(response) {\r\n\t\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\terror: function error() {\r\n\t\t\t\t\tthis.logError(\"Could not add to watchlist\");\r\n\t\t\t\t},\r\n\t\t\t\tbeforeSend: function() {\r\n\t\t\t\t\tthis.showLoading();\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: function() {\r\n\t\t\t\t\tthis.hideLoading();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\t// Remove the specified rows from the results table\r\n\tfn.prototype.removeFromResults = function(issueIds) {\r\n\t\tif (issueIds && issueIds.length) {\r\n\t\t\tfor (var i = 0; i < issueIds.length; i++) {\r\n\t\t\t\tthis.excludedIssueIds[issueIds[i]] = true;\r\n\t\t\t}\r\n\r\n\t\t\t// Run the screen and pass it the new argument\r\n\t\t\tthis.runScreen();\r\n\t\t}\r\n\t};\r\n\r\n\t// Remove the specified rows from the results table\r\n\tfn.prototype.restoreRemovedResults = function() {\r\n\t\tif (this.excludedIssueIds && Object.keys(this.excludedIssueIds).length) {\r\n\t\t\tthis.excludedIssueIds = {};\r\n\t\t\tthis.runScreen();\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.downloadResults = function (type, callback) {\r\n\r\n\t\tthis.buildScreenInputs();\r\n\t\tvar inputString = JSON.stringify(this.ScreenerUtilityInstance.GetInputs(true));\r\n\r\n\t\tvar $form = $(\"#postingForm\");\r\n\t\t$form.find(\"input[name=inputs]\").val(inputString);\r\n\t\t$form.find(\"input[name=type]\").val(type);\r\n\t\t$form.submit();\r\n\r\n\t\tif (callback) {\r\n\t\t\tcallback();\r\n\t\t}\r\n\t};\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Utils\r\n\t// --------------------------------------------------------------------------\r\n\r\n\tfn.prototype.resetPaging = function() {\r\n\t\tthis.ScreenerInputs.SetFirstRow(0);\r\n\t\tthis.ScreenerInputs.SetRowCount(this.pageSize);\r\n\t};\r\n\r\n\tfn.prototype.resetSorting = function(newSortSafeName, newSortDir) {\r\n\t\tnewSortSafeName = newSortSafeName || this.defaultSortSafeName;\r\n\t\tnewSortDir = newSortDir || 'Ascending';\r\n\r\n\t\tif (newSortSafeName) {\r\n\t\t\t// Remove the previous args\r\n\t\t\tthis.ScreenerInputs.RemoveSortArguments();\r\n\r\n\t\t\tthis.ScreenerInputs.AddSortArgument(\r\n\t\t\t\tnew this.ScreenerUtilNamespace.ScreenerUtility.ScreenInputs.SortArgument(\r\n\t\t\t\t\tnewSortSafeName,\r\n\t\t\t\t\tScreenerUtility.SORT_DIRECTION[newSortDir]\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.showLoading = function() {\r\n\t\tthis.$screenerContent.addClass(\"loading\");\r\n\t};\r\n\r\n\tfn.prototype.hideLoading = function() {\r\n\t\tthis.$screenerContent.removeClass(\"loading\");\r\n\t};\r\n\r\n\t//VL-276 this handler deals with the API check\r\n\tfn.prototype.handlePDFClickResult = function (response, status, request) {\r\n\t\tif (response) {\r\n\t\t\tif (/true/i.test(response.success)) {\r\n\t\t\t\tvar docURL = response.message;\r\n\t\t\t\tif (docURL != null && docURL != \"\") {\r\n\t\t\t\t\tdocURL = docURL.resolveUrl();\r\n\r\n\t\t\t\t\tif (docURL.indexOf(\"secure/secure\") > 0) {\r\n\t\t\t\t\t\tdocURL = docURL.replace(\"secure/secure\", \"secure\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\twindow.open(docURL, \"_blank\");\r\n\t\t\t} else {\r\n\t\t\t\talert(response.message);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\talert(\"Sorry, something went wrong with your document request.\");\r\n\t\t}\r\n\t};\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Events\r\n\t// --------------------------------------------------------------------------\r\n\r\n fn.prototype.events = {\r\n\t\t// --------------------\r\n\t\t// Paging/sorting\r\n\t // --------------------\r\n \t\".num-results-selector\": {\r\n \t\t\"change\": function (e, $el) {\r\n this.pageSize = $el.val();\r\n this.ScreenerInputs.SetRowCount(this.pageSize);\r\n this.runScreen();\r\n }\r\n },\r\n\r\n\t\t\"[data-sortfield]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar field = $el.attr(\"data-sortfield\");\r\n\t\t\t\tvar direction = $el.attr(\"data-sortdir\") || \"desc\";\r\n\r\n\t\t\t\t// Convert the direction to something the Screen lib will understand\r\n\t\t\t\t// NOTE: remember that we're reversing the direction at this point\r\n\t\t\t\tvar serverDirection = direction == \"asc\" ? \"Descending\" : \"Ascending\";\r\n\r\n\t\t\t\tthis.resetSorting(field, serverDirection);\r\n\r\n\t\t\t\t// Go back to page 1\r\n\t\t\t\tthis.resetPaging();\r\n\r\n\t\t\t\t// Re-run the screen\r\n\t\t\t\tthis.runScreen();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\".pager-wrap a[data-pageindex]:not([disabled])\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar index = parseInt($el.attr(\"data-pageindex\"), 10);\r\n\t\t\t\t// Update the screener inputs then make the call\r\n\t\t\t\tthis.ScreenerInputs.SetFirstRow(this.pageSize * index);\r\n\t\t\t\tthis.runScreen();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\".pager-select-page\": {\r\n\t\t\t\"change\": function(e, $el) {\r\n\t\t\t\tvar index = parseInt($el.val(), 10);\r\n\t\t\t\t// Update the screener inputs then make the call\r\n\t\t\t\tthis.ScreenerInputs.SetFirstRow(this.pageSize * index);\r\n\t\t\t\tthis.runScreen();\r\n\t\t\t}\r\n\t\t},\r\n\t\t// --------------------\r\n\t\t// Action Buttons\r\n\t\t// --------------------\r\n\t\t\"[data-action=download-data]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t$(\"#screener_download\").modal();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"[data-action=download-screen]\": {\r\n\t\t \"click\": function (e, $el) {\r\n\t\t\t\tvar $modal = $el.closest('div.modal-body');\r\n\t\t\t\tvar $selectedInput = $modal.find('div.config-section input:checked');\r\n\t\t\t\tvar selectedType = $selectedInput.val();\r\n\r\n\t\t\t\t// Kick off the download\r\n\t\t\t\tthis.downloadResults(selectedType, function() {\r\n\t\t\t\t\t$(\"#screener_download\").modal(\"hide\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"[data-action=customize-columns]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tthis.CustomColumnsPlugin.showModal();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"select.action-switcher\": {\r\n\t\t\t\"change\": function(e, $el) {\r\n\t\t\t\tvar val = $el.val();\r\n\r\n\t\t\t\tif (val) {\r\n\t\t\t\t\tvar $checkedInputs = this.$screenerContainer.find(\"div.table-wrapper td input.row-selector:checked\");\r\n\t\t\t\t\tvar issueIds = $checkedInputs.map(function(i, input) {\r\n\t\t\t\t\t\treturn input.getAttribute(\"data-id\");\r\n\t\t\t\t\t}).get();\r\n\r\n\t\t\t\t\tif (val === \"cmd-remove\") {\r\n\t\t\t\t\t\tthis.removeFromResults(issueIds);\r\n\t\t\t\t\t} else if (val == \"cmd-restore\") {\r\n\t\t\t\t\t\tthis.restoreRemovedResults();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (val.indexOf(\"cmd-addtowatchlist\") != -1) {\r\n\t\t\t\t\t\tvar watchlistId = val.replace(\"cmd-addtowatchlist:\", \"\");\r\n\t\t\t\t\t\tthis.addToWatchlist(watchlistId, issueIds);\r\n\r\n\t\t\t\t\t\t// Reset the selected index to 0\r\n\t\t\t\t\t\t$el.val(\"\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t// --------------------\r\n\t\t// Result Table Actions\r\n\t\t// --------------------\r\n\t\t\"input.table-selector\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar isChecked = $el.is(\":checked\");\r\n\t\t\t\t$el.closest(\"table\").find(\"tbody input:checkbox\").prop(\"checked\", isChecked);\r\n\t\t\t}\r\n\t\t},\r\n\t\t// --------------------\r\n\t\t// Tabs\r\n\t\t// --------------------\r\n\t\t\".screener-results-table a[data-toggle='tab']:not(.active a)\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar self = this;\r\n\t\t\t\tvar fieldsJson = $el.attr(\"data-fields\");\r\n\r\n\t\t\t\t// Show or hide the \"customize columns\" button\r\n\t\t\t\tif ($el.attr(\"id\") === \"tab-custom\") {\r\n\t\t\t\t\tthis.activeTab = \"custom\";\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.activeTab = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// See if the tab has any attached fields\r\n\t\t\t\tif (!fieldsJson) {\r\n\t\t\t\t\t// Must be a group tab\r\n\t\t\t\t\tvar $target = $($el.attr(\"data-target\"));\r\n\t\t\t\t\tfieldsJson = $target.find(\"select\").val();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Kick the screen event on the main loop so the button can toggle its state\r\n\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\tvar fields = JSON.parse(fieldsJson);\r\n\r\n\t\t\t\t\t// Update the active fields\r\n\t\t\t\t\tself.runScreen(fields);\r\n\t\t\t\t}, 0);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"select.sub-field-switcher\": {\r\n\t\t\t\"change\": function(e, $el) {\r\n\t\t\t\tvar fields = JSON.parse($el.val());\r\n\t\t\t\tthis.runScreen(fields);\r\n\t\t\t}\r\n\t\t},\r\n \t//VL-276 added for handling our PDF links.\r\n\t\t\"a.industryReportPDF, a.stockReportPDF\": {\r\n\t\t\t\"click\": function (e, $el) {\r\n\t\t\t\tvar $target = $(e.target);\r\n\t\t\t\tif ($target.is(\"A\") == false) {\r\n\t\t\t\t\t$target = $target.closest(\"A\")\r\n\t\t\t\t}\r\n\t\t\t\tvar apiURL = $target.attr(\"api\");\r\n\t\t\t\tvar docType = $target.attr(\"docType\");\r\n\t\t\t\tvar item = $target.attr(\"item\");\r\n\r\n\t\t\t\tif (apiURL != null && apiURL != \"\") {\r\n\t\t\t\t\tapiURL = apiURL.resolveUrl();\r\n\r\n\t\t\t\t\tif (apiURL.indexOf(\"secure/secure\") > 0) {\r\n\t\t\t\t\t\tapiURL = apiURL.replace(\"secure/secure\", \"secure\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar postData = {\r\n\t\t\t\t\titemQuery: item,\r\n\t\t\t\t\tdocType: docType\r\n\t\t\t\t};\r\n\t\t\t\t\r\n\t\t\t\t$.ajax({\r\n\t\t\t\t\turl: apiURL,\r\n\t\t\t\t\ttype: \"post\",\r\n\t\t\t\t\tdataType: \"json\",\r\n\t\t\t\t\tdata: postData,\r\n\t\t\t\t\tcontext: this,\r\n\t\t\t\t\tsuccess: $.proxy(this.handlePDFClickResult, this),\r\n\t\t\t\t\terror: function error() {\r\n\t\t\t\t\t\talert(\"There was an error when trying to get your document.\");\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n});","mod.modules.define(\"ScreenerPage\", \"BaseScreenerPage\", function(fn) {\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Init\r\n\t// --------------------------------------------------------------------------\r\n\r\n fn.prototype.init = function (params) {\r\n\r\n\t\tthis.base(\"init\", params);\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tthis.$screenerContainer = $('#screener-page');\r\n\t\tthis.$screenerContent = this.$screenerContainer.find('div.screener-content');\r\n\t\tthis.$screenerNav = this.$screenerContainer.find('div.criteriaBuckets');\r\n\t\tthis.$screenerFilterArea = this.$screenerContainer.find('div.activeCriteria ul#sortable');\r\n\t\tthis.$showAvailableStocksOnly = this.$screenerContainer.find('div.showAvailableStocksOnly');\r\n\t\tthis.$screenerCreateScreenBtn = this.$screenerContainer.find(\"button[data-action=create-screen]\");\r\n\t\tthis.$screenerUpdateScreenBtn = this.$screenerContainer.find(\"button[data-action=update-screen]\");\r\n\t\tthis.$criteriaTab = $(\"#tab-criteria\");\r\n\t\tthis.$customTab = $(\"#tab-custom\");\r\n\t\tthis.hasRunScreenerBefore = false;\r\n\t\tthis.showAvailableFilterIsOn = false;\r\n\r\n\t\tthis.initScreener();\r\n\r\n\t\t// Look for a saved screen to load\r\n\t\tif (params.savedScreenId || params.predefinedScreenId) {\r\n\t\t\tsetTimeout(function() {\r\n\t\t\t\tself.savedScreenId = params.savedScreenId || params.predefinedScreenId;\r\n\t\t\t\tself.savedScreenName = params.savedScreenName || params.predefinedScreenName;\r\n\t\t\t\tself.loadSavedScreen(self.savedScreenId);\r\n\t\t\t}, 0);\r\n\t\t}\r\n\r\n\t\tthis.initFilterDraggable();\r\n\r\n\t\tif (params.numFiltersAllowed) {\r\n\t\t\tthis.numFiltersAllowed = params.numFiltersAllowed;\r\n\t\t}\r\n\t\t\r\n\t\tthis.initTooltips();\r\n\t};\r\n\r\n\tfn.prototype.initScreener = function() {\r\n\t\tthis.base(\"initScreener\");\r\n\t};\r\n\r\n\tfn.prototype.initFilterDraggable = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Activate drag and drop\r\n\t\tvar sortObj = this.$screenerContainer.find('#sortable').sortable({\r\n\t\t\taxis: 'y',\r\n\t\t\thandle: '.screener-filter-name',\r\n\t\t\tcontainment: \"parent\",\r\n\t\t\tstop: function() {\r\n\t\t\t\tmod.observer.trigger(\"screener - screen\");\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Screens\r\n\t// --------------------------------------------------------------------------\r\n\r\n\tfn.prototype.runScreen = function(resultFields, resetPaging) {\r\n\t\tif (!this.disableScreening) {\r\n\t\t\tif (resetPaging) {\r\n\t\t\t\tthis.resetPaging();\r\n\t\t\t}\r\n\r\n\t\t\t// Get all the inputs for the screen\r\n\t\t\tthis.buildScreenInputs(resultFields);\r\n\r\n\t\t\tthis.ScreenerUtilityInstance.DoPreScreen(true);\r\n\t\t\tthis.ScreenerUtilityInstance.DoScreen(true);\r\n\r\n\t\t\t// Handle the first load\r\n\t\t\tthis.handleNoFilters();\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.runPreScreen = function() {\r\n\t\tif (!this.disableScreening) {\r\n\t\t\t// Get all the inputs for the screen\r\n\t\t\tthis.buildScreenInputs();\r\n\r\n\t\t\tthis.ScreenerUtilityInstance.DoPreScreen(true);\r\n\r\n\t\t\t// Handle the first load\r\n\t\t\tthis.handleNoFilters();\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.buildScreenInputs = function(resultFields) {\r\n\t\tthis.base(\"buildScreenInputs\", resultFields);\r\n\r\n\t\tvar $filters = this.$screenerFilterArea.find(\"li.screener-filter\");\r\n\t\tvar safeNames = [];\r\n\r\n\t\t// Add each user filter\r\n\t\tfor (var i = 0; i < $filters.length; i++) {\r\n\t\t\tvar $filter = $filters.eq(i);\r\n\t\t\tvar filterController = $filter.data(\"controller\");\r\n\t\t\tvar argument = filterController.getArgument();\r\n\t\t\tthis.ScreenerInputs.AddArgument(argument);\r\n\r\n\t\t\tvar safeName = argument.GetSafeName();\r\n\t\t\tsafeNames.push(safeName);\r\n\t\t}\r\n\r\n\t\t// Add the \"Available Stocks\" Filter (has to be done manually since it's not a part of the \"normal\" area\r\n\t\t//Bit of a hack here to manually check deep on it.\r\n\t\tvar $subFilter = $(\"div.screener-component-showavailabletoggle\", this.$showAvailableStocksOnly);\r\n\t\tfor (var i = 0; i < $subFilter.length; i++) {\r\n\t\t\tvar $filter = $subFilter.eq(i);\r\n\t\t\tvar filterController = $filter.data(\"controller\");\r\n\t\t\tif (filterController !== null && filterController !== undefined && filterController.getArgument !== undefined) {\r\n\t\t\t\tvar argument = filterController.getArgument();\r\n\t\t\t\t\r\n\t\t\t\t//Only include if on\r\n\t\t\t\tif (argument && argument._Data && argument._Data.Clauses.length > 0) {\r\n\t\t\t\t\tif (argument._Data.Clauses[0] && argument._Data.Clauses[0]._Data && argument._Data.Clauses[0]._Data.Values.length > 0) {\r\n\t\t\t\t\t\tif (argument._Data.Clauses[0]._Data.Values[0] == \"1\") {\r\n\t\t\t\t\t\t\tthis.ScreenerInputs.AddArgument(argument);\r\n\r\n\t\t\t\t\t\t\tvar safeName = argument.GetSafeName();\r\n\t\t\t\t\t\t\tsafeNames.push(safeName);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update the criteria tab with the arguments fields\r\n\t\tif (!resultFields && this.$criteriaTab.parent().hasClass(\"active\")) {\r\n\t\t\tresultFields = this.defaultColumns.concat(safeNames);\r\n\t\t\tthis.$criteriaTab.attr(\"data-fields\", JSON.stringify(resultFields));\r\n\r\n\t\t\tthis.ScreenerInputs.SetResultFields(resultFields);\r\n\t\t}\r\n\r\n\t\tthis.addExcludedIssueIdArgs(this.excludedIssueIds);\r\n\t};\r\n\r\n\tfn.prototype.screenRequestCallback = function(response) {\r\n\t\tthis.base(\"screenRequestCallback\", response);\r\n\r\n\t\tif (!this.hasRunScreenerBefore) {\r\n\t\t\tvar screenerUtil = this.ScreenerUtilNamespace.ScreenerUtility;\r\n\t\t\t// Manually instantiate our special filter.\r\n\t\t\tvar $subFilter = $(\"div.screener-component-showavailabletoggle\", this.$showAvailableStocksOnly);\r\n\t\t\tvar initFn = $subFilter.data(\"initfn\");\r\n\t\t\tvar filterController = mod.filters.create(initFn, $subFilter, {\r\n\t\t\t\tscreenerNamespace: screenerUtil,\r\n\t\t\t\targument: this.showAvailableFilterIsOn\r\n\t\t\t});\r\n\r\n\t\t\t// Save the controller to the dom node\r\n\t\t\t$subFilter.data(\"controller\", filterController);\r\n\r\n\t\t\tthis.hasRunScreenerBefore = true;\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tfn.prototype.preScreenRequestCallback = function(response) {\r\n\t\tthis.base(\"preScreenRequestCallback\", response);\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tif (response && response.status == 1) {\r\n\t\t\t// Update each filter\r\n\t\t\tif (response.filterTotals) {\r\n\t\t\t\tvar totalCompanies = response.totalCompanies || 0;\r\n\r\n\t\t\t\t// Update each filter's count\r\n\t\t\t\tthis.$screenerFilterArea.children().each(function(i, filter) {\r\n\t\t\t\t\tvar $filter = $(filter);\r\n\t\t\t\t\tvar matches = response.filterTotals[i];\r\n\t\t\t\t\tvar formattedMatches = self.formatAddCommas(matches);\r\n\r\n\t\t\t\t\t// Update the match count\r\n\t\t\t\t\t$filter.find(\"div.matches\").text(formattedMatches);\r\n\r\n\t\t\t\t\t// Update the match bar\r\n\t\t\t\t\tvar percentOfTotal = Math.round(matches / totalCompanies * 100);\r\n\t\t\t\t\t$filter.find(\"span.matchBarInner\").width(percentOfTotal + \"%\");\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Update the total result number\r\n\t\t\tvar formattedTotal = this.formatAddCommas(response.matches);\r\n\t\t\t$('.stockScreenResultCount .result').text(formattedTotal);\r\n\r\n\t\t\t// Update our hidden count - this will need to be sent from the server!\r\n\t\t\tvar hiddenTotal = this.formatAddCommas(response.hiddenCount);\r\n\t\t\t$('.stockScreenResultCount .showAvailableStocksOnly .infoArea .resHidden').text(hiddenTotal);\r\n\r\n\t\t}\r\n\t};\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Saved Screens\r\n\t// --------------------------------------------------------------------------\r\n\tfn.prototype.saveScreen = function(name, isNew) {\r\n\t\tvar filterTypes = [];\r\n\t\tvar filterCategories = [];\r\n\r\n\t\tthis.$screenerFilterArea.find(\"li.screener-filter\").each(function(i, filter) {\r\n\t\t\tfilterTypes.push(filter.getAttribute('data-type'));\r\n\t\t\tfilterCategories.push(filter.getAttribute('data-category'));\r\n\t\t});\r\n\r\n\t\t// Add the \"Available Stocks\" Filter (has to be done manually since it's not a part of the \"normal\" area\r\n\t\t//Bit of a hack here to manually check deep on it.\r\n\t\t$(\"div.screener-component-showavailabletoggle\", this.$showAvailableStocksOnly).each(function (i, filter) {\r\n\t\t\tfilterTypes.push(filter.getAttribute('data-type'));\r\n\t\t\tfilterCategories.push(filter.getAttribute('data-category'));\r\n\t\t});\r\n\t\t\r\n\t\t// Get all the arguments\r\n\t\tthis.buildScreenInputs();\r\n\t\t// Grab the official inputs from the utility\r\n\t\tvar screenInputs = this.ScreenerUtilityInstance.GetInputs(true);\r\n\t\t\r\n\t\tvar id = (isNew) ? '' : this.savedScreenId;\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: \"SaveScreen\",\r\n\t\t\ttype: \"post\",\r\n\t\t\tdataType: \"json\",\r\n\t\t\tdata: {\r\n\t\t\t\tid: id,\r\n\t\t\t\tname: name,\r\n\t\t\t\tfilterTypes: JSON.stringify(filterTypes),\r\n\t\t\t\tfilterCategories: JSON.stringify(filterCategories),\r\n\t\t\t\tscreenInputs: JSON.stringify(screenInputs)\r\n\t\t\t},\r\n\t\t\tcontext: this,\r\n\t\t\tsuccess: function(screenId) {\r\n\t\t\t\tif (screenId) {\r\n\t\t\t\t\tthis.redirectToScreen(screenId);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function error() {\r\n\t\t\t\talert(\"There was an error when trying to save your screen.\");\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tfn.prototype.deleteSavedScreen = function(screenId) {\r\n\t\tif (screenId) {\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: \"DeleteScreen\",\r\n\t\t\t\ttype: \"post\",\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tscreenId: screenId\r\n\t\t\t\t},\r\n\t\t\t\tcontext: this,\r\n\t\t\t\tsuccess: function(screenId) {\r\n\t\t\t\t\t// Redirect to main screener page\r\n\t\t\t\t\t// Make a random number to break cache on the landing page\r\n\t\t\t\t\twindow.location = location.pathname + \"?c=\" + Math.round(Math.random() * 10000);\r\n\t\t\t\t},\r\n\t\t\t\terror: function error() {\r\n\t\t\t\t\talert(\"No delete!\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.loadSavedScreen = function(screenId) {\r\n\t\tvar self = this;\r\n\r\n\t\tif (screenId) {\r\n\t\t\t// Disable screening\r\n\t\t\tthis.disableScreening = true;\r\n\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: \"GetScreen\",\r\n\t\t\t\tdataType: \"json\",\r\n\t\t\t\tdata: {\r\n\t\t\t\t\tscreenId: screenId\r\n\t\t\t\t},\r\n\t\t\t\tcache: false,\r\n\t\t\t\tcontext: this,\r\n\t\t\t\tbeforeSend: function() {\r\n\t\t\t\t\tthis.showLoading();\r\n\t\t\t\t},\r\n\t\t\t\tsuccess: function (response) {\r\n\t\t\t\t\t// Add the filters\r\n\t\t\t\t\tfor (var i = 0; i < response.Filters.length; i++) {\r\n\t\t\t\t\t\tvar html = response.Filters[i];\r\n\t\t\t\t\t\tvar arg = response.Screen.Arguments[i];\r\n\t\t\t\t\t\tvar category = arg.CategoryType;\r\n\t\t\t\t\t\tvar type = arg.FilterType;\r\n\t\t\t\t\t\tthis.addFilterModule(html, type, category, arg);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (response.Screen && response.Screen.SortArgument) {\r\n\t\t\t\t\t\tvar newSortSafeName = response.Screen.SortArgument.Field || this.defaultSortSafeName;\r\n\t\t\t\t\t\tvar newSortDir = response.Screen.SortArgument.Direction || 'Ascending';\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t// Remove the previous args\r\n\t\t\t\t\t\tthis.ScreenerInputs.RemoveSortArguments();\r\n\r\n\t\t\t\t\t\tthis.ScreenerInputs.AddSortArgument(\r\n\t\t\t\t\t\t\tnew this.ScreenerUtilNamespace.ScreenerUtility.ScreenInputs.SortArgument(\r\n\t\t\t\t\t\t\t\tnewSortSafeName,\r\n\t\t\t\t\t\t\t\tScreenerUtility.SORT_DIRECTION[newSortDir]\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.showAvailableFilterIsOn = response.ShowAvailableFilter;\r\n\r\n\t\t\t\t\t// Enable screening after everything else finishes\r\n\t\t\t\t\t// The loading indicator will stop when the screen finishes\r\n\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\tself.disableScreening = false;\r\n\t\t\t\t\t\tself.updateFilterCounts();\r\n\t\t\t\t\t\tself.runScreen();\r\n\t\t\t\t\t}, 50);\r\n\t\t\t\t\t\r\n\t\t\t\t},\r\n\t\t\t\terror: function error() {\r\n\t\t\t\t\talert(\"The saved screen failed to load.\");\r\n\t\t\t\t\tthis.hideLoading();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tconsole.warn(\"Tried to load screen, but there was no 'screenId'\");\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.handleSaveScreen = function($modalBody, isNew) {\r\n\t\tvar $errorMsg = $modalBody.find(\"p.error-msg\");\r\n\t\tvar $input = $modalBody.find(\"input[type=text]\");\r\n\t\tvar name = $input.val();\r\n\r\n\t\tif (name) {\r\n\t\t\tthis.saveScreen(name, isNew);\r\n\t\t\t$modalBody.modal(\"hide\");\r\n\t\t\t$errorMsg.hide();\r\n\t\t\t$input.val(\"\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$errorMsg.text(\"Please enter a name for your saved screen.\");\r\n\t\t\t$errorMsg.show();\r\n\t\t}\r\n\t};\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Filters\r\n\t// --------------------------------------------------------------------------\r\n\r\n\tfn.prototype.getFilterModule = function(filterType, categoryType) {\r\n\t\tmod.observer.trigger(\"screener - add filter\", filterType);\r\n\r\n\t\t$.ajax({\r\n\t\t\turl: \"GetFilter\",\r\n\t\t\tdataType: \"json\",\r\n\t\t\tdata: {\r\n\t\t\t\tfilterType: filterType\r\n\t\t\t},\r\n\t\t\tcache: false,\r\n\t\t\tcontext: this,\r\n\t\t\tsuccess: function(response) {\r\n\t\t\t\tif (response && response.status) {\r\n\t\t\t\t\t// Add the filter\r\n\t\t\t\t\tthis.addFilterModule(response.filterHtml, filterType, categoryType);\r\n\r\n\t\t\t\t\t// Run the screen to update results\r\n\t\t\t\t\tthis.runScreen();\r\n\r\n\t\t\t\t\t// Update the count\r\n\t\t\t\t\tthis.updateFilterCounts();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\terror: function error() {\r\n\t\t\t\tthis.logError(\"Could not load filter: '\" + filterType + \"'\");\r\n\t\t\t\tthis.hideLoading();\r\n\t\t\t},\r\n\t\t\tbeforeSend: function() {\r\n\t\t\t\tthis.showLoading();\r\n\t\t\t},\r\n\t\t\tcomplete: function() { }\r\n\t\t});\r\n\t};\r\n\r\n\tfn.prototype.addFilterModule = function(html, filterType, filterCategory, argument) {\r\n\t\tif (html) {\r\n\t\t\tvar $filter = $(html);\r\n\r\n\t\t\t// Add the html to the DOM\r\n\t\t\tthis.$screenerFilterArea.append($filter);\r\n\r\n\t\t\t// Force the collapsed filters open or else they won't work\r\n\t\t\t// This is because they rely on \":visible\"\r\n\t\t\tthis.toggleFilterCollapse(true);\r\n\r\n\t\t\t// Instantiate the filter controller class\r\n\t\t\tvar filterController = mod.filters.create(filterCategory, $filter, {\r\n\t\t\t\tscreenerNamespace: this.ScreenerUtilNamespace.ScreenerUtility,\r\n\t\t\t\targument: argument\r\n\t\t\t});\r\n\r\n\t\t\t// Save the controller to the dom node\r\n\t\t\t$filter.data(\"controller\", filterController);\r\n\r\n\t\t\t// Make sure the filter shows as selected on the nav\r\n\t\t\tthis.$screenerNav.find(\"a[data-filtertype=\" + filterType + \"]\").addClass(\"active\");\r\n\r\n\t\t\t// Setup the help tooltip if there is one\r\n\t\t\t$filter.find(\"a.infoIcon\").tooltip({\r\n\t\t\t\tmaxWidth: 215,\r\n\t\t\t\thtml: true\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.removeFilterModule = function($filters, skipScreen) {\r\n\t\t$filters = $($filters);\r\n\r\n\t\tvar sortArgs = this.ScreenerInputs.GetSortArguments();\r\n\r\n\t\tfor (var i = 0; i < $filters.length; i++) {\r\n\t\t\tvar $filter = $filters.eq(i);\r\n\t\t\tvar safeName = $filter.attr('data-safename') || '';;\r\n\r\n\t\t\t// Check to see if this filter was the one we're sorting on\r\n\t\t\tif (sortArgs.length && sortArgs[0]._Data.Field.toLowerCase() === safeName.toLowerCase()) {\r\n\t\t\t\tthis.resetSorting();\r\n\t\t\t}\r\n\r\n\t\t\t// Remove the filter from DOM\r\n\t\t\t$filter.remove();\r\n\r\n\t\t\t// Deactivate the filter from the nav\r\n\t\t\tvar filterType = $filter.attr(\"data-type\");\r\n\t\t\tthis.$screenerContainer.find(\"ul.criteria a[data-filtertype='\" + filterType + \"']\").removeClass(\"active\");\r\n\t\t}\r\n\r\n\t\t// Update the count\r\n\t\tthis.updateFilterCounts();\r\n\r\n\t\tif (!skipScreen) {\r\n\t\t\t// Re-run the screen\r\n\t\t\tthis.runScreen();\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.updateFilterCounts = function() {\r\n\t\tvar $filterGroups = this.$screenerNav.find(\"ul\").children();\r\n\r\n\t\tfor (var i = 0; i < $filterGroups.length; i++) {\r\n\t\t\tvar $group = $filterGroups.eq(i);\r\n\t\t\tvar $activeFilters = $group.find(\"li a.active\");\r\n\t\t\tvar $bucketNum = $group.find(\"a.criteriaBucket span.filterCount\");\r\n\t\t\tvar text = ($activeFilters.length) ? \"(\" + $activeFilters.length + \")\" : \"\";\r\n\t\t\t$bucketNum.text(text);\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.handleNoFilters = function() {\r\n\t\tvar hasCriteria = this.$screenerFilterArea.children().length > 0;\r\n\r\n\t\tif (hasCriteria) {\r\n\t\t\tthis.$screenerContainer.removeClass(\"noFilters\");\r\n\r\n\t\t\t// Enable the \"Create Screen\" buttons\r\n\t\t\tthis.$screenerCreateScreenBtn.attr(\"disabled\", false);\r\n\t\t\tthis.$screenerUpdateScreenBtn.attr(\"disabled\", false);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.$screenerContainer.addClass(\"noFilters\");\r\n\r\n\t\t\t// Disable the \"Create Screen\" buttons\r\n\t\t\tthis.$screenerCreateScreenBtn.attr(\"disabled\", \"disabled\");\r\n\t\t\tthis.$screenerUpdateScreenBtn.attr(\"disabled\", \"disabled\");\r\n\t\t}\r\n\t};\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Utils\r\n\t// --------------------------------------------------------------------------\r\n\r\n\tfn.prototype.toggleFilterCollapse = function(forceOpen) {\r\n\t\tvar self = this;\r\n\t\tvar hasCriteria = this.$screenerFilterArea.find('li').length;\r\n\t\tvar speed = 0;\r\n\r\n\t\tif (hasCriteria) {\r\n\t\t\tvar isCollapsed = this.$screenerFilterArea.hasClass(\"collapsed\");\r\n\t\t\tvar $tabLink = this.$screenerContainer.find('.screenFooter .tab a');\r\n\r\n\t\t\tif (isCollapsed || forceOpen) {\r\n\t\t\t\tthis.$screenerFilterArea.slideDown(speed, function() {\r\n\t\t\t\t\tself.$screenerFilterArea.removeClass(\"collapsed\");\r\n\t\t\t\t\t$tabLink.text(\"Collapse criteria\");\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Show drag and drop text\r\n\t\t\t\t$('div.dragDropDirection').css('visibility', 'visible');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.$screenerFilterArea.slideUp(speed, function() {\r\n\t\t\t\t\tself.$screenerFilterArea.addClass(\"collapsed\");\r\n\t\t\t\t\t$tabLink.text(\"Expand criteria\");\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Hide drag and drop text\r\n\t\t\t\t$('div.dragDropDirection').css('visibility', 'hidden');\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.formatAddCommas = function(value) {\r\n\t\tvar output = value;\r\n\r\n\t\tif (value) {\r\n\t\t\toutput = value.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t};\r\n\r\n\tfn.prototype.redirectToScreen = function(screenId) {\r\n\t\twindow.location = location.pathname + \"?savedScreenId=\" + screenId;\r\n\t};\r\n\r\n\tfn.prototype.redirectToPredefinedScreen = function(screenId) {\r\n\t\twindow.location = location.pathname + \"?predefinedScreenId=\" + screenId;\r\n\t};\r\n\r\n\tfn.prototype.logError = function(msg) {\r\n\t\t// $.ajax({\r\n\t\t// \turl: \"~/logs/LogMessage\",\r\n\t\t// \tdata: {\r\n\t\t// \t\tisException: true,\r\n\t\t// \t\ttitle: \"Screener\",\r\n\t\t// \t\tmsg: msg\r\n\t\t// \t}\r\n\t\t// });\r\n\t};\r\n\r\n\tfn.prototype.launchExpandedWindow = function() {\r\n\t\t// Get the current set of inputs\r\n\t\tvar currentInputs = this.ScreenerUtilityInstance.GetInputs(true);\r\n\r\n\t\t// Get the filter arguments and replace the result fields\r\n\t\tvar fieldsJson = this.$criteriaTab.attr(\"data-fields\");\r\n\t\tvar filterFields = JSON.parse(fieldsJson);\r\n\t\tcurrentInputs.ResultFields = filterFields;\r\n\r\n\t\t// Build up the url\r\n\t\tvar url = \"~/screener/expandedview\".resolveUrl();// + \"?inputs=\" + JSON.stringify(currentInputs);\r\n\r\n\t\tvar windowOptions = [\r\n\t\t\t\"menubar=no\",\r\n\t\t\t\"status=no\",\r\n\t\t\t\"toolbar=no\",\r\n\t\t\t\"location=no\"\r\n\t\t];\r\n\r\n\t\twindow.open(url, \"Expanded_Screener\", windowOptions.join(\",\"), true);\r\n\t};\r\n\r\n\r\n\tfn.prototype.initTooltips = function () {\r\n\r\n\t\tthis.el.find(\"a.tooltip-trigger\").tooltip({ html: true, maxWidth: 340 });\r\n\r\n\t};\r\n\r\n\tfn.prototype.events = {\r\n\t\t// --------------------\r\n\t\t// Saved Screens\r\n\t\t// --------------------\r\n\t\t\"button[data-action=create-screen]:not([disabled])\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t$(\"#screener_create_screen\").modal();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"button[data-action=update-screen]:not([disabled])\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t$(\"#screener_update_screen\").modal();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"#screener_create_screen [data-action=save]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar $parent = $el.closest(\"div.modal\");\r\n\t\t\t\tthis.handleSaveScreen($parent, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"#screener_update_screen [data-action=save]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar $parent = $el.closest(\"div.modal\");\r\n\t\t\t\tthis.handleSaveScreen($parent);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"div.modal [data-action=cancel]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t$el.closest(\"div.modal\").modal(\"hide\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"button[data-action=delete-screen]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tthis.deleteSavedScreen(this.savedScreenId);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"button[data-action=delete-screen-prompt]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t$(\"#screener_delete_screen\").modal();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"[data-screenid]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar screenId = $el.attr(\"data-screenid\");\r\n\t\t\t\tthis.redirectToScreen(screenId);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"[data-predefinedscreenid]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar screenId = $el.attr(\"data-predefinedscreenid\");\r\n\t\t\t\tthis.redirectToPredefinedScreen(screenId);\r\n\t\t\t}\r\n\t\t},\r\n\t\t// --------------------\r\n\t\t// Filters\r\n\t\t// --------------------\r\n\t\t\"div.screener-content [data-filtertype]\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tvar filterType = $el.attr(\"data-filtertype\");\r\n\t\t\t\tvar categoryType = $el.attr(\"data-categorytype\");\r\n\r\n\t\t\t\tif ($el.hasClass(\"active\")) {\r\n\t\t\t\t\tvar $filter = this.$screenerFilterArea.find(\"li.screener-filter[data-type=\" + filterType + \"]\");\r\n\r\n\t\t\t\t\tmod.observer.trigger(\"screener - remove filter\", $filter);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tvar numCurrentFilters = this.$screenerFilterArea.find(\"li.screener-filter\").length;\r\n\r\n\t\t\t\t\tif (numCurrentFilters < this.numFiltersAllowed) {\r\n\t\t\t\t\t\t// Grab the new filter\r\n\t\t\t\t\t\tthis.getFilterModule(filterType, categoryType);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\talert(\"You cannot add more than \" + this.numFiltersAllowed + \" filters\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\t'[data-action=resetfilters]': {\r\n\t\t\t'click': function(e, $el) {\r\n\t\t\t\tvar $allFilters = this.$screenerFilterArea.find('.screener-filter');\r\n\t\t\t\tthis.removeFilterModule($allFilters);\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// --------------------\r\n\t\t// Tabs\r\n\t\t// --------------------\r\n\t\t\".icon-screenerexpand\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tthis.launchExpandedWindow();\r\n\r\n\t\t\t\tmod.observer.trigger(\"screener - launch expanded window\");\r\n\t\t\t}\r\n\t\t},\r\n\t\t// --------------------\r\n\t\t// Misc\r\n\t\t// --------------------\r\n\t\t\".screenFooter .tab a\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\tthis.toggleFilterCollapse();\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"a.criteriaBucket\": {\r\n\t\t\t\"click\": function(e, $el) {\r\n\t\t\t\t$el.closest('li').toggleClass(\"open\").toggleClass(\"closed\");\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tfn.prototype.observables = {\r\n\t\t\"screener - screen\": function(options) {\r\n\t\t\toptions = options || {};\r\n\t\t\tthis.runScreen(null, options.resetPaging);\r\n\t\t},\r\n\t\t\"screener - showAvailableFilter\": function (options) {\r\n\t\t\toptions = options || {};\r\n\t\t\tthis.runScreen(null, options.resetPaging);\r\n\t\t},\r\n\t\t\"screener - remove filter\": function ($filter) {\r\n\t\t\tthis.removeFilterModule($filter);\r\n\t\t},\r\n\t\t\"custom columns saved\": function(newFields) {\r\n\t\t\tvar customFields = this.defaultColumns.concat(newFields);\r\n\t\t\tthis.$customTab.attr(\"data-fields\", JSON.stringify(customFields));\r\n\r\n\t\t\t// Select the \"Custom\" tab, which will rerun the screen\r\n\t\t\tthis.$customTab.tab(\"show\");\r\n\r\n\t\t\tthis.runScreen(customFields);\r\n\t\t}\r\n\t};\r\n\r\n});","mod.modules.define(\"ScreenerPageExpanded\", \"BaseScreenerPage\", function(fn) {\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t this.base(\"init\", params);\r\n\r\n\t\tthis.$screenerContainer = this.el;\r\n\t\tthis.$screenerContent = this.el;\r\n\t\tthis.$criteriaTab = $(\"#tab-criteria\");\r\n\r\n\r\n\t\tthis.pageSize = params.inputs.RowCount;\r\n\r\n\t\tthis.$criteriaTab.attr(\"data-fields\", JSON.stringify(params.criteriaColumns));\r\n\r\n\t\tthis.initScreener(params.inputs);\r\n\t};\r\n\r\n\tfn.prototype.initScreener = function (initialArgs) {\r\n\r\n\t\tthis.base(\"initScreener\");\r\n\r\n\t\t// Set up the initial arguments\r\n\t try {\r\n\t if (initialArgs.SortArguments) {\r\n\t delete initialArgs.SortArguments;\r\n\t }\r\n\t\t this.ScreenerInputs.Parse(initialArgs);\r\n\t\t}\r\n\t catch (e) {\r\n\t console.warn('ScreenerPageExpanded.js: ', e);\r\n\t }\r\n\t};\r\n\r\n\t// --------------------------------------------------------------------------\r\n\t// Screens\r\n\t// --------------------------------------------------------------------------\r\n\r\n\tfn.prototype.runScreen = function(resultFields) {\r\n\t\tthis.buildScreenInputs(resultFields);\r\n\t\tthis.ScreenerUtilityInstance.DoScreen(true);\r\n\t};\r\n\r\n\tfn.prototype.screenRequestCallback = function(response) {\r\n\t\tthis.base(\"screenRequestCallback\", response);\r\n\t};\r\n\r\n\tfn.prototype.buildScreenInputs = function (resultFields) {\r\n\t\tthis.ScreenerInputs.SetResultFields(resultFields);\r\n\t\tthis.addExcludedIssueIdArgs(this.excludedIssueIds);\r\n\t};\r\n\r\n\tfn.prototype.events = {\r\n\t \"[data-action=download-screen]\": {\r\n\t \"click\": function (e, $el) {\r\n\t var $modal = $el.closest('div.modal-body');\r\n\t var $selectedInput = $modal.find('div.config-section input:checked');\r\n\t var selectedType = $selectedInput.val();\r\n\r\n\t // Kick off the download\r\n\t this.downloadResults(selectedType, function () {\r\n\t $(\"#screener_download\").modal(\"hide\");\r\n\t });\r\n\t }\r\n\t },\r\n\t \"div.modal [data-action=cancel]\": {\r\n\t \"click\": function (e, $el) {\r\n\t $el.closest(\"div.modal\").modal(\"hide\");\r\n\t }\r\n\t }\r\n\t};\r\n\r\n});","mod.modules.define(\"BaseAnalytics\", function(fn) {\r\n\r\n // fn.prototype.init = function (params) {\r\n\t//\tthis.category = \"Default\";\r\n\t//};\r\n\r\n\t//fn.prototype.trackPage = function(name) {\r\n\t//\tname = name || \"Untitled\";\r\n\r\n\t//\t_waq.push([\r\n\t//\t\t'_trackPageView',\r\n\t//\t\t{\r\n\t//\t\t\tcategory: this.category,\r\n\t//\t\t\tname: name\r\n\t//\t\t}\r\n\t//\t]);\r\n\t//};\r\n\r\n\t//fn.prototype.trackAction = function(actionCategory, name, value) {\r\n\t//\tactionCategory = actionCategory || \"Undefined\";\r\n\r\n\t//\tvar data = {\r\n\t//\t\tcategory: actionCategory\r\n\t//\t};\r\n\r\n\t//\tif (name) {\r\n\t//\t\tdata.name = name;\r\n\t//\t}\r\n\r\n\t//\tif (value) {\r\n\t//\t\tdata.value = value;\r\n\t//\t}\r\n\r\n\t//\t_waq.push(['_trackAction', data]);\r\n\t//};\r\n\r\n\t//fn.prototype.observables = {\r\n\t// \"search - symbol\": function (term) {\r\n\t//\t\tthis.trackAction(\"Search\", \"Symbol\");\r\n\t//\t}\r\n\t//};\r\n\r\n});","mod.modules.define(\"ScreenerAnalytics\", \"BaseAnalytics\", function(fn) {\r\n\r\n\tfn.prototype.init = function(params) {\r\n\t\tthis.category = \"Screener\";\r\n\r\n\t\t// Show that we landed on the page\r\n\t\t//this.trackPage(this.category);\r\n\t};\r\n\r\n\t// Disabling actions for business reasons\r\n\r\n\t//fn.prototype.observables = {\r\n\t//\t\"screener - add filter\": function() {\r\n\t//\t\tthis.trackAction(\"Screener\", \"Add filter\");\r\n\t//\t},\r\n\t//\t\"screener - remove filter\": function() {\r\n\t//\t\tthis.trackAction(\"Screener\", \"Remove filter\");\r\n\t//\t},\r\n\t//\t\"screener - reorder filters\": function() {\r\n\t//\t\tthis.trackAction(\"Screener\", \"Reorder filters\");\r\n\t//\t},\r\n\t//\t\"screener - screen\": function() {\r\n\t//\t\tthis.trackAction(\"Screener\", \"Screen\");\r\n\t//\t},\r\n\t//\t\"screener - launch expanded window\": function() {\r\n\t//\t\tthis.trackAction(\"Screener\", \"Launch Expanded Window\");\r\n\t//\t}\r\n\t//};\r\n\r\n});"]}