{"version":3,"sources":["_layouts/core/search/search.js","_layouts/core/search/quicksearch.js","_layouts/core/search/searchcontainer.js","_layouts/core/search/searchpanel.js","_layouts/core/search/searchwindow.js","_layouts/core/search/elasticsearch.js","_layouts/core/search/searchoptions.js","_layouts/core/contentviews/searchresult.js"],"names":["Librarian","Search","Class","Extends","Request","JSON","Binds","options","method","loadComplete","catType","file","cancelAll","useCustomPath","isRecommendationSearch","emptyResult","data","page","total","xmlDoc","initialize","this","setOptions","onSuccess","onException","onFailure","url","length","path","getSearchUrl","parent","loadSearchXML","destroy","cancel","clean","response","xhr","Browser","search","xmlPath","getLayoutsPath","Utils","loadCustomXML","buildVersion","onBeforeSearch","onBeforeXMLGeneration","filters","getElementsByTagName","i","getAttribute","parentNode","removeChild","xml","getXMLText","Base64","encode","send","clone","cloneXMLDoc","json","text","stringify","hasSearchNodes","filterEls","childNodes","hasSearchNode","type","value","conjunction","operator","attributes","attributeValues","filterEl","Array","from","attributeQueries","push","query","join","contains","selectSingleNode","addSearchWithin","j","parentEl","setAttribute","appendChild","cloneXMLNode","addTextTerm","term","flags","filterConjunction","createNewFilter","outputType","addTextTermEx","addFileTerm","addFileTermEx","addGroupTerm","addGroupTermEx","addEventGroupTerm","addEventGroupTermEx","addRequestTerm","name","addRequestTermEx","addTerm","flagAttribute","parentFlagAttribute","parentFlag","fullText","noiseWords","toLowerCase","addNode","addFileKeyword","keyword","notUsed","addKeyword","addSlideKeyword","addGroupKeyword","addEventGroupKeyword","addFileKeywordEx","addSlideKeywordEx","addGroupKeywordEx","addEventGroupKeywordEx","addFileType","attribute","attributeValue","exclude","addFileTypeEx","isNaN","addCategory","catId","catPath","catName","addCategoryEx","addCatNode","filterListEl","createNew","trim","toString","apply","deleteEmptyFilters","addFileAttribute","addFileAttributeEx","addSlideAttribute","addSlideAttributeEx","addGroupAttribute","addGroupAttributeEx","addEventGroupAttribute","addEventGroupAttributeEx","addAttribute","addCategorizedFileAttribute","addCategorizedFileAttributeEx","addCategorizedSlideAttribute","addCategorizedSlideAttributeEx","addCategorizedGroupAttribute","addCategorizedGroupAttributeEx","addCategorizedEventGroupAttribute","addCategorizedEventGroupAttributeEx","addCategorizedAttribute","values","includeCategorizedMetaChildren","addContent","eventId","contactId","contactType","addParentNode","parentAttribute","parentAttributeValue","owl","plural","pluralize","charAt","substring","getFilterElement","cloneNode","nodeEl","nodeName","createElement","defaultConjunction","setNodeAttributes","filter","match","error","Lang","getString","createTextNode","result","typeOf","getChildElementByType","getChildElement","endsWith","filterIndex","doesXMLHaveNode","setFiltersConjunction","filtersEl","deleteEmptyNodes","recursiveDeleteEmpty","addMinModifiedDate","addModifiedDate","addMaxModifiedDate","addDate","addMinImportDate","addImportDate","addMaxImportDate","append","dateEl","parseInt","outputTypes","FILES","GROUPS","addOptions","typeEl","optionsEl","flagsEl","addResults","start","max","orderBy","order","viewName","returnType","includeDrafts","appendOrder","appendOrders","resultsEl","listView","enabled","globalFavorite","EVENTS","EVENTGROUPS","event","ordersEl","orderEl","overrideDefaultSorting","newOrderEl","insertBefore","toCapitalCase","setSearchSource","searchSource","searchEl","getOutputType","getResultAttribute","getReturnType","attribName","resultEl","getSearchTerms","terms","termEls","selectNodes","k","getXMLNodeText","replaceAll","searchWildCard","split","getTextTerms","textTerms","getCurrentPage","startRow","toInt","maxRows","maxResults","Math","ceil","extend","ALLCONTENT","SLIDES","ARTICLES","MYFAVORITE","CATEGORIES","undefined","quick","advanced","application","administrator","fromSearch","openSearch","searchWindow","isMinimized","restore","Window","show","searchAgain","prepValue","appendWildCard","toUpperCase","replace","quotedValues","safeSplit","hadQuotes","appendValue","appendWildcardOnSplit","quotedValue","startsWith","splitValues","splitValue","remove","extractAndPrepCategory","catid","index","indexOf","prepSearchNavigation","maxItems","numItems","lockNavigation","pages","showSearchNavigation","itemEl","$","set","updateSearchButtons","reset","display","style","forceDisplay","setElementValue","disablePrev","disableNext","wrapperEl","setButtonState","navPage","perPage","resetTileList","lastSearch","tileList","wrapper","document","window","scrollTo","sortSearch","sortOn","sortBy","navPageSubmit","other","curPageEl","pageCountEl","get","navPageLocation","where","QuickSearch","outFormat","defaultSearchOptions","includeKeywords","includeSlideText","includeDescription","items","contents","resultsOptions","orderByColumns","searchOptions","Object","splitQuicksearchTerms","orderByObj","setSearchKeywords","setSearchSlideText","setSearchDescriptions","toAdvancedSearch","typeName","itemTypeName","originalTerm","Container","getFlagValue","groupTermFlags","fileTermFlags","addContents","resultOptions","Implements","Options","id","onSearch","$empty","datePickers","confirm","conjunctions","fileAttributes","slideAttributes","groupAttributes","fileTermCount","textTermCount","groupTermCount","fileKWCount","slideKWCount","groupKWCount","fileTypeCount","fileAttCount","slideAttCount","groupAttCount","defaultDateOptions","timePicker","searchTime","positionOffset","x","y","format","getContentElement","onSearchLoaded","setUpDatePicker","closeDatePickers","bind","addOnClick","clearSearch","itemEls","fileAttributeRequest","slideAttributeRequest","groupAttributeRequest","operators","onchange","onOperatorChange","getMethodUrl","onFileAttributesLoaded","onSlideAttributesLoaded","onGroupAttributesLoaded","fileTypeOptions","selectedIndex","fillSelect","getElementsByName","src","getImagesPath","textEl","selected","visibility","contentEl","key","close","containerEl","addElement","removeFileTerm","removeEl","hasClass","removeElement","removeTextTerm","removeGroupTerm","removeFileKeyword","removeSlideKeyword","removeGroupKeyword","excludeCheckEl","excludeTextEl","breakEl","tagName","Element","excludeLabelEl","addClass","removeFileType","labelEl","removeFileAttribute","removeAttribute","removeSlideAttribute","removeGroupAttribute","count","selectEl","attEl","selectIDSuffix","sourceEl","optionEl","Option","add","autocorrect","autocapitalize","onkeydown","e","evt","Event","keyCode","inputEl","clearEl","clear","buttonEl","childEl","ConfirmWindow","title","question","onFirstButtonClicked","doClear","checked","doSearch","globalConjunctionEl","globalConjunction","searched","addSearchNode","getTermFlags","textTermFlags","check","conjunctionEl","continueSearch","searchErrorWindow","firstButtonText","useSecondButton","addSearchDate","pageName","searchTarget","defaultOutputType","searchOutput","customMetaEls","$$","meta","func","prep","multiOptionEls","searchTypes","eval","operatorEl","isQuoted","guestInfo","ContactId","ContactType","eventInfo","EventId","ListView","prepSearchGrid","searchLoadComplete","viewNameByType","Library","prepSearchPage","changeHash","prefix","valid","nodeAttribute","getElementValue","emptyValueOperators","checkedCount","elements","disabled","searchAllFlagsIfAllOptionsChecked","eventGroupTermFlags","Panel","MUI","resizable","width","loaded","fileTypes","catSelectWindow","selectedOptionType","searchMatchRules","Any Words","All Words","Exact Phrase","contentURL","getLibraryPath","onContentLoaded","onShow","hide","loadPanel","addEvent","onReturnTypeChanged","each","el","selectedEl","getElement","onSearchForChanged","target","obj","getParent","removeClass","onContentChecked","onContentItemChecked","disableSearchWithin","onSearchWithinAllClicked","loadSelectedCategoryName","onSearchWithinClicked","onFileAndGroupMetaListLoaded","attrLoadedCount","attrs","concat","intersectAttr","len","isDuplicate","len2","contentType","self","onAttributesLoaded","fileMeta","groupMeta","call","map","datum","slide","contentGroup","onSearchFileTypeAddClicked","onSearchFileTypeRemoveClicked","requestDataList","loadRequestDataList","loadSearchOptions","getFileTypes","onFileTypesLoaded","submit","translateElements","windowEl","checkEl","checksClass","checks","showFileSubOptions","optionid","excludeList","subType","getSelectedSubType","optionExcludes","shownAttrib","shownOption","returnTypes","searchWithin","optionType","getOptionType","attribType","isGroup","wasGroup","subOptionsEl","listEl","getChildren","showAttributeOptions","showContainer","attrEl","contEl","optionEls","getElements","getSelectedFileTypes","extensions","getFileTypeExtensions","shown","types","some","extension","fileType","requestContEl","class","injectInside","requestInputContEl","spellcheck","isVisible","getSelectedValue","searchFor","subTypeEls","targetEl","retType","fileTypeEl","selectedType","showFileTypes","loadFileTypeList","returnTypesEl","typeLength","optionName","getResultsOptionName","select","searchWithinEl","searchWithinIDEl","closeCatSelectWindow","CategorySelectWindow","selectedCategories","selectedCategoryIDs","onCloseComplete","metaName","metaInputContEl","metaValueClass","metaList","searchable","metaContEl","html","dropdown","multiple","getAttributeDropdownValues","onAttributeValuesLoaded","categorized","readonly","onMetaCategorySelectClicked","pass","datatype","attributeDataType","bool","datetime","fireEvent","defaults","defaultAttributeValues","inputId","MetaTreeWindow","attributeId","selectedData","parse","checkChildren","checkCategorizedMetaChildren","onSubmit","names","item","tree","getTreeByType","treeView","getSelected","contenttype","newTypeEl","typeEls","FileSubType","ext","FileTypeExtension","sort","a","b","selectedValue","setSelectValue","subTypes","updateContent","element","panelEl","content","panelWrapperEl","require","js","onload","termEl","defaultValue","searchData","allowEmptySearchTerm","searchMethod","methodName","invoke","getSelectedItem","fileFlags","slideFlags","groupFlags","includeFileKeyword","includeSlideKeyword","includeGroupKeyword","searchType","optionLength","optionParentEl","slideValue","fileValue","groupValue","dataName","getArgString","useAllFlagsOnEmpty","addOriginalTerms","containsWholeWord","quotedTerms","success","defaultEmptyValueOperator","addMetaValues","requestNameEls","requestValueEls","requestLength","specialCategories","GlobalFavorites","CatId","catIDs","catNames","oldOnBefore","fileTypeEls","date","catFunc","hasSearched","attrNameEls","attrValueEls","attributeConjunction","attrLength","attribcatid","usedTerms","valLength","val","useLastSearchOptions","useSearchOptions","uniqueTerms","typeRadioEl","click","flagFieldEls","searchField","flagFieldEl","visible","itemName","forEach","attributeEls","attribValues","catAttribValues","attributeEl","attribValueEl","valueNames","attribValueEls","hasOwnProperty","min","stripTime","categoryEls","catIds","categoryEl","doSearchTerm","searchTerm","loadTabByName","presentation","image","media","movie","sound","canSearchFiles","canSearchSlides","canSearchGroups","canSearchGroupContent","height","padding","right","onWindowLoaded","minimize","resize","centered","ie7","onClose","elasticQueryContentType","all","group","elasticQuerySearchQueryType","wildcard","fuzzy","matchPhrase","queryString","elasticSearchQuery","queryContentType","searchTerms","exclusionFilters","elasticSearchOperator","or","and","elasticQueryAnalyzer","standard_english","word_delimiter","word_delimiter_with_stemming","keyword_lower","standard","synonyms","elasticSuggestionTypes","none","phrase","elasticSearchQueryValue","queryType","boost","fuzziness","prefixLength","slop","analyzer","suggestionType","elasticSearchQuerySearchTerm","description","notes","fileKeywords","slideKeywords","searchResults","took","maxScore","timedOut","hits","ElasticSearch","beforeLoadComplete","elasticSearchQueryOptions","size","highlights","preTag","postTag","elasticSearch","dfsQueryThenFetch","disMax","aggregates","stats","loadSearchPreference","sortField","searchPreference","sortDescending","sortAttributeName","attributeSortName","instanceOf","ElasticSearchQuerySearchTerms","members","ElasticSearchQueryFilter","afterRequestSend","goToPage","pageNumber","queryAnalyzer","searchQueryType","querySortField","_score","lastModDate","recordDate","avgRating","importDate","searchOperator","suggestionTypes","defaultSortType","attributeSort","Cookie","read","setSearchPreference","pref","merge","write","getInstance","SearchResult","allSearchTerms","setValue","property","esValue","toEsValue","addSearchTerm","splitSearchTerms","searchQueryValue","getAllSearchTerms","queryValue","elasticSearchAutoComplete","skipDuplicates","field","searchFieldType","contentTypes","elasticSearchAutoCompleteResults","suggestions","Suggest","autoCompleteOptions","suggest","body","suggestOptions","Autocomplete","searchAutoCompleteResults","createAutoCompleteElement","searchContEl","autoCompleteId","Date","getTime","autoCompleteEl","grab","searchAutoComplete","focusedEl","relatedTarget","hasChild","setItemActive","direction","activeEl","nextActiveEl","getPrevious","getNext","getFirst","stop","stopImmediatePropagation","blur","autoComplete","results","dataListEl","empty","suggestion","es","libraryFilters","setContent","contentId","attribKey","lastQuery","elasticSearchQueryFilter","categoryIds","categoryPaths","parentContentType","fileSubTypes","fileExtensions","searchDate","minDate","maxDate","esContent","esAttribute","setDate","dateValue","extractDateFromString","filterOperator","minValue","maxValue","isCategorized","attributeExists","setCategoryPaths","preventOverride","currentVal","SearchOptions","sourceName","className","filtersLoaded","bucketsLoaded","searchFileAttributesLoaded","searchOptionsLoaded","template","Handlebars","compile","formEl","onLoaded","onAggregatesLoaded","fetchSearchOptions","fetchSearchFileAttributes","fetchSearchSlideAttributes","fetchSearchGroupAttributes","contentTypeFilter","inputClass","toggleAttributeFilters","aggregate","attributeName","onOptionsLoaded","searchGroupAttributesLoaded","searchSlideAttributesLoaded","attributeFilters","searchFileAttributes","searchGroupAttributes","searchSlideAttributes","option","render","isDefaultSearchOption","resetOptions","getSlideText","filename","Text","fetchDefaultSearchOptions","label","attributeDef","searchBoxEl","resetFilters","elasticOperatorEl","defaulOperator","elasticOperator","defaultOperator","toQueryString","parseQueryString","renderFilters","renderBucketFilter","doSearchAfter","filterOptions","onFilterLoaded","filtersToLoad","filterObj","Terms","Filter","onInputChanged","bucketFiltersEl","groups","container","bucketFilter","OptionsFilter","buildQuery","extraFilters","getSearchTerm","parseSearchQuery","enabledFilters","attribFilters","disable","enable","isGroupedResults","allGroupsFilterName","doSuggest","requestCount","groupResults","currentSearchOptions","onComplete","searchEs","selectedBuckets","buckets","selectAll","currentHash","getHash","encodeURIComponent","hashString","Hash","suggester","suggestionResult","searchResult","aggregations","groupResultCount","customGroupSearchFilter","buildFilter","customFilter","excludeGroupsFilter","searchPageEl","Events","displayed","default","accordion","startOpen","cleanLabel","initContainer","load","renderAggregates","loadAttributeDef","loadFileTypes","loadContentTypes","bodyEl","headerEl","countEl","Accordion","treeType","CategorizedAttributeTreeFilter","CategoryTreeFilter","DateFilter","TextFilter","searchOption","updateCount","onLoadAttributeDef","attribDef","admin","dynamicDropdownAttributes","dropdownValues","dataType","isRange","isMultiValued","typeFilters","FileTypeId","loadFileSubTypes","inclusionFilterOption","exclusionFilterOption","filterOption","attribVal","formattedValues","customFilters","customExclusionFilters","capitalize","substr","presentations","slides","groupSlides","documents","images","movies","audio","termContext","level2Options","context","additionalInfo","overrides","selectedEls","optionInfo","retrieve","inputValue","termInfo","exec","termValue","getQuotedTerm","exactPhrase","allowMatchPhraseStopWords","aggregateCount","resetCount","bucket","find","triggerEl","levelOptionEl","renderOptions","level2Option","level2OptionsEl","isSelected","optionValue","countClass","store","dateTemplate","dateRangeTemplate","dateInputsEl","iconEl","setUpDatePicker2","recursivelySetCount","catAttrTree","Mif","Tree","forest","folder","openIcon","closeIcon","initCheckbox","node","recursivelySetState","root","recursive","currNode","getDOM","nodeWrapper","countSpan","adopt","setCountEl","state","setCheckboxState","checkedItems","getChecked","rootCatId","useCatId","include","catTree","TreeView","checkBoxes","hideTypes","cookieStorage","contentView","contentViewName","rootCat","onNodeChecked","onTreeNodeLoaded","selectedIds","selectedCategoryIds","children","getValue","erase","open","getPath","SearchResultItem","CartDraggable","maxHighlights","view","showMoreCount","resultHtml","hoverMenu","itemClassName","tokenizedQuery","registerHelper","drawAvgRatingStars","resultTemplate","rating","preview","ratingMaxStars","fullStars","floor","halfStars","emptyStars","SafeString","getCompatibleContentInfo","contentInfo","libContentInfo","toLowerKeys","contentname","fileid","parentContentId","slidenumber","getFromContent","prepareItemData","statsInfo","isFeatured","missing","getHighlights","missingText","getMissing","thumbnail","getExtension","thumbnailClass","views","getFileTypeIconsPath","getThumbnailUrl","thumbnailid","thumbnailId","getFileTypeIcon","allPaths","categories","info","resultNameOverridemeta","desc","shift","pathCount","hasOtherPaths","otherPaths","fileSize","parseFloat","toFixed","ratingCount","getPluralString","getDateValue","slideNumber","isSlide","flagLocation","getFlaggingLocation","flagging","location","isThumbnailView","showStats","previews","downloads","shares","isHighlightAllowed","renderHighlights","renderMissing","descriptionEl","previewTriggers","nameEl","slideid","openFileLocation","openItem","previewItem","cartStateEl","handleCartCheck","updateCartState","thumbnailEl","getContentInfo","isCategory","slideInfo","groupid","eventcount","hoverMenuTypes","presid","myFavorite","eventid","onMouseOver","onMouseOut","initClickAndDrag","pathEl","loadLibraryTab","loadCategoryByPath","reviewsEl","ViewRatingsWindow","itemType","itemData","morePathsTriggerEl","showOnTileList","renderFlags","imageEl","tileItem","onDragStart","onDragEnd","onDragItem","isInCart","userCart","allHighlights","relevantHighlights","getRelevantHighlights","otherHighlights","highlightsEl","highlight","highlightEl","renderHighlight","appendText","getLast","showAllEl","href","getAllNext","slice","showMore","Elements","highlightText","escapeHtml","contentDetails","startTime","slideDescription","starttime","PreviewWindow","openPreviewWindow","missingContEl","missingEl","callback","fileinfo","groupinfo","getExtensionFromData","disableHighlightExtensions","searchHighlights","addHighlight","highlightsInfo","highlightItem","highlightVal","highlightKey","featuredKeywordsName","featuredFileMeta","searchQuery","allTerms","queryTerm","cleanUpSearchTerm","tokenizedTerm","top","foundTerms","unusedHighlights","foundCount","isRelevant","splice","short","shortHighlights","cattype","prestype","selectTreeNodeByPath","onDrop","onItemClick","initializer","tab","removeFromCart","cartNotificationTypes","removed","addToCart","added","Cart","onChange","showCartNotification","flagClasses","getFlaggingClasses","tooltip","flagText","flag","isInternal","pagesToDisplay","showPagination","showSort","currentPage","totalPages","resultPageHtml","pageInfoHtml","sortHtml","paginationHtml","typeFilterHtml","bucketHtml","drawPageNumbers","ret","fn","emptyResultPageHtml","pageInfoTemplate","paginationTemplate","typeFilterTemplate","bucketTemplate","sortTemplate","initHoverMenu","destroyHoverMenu","HoverMenu","menuContainer","dropDownContainer","dropDownListContainer","dropDownTrigger","menuIdPrefix","getTileListMenuItems","getTileListDropDownItems","initialNumber","finalNumber","pageNumberEl","outerHTML","resultContEl","pageInfoContEl","paginationContEl","sortContEl","sortEl","pageHtml","showHeader","viewAllEl","categoryFiltersEl","maxHiglights","paginationEl","renderPagination","pageInfoEl","renderPageInfo","renderSort","textContent","previousButtonIconEl","previousButtonEl","nextButtonIconEl","nextButtonEl","defaultSort","sortValue","attr","sortPreference","scrollTop","renderTypeFilters","typeFilterEl","selectedTypeEl","typeFilter","typeInfo","getItem","updateCartCheckBoxes","suggestionsHtml","initSearchPage","thumbnailView","resultsView","activeView","getActiveView","resultViews","resultView","helpEl","displayHelp","linkEl","fileName","searchPanel","getSuggestion","currentSuggestion","phraseSuggestion","allSuggestions","getPhraseSuggestion","termSuggestion","getTermSuggestion","findMaxSuggestion","topSuggestion","score","phrases","phraseSuggestions","suggestionText","originalQuery","termSuggestions","renderSuggestions","suggestionEl","quickSearch","cleanSearchPage","searchOptionsName","getHashByName","loadCustomSearch","resultsPageEl","totalResults","searchSuggestions","resultsViewEl","noResultsEl"],"mappings":"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","file":"_layouts\\core\\search\\search.bundle.min.js","sourcesContent":["Librarian.Search = new Class({\r\n Extends: Librarian.Request.JSON,\r\n Binds: [\r\n \"onBeforeSearch\", \"onBeforeXMLGeneration\", \"search\",\r\n \"hasSearchNodes\", \"hasSearchNode\",\r\n \"loadComplete\", \"addSearchWithin\",\r\n \"addFileTerm\", \"addTextTerm\", \"addGroupTerm\",\r\n \"addFileTermEx\", \"addTextTermEx\", \"addGroupTermEx\",\r\n \"addTerm\", \"addFileType\", \"addAttribute\", \"addCategorizedAttribute\",\r\n \"addFileKeyword\", \"addSlideKeyword\", \"addGroupKeyword\",\r\n \"addFileKeywordEx\", \"addSlideKeywordEx\", \"addGroupKeywordEx\",\r\n \"addFileAttribute\", \"addSlideAttribute\", \"addGroupAttribute\",\r\n \"addFileAttributeEx\", \"addSlideAttributeEx\", \"addGroupAttributeEx\",\r\n \"addCategorizedFileAttribute\", \"addCategorizedSlideAttribute\", \"addCategorizedGroupAttribute\",\r\n \"addCategorizedFileAttributeEx\", \"addCategorizedSlideAttributeEx\", \"addCategorizedGroupAttributeEx\",\r\n \"addMinModifiedDate\", \"addMaxModifiedDate\",\r\n \"addMinImportDate\", \"addMaxImportDate\", \"setFiltersConjunction\",\r\n \"getOutputType\", \"getResultAttribute\"\r\n ],\r\n\r\n options: {\r\n method: \"post\",\r\n loadComplete: null, /*(json, text)*/\r\n catType: Librarian.catType.file,\r\n cancelAll: false,\r\n useCustomPath: true\r\n },\r\n\r\n isRecommendationSearch: false,\r\n\r\n emptyResult: {\r\n data: [],\r\n page: 1,\r\n total: 0\r\n },\r\n\r\n xmlDoc: null,\r\n\r\n initialize: function(options) {\r\n if ((typeof options == \"undefined\") || (options == null))\r\n options = {};\r\n\r\n this.setOptions(options);\r\n\r\n this.options.onSuccess = this.loadComplete;\r\n this.options.onException = options.onException;\r\n this.options.onFailure = options.onFailure || this.onFailure;\r\n\r\n if ((typeof this.options.url != \"string\") || (this.options.url.length == 0))\r\n this.options.url = Librarian.path.getSearchUrl() + \"out=dgrid\";\r\n\r\n this.parent(this.options);\r\n\r\n this.xmlDoc = this.loadSearchXML();\r\n },\r\n\r\n destroy: function() {\r\n this.cancel();\r\n this.clean();\r\n this.xmlDoc = null;\r\n },\r\n\r\n clean: function() {\r\n this.response = null;\r\n\r\n this.xhr = null;\r\n\r\n this.xhr = new Browser.Request();\r\n },\r\n\r\n loadSearchXML: function() {\r\n var path = Librarian.search.xmlPath;\r\n if (!path || !this.options.useCustomPath)\r\n path = Librarian.path.getLayoutsPath() + \"core/search/search.xml\";\r\n return Librarian.Utils.loadCustomXML(path + '?' + Librarian.buildVersion);\r\n },\r\n\r\n loadCustomXML: function(path) {\r\n this.xmlDoc = Librarian.Utils.loadCustomXML(path + '?' + Librarian.buildVersion);\r\n },\r\n\r\n onBeforeSearch: function() {\r\n // Should be overwritten on a per-library basis\r\n return true;\r\n },\r\n\r\n onBeforeXMLGeneration: function() {\r\n // Should be overwritten on a per-instance basis\r\n },\r\n\r\n search: function() {\r\n if (!this.onBeforeSearch())\r\n return;\r\n\r\n var filters = this.xmlDoc.getElementsByTagName(\"filter\");\r\n // Removed unused filters\r\n for (var i = 0; i < filters.length; i++) {\r\n if (filters[i].getAttribute(\"used\") != \"true\")\r\n filters[i].parentNode.removeChild(filters[i]);\r\n }\r\n\r\n this.onBeforeXMLGeneration();\r\n\r\n var xml = Librarian.Utils.getXMLText(this.xmlDoc);\r\n\r\n if (typeof Base64 != \"undefined\")\r\n xml = Base64.encode(xml);\r\n\r\n this.options.data = xml;\r\n this.send();\r\n },\r\n\r\n clone: function(search) {\r\n search.options.loadComplete = this.options.loadComplete;\r\n search.options.onSuccess = this.options.onSuccess;\r\n search.options.onFailure = this.options.onFailure;\r\n search.options.url = this.options.url;\r\n search.xmlDoc = Librarian.Utils.cloneXMLDoc(this.xmlDoc);\r\n },\r\n\r\n loadComplete: function(json, text) {\r\n if (typeof this.options.loadComplete == \"function\")\r\n this.options.loadComplete(json, text, this.options.catType, this.options.cancelAll);\r\n },\r\n\r\n // Return an empty set if there is an error\r\n onFailure: function() {\r\n if (typeof this.options.loadComplete == \"function\")\r\n this.options.loadComplete(this.emptyResult, JSON.stringify(this.emptyResult), this.options.catType, this.options.cancelAll);\r\n },\r\n\r\n hasSearchNodes: function() {\r\n var filterEls = this.xmlDoc.getElementsByTagName(\"filter\");\r\n for (var i = 0; i < filterEls.length; i++) {\r\n if (filterEls[i].childNodes.length > 0)\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n hasSearchNode: function(type, value, conjunction, operator, attributes, attributeValues, filterEl) {\r\n attributes = Array.from(attributes);\r\n attributeValues = Array.from(attributeValues);\r\n\r\n if (attributes.length != attributeValues.length)\r\n throw \"Attribute list and attribute values list must have the same length\";\r\n\r\n var attributeQueries = [];\r\n for (var i = attributes.length; i--;)\r\n attributeQueries.push('@' + attributes[i] + \"='\" + attributeValues[i] + \"'\");\r\n\r\n // TODO: Use conjunction, operator?\r\n var query = \".//\" + type;\r\n\r\n // Add each attribute to the query string\r\n if (attributeQueries.length > 0)\r\n query += '[' + attributeQueries.join(\" and \");\r\n\r\n // If we also have a string value, add that to the query\r\n if (typeof value == \"string\")\r\n query += \" and text()='\" + value + '\\'';\r\n\r\n // If we added anything to the query string, close it\r\n if (query.contains('['))\r\n query += ']';\r\n\r\n if (filterEl)\r\n return filterEl.selectSingleNode(query) != null;\r\n return this.xmlDoc.selectSingleNode(query) != null;\r\n },\r\n\r\n addSearchWithin: function(value) {\r\n var filterEls = this.xmlDoc.getElementsByTagName(\"filter\");\r\n for (var i = 0; i < filterEls.length; i++) {\r\n for (var j = 0; j < filterEls[i].childNodes.length; j++) {\r\n var parentEl = filterEls[i].childNodes[j];\r\n if (parentEl.childNodes.length > 0) {\r\n parentEl.setAttribute(\"conjunction\", \"AND\");\r\n parentEl.appendChild(Librarian.Utils.cloneXMLNode(this.xmlDoc, parentEl.childNodes[0], value));\r\n }\r\n }\r\n }\r\n },\r\n\r\n addTextTerm: function(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addTextTermEx(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) != null;\r\n },\r\n\r\n addFileTerm: function(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addFileTermEx(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) != null;\r\n },\r\n\r\n addGroupTerm: function(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addGroupTermEx(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) != null;\r\n },\r\n\r\n addEventGroupTerm: function(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl) {\r\n return this.addEventGroupTermEx(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl) != null;\r\n },\r\n\r\n addRequestTerm: function(term, conjunction, operator, name, filterConjunction, createNewFilter, filterEl) {\r\n return this.addRequestTermEx(term, conjunction, operator, name, filterConjunction, createNewFilter, filterEl) != null;\r\n },\r\n\r\n addTextTermEx: function(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) {\r\n if ((typeof flags == \"undefined\") || (flags == null))\r\n flags = -1;\r\n\r\n return this.addTerm(\"text\", term, conjunction, operator, null, null, \"textTypes\", flags, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addFileTermEx: function(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) {\r\n if ((typeof flags == \"undefined\") || (flags == null))\r\n flags = -1;\r\n\r\n return this.addTerm(\"file\", term, conjunction, operator, \"searchFields\", flags, null, null, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addGroupTermEx: function(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addTerm(\"group\", term, conjunction, operator, null, null, \"searchFields\", flags, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addEventGroupTermEx: function(term, conjunction, operator, flags, filterConjunction, createNewFilter, filterEl) {\r\n return this.addTerm(\"eventGroup\", term, conjunction, operator, null, null, \"searchFields\", flags, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addRequestTermEx: function(term, conjunction, operator, name, filterConjunction, createNewFilter, filterEl) {\r\n return this.addTerm(\"request\", term, conjunction, operator, \"name\", name, null, null, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addTerm: function(type, term, conjunction, operator, flagAttribute, flags, parentFlagAttribute, parentFlag, filterConjunction, createNewFilter, filterEl, outputType) {\r\n // Don't add full text noise words, but don't fail either\r\n if (Librarian.search.fullText && Librarian.search.noiseWords.contains(term.toLowerCase()))\r\n return (typeof filterEl == \"undefined\" || filterEl == null) ? true : filterEl;\r\n\r\n return this.addNode(type + \"Term\", term, flagAttribute, flags, conjunction, operator, parentFlagAttribute, parentFlag, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addFileKeyword: function(keyword, conjunction, operator, notUsed, filterConjunction, createNewFilter, outputType) {\r\n return this.addKeyword(\"file\", keyword, conjunction, operator, filterConjunction, createNewFilter, null, outputType) != null;\r\n },\r\n \r\n addSlideKeyword: function(keyword, conjunction, operator, notUsed, filterConjunction, createNewFilter, outputType) {\r\n return this.addKeyword(\"slide\", keyword, conjunction, operator, filterConjunction, createNewFilter, null, outputType) != null;\r\n },\r\n\r\n addGroupKeyword: function(keyword, conjunction, operator, notUsed, filterConjunction, createNewFilter, outputType) {\r\n return this.addKeyword(\"group\", keyword, conjunction, operator, filterConjunction, createNewFilter, null, outputType) != null;\r\n },\r\n\r\n addEventGroupKeyword: function(keyword, conjunction, operator, notUsed, filterConjunction, createNewFilter) {\r\n return this.addKeyword(\"eventGroup\", keyword, conjunction, operator, filterConjunction, createNewFilter) != null;\r\n },\r\n\r\n addFileKeywordEx: function(keyword, conjunction, operator, notUsed, filterConjunction, createNewFilter, filterEl) {\r\n return this.addKeyword(\"file\", keyword, conjunction, operator, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addSlideKeywordEx: function(keyword, conjunction, operator, notUsed, filterConjunction, createNewFilter, filterEl) {\r\n return this.addKeyword(\"slide\", keyword, conjunction, operator, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addGroupKeywordEx: function(keyword, conjunction, operator, notUsed, filterConjunction, createNewFilter, filterEl) {\r\n return this.addKeyword(\"group\", keyword, conjunction, operator, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addEventGroupKeywordEx: function(keyword, conjunction, operator, notUsed, filterConjunction, createNewFilter, filterEl) {\r\n return this.addKeyword(\"eventGroup\", keyword, conjunction, operator, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addKeyword: function(type, keyword, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addNode(type + \"Keyword\", keyword, null, null, conjunction, operator, null, null, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addFileType: function(attribute, attributeValue, exclude, conjunction, filterConjunction, createNewFilter, filterEl) {\r\n return this.addFileTypeEx(attribute, attributeValue, exclude, conjunction, filterConjunction, createNewFilter, filterEl) != null;\r\n },\r\n\r\n addFileTypeEx: function(attribute, attributeValue, exclude, conjunction, filterConjunction, createNewFilter, filterEl) {\r\n // If this is the ID, it should be a number\r\n if ((attribute == \"id\") && isNaN(attributeValue))\r\n return null;\r\n\r\n if (exclude == true)\r\n return this.addNode(\"fileType\", null, [attribute, \"exclude\"], [attributeValue, \"true\"], conjunction, null, null, null, filterConjunction, createNewFilter, filterEl);\r\n else\r\n return this.addNode(\"fileType\", null, attribute, attributeValue, conjunction, null, null, null, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addCategory: function(catId, exclude, catType, catPath, filterConjunction, createNewFilter, filterEl, catName) {\r\n return this.addCategoryEx(catId, exclude, catType, catPath, filterConjunction, createNewFilter, filterEl, catName) != null;\r\n },\r\n\r\n addCategoryEx: function(catId, exclude, catType, catPath, filterConjunction, createNewFilter, filterEl, catName) {\r\n if (typeof catId == \"number\")\r\n catId = catId.toString();\r\n\r\n function addCatNode(filterListEl, createNew) {\r\n var attributes = [\"catId\", \"catType\"],\r\n attributeValues = [catId, catType];\r\n\r\n if (exclude === true) {\r\n attributes.push(\"exclude\");\r\n attributeValues.push(\"true\");\r\n }\r\n if ((typeof catPath == \"string\") && (catPath.trim().length > 0)) {\r\n attributes.push(\"catPath\");\r\n attributeValues.push(catPath.trim());\r\n }\r\n if ((typeof catName == \"string\") && (catName.trim().length > 0)) {\r\n attributes.push(\"catName\");\r\n attributeValues.push(catName.trim());\r\n }\r\n\r\n if (!this.hasSearchNode(\"category\", null, null, null, attributes, attributeValues, filterListEl))\r\n return this.addNode(\"category\", null, attributes, attributeValues, null, null, null, null, filterConjunction, createNew, filterListEl);\r\n return true;\r\n }\r\n\r\n if (createNewFilter === true)\r\n return addCatNode.apply(this, [null, true]);\r\n else if (filterEl != null)\r\n return addCatNode.apply(this, [filterEl]);\r\n else {\r\n this.deleteEmptyFilters();\r\n // If we're not creating a new filter, get the list of current filters to add the category to\r\n var filterEls = this.xmlDoc.getElementsByTagName(\"filter\");\r\n\r\n for (var i = 0; i < filterEls.length; i++) {\r\n var filterListEl = filterEls[i];\r\n if (addCatNode.apply(this, [filterListEl]) == null)\r\n return null;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n addFileAttribute: function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, outputType) {\r\n return this.addFileAttributeEx(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, null, outputType) != null;\r\n },\r\n\r\n addSlideAttribute: function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter) {\r\n return this.addSlideAttributeEx(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter) != null;\r\n },\r\n\r\n addGroupAttribute: function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, outputType) {\r\n return this.addGroupAttributeEx(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, null, outputType) != null;\r\n },\r\n\r\n addEventGroupAttribute: function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter) {\r\n return this.addEventGroupAttributeEx(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter) != null;\r\n },\r\n\r\n addFileAttributeEx: function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addAttribute(\"file\", value, attributeValue, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addSlideAttributeEx: function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, filterEl) {\r\n return this.addAttribute(\"slide\", value, attributeValue, conjunction, operator, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addGroupAttributeEx: function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addAttribute(\"group\", value, attributeValue, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addEventGroupAttributeEx: function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, filterEl) {\r\n return this.addAttribute(\"eventGroup\", value, attributeValue, conjunction, operator, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addAttribute: function(type, value, attributeValue, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addNode(type + \"Attribute\", value, \"name\", attributeValue, conjunction, operator, null, null, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addCategorizedFileAttribute: function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, outputType) {\r\n return this.addCategorizedFileAttributeEx(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, null, outputType) != null;\r\n },\r\n\r\n addCategorizedSlideAttribute: function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter) {\r\n return this.addCategorizedSlideAttributeEx(catId, value, name, conjunction, operator, filterConjunction, createNewFilter) != null;\r\n },\r\n\r\n addCategorizedGroupAttribute: function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, outputType) {\r\n return this.addCategorizedGroupAttributeEx(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, null, outputType) != null;\r\n },\r\n\r\n addCategorizedEventGroupAttribute: function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter) {\r\n return this.addCategorizedEventGroupAttributeEx(catId, value, name, conjunction, operator, filterConjunction, createNewFilter) != null;\r\n },\r\n\r\n addCategorizedFileAttributeEx: function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addCategorizedAttribute(\"file\", catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addCategorizedSlideAttributeEx: function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl) {\r\n return this.addCategorizedAttribute(\"slide\", catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addCategorizedGroupAttributeEx: function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType) {\r\n return this.addCategorizedAttribute(\"group\", catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addCategorizedEventGroupAttributeEx: function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl) {\r\n return this.addCategorizedAttribute(\"eventGroup\", catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl);\r\n },\r\n\r\n addCategorizedAttribute: function(type, catId, value, name, conjunction, operator, filterConjunction, createNewFilter, filterEl, outputType) {\r\n var attributes = [\"catId\", \"includeChildren\", \"value\", \"name\"],\r\n values = [catId, Librarian.search.includeCategorizedMetaChildren, value, name];\r\n\r\n return this.addNode(type + \"CategorizedAttribute\", null, attributes, values, conjunction, operator, null, null, filterConjunction, createNewFilter, filterEl, outputType);\r\n },\r\n\r\n addContent: function(eventId, contactId, contactType, filterConjunction) {\r\n var filterEls = this.xmlDoc.getElementsByTagName(\"filter\");\r\n // If there are no filters, add \"null\" to the list so a new one gets created automatically\r\n if (filterEls.length == 0)\r\n filterEls = [null];\r\n\r\n for (var i = 0; i < filterEls.length; i++) {\r\n var filterEl = filterEls[i];\r\n if (this.addNode(\"content\", null, \"eventId\", eventId, null, null, [\"contactId\", \"contactType\"], [contactId, contactType], filterConjunction, false, filterEl) == null)\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n addParentNode: function(type, conjunction, attribute, attributeValue, parentAttribute, parentAttributeValue, filterConjunction, createNewFilter, filterEl, outputType) {\r\n // Get the plural of the type\r\n var plural;\r\n\r\n // Use the library, if possible\r\n if (typeof owl != \"undefined\")\r\n plural = owl.pluralize(type);\r\n // If the library doesn't exist, do it manually\r\n else {\r\n plural = type + 's';\r\n if (type.charAt(type.length - 1) == 'y')\r\n plural = type.substring(0, type.length - 1) + \"ies\";\r\n }\r\n\r\n // If we're not given a filter, get the filter element for the given conjuction, or the first filter if there was none\r\n if (!filterEl)\r\n filterEl = this.getFilterElement(filterConjunction, type, attribute, attributeValue, outputType);\r\n\r\n // If we're supposed to be creating a new filter, clone the one we found\r\n if (createNewFilter) {\r\n filterEl = filterEl.cloneNode(true);\r\n\r\n // Set the conjunction just in case\r\n if (filterConjunction)\r\n filterEl.setAttribute(\"conjunction\", filterConjunction);\r\n\r\n // Remove all non-category types\r\n for (var i = 0; i < filterEl.childNodes.length; i++) {\r\n var nodeEl = filterEl.childNodes[i];\r\n\r\n if (nodeEl.nodeName != \"categories\") {\r\n i--;\r\n nodeEl.parentNode.removeChild(nodeEl);\r\n }\r\n\r\n nodeEl = null;\r\n }\r\n\r\n // And add the clone to the filters list\r\n this.xmlDoc.getElementsByTagName(\"filters\")[0].appendChild(filterEl);\r\n }\r\n\r\n var parentEl = this.xmlDoc.createElement(plural);\r\n\r\n // If no conjunction was passed, use the Library's default\r\n if (!conjunction)\r\n conjunction = Librarian.search.defaultConjunction;\r\n\r\n parentEl.setAttribute(\"conjunction\", conjunction);\r\n this.setNodeAttributes(parentEl, parentAttribute, parentAttributeValue);\r\n\r\n filterEl.setAttribute(\"used\", \"true\");\r\n filterEl.appendChild(parentEl);\r\n return { parent: parentEl, filter: filterEl };\r\n },\r\n\r\n addNode: function(type, value, attribute, attributeValue, conjunction, operator, parentAttribute, parentAttributeValue, filterConjunction, createNewFilter, filterEl, outputType) {\r\n if ((typeof createNewFilter == \"undefined\") || (createNewFilter == null))\r\n createNewFilter = false;\r\n\r\n var nodeEl = this.xmlDoc.createElement(type);\r\n if (value) {\r\n var match = value.match(/\"/g);\r\n\r\n // Find an odd number of \"s in a search query\r\n // EX: \"global\" \"market\r\n if (match && (match.length % 2 != 0)) {\r\n Librarian.Utils.error(Librarian.Lang.getString(\"search_unmatchedquote\"));\r\n return null;\r\n }\r\n\r\n nodeEl.appendChild(this.xmlDoc.createTextNode(value));\r\n\r\n // If there is a blank value given, we are probably searching for \"All\"\r\n // However, we do not want to override an operator if there already is one\r\n if ((nodeEl.getAttribute(\"operator\") == null) && (value.length <= 0))\r\n nodeEl.setAttribute(\"operator\", \"NotEquals\");\r\n }\r\n\r\n // Set the operator on this node\r\n if (operator && (operator.trim().length > 0))\r\n nodeEl.setAttribute(\"operator\", operator.trim());\r\n\r\n this.setNodeAttributes(nodeEl, attribute, attributeValue);\r\n\r\n // If we're not given a filter, get the filter element for the given conjuction, or the first filter if there was none\r\n if (!filterEl)\r\n filterEl = this.getFilterElement(filterConjunction, type, attribute, attributeValue, outputType);\r\n\r\n // Set this filter as \"used\" so that it's not deleted before sending\r\n filterEl.setAttribute(\"used\", \"true\");\r\n\r\n // Get the plural of the type\r\n var plural;\r\n\r\n // Use the library, if possible\r\n if (typeof owl != \"undefined\")\r\n plural = owl.pluralize(type);\r\n // If the library doesn't exist, do it manually\r\n else {\r\n plural = type + 's';\r\n if (type.charAt(type.length - 1) == 'y')\r\n plural = type.substring(0, type.length - 1) + \"ies\";\r\n }\r\n\r\n // Get the parent node\r\n var parentEl = filterEl.getElementsByTagName(plural)[0];\r\n\r\n // If this parent node doesn't exist already, create it\r\n if ((parentEl == null) || createNewFilter) {\r\n var result = this.addParentNode(type, conjunction, attribute, attributeValue, parentAttribute, parentAttributeValue, filterConjunction, createNewFilter, filterEl);\r\n parentEl = result.parent;\r\n filterEl = result.filter;\r\n }\r\n else {\r\n // If no conjunction was passed, use the Library's default\r\n if (!conjunction)\r\n conjunction = Librarian.search.defaultConjunction;\r\n\r\n parentEl.setAttribute(\"conjunction\", conjunction);\r\n }\r\n\r\n // Then add the node to it\r\n parentEl.appendChild(nodeEl);\r\n\r\n nodeEl = null;\r\n parentEl = null;\r\n\r\n return filterEl;\r\n },\r\n\r\n setNodeAttributes: function(nodeEl, attribute, attributeValue) {\r\n // If we are given an attribute and a value for it, we need to add it\r\n if (attribute && (typeof attributeValue != \"undefined\") && (attributeValue != null)) {\r\n // If they are both arrays, make sure to add each pair individually\r\n if ((typeOf(attribute) == \"array\") && (typeOf(attributeValue) == \"array\")) {\r\n for (var i = 0; (i < attribute.length) && (i < attributeValue.length) ; i++) {\r\n if ((typeof attribute[i] == \"undefined\") || (attribute[i] == null) ||\r\n (typeof attributeValue[i] == \"undefined\") || (attributeValue[i] == null))\r\n continue;\r\n\r\n // Make sure the value is a string\r\n attributeValue[i] = attributeValue[i] + '';\r\n\r\n // Don't set empty attributes or values\r\n if ((attribute[i].length > 0) && (attributeValue[i].length > 0))\r\n nodeEl.setAttribute(attribute[i], attributeValue[i]);\r\n }\r\n }\r\n else if (attributeValue.toString().length > 0)\r\n nodeEl.setAttribute(attribute, attributeValue);\r\n }\r\n },\r\n\r\n getChildElementByType: function(type, operator) {\r\n // Get the plural of the type\r\n var plural;\r\n\r\n // Use the library, if possible\r\n if (typeof owl != \"undefined\")\r\n plural = owl.pluralize(type);\r\n // If the library doesn't exist, do it manually\r\n else {\r\n plural = type + 's';\r\n if (type.charAt(type.length - 1) == 'y')\r\n plural = type.substring(0, type.length - 1) + \"ies\";\r\n }\r\n\r\n // Get the filter element for the given conjuction, or the first filter if there was none\r\n var filterEl = this.getFilterElement();\r\n // Get the parent node\r\n var parentEl = filterEl.getElementsByTagName(plural)[0];\r\n\r\n filterEl = null;\r\n\r\n return this.getChildElement(parentEl, operator);\r\n },\r\n\r\n getChildElement: function(parentEl, operator, attribute, attributeValue) {\r\n if (!parentEl || !parentEl.childNodes || (parentEl.childNodes.length == 0))\r\n return null;\r\n\r\n for (var i = 0; i < parentEl.childNodes.length; i++) {\r\n if (parentEl.childNodes[i].getAttribute(\"operator\") == operator) {\r\n // Only return this item if we're not looking for an attribute or the attributes match\r\n if (!attribute || !attributeValue || (parentEl.childNodes[i].getAttribute(attribute) == attributeValue))\r\n return parentEl.childNodes[i];\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n getFilterElement: function(filterConjunction, type, attribute, attributeValue, outputType) {\r\n var filterEls = this.xmlDoc.getElementsByTagName(\"filter\");\r\n\r\n // If there are no filters, create one\r\n if (filterEls.length == 0) {\r\n var filterEl = this.xmlDoc.createElement(\"filter\");\r\n if ((typeof filterConjunction == \"string\") && (filterConjunction.length > 0))\r\n filterEl.setAttribute(\"conjunction\", filterConjunction);\r\n\r\n if (outputType != null)\r\n filterEl.setAttribute(\"outputType\", outputType);\r\n\r\n this.xmlDoc.getElementsByTagName(\"filters\")[0].appendChild(filterEl);\r\n\r\n return filterEl;\r\n }\r\n\r\n // If this is an attribute...\r\n if (type && attribute && attributeValue && type.endsWith(\"Attribute\") && !type.endsWith(\"CategorizedAttribute\")) {\r\n // Find the filter with the matching attribute value\r\n for (var i = 0; i < filterEls.length; i++) {\r\n if ((outputType == null || (filterEls[i].getAttribute(\"outputType\") == outputType.toString()))) {\r\n var nodeEl = filterEls[i].selectSingleNode(\".//\" + type + \"[@\" + attribute + \"='\" + attributeValue + \"']\");\r\n if (nodeEl)\r\n return filterEls[i];\r\n }\r\n }\r\n }\r\n\r\n if ((typeof filterConjunction == \"undefined\") || (filterConjunction == null))\r\n return filterEls[0];\r\n\r\n // Find the filter with the matching conjuction\r\n // Default to the first filter unless we find one that already has one of these types in it\r\n // Also, go through this backawards so the newest filters are preferred\r\n var filterIndex = 0;\r\n for (var i = filterEls.length; i--; ) {\r\n if (filterEls[i].getAttribute(\"conjunction\") == filterConjunction &&\r\n (outputType == null || (filterEls[i].getAttribute(\"outputType\") == outputType.toString())))\r\n {\r\n filterIndex = i;\r\n\r\n if (type && Librarian.Utils.doesXMLHaveNode(filterEls[i], type))\r\n return filterEls[i];\r\n }\r\n }\r\n\r\n return filterEls[filterIndex];\r\n },\r\n\r\n setFiltersConjunction: function(conjunction) {\r\n var filtersEl = this.xmlDoc.getElementsByTagName(\"filters\")[0];\r\n if (filtersEl)\r\n filtersEl.setAttribute(\"conjunction\", conjunction);\r\n },\r\n\r\n deleteEmptyFilters: function() {\r\n var filterEls = this.xmlDoc.getElementsByTagName(\"filter\");\r\n for (var i = filterEls.length; i--;) {\r\n var filterEl = filterEls[i];\r\n if (!filterEl.childNodes || (filterEl.childNodes.length == 0) || ((filterEl.childNodes.length == 1) && (filterEl.childNodes[0].nodeName == \"#text\")))\r\n filterEl.parentNode.removeChild(filterEl);\r\n }\r\n },\r\n\r\n deleteEmptyNodes: function() {\r\n // Recursively delete all empty nodes\r\n this.recursiveDeleteEmpty(this.xmlDoc);\r\n },\r\n\r\n recursiveDeleteEmpty: function(nodeEl) {\r\n if (!nodeEl)\r\n return;\r\n\r\n // Check every child, if it has any\r\n if (nodeEl.childNodes) {\r\n for (var i = nodeEl.childNodes.length; i--;)\r\n this.recursiveDeleteEmpty(nodeEl.childNodes[i]);\r\n }\r\n\r\n // If this node has no children and no attributes, it's useless and should be removed\r\n // Text nodes are the exception\r\n if ((!nodeEl.childNodes || (nodeEl.childNodes.length == 0)) && (!nodeEl.attributes || (nodeEl.attributes.length == 0)) && (nodeEl.nodeName != \"#text\"))\r\n nodeEl.parentNode.removeChild(nodeEl);\r\n\r\n nodeEl = null;\r\n },\r\n\r\n addMinModifiedDate: function(value, filterConjunction, filterEl) {\r\n return this.addModifiedDate(\"min\", value, filterConjunction, filterEl);\r\n },\r\n\r\n addMaxModifiedDate: function(value, filterConjunction, filterEl) {\r\n return this.addModifiedDate(\"max\", value, filterConjunction, filterEl);\r\n },\r\n\r\n addModifiedDate: function(attribute, value, filterConjunction, filterEl) {\r\n return this.addDate(attribute, \"Modified\", value, filterConjunction, filterEl);\r\n },\r\n\r\n addMinImportDate: function(value, filterConjunction, filterEl) {\r\n return this.addImportDate(\"min\", value, filterConjunction, filterEl);\r\n },\r\n\r\n addMaxImportDate: function(value, filterConjunction, filterEl) {\r\n return this.addImportDate(\"max\", value, filterConjunction, filterEl);\r\n },\r\n\r\n addImportDate: function(attribute, value, filterConjunction, filterEl) {\r\n return this.addDate(attribute, \"Imported\", value, filterConjunction, filterEl);\r\n },\r\n\r\n addDate: function(attribute, type, value, filterConjunction, filterEl) {\r\n var append = false,\r\n dateEl = this.xmlDoc.getElementsByTagName(\"date\" + type)[0];\r\n\r\n var outputType = filterEl ? parseInt(filterEl.getAttribute(\"outputType\")) : null;\r\n if (outputType != null) {\r\n if ([Librarian.Search.outputTypes.FILES, Librarian.Search.outputTypes.GROUPS].contains(outputType)) {\r\n dateEl = filterEl.getElementsByTagName(\"date\" + type)[0];\r\n }\r\n }\r\n\r\n if (dateEl == null) {\r\n append = true;\r\n dateEl = this.xmlDoc.createElement(\"date\" + type);\r\n }\r\n\r\n dateEl.setAttribute(attribute, value);\r\n\r\n if (append) {\r\n filterEl = filterEl || this.getFilterElement(filterConjunction, null, null, null, outputType);\r\n if (filterEl) {\r\n filterEl.setAttribute(\"used\", \"true\");\r\n filterEl.appendChild(dateEl);\r\n }\r\n\r\n filterEl = null;\r\n }\r\n\r\n dateEl = null;\r\n\r\n return true;\r\n },\r\n\r\n addOptions: function(flags, type, filterConjunction, outputType) {\r\n var append = false,\r\n optionsEl = this.xmlDoc.getElementsByTagName(\"options\")[0];\r\n\r\n if (optionsEl == null) {\r\n append = true;\r\n optionsEl = this.xmlDoc.createElement(\"options\");\r\n }\r\n\r\n if (flags) {\r\n var flagsEl = this.xmlDoc.createElement(\"searchFlags\");\r\n flagsEl.appendChild(this.xmlDoc.createTextNode(flags));\r\n\r\n optionsEl.appendChild(flagsEl);\r\n\r\n flagsEl = null;\r\n }\r\n\r\n if (type) {\r\n var typeEl = this.xmlDoc.createElement(\"searchType\");\r\n typeEl.appendChild(this.xmlDoc.createTextNode(type));\r\n\r\n optionsEl.appendChild(typeEl);\r\n\r\n typeEl = null;\r\n }\r\n\r\n // Only add this to the XML if there isn't one there already\r\n if (append) {\r\n var filterEl = this.getFilterElement(filterConjunction, null, null, null, outputType);\r\n if (filterEl)\r\n filterEl.appendChild(optionsEl);\r\n\r\n filterEl = null;\r\n }\r\n\r\n optionsEl = null;\r\n\r\n return true;\r\n },\r\n\r\n addResults: function(start, max, type, orderBy, order, viewName, returnType, includeDrafts) {\r\n var append = false,\r\n resultsEl = this.xmlDoc.getElementsByTagName(\"results\")[0];\r\n\r\n if (resultsEl == null) {\r\n append = true;\r\n resultsEl = this.xmlDoc.createElement(\"results\");\r\n }\r\n\r\n if (start)\r\n resultsEl.setAttribute(\"startRow\", start);\r\n\r\n if (max && !Librarian.listView.enabled)\r\n resultsEl.setAttribute(\"maxRows\", max);\r\n\r\n if ((typeof type != \"undefined\") && (type != null)) {\r\n resultsEl.setAttribute(\"outputType\", type);\r\n\r\n if (type == Librarian.Search.outputTypes.GROUPS)\r\n this.options.catType = Librarian.catType.globalFavorite;\r\n else if (type == Librarian.Search.outputTypes.EVENTS || type == Librarian.Search.outputTypes.EVENTGROUPS)\r\n this.options.catType = Librarian.catType.event;\r\n else\r\n this.options.catType = Librarian.catType.file;\r\n }\r\n\r\n if (orderBy) {\r\n var appendOrder = false,\r\n appendOrders = false,\r\n // Get the order list element\r\n ordersEl = resultsEl.getElementsByTagName(\"orderByColumns\")[0];\r\n // If it doesn't exist, create a new one\r\n if (ordersEl == null) {\r\n appendOrders = true;\r\n ordersEl = this.xmlDoc.createElement(\"orderByColumns\");\r\n }\r\n\r\n // Find the first order element\r\n var orderEl = ordersEl.getElementsByTagName(\"orderByColumn\")[0];\r\n // If the element doesn't exist, create a new one\r\n if (orderEl == null) {\r\n appendOrder = true;\r\n orderEl = this.xmlDoc.createElement(\"orderByColumn\");\r\n }\r\n else if (!Librarian.search.overrideDefaultSorting) {\r\n var newOrderEl = this.xmlDoc.createElement(\"orderByColumn\");\r\n ordersEl.insertBefore(newOrderEl, orderEl);\r\n orderEl = null;\r\n\r\n orderEl = newOrderEl;\r\n }\r\n\r\n orderEl.setAttribute(\"name\", orderBy);\r\n if (order) {\r\n order = order.toCapitalCase();\r\n orderEl.setAttribute(\"order\", order);\r\n }\r\n\r\n if (appendOrder)\r\n ordersEl.appendChild(orderEl);\r\n if (appendOrders)\r\n resultsEl.appendChild(ordersEl);\r\n\r\n orderEl = null;\r\n ordersEl = null;\r\n }\r\n\r\n if (viewName)\r\n resultsEl.setAttribute(\"viewName\", viewName);\r\n // If there is a view name but we're given \"false\" explicitly, remove it\r\n else if ((viewName === false) && resultsEl.getAttribute(\"viewName\"))\r\n resultsEl.setAttribute(\"viewName\", '');\r\n\r\n // Save this for client-side use\r\n if ((typeof returnType == \"string\") && (returnType.length > 0))\r\n resultsEl.setAttribute(\"returnType\", returnType);\r\n\r\n if (includeDrafts != null)\r\n resultsEl.setAttribute(\"includeDrafts\", includeDrafts);\r\n\r\n // Only add this to the XML if there isn't one there already\r\n if (append)\r\n this.xmlDoc.getElementsByTagName(\"search\")[0].appendChild(resultsEl);\r\n\r\n resultsEl = null;\r\n\r\n return true;\r\n },\r\n\r\n setSearchSource: function(searchSource) {\r\n var searchEl = this.xmlDoc.getElementsByTagName(\"search\")[0];\r\n if (searchEl)\r\n searchEl.setAttribute(\"source\", searchSource);\r\n },\r\n\r\n getOutputType: function() {\r\n return this.getResultAttribute(\"outputType\");\r\n },\r\n\r\n getReturnType: function() {\r\n return this.getResultAttribute(\"returnType\");\r\n },\r\n\r\n getResultAttribute: function(attribName) {\r\n if (!this.xmlDoc)\r\n return '';\r\n\r\n var resultEl = this.xmlDoc.getElementsByTagName(\"results\")[0];\r\n if (resultEl == null)\r\n return '';\r\n return resultEl.getAttribute(attribName);\r\n },\r\n\r\n getSearchTerms: function() {\r\n if (!this.xmlDoc)\r\n return '';\r\n\r\n var terms = '',\r\n termEls = this.xmlDoc.selectNodes(\"//fileTerm | //textTerm | //groupTerm | //eventGroupTerm | //requestTerm\");\r\n for (var k = 0; k < termEls.length; k++) {\r\n var text = Librarian.Utils.getXMLNodeText(termEls[k]);\r\n\r\n if ((typeof text == \"undefined\") || (text == null) || (text.length == 0))\r\n continue;\r\n\r\n text = text.replaceAll(Librarian.search.searchWildCard, '')\r\n .replaceAll(\"\\\"\", '');\r\n terms += text.split(\" OR \").join(';')\r\n .split(\" AND \").join(';') + ';';\r\n }\r\n\r\n return terms.trim();\r\n },\r\n\r\n getTextTerms: function() {\r\n if (!this.xmlDoc)\r\n return '';\r\n\r\n var terms = '',\r\n textTerms = this.xmlDoc.getElementsByTagName(\"textTerm\");\r\n for (var i = 0; i < textTerms.length; i++) {\r\n var text = Librarian.Utils.getXMLNodeText(textTerms[i]);\r\n\r\n if ((typeof text == \"undefined\") || (text == null) || (text.length == 0))\r\n continue;\r\n\r\n text = text.replaceAll(Librarian.search.searchWildCard, '')\r\n .replaceAll(\"\\\"\", '');\r\n terms += text.split(\" OR \").join(';')\r\n .split(\" AND \").join(';') + ';';\r\n }\r\n\r\n return terms.trim();\r\n },\r\n\r\n getCurrentPage: function() {\r\n if (!this.xmlDoc)\r\n return null;\r\n\r\n var resultEl = this.xmlDoc.getElementsByTagName(\"results\")[0];\r\n if (resultEl == null)\r\n return null;\r\n\r\n var startRow = resultEl.getAttribute(\"startRow\");\r\n if (startRow == null)\r\n startRow = 1;\r\n else\r\n startRow = startRow.trim().toInt();\r\n\r\n var maxRows = resultEl.getAttribute(\"maxRows\");\r\n if (maxRows == null)\r\n maxRows = Librarian.search.maxResults;\r\n else\r\n maxRows = maxRows.trim().toInt();\r\n\r\n return Math.ceil(startRow / maxRows);\r\n }\r\n});\r\n\r\n// Static variables and methods\r\nLibrarian.Search.extend({\r\n outputTypes: {\r\n ALLCONTENT: -1,\r\n FILES: 0,\r\n SLIDES: 1,\r\n GROUPS: 2,\r\n EVENTS: 3,\r\n EVENTGROUPS: 4,\r\n ARTICLES: 5,\r\n MYFAVORITE: 6,\r\n CATEGORIES: 7\r\n },\r\n searchSource: {\r\n undefined: 0,\r\n quick: 1,\r\n advanced: 2,\r\n application: 3,\r\n administrator: 4\r\n },\r\n fromSearch: false,\r\n\r\n openSearch: function() {\r\n if (!Librarian.searchWindow || !Librarian.searchWindow.isMinimized) {\r\n Librarian.searchWindow = new Librarian.Search.Window();\r\n Librarian.searchWindow.show();\r\n }\r\n else if (Librarian.searchWindow.isMinimized)\r\n Librarian.searchWindow.restore();\r\n },\r\n\r\n searchAgain: function() {\r\n if (!Librarian.searchWindow || !Librarian.searchWindow.isMinimized)\r\n Librarian.Search.openSearch();\r\n else if (Librarian.searchWindow.isMinimized)\r\n Librarian.searchWindow.restore();\r\n },\r\n\r\n prepValue: function(value, appendWildCard, conjunction) {\r\n // CLN-2783 - Strip all v-tabs because they can't be put in XML\r\n value = value.replaceAll(\"\\u000b\", '');\r\n\r\n // If this is a full-text search and the value already has a conjunction in it, don't process it at all\r\n if (Librarian.search.fullText && (value.toUpperCase().contains(\" AND \") || value.toUpperCase().contains(\" OR \")))\r\n return value;\r\n\r\n // Strip %, <, >, [, ], *\r\n value = value.replace(/(\\%|<|>|\\[|\\]|\\*)/g, '');\r\n\r\n // If we weren't given a conjunction, use the default\r\n if ((typeof conjunction == \"undefined\") || (conjunction == null))\r\n conjunction = Librarian.search.defaultConjunction;\r\n\r\n // '.'s are not valid in search values, so remove them all\r\n value = value.replaceAll('.', ' ');\r\n // Get an array of values, split on the quotes\r\n // Use safeSplit so the quotes aren't destroyed\r\n var quotedValues = value.safeSplit('\"'),\r\n values = [],\r\n hadQuotes = false,\r\n appendValue = '';\r\n\r\n if ((appendWildCard !== false) && Librarian.search.appendWildcardOnSplit)\r\n appendValue = Librarian.search.searchWildCard;\r\n\r\n if (!Librarian.search.fullText)\r\n conjunction = '';\r\n\r\n // Go through each word\r\n for (var i = 0; i < quotedValues.length; i++) {\r\n var quotedValue = quotedValues[i].trim();\r\n // If its trimmed length is 0, skip it\r\n if (quotedValue.length == 0)\r\n continue;\r\n\r\n // If this word isn't encapsulated in quotes\r\n if (!quotedValue.startsWith('\"') && !quotedValue.endsWith('\"')) {\r\n // Split on ' ' '-' '–' '—' '_'\r\n var splitValues = quotedValue.match(/[^\\s\\-–—_]+/g);\r\n\r\n // If there are spaces\r\n if (splitValues.length > 1) {\r\n // Loop through each word in the spaces list\r\n // and add them to the list of values\r\n for (var j = 0; j < splitValues.length; j++) {\r\n var splitValue = splitValues[j].replaceAll('\"', '').trim();\r\n\r\n // Don't keep noise words if we are doing a full-text search\r\n if (Librarian.search.fullText && Librarian.search.noiseWords.contains(splitValue.toLowerCase())) {\r\n splitValues.remove(j);\r\n j--;\r\n }\r\n else\r\n values.push(splitValue + appendValue);\r\n }\r\n\r\n // Add the concatenated word to the list as well, but only if we're doing OR\r\n // This concatenated value would kill AND searches\r\n // Make sure there is still more than one value left after we cleaned out the noise words\r\n if ((conjunction == \"OR\") && (splitValues.length > 1))\r\n values.push(splitValues.join(''));\r\n continue;\r\n }\r\n // Otherwise, make sure this word isn't a noise word if we're doing a full-text search\r\n else if (Librarian.search.fullText && Librarian.search.noiseWords.contains(quotedValue.toLowerCase()))\r\n continue;\r\n }\r\n else\r\n hadQuotes = true;\r\n\r\n // Otherwise just add the word to the values list directly,\r\n // making sure to replace all quotes with nothing so we don't double up\r\n values.push(quotedValue.replaceAll('\"', '').trim() + appendValue);\r\n }\r\n\r\n if (!Librarian.search.fullText)\r\n hadQuotes = false;\r\n\r\n // If there is only one value, return it\r\n if (values.length == 1) {\r\n if (hadQuotes)\r\n value = '\"' + values[0] + '\"';\r\n else\r\n value = values[0];\r\n }\r\n // If there are multiple values, encapsulate the whole thing in quotes\r\n // and join each word with \" [Conjunction] \"\r\n else if (values.length > 1) {\r\n if (Librarian.search.fullText)\r\n value = '\"' + values.join('\" ' + conjunction + ' \"') + '\"';\r\n else {\r\n if (appendValue.length == 0)\r\n value = values.join(' ');\r\n else\r\n value = values.join('');\r\n }\r\n }\r\n\r\n // Return the value\r\n // NOTE: If there are no values in the values array,\r\n // this is just the same word that was passed in\r\n return value;\r\n },\r\n\r\n extractAndPrepCategory: function(search, value) {\r\n // Shortcut way to make sure numbers are treated as strings\r\n value = '' + value;\r\n var catid = value;\r\n\r\n // If the value has a 'S' prepended to it,\r\n // that means it should be displaying slide output\r\n var index = value.indexOf('S');\r\n if (index >= 0) {\r\n search.addResults(null, null, Librarian.Search.outputTypes.SLIDES);\r\n catid = value.substring(0, index) + value.substring(index + 1, value.length);\r\n }\r\n\r\n // If the value has a 'G' prepended to it,\r\n // that means it should be displaying group output\r\n index = value.indexOf('G');\r\n if (index >= 0) {\r\n search.addResults(null, null, Librarian.Search.outputTypes.GROUPS);\r\n catid = value.substring(0, index) + value.substring(index + 1, value.length);\r\n }\r\n\r\n return catid;\r\n },\r\n\r\n prepSearchNavigation: function(maxItems, numItems, lockNavigation) {\r\n // If this is from search, reset the boolean but don't do anything else\r\n if (Librarian.Search.fromSearch) {\r\n Librarian.Search.fromSearch = false;\r\n return;\r\n }\r\n\r\n if ((typeof lockNavigation == \"undefined\") || (lockNavigation == null))\r\n lockNavigation = false;\r\n\r\n if (lockNavigation)\r\n return;\r\n\r\n var pages = Math.ceil(numItems / maxItems);\r\n // If we have more than 1 page\r\n if (pages > 1) {\r\n Librarian.Search.showSearchNavigation(true);\r\n\r\n // Fill in the page count also\r\n var itemEl = $(\"navPageCountTop\");\r\n if (itemEl)\r\n itemEl.set(\"text\", pages);\r\n\r\n itemEl = $(\"navPageCountBottom\");\r\n if (itemEl)\r\n itemEl.set(\"text\", pages);\r\n\r\n Librarian.Search.updateSearchButtons(pages);\r\n }\r\n // Hide the navigation buttons by default\r\n else\r\n Librarian.Search.showSearchNavigation(false);\r\n },\r\n\r\n showSearchNavigation: function(show, reset) {\r\n var display = show ? \"block\" : \"none\";\r\n\r\n // Display the navigation areas\r\n // But only if they aren't forced off\r\n var itemEl = $(\"navigationTop\");\r\n if (itemEl) {\r\n if (itemEl.style.forceDisplay == null)\r\n itemEl.style.display = display;\r\n else\r\n itemEl.style.display = itemEl.style.forceDisplay;\r\n }\r\n\r\n itemEl = $(\"navigationBottom\");\r\n if (itemEl) {\r\n if (itemEl.style.forceDisplay == null)\r\n itemEl.style.display = display;\r\n else\r\n itemEl.style.display = itemEl.style.forceDisplay;\r\n }\r\n\r\n // Reset the current counts if we're told to\r\n if (reset) {\r\n Librarian.Utils.setElementValue($(\"navCurPageTop\"), 1);\r\n Librarian.Utils.setElementValue($(\"navCurPageBottom\"), 1);\r\n }\r\n },\r\n\r\n updateSearchButtons: function(pages) {\r\n var itemEl = $(\"navCurPageTop\");\r\n if (itemEl) {\r\n var disablePrev = true,\r\n disableNext = false;\r\n\r\n if (itemEl.value == pages)\r\n disableNext = true;\r\n\r\n if (itemEl.value != 1)\r\n disablePrev = false;\r\n\r\n itemEl = $(\"navFirstPageButtonTop\");\r\n var wrapperEl = $(\"navFirstPageTop\");\r\n if (itemEl && wrapperEl)\r\n Librarian.Utils.setButtonState(itemEl, wrapperEl, disablePrev);\r\n\r\n itemEl = $(\"navFirstPageButtonBottom\");\r\n wrapperEl = $(\"navFirstPageBottom\");\r\n if (itemEl && wrapperEl)\r\n Librarian.Utils.setButtonState(itemEl, wrapperEl, disablePrev);\r\n\r\n itemEl = $(\"navPrevPageButtonTop\");\r\n wrapperEl = $(\"navPrevPageTop\");\r\n if (itemEl && wrapperEl)\r\n Librarian.Utils.setButtonState(itemEl, wrapperEl, disablePrev);\r\n\r\n itemEl = $(\"navPrevPageButtonBottom\");\r\n wrapperEl = $(\"navPrevPageBottom\");\r\n if (itemEl && wrapperEl)\r\n Librarian.Utils.setButtonState(itemEl, wrapperEl, disablePrev);\r\n\r\n itemEl = $(\"navNextPageButtonTop\");\r\n wrapperEl = $(\"navNextPageTop\");\r\n if (itemEl && wrapperEl)\r\n Librarian.Utils.setButtonState(itemEl, wrapperEl, disableNext);\r\n\r\n itemEl = $(\"navNextPageButtonBottom\");\r\n wrapperEl = $(\"navNextPageBottom\");\r\n if (itemEl && wrapperEl)\r\n Librarian.Utils.setButtonState(itemEl, wrapperEl, disableNext);\r\n\r\n itemEl = $(\"navLastPageButtonTop\");\r\n wrapperEl = $(\"navLastPageTop\");\r\n if (itemEl && wrapperEl)\r\n Librarian.Utils.setButtonState(itemEl, wrapperEl, disableNext);\r\n\r\n itemEl = $(\"navLastPageButtonBottom\");\r\n wrapperEl = $(\"navLastPageBottom\");\r\n if (itemEl && wrapperEl)\r\n Librarian.Utils.setButtonState(itemEl, wrapperEl, disableNext);\r\n }\r\n },\r\n\r\n navPage: function(page, pages, perPage, resetTileList) {\r\n if ((Librarian.lastSearch == undefined) || (Librarian.lastSearch == null))\r\n return;\r\n if ((typeof perPage == \"undefined\") || (perPage == null))\r\n perPage = Librarian.search.maxResults;\r\n if ((typeof resetTileList == \"undefined\") || (resetTileList == null))\r\n resetTileList = true;\r\n\r\n Librarian.Search.updateSearchButtons(pages);\r\n\r\n if (resetTileList && tileList && tileList.wrapper) {\r\n tileList.reset();\r\n tileList.wrapper.appendChild(document.createTextNode(Librarian.Lang.getString(\"searching\")));\r\n }\r\n\r\n if (!Librarian.listView.enabled) {\r\n // Set Librarian.Search to true so we don't update the page counts and stuff like\r\n // that when we are just switching between search pages\r\n Librarian.Search.fromSearch = true;\r\n }\r\n\r\n // Clean the last search\r\n Librarian.lastSearch.cancel();\r\n Librarian.lastSearch.clean();\r\n\r\n // For page 2, (2 - 1) * 24 + 1 = 25, the correct starting location\r\n Librarian.lastSearch.addResults(((page - 1) * perPage) + 1, perPage);\r\n Librarian.lastSearch.search();\r\n\r\n var mainPanelEl = $(\"mainPanel\");\r\n if (mainPanelEl)\r\n mainPanelEl.scrollTo(0, 0);\r\n else\r\n window.scrollTo(0, 0);\r\n },\r\n\r\n sortSearch: function(pages, sortOn, sortBy, resetTileList) {\r\n if ((Librarian.lastSearch == undefined) || (Librarian.lastSearch == null))\r\n return;\r\n if ((typeof resetTileList == \"undefined\") || (resetTileList == null))\r\n resetTileList = true;\r\n\r\n Librarian.Search.updateSearchButtons(pages);\r\n\r\n if (resetTileList && tileList && tileList.wrapper) {\r\n tileList.reset();\r\n tileList.wrapper.appendChild(document.createTextNode(Librarian.Lang.getString(\"searching\")));\r\n }\r\n\r\n if (!Librarian.listView.enabled) {\r\n // Set Librarian.Search to true so we don't update the page counts and stuff like\r\n // that when we are just switching between search pages\r\n Librarian.Search.fromSearch = true;\r\n }\r\n\r\n // Clean the last search\r\n Librarian.lastSearch.cancel();\r\n Librarian.lastSearch.clean();\r\n\r\n // Reset to the first page\r\n Librarian.lastSearch.addResults(1, null, null, sortOn, sortBy);\r\n Librarian.lastSearch.search();\r\n\r\n var mainPanelEl = $(\"mainPanel\");\r\n if (mainPanelEl)\r\n mainPanelEl.scrollTo(0, 0);\r\n else\r\n window.scrollTo(0, 0);\r\n },\r\n\r\n navPageSubmit: function(from) {\r\n var page = 0,\r\n pages = 1,\r\n // The opposite element from the one provided\r\n other = \"Top\";\r\n\r\n // If we are given Top, the opposite is bottom.\r\n // Librarian.Search is used to update the other text box to match.\r\n if (from == \"Top\")\r\n other = \"Bottom\";\r\n\r\n var curPageEl = $(\"navCurPage\" + from);\r\n if (curPageEl) {\r\n if (isNaN(curPageEl.value))\r\n return;\r\n\r\n page = parseInt(curPageEl.value);\r\n }\r\n\r\n var pageCountEl = $(\"navPageCountTop\");\r\n if (pageCountEl)\r\n pages = parseInt(pageCountEl.get(\"text\"));\r\n\r\n if ((page > 0) && (page <= pages)) {\r\n curPageEl = $(\"navCurPage\" + other);\r\n if (curPageEl)\r\n curPageEl.value = page;\r\n\r\n Librarian.Search.navPage(page, pages);\r\n }\r\n },\r\n\r\n navPageLocation: function(where) {\r\n var page = 0,\r\n pages = 1,\r\n curPageEl = $(\"navCurPageTop\");\r\n if (curPageEl)\r\n page = parseInt(curPageEl.value);\r\n\r\n var pageCountEl = $(\"navPageCountTop\");\r\n if (pageCountEl)\r\n pages = parseInt(pageCountEl.get(\"text\"));\r\n\r\n if (where == \"first\")\r\n page = 1;\r\n else if (where == \"prev\")\r\n page--;\r\n else if (where == \"next\")\r\n page++;\r\n else if (where == \"last\")\r\n page = pages;\r\n\r\n // Only continue if the page value is valid\r\n if ((page > 0) && (page <= pages)) {\r\n if (curPageEl)\r\n curPageEl.value = page;\r\n\r\n curPageEl = $(\"navCurPageBottom\");\r\n if (curPageEl)\r\n curPageEl.value = page;\r\n\r\n Librarian.Search.navPage(page, pages);\r\n }\r\n }\r\n});\r\n","Librarian.QuickSearch = new Class({\r\n Extends: Librarian.Request.JSON,\r\n Binds: [\"loadComplete\", \"onBeforeSearch\", \"addTerm\", \"setSearchKeywords\", \"setSearchSlideText\", \"addResults\", \"search\"],\r\n\r\n options: {\r\n method: \"POST\",\r\n loadComplete: null, /*(json, text)*/\r\n onFailure: Librarian.Utils.onFailure,\r\n outFormat: \"dgrid\",\r\n catType: Librarian.catType.file,\r\n cancelAll: false\r\n },\r\n\r\n // Data structure to send to the server\r\n defaultSearchOptions: {\r\n terms: {\r\n includeKeywords: false,\r\n includeSlideText: false,\r\n includeDescription: false,\r\n conjunction: null,\r\n operator: null,\r\n items: []\r\n },\r\n contents: {\r\n contactId: -1,\r\n contactType: 0,\r\n items: []\r\n },\r\n resultsOptions: {\r\n startRow: 1,\r\n maxRows: 24,\r\n viewName: null,\r\n outputType: null,\r\n orderByColumns: [{\r\n name: \"fRank\",\r\n order: \"Desc\"\r\n }]\r\n }\r\n },\r\n\r\n searchOptions: null,\r\n\r\n initialize: function(options) {\r\n if ((typeof options == \"undefined\") || (options == null))\r\n options = {};\r\n\r\n this.setOptions(options);\r\n\r\n this.options.onSuccess = this.loadComplete;\r\n this.options.onException = options.onException;\r\n\r\n this.searchOptions = Object.clone(this.defaultSearchOptions);\r\n\r\n this.parent(this.options);\r\n },\r\n\r\n destroy: function() {\r\n this.cancel();\r\n this.clean();\r\n this.searchOptions = Object.clone(this.defaultSearchOptions);\r\n },\r\n\r\n clean: function() {\r\n this.response = null;\r\n\r\n this.xhr = null;\r\n\r\n this.xhr = new Browser.Request();\r\n },\r\n\r\n loadComplete: function(json, text) {\r\n if (typeof this.options.loadComplete == \"function\")\r\n this.options.loadComplete(json, text, this.options.catType, this.options.cancelAll);\r\n },\r\n\r\n onBeforeSearch: function() {\r\n // Should be overwritten on a per-library basis\r\n return true;\r\n },\r\n\r\n search: function() {\r\n if (!this.onBeforeSearch())\r\n return;\r\n\r\n var data = JSON.stringify(this.searchOptions);\r\n if (typeof Base64 != \"undefined\")\r\n data = Base64.encode(data);\r\n\r\n this.options.url = Librarian.path.getSearchUrl(\"qs\") + \"&out=\" + this.options.outFormat + \"&in=cjson\";\r\n this.options.data = data;\r\n this.send();\r\n },\r\n\r\n addTerm: function(term, conjunction, operator) {\r\n if ((typeof conjunction == \"undefined\") || (conjunction == null))\r\n conjunction = Librarian.search.defaultConjunction;\r\n\r\n this.searchOptions.terms.conjunction = conjunction;\r\n\r\n if ((typeof operator != \"undefined\") && (operator != null))\r\n this.searchOptions.terms.operator = operator;\r\n\r\n if (Librarian.search.splitQuicksearchTerms) {\r\n term = term.split(' ');\r\n for (var i = term.length; i--;) {\r\n term[i] = term[i].trim();\r\n if (term[i].length > 0)\r\n this.searchOptions.terms.items.push(term[i]);\r\n }\r\n }\r\n else\r\n this.searchOptions.terms.items.push(term);\r\n\r\n return true;\r\n },\r\n\r\n addResults: function(startRow, maxRows, outputType, orderBy, order, viewName/*, returnType*/) {\r\n if ((typeof startRow == \"number\") && (startRow > 0))\r\n this.searchOptions.resultsOptions.startRow = startRow;\r\n if ((typeof maxRows == \"number\") && (maxRows > 0) && !Librarian.listView.enabled)\r\n this.searchOptions.resultsOptions.maxRows = maxRows;\r\n if (Librarian.listView.enabled)\r\n this.searchOptions.resultsOptions.maxRows = null;\r\n if ((typeof viewName == \"string\") && (viewName.length > 0))\r\n this.searchOptions.resultsOptions.viewName = viewName;\r\n\r\n if ((typeof outputType != \"undefined\") && (outputType != null)) {\r\n this.searchOptions.resultsOptions.outputType = outputType;\r\n\r\n if (outputType == Librarian.Search.outputTypes.GROUPS)\r\n this.options.catType = Librarian.catType.globalFavorite;\r\n else\r\n this.options.catType = Librarian.catType.file;\r\n }\r\n\r\n if (typeof orderBy == \"string\") {\r\n var orderByObj = {\r\n name: orderBy\r\n };\r\n if (typeof order == \"string\")\r\n orderByObj.order = order.toUpperCase();\r\n\r\n this.searchOptions.resultsOptions.orderByColumns.push(orderByObj);\r\n }\r\n\r\n return true;\r\n },\r\n\r\n setSearchKeywords: function(includeKeywords) {\r\n this.searchOptions.terms.includeKeywords = !!includeKeywords;\r\n return true;\r\n },\r\n\r\n setSearchSlideText: function (includeSlideText) {\r\n this.searchOptions.terms.includeSlideText = !!includeSlideText;\r\n return true;\r\n },\r\n\r\n setSearchDescriptions: function(includeDescription) {\r\n this.searchOptions.terms.includeDescription = !!includeDescription;\r\n return true;\r\n },\r\n\r\n addContent: function(eventId, contactId, contactType/*, conjunction*/) {\r\n this.searchOptions.contents.contactId = contactId;\r\n this.searchOptions.contents.contactType = contactType;\r\n this.searchOptions.contents.items.push({\r\n eventId: eventId\r\n });\r\n\r\n return true;\r\n },\r\n\r\n getOutputType: function() {\r\n return this.searchOptions.resultsOptions.outputType;\r\n },\r\n\r\n getCurrentPage: function() {\r\n if (!this.searchOptions)\r\n return null;\r\n\r\n var startRow = this.searchOptions.resultsOptions.startRow;\r\n if (startRow == null)\r\n startRow = 1;\r\n\r\n var maxRows = this.searchOptions.resultsOptions.maxRows;\r\n if (maxRows == null)\r\n maxRows = Librarian.search.maxResults;\r\n\r\n return Math.ceil(startRow / maxRows);\r\n },\r\n\r\n // Compatibility with Advanced Search\r\n hasSearchNode: function(/*node*/) {\r\n return true;\r\n },\r\n\r\n addCategory: function() {\r\n // Not implemented\r\n return true;\r\n },\r\n\r\n deleteEmptyFilters: function() {\r\n // Not implemented\r\n },\r\n\r\n setSearchSource: function() {\r\n // Not implemented\r\n },\r\n\r\n toAdvancedSearch: function() {\r\n // Translate search properties to advanced search\r\n var search = new Librarian.Search();\r\n\r\n search.options.loadComplete = this.options.loadComplete;\r\n\r\n // Add Search Terms\r\n var terms = this.searchOptions.terms.items,\r\n conjunction = this.searchOptions.terms.conjunction,\r\n operator = this.searchOptions.terms.operator,\r\n outputType = this.searchOptions.resultsOptions.outputType,\r\n typeName, itemTypeName;\r\n\r\n switch (outputType) {\r\n case Librarian.Search.outputTypes.GROUPS:\r\n itemTypeName = typeName = \"Group\";\r\n break;\r\n case Librarian.Search.outputTypes.SLIDES:\r\n typeName = \"Slide\";\r\n itemTypeName = \"File\";\r\n break;\r\n default:\r\n itemTypeName = typeName = \"File\";\r\n }\r\n\r\n // Re-join the search terms if they were originally split\r\n if (Librarian.search.splitQuicksearchTerms)\r\n terms = [Librarian.search.splitQuicksearchTerms.join(' ')];\r\n\r\n // Add each term based on the settings this quick search has set\r\n for (var i = 0, length = terms.length; i < length; i++) {\r\n var originalTerm = terms[i],\r\n term = terms[i];\r\n if ((conjunction == \"AND\") || (conjunction == \"OR\"))\r\n term = Librarian.Search.prepValue(term, null, conjunction);\r\n\r\n if (this.searchOptions.terms.includeKeywords)\r\n search[\"add\" + typeName + \"Keyword\"](term, conjunction, operator, null, \"OR\");\r\n\r\n if (this.searchOptions.terms.includeSlideText)\r\n search.addTextTerm(term, conjunction, operator, null, \"OR\");\r\n\r\n // Search the file name using the original term since it isn't Full-Text\r\n search[\"add\" + itemTypeName + \"Term\"](originalTerm, conjunction, operator, 1, \"OR\");\r\n\r\n // If we're searching the description, use the full-text prepared term for that\r\n if (this.searchOptions.terms.includeDescription) {\r\n var flags = 0;\r\n if (outputType == Librarian.Search.outputTypes.GROUPS)\r\n flags &= Librarian.Search.Container.getFlagValue(Librarian.Search.Container.groupTermFlags, \"description\");\r\n else if (outputType == Librarian.Search.outputTypes.FILES)\r\n flags &= Librarian.Search.Container.getFlagValue(Librarian.Search.Container.fileTermFlags, \"description\");\r\n\r\n if (flags > 0)\r\n search[\"add\" + itemTypeName + \"Term\"](term, conjunction, operator, flags, \"OR\");\r\n }\r\n }\r\n\r\n // Add search content for event-based filtering\r\n var contents = this.searchOptions.contents.items,\r\n contactId = this.searchOptions.contents.contactId,\r\n contactType = this.searchOptions.contents.contactType;\r\n for (var i = 0, length = contents.length; i < length; i++)\r\n search.addContents(contents[i].eventId, contactId, contactType);\r\n\r\n // Add result options\r\n var resultOptions = this.searchOptions.resultsOptions;\r\n search.addResults(resultOptions.startRow, resultOptions.maxRows, outputType, null, null, resultOptions.viewName);\r\n if (resultOptions.orderByColumns && (resultOptions.orderByColumns.length) > 0) {\r\n for (var i = 0, length = resultOptions.orderByColumns.length; i < length; i++)\r\n search.addResults(null, null, null, resultOptions.orderByColumns[i].name, resultOptions.orderByColumns[i].order);\r\n }\r\n\r\n // Clear up anything extra\r\n search.deleteEmptyFilters();\r\n\r\n return search;\r\n }\r\n});","Librarian.Search.Container = new Class({\r\n Implements: Options,\r\n Binds: [\"onSearchLoaded\", \"clearSearch\", \"doClear\", \"doSearch\",\r\n \"onFileAttributesLoaded\", \"onSlideAttributesLoaded\",\r\n \"onGroupAttributesLoaded\", \"getContentElement\",\r\n \"addFileTerm\", \"removeFileTerm\",\r\n \"addTextTerm\", \"removeTextTerm\",\r\n \"addGroupTerm\", \"removeGroupTerm\",\r\n \"addFileKeyword\", \"removeFileKeyword\",\r\n \"addSlideKeyword\", \"removeSlideKeyword\",\r\n \"addGroupKeyword\", \"removeGroupKeyword\",\r\n \"addFileType\", \"removeFileType\",\r\n \"addFileAttribute\", \"removeFileAttribute\",\r\n \"addSlideAttribute\", \"removeSlideAttribute\",\r\n \"addGroupAttribute\", \"removeGroupAttribute\",\r\n \"addAttribute\", \"removeAttribute\",\r\n \"addElement\", \"removeElement\"],\r\n\r\n options: {\r\n id: null,\r\n onSearch: $empty\r\n },\r\n\r\n datePickers: {},\r\n confirm: null,\r\n conjunctions: [\"AND\", \"OR\"],\r\n fileAttributes: [],\r\n slideAttributes: [],\r\n groupAttributes: [],\r\n fileTermCount: 1,\r\n textTermCount: 1,\r\n groupTermCount: 1,\r\n fileKWCount: 1,\r\n slideKWCount: 1,\r\n groupKWCount: 1,\r\n fileTypeCount: 1,\r\n fileAttCount: 1,\r\n slideAttCount: 1,\r\n groupAttCount: 1,\r\n\r\n defaultDateOptions: {\r\n timePicker: Librarian.search.searchTime,\r\n positionOffset: { x: 5, y: 0 },\r\n format: Librarian.search.searchTime ? \"db\" : \"%m-%d-%Y\"\r\n },\r\n\r\n getContentElement: function() {\r\n var contentEl = $(this.options.id + \"_content\");\r\n if (!contentEl)\r\n contentEl = $(this.options.id + \"_pad\");\r\n\r\n return contentEl;\r\n },\r\n\r\n onSearchLoaded: function(options) {\r\n this.setOptions(options);\r\n\r\n this.datePickers[\"minImport\"] = Librarian.Utils.setUpDatePicker(\"minImportDate\", \"minImport_text\", \"calIconMinImport\", this.options.id, this.closeDatePickers.bind(this), this.defaultDateOptions);\r\n this.datePickers[\"maxImport\"] = Librarian.Utils.setUpDatePicker(\"maxImportDate\", \"maxImport_text\", \"calIconMaxImport\", this.options.id, this.closeDatePickers.bind(this), this.defaultDateOptions);\r\n this.datePickers[\"minModified\"] = Librarian.Utils.setUpDatePicker(\"minModifiedDate\", \"minMod_text\", \"calIconMinModified\", this.options.id, this.closeDatePickers.bind(this), this.defaultDateOptions);\r\n this.datePickers[\"maxModified\"] = Librarian.Utils.setUpDatePicker(\"maxModifiedDate\", \"maxMod_text\", \"calIconMaxModified\", this.options.id, this.closeDatePickers.bind(this), this.defaultDateOptions);\r\n\r\n var itemEl = $(\"searchClear\");\r\n if (itemEl) {\r\n itemEl.addOnClick(this.clearSearch);\r\n itemEl.id = this.options.id + \"_clear\";\r\n }\r\n\r\n var itemEls = this.getContentElement().getElementsByTagName(\"select\");\r\n var fileAttributeRequest = null, slideAttributeRequest = null, groupAttributeRequest = null;\r\n\r\n // Dynamically build each select list based on what kind it is.\r\n for (var i = 0; i < itemEls.length; i++) {\r\n var options = null;\r\n\r\n if (itemEls[i].id.contains(\"_conjunction\"))\r\n options = this.conjunctions;\r\n else if (itemEls[i].id.contains(\"_operator\")) {\r\n options = Librarian.search.operators;\r\n itemEls[i].onchange = this.onOperatorChange.bind(itemEls[i]);\r\n }\r\n else if (itemEls[i].id.contains(\"_attribute\")) {\r\n if (itemEls[i].id.contains(\"file\") && (fileAttributeRequest == null)) {\r\n fileAttributeRequest = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getfatl\") + \"&all=0&out=dgrid\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: this.onFileAttributesLoaded\r\n });\r\n fileAttributeRequest.send();\r\n }\r\n else if (itemEls[i].id.contains(\"slide\") && (slideAttributeRequest == null)) {\r\n slideAttributeRequest = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getsatl\") + \"&all=0&out=dgrid\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: this.onSlideAttributesLoaded\r\n });\r\n slideAttributeRequest.send();\r\n }\r\n else if (itemEls[i].id.contains(\"group\") && (groupAttributeRequest == null)) {\r\n groupAttributeRequest = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getgatl\") + \"&all=0&out=dgrid\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: this.onGroupAttributesLoaded\r\n });\r\n groupAttributeRequest.send();\r\n }\r\n }\r\n else if (itemEls[i].id.contains(\"_type\"))\r\n options = Librarian.Search.Container.fileTypeOptions;\r\n\r\n if (options != null) {\r\n itemEls[i].options.length = 0;\r\n itemEls[i].selectedIndex = 0;\r\n Librarian.Utils.fillSelect(itemEls[i], options);\r\n }\r\n }\r\n\r\n fileAttributeRequest = null;\r\n slideAttributeRequest = null;\r\n groupAttributeRequest = null;\r\n\r\n itemEls = document.getElementsByName(\"searchAdd\");\r\n for (i = 0; i < itemEls.length; i++)\r\n itemEls[i].src = Librarian.path.getImagesPath() + \"plus.jpg\";\r\n\r\n itemEls = document.getElementsByName(\"searchRemove\");\r\n for (i = 0; i < itemEls.length; i++) {\r\n itemEls[i].src = Librarian.path.getImagesPath() + \"minus.jpg\";\r\n Librarian.Utils.setButtonState($(itemEls[i]), null, true);\r\n }\r\n\r\n itemEl = null;\r\n },\r\n\r\n onOperatorChange: function() {\r\n var id = this.id.substring(0, this.id.indexOf('_') + 1);\r\n id += \"text\";\r\n var textEl = $(id);\r\n if (!textEl)\r\n return;\r\n\r\n // Multi-option boxes don't need this hidden\r\n if (id.startsWith(\"multiOption\"))\r\n return;\r\n\r\n var selected = this.options[this.selectedIndex].value.trim().toUpperCase();\r\n if ((selected == \"ISEMPTY\") || (selected == \"ISNOTEMPTY\")) {\r\n textEl.value = '';\r\n textEl.style.visibility = \"hidden\";\r\n }\r\n else\r\n textEl.style.visibility = \"inherit\";\r\n },\r\n\r\n onFileAttributesLoaded: function(json) {\r\n if (!json || !json.data)\r\n return;\r\n\r\n var contentEl = this.getContentElement();\r\n if (!contentEl)\r\n return;\r\n\r\n this.fileAttributes = json.data;\r\n var itemEls = contentEl.getElementsByTagName(\"select\");\r\n\r\n // Go through each select to find the file attributes\r\n for (var i = 0; i < itemEls.length; i++) {\r\n if (itemEls[i].id.contains(\"_attribute\")) {\r\n if (itemEls[i].id.contains(\"file\")) {\r\n itemEls[i].options.length = 0;\r\n itemEls[i].selectedIndex = 0;\r\n\r\n Librarian.Utils.fillSelect(itemEls[i], this.fileAttributes);\r\n }\r\n }\r\n }\r\n },\r\n\r\n onSlideAttributesLoaded: function(json) {\r\n if (!json || !json.data)\r\n return;\r\n\r\n var contentEl = this.getContentElement();\r\n if (!contentEl)\r\n return;\r\n\r\n this.slideAttributes = json.data;\r\n var itemEls = contentEl.getElementsByTagName(\"select\");\r\n\r\n // Go through each select to find the file attributes\r\n for (var i = 0; i < itemEls.length; i++) {\r\n if (itemEls[i].id.contains(\"_attribute\")) {\r\n if (itemEls[i].id.contains(\"slide\")) {\r\n itemEls[i].options.length = 0;\r\n itemEls[i].selectedIndex = 0;\r\n\r\n Librarian.Utils.fillSelect(itemEls[i], this.slideAttributes);\r\n }\r\n }\r\n }\r\n },\r\n\r\n onGroupAttributesLoaded: function(json) {\r\n if (!json || !json.data)\r\n return;\r\n\r\n var contentEl = this.getContentElement();\r\n if (!contentEl)\r\n return;\r\n\r\n this.groupAttributes = json.data;\r\n var itemEls = contentEl.getElementsByTagName(\"select\");\r\n\r\n // Go through each select to find the file attributes\r\n for (var i = 0; i < itemEls.length; i++) {\r\n if (itemEls[i].id.contains(\"_attribute\")) {\r\n if (itemEls[i].id.contains(\"group\")) {\r\n itemEls[i].options.length = 0;\r\n itemEls[i].selectedIndex = 0;\r\n\r\n Librarian.Utils.fillSelect(itemEls[i], this.groupAttributes);\r\n }\r\n }\r\n }\r\n },\r\n\r\n closeDatePickers: function() {\r\n if (this.datePickers) {\r\n for (var key in this.datePickers) {\r\n if (this.datePickers[key]) {\r\n this.datePickers[key].close();\r\n delete this.datePickers[key];\r\n this.datePickers[key] = null;\r\n }\r\n }\r\n\r\n this.datePickers.length = 0;\r\n }\r\n },\r\n\r\n addFileTerm: function() {\r\n var containerEl = $(\"fileTermContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.fileTermCount++;\r\n\r\n this.addElement(containerEl, $(\"removeFileTerm\"), \"fileTerm\", this.fileTermCount, Librarian.search.operators);\r\n },\r\n\r\n removeFileTerm: function() {\r\n var containerEl = $(\"fileTermContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeFileTermButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeElement(containerEl, removeEl, \"fileTerm\", this.fileTermCount);\r\n\r\n this.fileTermCount--;\r\n },\r\n\r\n addTextTerm: function() {\r\n var containerEl = $(\"textTermContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.textTermCount++;\r\n\r\n this.addElement(containerEl, $(\"removeTextTerm\"), \"textTerm\", this.textTermCount, Librarian.search.operators);\r\n },\r\n\r\n removeTextTerm: function() {\r\n var containerEl = $(\"textTermContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeTextTermButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeElement(containerEl, removeEl, \"textTerm\", this.textTermCount);\r\n\r\n this.textTermCount--;\r\n },\r\n\r\n addGroupTerm: function() {\r\n var containerEl = $(\"groupTermContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.groupTermCount++;\r\n\r\n this.addElement(containerEl, $(\"removeGroupTerm\"), \"groupTerm\", this.groupTermCount, Librarian.search.operators);\r\n },\r\n\r\n removeGroupTerm: function() {\r\n var containerEl = $(\"groupTermContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeGroupTermButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeElement(containerEl, removeEl, \"groupTerm\", this.groupTermCount);\r\n\r\n this.groupTermCount--;\r\n },\r\n\r\n addFileKeyword: function() {\r\n var containerEl = $(\"fileKWContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.fileKWCount++;\r\n\r\n this.addElement(containerEl, $(\"removeFileKW\"), \"fileKW\", this.fileKWCount, Librarian.search.operators);\r\n },\r\n\r\n removeFileKeyword: function() {\r\n var containerEl = $(\"fileKWContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeFileKWButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeElement(containerEl, removeEl, \"fileKW\", this.fileKWCount);\r\n\r\n this.fileKWCount--;\r\n },\r\n\r\n addSlideKeyword: function() {\r\n var containerEl = $(\"slideKWContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.slideKWCount++;\r\n\r\n this.addElement(containerEl, $(\"removeSlideKW\"), \"slideKW\", this.slideKWCount, Librarian.search.operators);\r\n },\r\n\r\n removeSlideKeyword: function() {\r\n var containerEl = $(\"slideKWContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeSlideKWButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeElement(containerEl, removeEl, \"slideKW\", this.slideKWCount);\r\n\r\n this.slideKWCount--;\r\n },\r\n\r\n addGroupKeyword: function () {\r\n var containerEl = $(\"groupKWContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.groupKWCount++;\r\n\r\n this.addElement(containerEl, $(\"removeGroupKW\"), \"groupKW\", this.groupKWCount, Librarian.search.operators);\r\n },\r\n\r\n removeGroupKeyword: function () {\r\n var containerEl = $(\"groupKWContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeGroupKWButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeElement(containerEl, removeEl, \"groupKW\", this.groupKWCount);\r\n\r\n this.groupKWCount--;\r\n },\r\n\r\n addFileType: function() {\r\n var containerEl = $(\"fileTypeContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.fileTypeCount++;\r\n\r\n // Default to the list of options\r\n var options = Librarian.Search.Container.fileTypeOptions;\r\n\r\n var typeEl = $(\"fileType1_type\");\r\n // If the first type is an input, get its value as the only option\r\n if (typeEl && (typeEl.tagName == \"INPUT\"))\r\n options = typeEl.value;\r\n\r\n this.addElement(containerEl, $(\"removeFileType\"), \"fileType\", this.fileTypeCount, options, \"type\", $(\"fileType1_select\"));\r\n\r\n var excludeCheckEl = new Element(\"input\");\r\n excludeCheckEl.type = \"checkbox\";\r\n excludeCheckEl.id = \"fileType\" + this.fileTypeCount + \"_check\";\r\n\r\n var excludeTextEl = new Element(\"span\", {\r\n text: \" Exclude\"\r\n });\r\n\r\n var excludeLabelEl = new Element(\"label\");\r\n excludeLabelEl.appendChild(excludeCheckEl);\r\n excludeLabelEl.appendChild(excludeTextEl);\r\n excludeLabelEl.addClass(\"dialogitem\");\r\n excludeLabelEl.id = \"fileType\" + this.fileTypeCount + \"_label\";\r\n\r\n containerEl.appendChild(excludeLabelEl);\r\n\r\n // Move the clear element to the end\r\n var breakEl = $(\"fileType\" + this.fileTypeCount + \"_clear\");\r\n if (breakEl)\r\n containerEl.appendChild(containerEl.removeChild(breakEl));\r\n },\r\n\r\n removeFileType: function() {\r\n var containerEl = $(\"fileTypeContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeFileTypeButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeElement(containerEl, removeEl, \"fileType\", this.fileTypeCount);\r\n\r\n var labelEl = $(\"fileType\" + this.fileTypeCount + \"_label\");\r\n if (labelEl)\r\n containerEl.removeChild(labelEl).destroy();\r\n\r\n this.fileTypeCount--;\r\n },\r\n\r\n addFileAttribute: function() {\r\n var containerEl = $(\"fileAttContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.fileAttCount++;\r\n\r\n this.addAttribute(containerEl, $(\"removeFileAtt\"), this.fileAttributes, \"file\", this.fileAttCount);\r\n },\r\n\r\n removeFileAttribute: function() {\r\n var containerEl = $(\"fileAttContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeFileAttButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeAttribute(containerEl, removeEl, \"file\", this.fileAttCount);\r\n\r\n this.fileAttCount--;\r\n },\r\n\r\n addSlideAttribute: function() {\r\n var containerEl = $(\"slideAttContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.slideAttCount++;\r\n\r\n this.addAttribute(containerEl, $(\"removeSlideAtt\"), this.slideAttributes, \"slide\", this.slideAttCount);\r\n },\r\n\r\n removeSlideAttribute: function() {\r\n var containerEl = $(\"slideAttContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeSlideAttButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeAttribute(containerEl, removeEl, \"slide\", this.slideAttCount);\r\n\r\n this.slideAttCount--;\r\n },\r\n\r\n addGroupAttribute: function() {\r\n var containerEl = $(\"groupAttContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n this.groupAttCount++;\r\n\r\n this.addAttribute(containerEl, $(\"removeGroupAtt\"), this.groupAttributes, \"group\", this.groupAttCount);\r\n },\r\n\r\n removeGroupAttribute: function() {\r\n var containerEl = $(\"groupAttContainer\");\r\n if (!containerEl)\r\n return;\r\n\r\n var removeEl = $(\"removeGroupAttButton\");\r\n // Don't allow a removal if the button is disabled.\r\n if (removeEl && removeEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n this.removeAttribute(containerEl, removeEl, \"group\", this.groupAttCount);\r\n\r\n this.groupAttCount--;\r\n },\r\n\r\n addAttribute: function(containerEl, removeEl, attributes, type, count) {\r\n if (!containerEl)\r\n return;\r\n\r\n var selectEl = new Element(\"select\");\r\n selectEl.id = type + \"Att\" + count + \"_attribute\";\r\n selectEl.addClass(\"left\").addClass(\"dialogitem\");\r\n\r\n Librarian.Utils.fillSelect(selectEl, attributes);\r\n\r\n containerEl.appendChild(selectEl);\r\n\r\n this.addElement(containerEl, removeEl, type + \"Att\", count, Librarian.search.operators);\r\n },\r\n\r\n removeAttribute: function(containerEl, removeEl, type, count) {\r\n if (!containerEl)\r\n return;\r\n\r\n var attEl = $(type + \"Att\" + count + \"_attribute\");\r\n if (attEl)\r\n containerEl.removeChild(attEl).destroy();\r\n\r\n this.removeElement(containerEl, removeEl, type + \"Att\", count);\r\n },\r\n\r\n addElement: function(containerEl, removeEl, type, count, options, selectIDSuffix, sourceEl) {\r\n if (!containerEl)\r\n return;\r\n\r\n if ((typeof selectIDSuffix == \"undefined\") || (selectIDSuffix == null))\r\n selectIDSuffix = \"operator\";\r\n\r\n var itemEl;\r\n // If we have a source and it's a select, copy it\r\n if ((typeof sourceEl != \"undefined\") && (sourceEl != null) && (sourceEl.tagName == \"SELECT\")) {\r\n itemEl = new Element(\"select\");\r\n\r\n // Add all the existing options\r\n for (var i = 0; i < sourceEl.options.length; i++) {\r\n var optionEl = new Option(sourceEl.options[i].text, sourceEl.options[i].value);\r\n itemEl.options.add(optionEl);\r\n }\r\n\r\n itemEl.addClass(\"dialogitem\").addClass(\"dialogselect\");\r\n itemEl.id = type + count + \"_select\";\r\n }\r\n else {\r\n itemEl = new Element(\"input\");\r\n itemEl.type = \"text\";\r\n itemEl.autocorrect = \"off\";\r\n itemEl.autocapitalize = \"off\";\r\n itemEl.id = type + count + \"_text\";\r\n itemEl.addClass(\"dialogitem\");\r\n itemEl.onkeydown = function(e) {\r\n var evt = new Event(e);\r\n if (evt.keyCode == 13)\r\n this.search();\r\n evt = null;\r\n };\r\n }\r\n\r\n if (options != null) {\r\n // If there are multiple options, make a select\r\n if (typeOf(options) == \"array\") {\r\n var selectEl = new Element(\"select\");\r\n selectEl.id = type + count + '_' + selectIDSuffix;\r\n selectEl.addClass(\"left\").addClass(\"dialogitem\");\r\n\r\n if (selectIDSuffix == \"operator\")\r\n selectEl.onchange = this.onOperatorChange.bind(selectEl);\r\n\r\n for (var i = 0; i < options.length; i++) {\r\n var optionEl;\r\n\r\n if ((typeOf(options[i]) == \"array\") && options[i].length > 1)\r\n optionEl = new Option(options[i][0], options[i][1]);\r\n else\r\n optionEl = new Option(options[i], options[i]);\r\n\r\n selectEl.options.add(optionEl);\r\n }\r\n\r\n containerEl.appendChild(selectEl);\r\n\r\n selectEl = null;\r\n }\r\n // Otherwise, make an input\r\n else {\r\n var inputEl = new Element(\"input[type=hidden]\");\r\n inputEl.value = options;\r\n inputEl.id = type + count + '_' + selectIDSuffix;\r\n\r\n containerEl.appendChild(inputEl);\r\n\r\n inputEl = null;\r\n }\r\n }\r\n\r\n var clearEl = new Element(\"div\");\r\n clearEl.id = type + count + \"_clear\";\r\n clearEl.style.clear = \"both\";\r\n\r\n containerEl.appendChild(itemEl);\r\n containerEl.appendChild(clearEl);\r\n\r\n if (removeEl) {\r\n var buttonEl = $(removeEl.id + \"Button\");\r\n if (buttonEl && buttonEl.hasClass(\"disabled\"))\r\n Librarian.Utils.setButtonState(buttonEl, removeEl, false);\r\n buttonEl = null;\r\n }\r\n\r\n itemEl = null;\r\n clearEl = null;\r\n containerEl = null;\r\n removeEl = null;\r\n },\r\n\r\n removeElement: function(containerEl, removeEl, type, count) {\r\n if (!containerEl)\r\n return;\r\n\r\n var childEl = $(type + count + \"_text\");\r\n if (childEl)\r\n containerEl.removeChild(childEl).destroy();\r\n\r\n childEl = $(type + count + \"_select\");\r\n if (childEl)\r\n containerEl.removeChild(childEl).destroy();\r\n\r\n childEl = $(type + count + \"_operator\");\r\n if (childEl)\r\n containerEl.removeChild(childEl).destroy();\r\n\r\n childEl = $(type + count + \"_type\");\r\n if (childEl)\r\n containerEl.removeChild(childEl).destroy();\r\n\r\n childEl = $(type + count + \"_clear\");\r\n if (childEl)\r\n containerEl.removeChild(childEl).destroy();\r\n\r\n if (removeEl) {\r\n if ((count - 1) == 1) {\r\n var buttonEl = $(removeEl.id);\r\n if (buttonEl)\r\n Librarian.Utils.setButtonState(buttonEl, removeEl, true);\r\n }\r\n }\r\n },\r\n\r\n clearSearch: function() {\r\n // Make sure the user wants to do this first\r\n this.confirm = new Librarian.ConfirmWindow({\r\n id: \"clearSearchConfirmWindow\",\r\n title: Librarian.Lang.getString(\"search_clear\"),\r\n question: Librarian.Lang.getString(\"search_clear?\")\r\n });\r\n this.confirm.onFirstButtonClicked = this.doClear.bind(this);\r\n this.confirm.show();\r\n },\r\n\r\n doClear: function() {\r\n // Remove all the added boxes\r\n while (this.fileTermCount > 1)\r\n this.removeFileTerm();\r\n while (this.textTermCount > 1)\r\n this.removeTextTerm();\r\n while (this.groupTermCount > 1)\r\n this.removeGroupTerm();\r\n while (this.fileKWCount > 1)\r\n this.removeFileKeyword();\r\n while (this.slideKWCount > 1)\r\n this.removeSlideKeyword();\r\n while (this.groupKWCount > 1)\r\n this.removeGroupKeyword();\r\n while (this.fileTypeCount > 1)\r\n this.removeFileType();\r\n while (this.fileAttCount > 1)\r\n this.removeFileAttribute();\r\n while (this.slideAttCount > 1)\r\n this.removeSlideAttribute();\r\n while (this.groupAttCount > 1)\r\n this.removeGroupAttribute();\r\n\r\n var contentEl = this.getContentElement();\r\n if (!contentEl)\r\n return;\r\n\r\n // Get all the selects within the search page\r\n var items = contentEl.getElementsByTagName(\"select\");\r\n\r\n // Set the first option selected for every select\r\n for (var i = 0; i < items.length; i++)\r\n items[i].options[0].selected = true;\r\n\r\n // Get all the inputs within the search page\r\n items = contentEl.getElementsByTagName(\"input\");\r\n\r\n // Reset each input correctly based on their type\r\n for (i = 0; i < items.length; i++) {\r\n if (items[i].type == \"text\")\r\n items[i].value = '';\r\n else if (items[i].type == \"checkbox\")\r\n items[i].checked = false;\r\n }\r\n\r\n // Get all the forms within the search page\r\n items = contentEl.getElementsByTagName(\"form\");\r\n\r\n // Reset every form\r\n for (i = 0; i < items.length; i++)\r\n items[i].reset();\r\n },\r\n\r\n doSearch: function() {\r\n // If there's no search, we can't continue.\r\n if (!Librarian.Search) {\r\n Librarian.Utils.error(Librarian.Lang.getString(\"search_unavailable\"));\r\n return;\r\n }\r\n\r\n // Build the search object\r\n var search = new Librarian.Search();\r\n\r\n var globalConjunctionEl = $(\"globalOverride_conjunction\");\r\n var globalConjunction = null;\r\n // If there is a global conjunction selector, get the value\r\n if (globalConjunctionEl) {\r\n // If it's a select box, just get the selected value\r\n if (globalConjunctionEl.tagName == \"SELECT\")\r\n globalConjunction = globalConjunctionEl.options[globalConjunctionEl.selectedIndex].value;\r\n // Otherwise, it should be a form. Find the first checked radio box.\r\n else {\r\n for (var i = 0; (globalConjunction == null) && (i < globalConjunctionEl.conjunction.length) ; i++) {\r\n if (globalConjunctionEl.conjunction[i].checked)\r\n globalConjunction = globalConjunctionEl.conjunction[i].value;\r\n }\r\n }\r\n }\r\n\r\n // Add the terms and keywords\r\n var searched = this.addSearchNode(\"fileTerm\", search.addFileTerm, this.getTermFlags(\"fileTerm\", Librarian.Search.Container.fileTermFlags), globalConjunction);\r\n searched = searched && this.addSearchNode(\"bothTerm\", search.addFileTerm, this.getTermFlags(\"fileTerm\", Librarian.Search.Container.fileTermFlags), globalConjunction);\r\n searched = searched && this.addSearchNode(\"textTerm\", search.addTextTerm, this.getTermFlags(\"textTerm\", Librarian.Search.Container.textTermFlags), globalConjunction);\r\n searched = searched && this.addSearchNode(\"bothTerm\", search.addTextTerm, this.getTermFlags(\"textTerm\", Librarian.Search.Container.textTermFlags), globalConjunction);\r\n searched = searched && this.addSearchNode(\"groupTerm\", search.addGroupTerm, globalConjunction);\r\n searched = searched && this.addSearchNode(\"fileKW\", search.addFileKeyword, globalConjunction);\r\n searched = searched && this.addSearchNode(\"slideKW\", search.addSlideKeyword, globalConjunction);\r\n searched = searched && this.addSearchNode(\"groupKW\", search.addGroupKeyword, globalConjunction);\r\n\r\n // Selected file type search type\r\n var type = null;\r\n // Whether or not \"Exclude\" is checked\r\n var check = false;\r\n\r\n // Selected conjunction for this search item\r\n var conjunctionEl = $(\"fileType_conjunction\");\r\n // Get the selected conjunction if it's available\r\n var conjunction = globalConjunction;\r\n if (conjunctionEl)\r\n conjunction = conjunctionEl.options[conjunctionEl.selectedIndex].value;\r\n\r\n var itemEl, selectEl;\r\n var continueSearch = true;\r\n // For each file type\r\n for (i = 1; continueSearch; i++) {\r\n // Get the selected search type, if it's available.\r\n itemEl = $(\"fileType\" + i + \"_type\");\r\n if (itemEl) {\r\n if (itemEl.tagName == \"SELECT\")\r\n type = itemEl.options[itemEl.selectedIndex].value;\r\n else if (itemEl.tagName == \"INPUT\")\r\n type = itemEl.value;\r\n }\r\n\r\n // Get the exclude value if it's available\r\n itemEl = $(\"fileType\" + i + \"_check\");\r\n if (itemEl)\r\n check = itemEl.checked;\r\n\r\n // Check if there is a text box, just in case\r\n itemEl = $(\"fileType\" + i + \"_text\");\r\n selectEl = $(\"fileType\" + i + \"_select\");\r\n if (itemEl) {\r\n // Don't add a file type without a value\r\n if (itemEl.value.length > 0) {\r\n // If this fails to add the file type, its usually because the\r\n // file type ID was invalid. Display a message to the user\r\n if (!search.addFileType(type, itemEl.value, check, conjunction)) {\r\n var searchErrorWindow = new Librarian.ConfirmWindow({\r\n title: Librarian.Lang.getString(\"search_invalid_type_title\"),\r\n question: Librarian.Lang.getString(\"search_invalid_type_message\"),\r\n firstButtonText: Librarian.Lang.getString(\"ok\"),\r\n useSecondButton: false\r\n });\r\n searchErrorWindow.show();\r\n search.destroy();\r\n return;\r\n }\r\n }\r\n }\r\n else if (selectEl) {\r\n var value = selectEl.options[selectEl.selectedIndex].value;\r\n // Don't add a file type without a value\r\n if (value && (value.length > 0)) {\r\n // If this fails to add the file type, its usually because the\r\n // file type ID was invalid. Display a message to the user\r\n if (!search.addFileType(type, value, check, conjunction)) {\r\n var searchErrorWindow = new Librarian.ConfirmWindow({\r\n title: Librarian.Lang.getString(\"search_invalid_type_title\"),\r\n question: Librarian.Lang.getString(\"search_invalid_type_message\"),\r\n firstButtonText: Librarian.Lang.getString(\"ok\"),\r\n useSecondButton: false\r\n });\r\n searchErrorWindow.show();\r\n search.destroy();\r\n return;\r\n }\r\n }\r\n }\r\n // Stop checking for values if the last one didn't exist\r\n else\r\n continueSearch = false;\r\n\r\n itemEl = null;\r\n selectEl = null;\r\n }\r\n\r\n // Add the attributes\r\n searched = searched && this.addSearchNode(\"fileAtt\", search.addFileAttribute, null, globalConjunction);\r\n searched = searched && this.addSearchNode(\"slideAtt\", search.addSlideAttribute, null, globalConjunction);\r\n searched = searched && this.addSearchNode(\"groupAtt\", search.addGroupAttribute, null, globalConjunction);\r\n\r\n // Add the dates\r\n searched = searched && this.addSearchDate(\"minMod_text\", search.addMinModifiedDate);\r\n searched = searched && this.addSearchDate(\"maxMod_text\", search.addMaxModifiedDate);\r\n searched = searched && this.addSearchDate(\"minImport_text\", search.addMinImportDate);\r\n searched = searched && this.addSearchDate(\"maxImport_text\", search.addMaxImportDate);\r\n\r\n var pageName = '';\r\n itemEl = $(\"searchTargetForm\");\r\n // If the search target is on this page,\r\n // add the value as a category ID for this search\r\n if (itemEl) {\r\n var value, values;\r\n for (var i = 0; i < itemEl.searchTarget.length; i++) {\r\n value = itemEl.searchTarget[i].value;\r\n\r\n if (itemEl.searchTarget[i].checked) {\r\n if (itemEl.searchTarget[i].pageName == \"All\") {\r\n values = value.split(';');\r\n\r\n for (var j = 0; j < values.length; j++) {\r\n value = Librarian.Search.extractAndPrepCategory(search, values[j]);\r\n searched = searched && search.addCategory(value);\r\n }\r\n }\r\n else {\r\n value = Librarian.Search.extractAndPrepCategory(search, value);\r\n searched = searched && search.addCategory(value);\r\n }\r\n\r\n // Store the given page name\r\n pageName = itemEl.searchTarget[i].pageName;\r\n }\r\n }\r\n }\r\n\r\n itemEl = $(\"searchOutputsForm\");\r\n var outputType = Librarian.search.defaultOutputType;\r\n if (itemEl) {\r\n // Loop through the search output options\r\n // and store the chosen one as the actual result output.\r\n for (var i = 0; i < itemEl.searchOutput.length; i++) {\r\n if (itemEl.searchOutput[i].checked) {\r\n if (itemEl.searchOutput[i].value == \"files\")\r\n outputType = Librarian.Search.outputTypes.FILES;\r\n else if (itemEl.searchOutput[i].value == \"slides\")\r\n outputType = Librarian.Search.outputTypes.SLIDES;\r\n else\r\n outputType = Librarian.Search.outputTypes.GROUPS;\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Get all custom meta elements\r\n var customMetaEls = $$(document.getElementsByName(\"customMeta\"));\r\n for (var i = 0; i < customMetaEls.length; i++) {\r\n var attribute = customMetaEls[i].meta;\r\n\r\n if (!attribute || (attribute.trim().length == 0))\r\n continue;\r\n\r\n var operator = customMetaEls[i].operator;\r\n var type = customMetaEls[i].outputType;\r\n var filterConjunction = customMetaEls[i].filterConjunction;\r\n var func;\r\n\r\n // Determine which type they are based on the selected output type\r\n if ((typeof type == \"string\") && (type != null) && (type.trim().length > 0)) {\r\n type = type.trim().toUpperCase();\r\n if (type.startsWith(\"FILE\"))\r\n func = search.addFileAttribute;\r\n else if (type.startsWith(\"SLIDE\"))\r\n func = search.addSlideAttribute;\r\n else if (type.startsWith(\"GROUP\"))\r\n func = search.addGroupAttribute;\r\n else\r\n continue;\r\n }\r\n else {\r\n if (outputType == Librarian.Search.outputTypes.FILES)\r\n func = search.addFileAttribute;\r\n else if (outputType == Librarian.Search.outputTypes.SLIDES)\r\n func = search.addSlideAttribute;\r\n else if (outputType == Librarian.Search.outputTypes.GROUPS)\r\n func = search.addGroupAttribute;\r\n else\r\n continue;\r\n }\r\n\r\n var value = null, prep = true;\r\n // Get the value depending on what type of element it is\r\n if (customMetaEls[i].tagName == \"SELECT\") {\r\n value = customMetaEls[i].options[customMetaEls[i].selectedIndex].value;\r\n prep = false;\r\n }\r\n else if (customMetaEls[i].tagName == \"INPUT\") {\r\n if (customMetaEls[i].type == \"text\")\r\n value = customMetaEls[i].value;\r\n else if (customMetaEls[i].type == \"checkbox\")\r\n value = customMetaEls[i].checked.toString();\r\n }\r\n\r\n // If this is null or an empty value (and this isn't an IsEmpty operator which has no value\r\n // then skip this one because it shouldn't be included\r\n if ((value == null) || ((operator != \"IsEmpty\") && (operator != \"IsNotEmpty\") && (value.trim().length == 0)))\r\n continue;\r\n\r\n if (prep)\r\n value = Librarian.Search.prepValue(value, (operator != \"Contains\"));\r\n\r\n searched = searched && func(value, globalConjunction, operator, attribute, filterConjunction);\r\n }\r\n\r\n var multiOptionEls = $$(document.getElementsByName(\"multiOption\"));\r\n for (var i = 0; i < multiOptionEls.length; i++) {\r\n if (!multiOptionEls[i].searchTypes)\r\n continue;\r\n\r\n var outputTypes = [];\r\n\r\n if (multiOptionEls[i].outputTypes)\r\n outputTypes = multiOptionEls[i].outputTypes.split(',');\r\n else\r\n outputTypes.push(outputType);\r\n\r\n var searchTypes = multiOptionEls[i].searchTypes.split(',');\r\n\r\n for (var j = 0; j < outputTypes.length; j++) {\r\n for (var k = 0; k < searchTypes.length; k++) {\r\n var type;\r\n\r\n if (outputTypes[j].toInt() == Librarian.Search.outputTypes.FILES)\r\n type = \"File\";\r\n else if (outputTypes[j].toInt() == Librarian.Search.outputTypes.SLIDES) {\r\n if (searchTypes[k] == \"Term\")\r\n type = \"Text\";\r\n else\r\n type = \"Slide\";\r\n }\r\n else if (outputTypes[j].toInt() == Librarian.Search.outputTypes.GROUPS)\r\n type = \"Group\";\r\n else\r\n continue;\r\n\r\n var func = eval(\"search.add\" + type + searchTypes[k]);\r\n\r\n var id = multiOptionEls[i].id;\r\n id = id.substring(0, id.indexOf('_') + 1);\r\n\r\n var operatorEl = $(id + \"operator\");\r\n var operator = null;\r\n if (operatorEl) {\r\n // Get the operator depending on what type of element it is\r\n if (operatorEl.tagName == \"SELECT\")\r\n operator = operatorEl.options[operatorEl.selectedIndex].value;\r\n else if (operatorEl.tagName == \"INPUT\")\r\n operator = operatorEl.value;\r\n }\r\n\r\n var value = null, prep = true;\r\n // Get the value depending on what type of element it is\r\n if (multiOptionEls[i].tagName == \"SELECT\") {\r\n value = multiOptionEls[i].options[multiOptionEls[i].selectedIndex].value;\r\n prep = false;\r\n }\r\n else if (multiOptionEls[i].tagName == \"INPUT\") {\r\n if (multiOptionEls[i].type == \"text\")\r\n value = multiOptionEls[i].value;\r\n else if (multiOptionEls[i].type == \"checkbox\")\r\n value = multiOptionEls[i].checked.toString();\r\n }\r\n\r\n // If this is null or an empty value (and this isn't an IsEmpty operator which has no value\r\n // then skip this one because it shouldn't be included\r\n if ((value == null) || ((operator != \"IsEmpty\") && (operator != \"IsNotEmpty\") && (value.trim().length == 0)))\r\n continue;\r\n\r\n // Keywords get special treatment for preperation\r\n if (searchTypes[k] == \"Keyword\") {\r\n var match = value.match(/\"/g);\r\n\r\n // If there are quotes\r\n if (match && (match.length > 0)) {\r\n // And there are multiple sets of quotes, use the prepared value\r\n // IE: \"a b\" \"c\"\r\n if (match.length > 2)\r\n prep = true;\r\n // Otherwise only use prepared value if there are 2 quotes but the entire string isn't quoted\r\n // IE: \"a b\" c\r\n else if (!value.isQuoted())\r\n prep = true;\r\n // If there are exactly 2 quotes and they surround this phrase, don't prepare it\r\n else\r\n prep = false;\r\n }\r\n // If there are no quotes, don't prepare at all\r\n else\r\n prep = false;\r\n }\r\n\r\n // Prepare the value if and only if we should\r\n if (prep)\r\n value = Librarian.Search.prepValue(value, (operator != \"Contains\"));\r\n\r\n var attribute = null;\r\n // If this is a term, get the correct flags\r\n if (searchTypes[k] == \"Term\") {\r\n if (type == \"File\")\r\n attribute = this.getTermFlags(\"fileTerm\", Librarian.Search.Container.fileTermFlags);\r\n else if (type == \"Text\")\r\n attribute = this.getTermFlags(\"textTerm\", Librarian.Search.Container.textTermFlags);\r\n }\r\n\r\n searched = searched && func(value, globalConjunction, operator, attribute);\r\n }\r\n }\r\n }\r\n\r\n search.deleteEmptyFilters();\r\n\r\n if (Librarian.guestInfo) {\r\n // Limit search to content available to guest\r\n var contactId = Librarian.guestInfo.ContactId.toString() || '';\r\n var contactType = Librarian.guestInfo.ContactType.toString() || '';\r\n var eventId = null;\r\n\r\n // Limit search to content for this event, if there is one\r\n if (Librarian.eventInfo)\r\n eventId = Librarian.eventInfo.EventId.toString() || '';\r\n\r\n searched = searched && search.addContent(eventId, contactId, contactType, \"OR\");\r\n }\r\n\r\n itemEl = null;\r\n\r\n var maxResults = Librarian.search.maxResults;\r\n\r\n // Use the ListView handler, if it's enabled\r\n if (Librarian.listView.enabled && Librarian.ListView != null && (typeof Librarian.ListView.prepSearchGrid == \"function\"))\r\n maxResults = Librarian.ListView.prepSearchGrid(search, outputType);\r\n else\r\n search.options.loadComplete = tileList.searchLoadComplete;\r\n\r\n var viewName = null;\r\n if ((typeOf(Librarian.search.viewNameByType) == \"array\") && (Librarian.search.viewNameByType.length > outputType))\r\n viewName = Librarian.search.viewNameByType[outputType];\r\n\r\n // Set the max results, output type, and view name\r\n searched = searched && search.addResults(null, maxResults, outputType, null, null, viewName);\r\n\r\n if (searched) {\r\n // Store this as the last search so we can use pagination\r\n Librarian.lastSearch = search;\r\n\r\n // Don't call the function if it doesn't exist\r\n if (typeof Library.prepSearchPage == \"function\")\r\n Library.prepSearchPage(pageName, Librarian.Lang.getString(\"search_advanced\"));\r\n\r\n // Reset the hash\r\n Librarian.Utils.changeHash('');\r\n\r\n // Execute the search\r\n search.search();\r\n\r\n // Call the onSearch function, if it's valid\r\n if (typeof this.options.onSearch == \"function\")\r\n this.options.onSearch();\r\n }\r\n },\r\n\r\n addSearchNode: function(prefix, func, attribute, globalConjunction) {\r\n if (typeof globalConjunction == \"undefined\")\r\n globalConjunction = null;\r\n\r\n // Selected operator for this search item\r\n var operator = null;\r\n var itemEl;\r\n var conjunction = null;\r\n var continueSearch = true;\r\n var valid = true;\r\n\r\n var conjunctionEl = $(prefix + \"_conjunction\");\r\n // Get the selected conjunction if it's available\r\n if (conjunctionEl) {\r\n // If it's a select box, just get the selected value\r\n if (conjunctionEl.tagName == \"SELECT\")\r\n conjunction = conjunctionEl.options[conjunctionEl.selectedIndex].value;\r\n // Otherwise, it should be a form. Find the first checked radio box.\r\n else {\r\n for (var i = 0; (conjunction == null) && (i < conjunctionEl.conjunction.length) ; i++) {\r\n if (conjunctionEl.conjunction[i].checked)\r\n conjunction = conjunctionEl.conjunction[i].value;\r\n }\r\n }\r\n }\r\n\r\n // If we didn't find a conjunction, use the one that was given\r\n if (!conjunction)\r\n conjunction = globalConjunction;\r\n\r\n // For each item\r\n for (i = 1; continueSearch; i++) {\r\n // Default to the given attribute\r\n var nodeAttribute = attribute;\r\n\r\n // Get the selected operator if it's available\r\n itemEl = $(prefix + i + \"_operator\");\r\n if (itemEl)\r\n operator = Librarian.Utils.getElementValue(itemEl);\r\n\r\n // If we aren't given an attribute already\r\n if (!nodeAttribute) {\r\n // Get the selected attribute if it's available\r\n itemEl = $(prefix + i + \"_attribute\");\r\n if (itemEl)\r\n nodeAttribute = Librarian.Utils.getElementValue(itemEl);\r\n }\r\n\r\n // Check if there is a text box, just in case\r\n itemEl = $(prefix + i + \"_text\");\r\n if (itemEl) {\r\n // Don't add a search attribute without a value\r\n if ((itemEl.value.length > 0) || Librarian.search.emptyValueOperators.contains(operator)) {\r\n var value = itemEl.value;\r\n\r\n // Prep the search value, but not for keywords\r\n if (!prefix.contains(\"KW\"))\r\n value = Librarian.Search.prepValue(value, (operator != \"Contains\"));\r\n\r\n valid = func(value, conjunction, operator, nodeAttribute);\r\n }\r\n }\r\n // Stop checking for values if the last one didn't exist\r\n else\r\n continueSearch = false;\r\n }\r\n\r\n return valid;\r\n },\r\n\r\n addSearchDate: function(id, func) {\r\n var valid = true;\r\n\r\n // If this element exists and it has a value, add it\r\n var itemEl = $(id);\r\n if (itemEl && (itemEl.value.length > 0))\r\n valid = func(itemEl.value);\r\n\r\n return valid;\r\n },\r\n\r\n getTermFlags: function(prefix, options) {\r\n var optionEl;\r\n var flags = -1;\r\n var checkedCount = 0;\r\n // Get the search options element if it is available\r\n var itemEl = $(prefix + \"Options\");\r\n\r\n // If this is a form with elements in it\r\n if (itemEl && itemEl.elements && itemEl.elements.length && !itemEl.disabled) {\r\n // Check for each of the given options\r\n for (var j = 0; j < options.length; j++) {\r\n // Make sure this is an array\r\n if (typeOf(options[j]) == \"array\") {\r\n // If there is an element with the specified name\r\n optionEl = itemEl.elements[options[j][0]];\r\n\r\n if (optionEl) {\r\n // And it's checked\r\n if (optionEl.checked) {\r\n // Make sure the flags are set to \"0\"\r\n // if they havent been used yet\r\n if (flags < 0)\r\n flags = 0;\r\n\r\n checkedCount++;\r\n\r\n // And add the flag value\r\n flags += options[j][1];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If every option was checked and we have the option set to search everything,\r\n // set the flags to -1 so everything is searched.\r\n if ((checkedCount == itemEl.elements.length) && Librarian.search.searchAllFlagsIfAllOptionsChecked)\r\n flags = -1;\r\n }\r\n\r\n return flags;\r\n }\r\n});\r\n\r\nLibrarian.Search.Container.extend({\r\n fileTypeOptions: [[\"File Type (Name)\", \"name\"], [\"File Type (Extension)\", \"extension\"], [\"File Type (ID)\", \"id\"], [\"File Sub-Type\", \"subType\"]],\r\n fileTermFlags: [[\"name\", 1], [\"title\", 2], [\"description\", 4]],\r\n groupTermFlags: [[\"name\", 1], [\"description\", 2]],\r\n eventGroupTermFlags: [[\"name\", 1], [\"description\", 2]],\r\n textTermFlags: [[\"titles\", 1], [\"notes\", 2], [\"bullets\", 4], [\"text\", 8], [\"fileKW\", 16], /*\"File Keyword\" [\"obsolete\", 32],*/[\"slideKW\", 64], [\"wordFile\", 128], [\"excelFile\", 256], [\"pdfFile\", 512], [\"textFile\", 1024], [\"rtfFile\", 2048], [\"url\", 4096], [\"description\", 8192]],\r\n\r\n getFlagValue: function(flags, name) {\r\n if (!flags || (typeof name != \"string\"))\r\n return 0;\r\n\r\n for (var i = flags.length; i--;) {\r\n var flagName = flags[i][0];\r\n if (flagName == name)\r\n return flags[i][1];\r\n }\r\n\r\n return 0;\r\n }\r\n});","Librarian.Search.Panel = new Class({\r\n Extends: MUI.Panel,\r\n Implements: Librarian.Search.Container,\r\n Binds: [\"onSearchLoaded\", \"onReturnTypeChanged\", \"loadSearchOptions\", \"onSearchForChanged\",\r\n \"onSearchWithinClicked\", \"closeCatSelectWindow\", \"onAttributesLoaded\", \"onMetaCategorySelectClicked\",\r\n \"onSearchFileTypeAddClicked\", \"onSearchFileTypeRemoveClicked\", \"onFileTypesLoaded\",\r\n \"loadRequestDataList\", \"loadFileTypeList\", \"getFileTypeExtensions\", \"submit\",\r\n \"useLastSearchOptions\", \"useSearchOptions\", \"clearSearch\", \"doSearchTerm\"],\r\n\r\n options: {\r\n id: \"searchPanel\",\r\n resizable: false,\r\n width: 260\r\n },\r\n\r\n loaded: false,\r\n fileTypes: null,\r\n catSelectWindow: null,\r\n selectedOptionType: '',\r\n searchMatchRules: {\r\n \"Any Words\": \"OR\",\r\n \"All Words\": \"AND\",\r\n \"Exact Phrase\": \"EXACT\"\r\n },\r\n\r\n initialize: function(options) {\r\n this.setOptions(options);\r\n this.options.contentURL = Librarian.path.getLibraryPath() + \"search.html?\" + Librarian.buildVersion;\r\n\r\n this.options.onContentLoaded = this.onContentLoaded;\r\n this.options.onShow = this.onShow;\r\n\r\n this.parent(this.options);\r\n },\r\n\r\n onContentLoaded: function() {\r\n this.hide();\r\n },\r\n\r\n onShow: function() {\r\n if (!this.loaded) {\r\n this.loaded = true;\r\n this.loadPanel();\r\n }\r\n },\r\n\r\n loadPanel: function() {\r\n this.onSearchLoaded({ id: this.options.id });\r\n\r\n var itemEl = $(\"searchReturnType\");\r\n if (itemEl)\r\n itemEl.addEvent(\"change\", this.onReturnTypeChanged);\r\n\r\n itemEl = $$(\"[name=subType]\");\r\n itemEl.each(function(el) {\r\n if (el.get(\"tag\") == \"select\") {\r\n el.addEvent(\"change\", function() {\r\n var selectedEl = el.getElement(\":selected\");\r\n this.onSearchForChanged(selectedEl);\r\n }.bind(this));\r\n\r\n var selectedEl = el.getElement(\":selected\");\r\n if (selectedEl) {\r\n this.onSearchForChanged(selectedEl);\r\n }\r\n } else {\r\n el.addOnClick(function(e) {\r\n var evt = new Event(e);\r\n this.onSearchForChanged($(evt.target));\r\n }, this);\r\n\r\n if (el.checked)\r\n this.onSearchForChanged(el);\r\n }\r\n }.bind(this));\r\n\r\n itemEl = $$(\".subType\");\r\n itemEl.each(function (el, index, obj) {\r\n el.addOnClick(function (e) {\r\n obj.getParent(\"li\").removeClass(\"selected\");\r\n el.getParent(\"li\").addClass(\"selected\");\r\n var evt = new Event(e);\r\n this.onSearchForChanged($(evt.target));\r\n }, this);\r\n\r\n if (el.getParent(\"li\").hasClass(\"selected\"))\r\n this.onSearchForChanged(el);\r\n }.bind(this));\r\n\r\n itemEl = $$(\".searchTermRule\");\r\n itemEl.each(function(el, index, obj) {\r\n el.addOnClick(function() {\r\n obj.removeClass(\"selected\");\r\n el.addClass(\"selected\");\r\n });\r\n });\r\n\r\n itemEl = $$(\".search-term\");\r\n itemEl.each(function(el) {\r\n el.setAttribute(\"placeholder\", Librarian.Lang.getString(\"search_advanced_empty\"));\r\n }.bind(this));\r\n\r\n itemEl = $(\"searchPresentationContent\");\r\n if (itemEl) {\r\n itemEl.addOnClick(function() {\r\n this.onContentChecked($(\"searchPresentationContent\"), \".search-pres-content\");\r\n }, this);\r\n }\r\n\r\n itemEl = $$(\".search-pres-content\");\r\n itemEl.each(function(el) {\r\n el.addOnClick(function() {\r\n this.onContentItemChecked($(\"searchPresentationContent\"), \".search-pres-content\");\r\n }, this);\r\n }.bind(this));\r\n\r\n itemEl = $(\"searchFilesContent\");\r\n if (itemEl) {\r\n itemEl.addOnClick(function() {\r\n this.onContentChecked($(\"searchFilesContent\"), \".search-files-content\");\r\n }, this);\r\n }\r\n\r\n itemEl = $$(\".search-files-content\");\r\n itemEl.each(function(el) {\r\n el.addOnClick(function() {\r\n this.onContentItemChecked($(\"searchFilesContent\"), \".search-files-content\");\r\n }, this);\r\n }.bind(this));\r\n\r\n itemEl = $(\"searchGroupContent\");\r\n if (itemEl) {\r\n itemEl.addOnClick(function() {\r\n this.onContentChecked($(\"searchGroupContent\"), \".search-group-content\");\r\n }, this);\r\n }\r\n\r\n itemEl = $$(\".search-group-content\");\r\n itemEl.each(function(el) {\r\n el.addOnClick(function() {\r\n this.onContentItemChecked($(\"searchGroupContent\"), \".search-group-content\");\r\n }, this);\r\n }.bind(this));\r\n\r\n var disableSearchWithin = true;\r\n itemEl = $(\"searchWithinAll\");\r\n if (itemEl) {\r\n itemEl.addOnClick(this.onSearchWithinAllClicked);\r\n\r\n if (itemEl.checked)\r\n disableSearchWithin = true;\r\n }\r\n\r\n itemEl = $(\"searchWithinText\");\r\n if (itemEl) {\r\n itemEl.set(\"disabled\", disableSearchWithin);\r\n this.loadSelectedCategoryName();\r\n }\r\n\r\n itemEl = $(\"searchWithinButton\");\r\n if (itemEl) {\r\n if (disableSearchWithin)\r\n itemEl.addClass(\"disabled\");\r\n itemEl.set(\"disabled\", disableSearchWithin);\r\n itemEl.addOnClick(this.onSearchWithinClicked);\r\n }\r\n\r\n itemEl = $(\"searchContentMetaLists\");\r\n if (itemEl) {\r\n (function() {\r\n var attrLoadedCount = 2;\r\n var attrs = [];\r\n var self = this;\r\n\r\n var onFileAndGroupMetaListLoaded = function(data) {\r\n attrLoadedCount--;\r\n attrs = attrs.concat(data.data);\r\n\r\n if (!attrLoadedCount) {\r\n var intersectAttr = [];\r\n\r\n for (var i = 0, len = attrs.length; i < len; i++) {\r\n var isDuplicate = false;\r\n for (var j = 0, len2 = intersectAttr.length; j < len2; j++) {\r\n if (intersectAttr[j].id === attrs[i].id) {\r\n isDuplicate = true;\r\n intersectAttr[j].contentType = intersectAttr[j].contentType + \";\" + attrs[i].contentType;\r\n break;\r\n }\r\n }\r\n\r\n if (!isDuplicate) {\r\n intersectAttr.push(attrs[i]);\r\n }\r\n }\r\n\r\n self.onAttributesLoaded({\r\n data: intersectAttr\r\n }, $(\"searchContentMetaLists\"));\r\n }\r\n }\r\n\r\n var fileMeta = $(\"searchFilesMetaLists\");\r\n if (fileMeta) {\r\n fileMeta.addEvent(\"attributesLoaded\", onFileAndGroupMetaListLoaded);\r\n }\r\n\r\n var groupMeta = $(\"searchGroupsMetaLists\");\r\n if (groupMeta) {\r\n groupMeta.addEvent(\"attributesLoaded\", onFileAndGroupMetaListLoaded);\r\n }\r\n }).call(this);\r\n }\r\n\r\n itemEl = $(\"searchFilesMetaLists\");\r\n if (itemEl) {\r\n var request = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getfatl\") + \"&all=0&out=dgrid\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: function(json) {\r\n json.data = json.data.map(function(datum) {\r\n datum.contentType = Librarian.contentType.file;\r\n return datum;\r\n });\r\n this.onAttributesLoaded(json, $(\"searchFilesMetaLists\"));\r\n }.bind(this)\r\n });\r\n request.send();\r\n }\r\n\r\n itemEl = $(\"searchSlidesMetaLists\");\r\n if (itemEl) {\r\n var request = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getsatl\") + \"&all=0&out=dgrid\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: function(json) {\r\n json.data = json.data.map(function(datum) {\r\n datum.contentType = Librarian.contentType.slide;\r\n return datum;\r\n });\r\n this.onAttributesLoaded(json, $(\"searchSlidesMetaLists\"));\r\n }.bind(this)\r\n });\r\n request.send();\r\n }\r\n\r\n itemEl = $(\"searchGroupsMetaLists\");\r\n if (itemEl) {\r\n var request = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getgatl\") + \"&all=0&out=dgrid\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: function(json) {\r\n json.data = json.data.map(function(datum) {\r\n datum.contentType = Librarian.contentType.contentGroup;\r\n return datum;\r\n });\r\n this.onAttributesLoaded(json, $(\"searchGroupsMetaLists\"));\r\n }.bind(this)\r\n });\r\n request.send();\r\n }\r\n\r\n itemEl = $(\"searchFileTypeAddButton\");\r\n if (itemEl)\r\n itemEl.addOnClick(this.onSearchFileTypeAddClicked);\r\n\r\n itemEl = $(\"searchFileTypeRemoveButton\");\r\n if (itemEl)\r\n itemEl.addOnClick(this.onSearchFileTypeRemoveClicked);\r\n\r\n itemEl = $(\"searchRequestDataCont\");\r\n if (itemEl && (typeOf(Librarian.search.requestDataList) == \"array\") && (Librarian.search.requestDataList.length > 0)) {\r\n itemEl.show();\r\n this.loadRequestDataList();\r\n }\r\n\r\n $$(\".search-file-type\").each(function(el) {\r\n el.addEvent(\"change\", this.loadSearchOptions);\r\n }.bind(this));\r\n\r\n Librarian.Utils.getFileTypes(this.onFileTypesLoaded);\r\n\r\n itemEl = $(\"searchSubmit\");\r\n if (itemEl)\r\n itemEl.addOnClick(this.submit);\r\n\r\n itemEl = $(\"clear_advance_search\");\r\n if (itemEl)\r\n itemEl.addOnClick(this.clearSearch);\r\n\r\n this.onReturnTypeChanged();\r\n Librarian.Lang.translateElements(this.windowEl);\r\n\r\n itemEl = null;\r\n },\r\n\r\n onContentChecked: function(checkEl, checksClass) {\r\n if (!checkEl)\r\n return;\r\n\r\n var checks = $$(checksClass);\r\n // Set the check state of all the children to match the parent\r\n for (var i = 0; i < checks.length; i++)\r\n checks[i].set(\"checked\", checkEl.checked);\r\n },\r\n\r\n onContentItemChecked: function(checkEl, checksClass) {\r\n if (!checkEl)\r\n return;\r\n\r\n var checks = $$(checksClass),\r\n checked = 0;\r\n // Count how many of the child check marks are checked\r\n for (var i = 0; i < checks.length; i++) {\r\n if (checks[i].checked)\r\n checked++;\r\n }\r\n\r\n // If they are all checked, check the parent\r\n if (checked == checks.length)\r\n checkEl.set(\"checked\", true);\r\n // Otherwise, uncheck it\r\n else\r\n checkEl.set(\"checked\", false);\r\n },\r\n\r\n onReturnTypeChanged: function(showFileSubOptions) {\r\n var selectEl = $(\"searchReturnType\");\r\n if (!selectEl)\r\n return;\r\n\r\n var selectedIndex = Math.max(0, selectEl.selectedIndex || 0),\r\n optionid = \"searchReturn\" + selectEl.options[selectedIndex].value.toCapitalCase() + \"Options\",\r\n excludeList = [];\r\n\r\n var subType = this.getSelectedSubType();\r\n // If there is a \"Search For\" list, get the exluded return type options list, if it has one\r\n if (subType)\r\n excludeList = subType.returnType.optionExcludes || [];\r\n\r\n var shownAttrib = {},\r\n shownOption = {};\r\n for (var i = 0, length = Librarian.Search.Panel.returnTypes.length; i < length; i++) {\r\n var enabled = Librarian.Search.Panel.returnTypes[i].enabled;\r\n if (typeof enabled == \"function\")\r\n enabled = enabled();\r\n\r\n var name = Librarian.Search.Panel.returnTypes[i].name.trim(),\r\n optionType = Librarian.Search.Panel.returnTypes[i].getOptionType(),\r\n attribType = Librarian.Search.Panel.returnTypes[i].attribType.toCapitalCase().trim(),\r\n id = \"searchReturn\" + optionType + \"Options\",\r\n optionsEl = $(id);\r\n\r\n // If this is the target item and it's not in the options exclude list, show the options\r\n if (enabled && (id == optionid) && !excludeList.contains(name)) {\r\n if (optionsEl)\r\n optionsEl.show();\r\n\r\n var wasGroup = false, isGroup = false;\r\n if (this.selectedOptionType.length > 0) {\r\n wasGroup = this.selectedOptionType.contains(\"Group\");\r\n isGroup = optionType.contains(\"Group\");\r\n }\r\n\r\n this.selectedOptionType = optionType;\r\n\r\n // If we're switching from groups to non-groups, reload the selected categories\r\n if (wasGroup != isGroup)\r\n this.loadSelectedCategoryName();\r\n\r\n if (optionType == \"Files\") {\r\n var subOptionsEl = $(\"searchReturn\" + optionType + \"SubOptions\");\r\n if (subOptionsEl) {\r\n if (showFileSubOptions !== false)\r\n subOptionsEl.show();\r\n else\r\n subOptionsEl.hide();\r\n }\r\n }\r\n\r\n // Show the attribute list if there are attributes to select\r\n var listEl = $(\"search\" + attribType + \"MetaLists\");\r\n var show = (listEl && (listEl.getChildren().length > 0));\r\n this.showAttributeOptions(attribType, show, show);\r\n\r\n // Keep track of what we've shown already so it doesn't get hidden laster\r\n shownAttrib[attribType] = show;\r\n shownOption[optionType] = true;\r\n\r\n this.loadSearchOptions();\r\n\r\n // Do not show category selection if searching for content\r\n var searchWithin = $(\"search-within-category\");\r\n if (searchWithin) {\r\n if (name == \"Content\") {\r\n searchWithin.hide();\r\n } else {\r\n searchWithin.show();\r\n }\r\n }\r\n }\r\n // If these haven't already been shown, hide them\r\n else {\r\n if ((shownOption[optionType] !== true) && optionsEl)\r\n optionsEl.hide();\r\n\r\n if (shownAttrib[attribType] !== true)\r\n this.showAttributeOptions(attribType, false);\r\n }\r\n\r\n }\r\n },\r\n\r\n showAttributeOptions: function(type, show, showContainer) {\r\n var attrEl = $(\"search\" + type + \"Attributes\");\r\n if (attrEl) {\r\n if (show)\r\n attrEl.show();\r\n else\r\n attrEl.hide();\r\n }\r\n\r\n if (typeof showContainer == \"boolean\") {\r\n var contEl = $(\"searchAttributes\");\r\n if (contEl) {\r\n if (showContainer)\r\n contEl.show();\r\n else\r\n contEl.hide();\r\n }\r\n }\r\n },\r\n\r\n loadSearchOptions: function() {\r\n var selectEl = $(\"searchReturnType\");\r\n if (!selectEl)\r\n return;\r\n\r\n var optionsEl = $(selectEl.options[selectEl.selectedIndex].id + \"Options\");\r\n if (!optionsEl)\r\n return;\r\n\r\n var optionEls = optionsEl.getElements(\".search-option\"),\r\n fileTypes = this.getSelectedFileTypes(),\r\n extensions = this.getFileTypeExtensions(),\r\n shown = 0;\r\n\r\n // Check each option\r\n for (var i = 0; i < optionEls.length; i++) {\r\n var types = optionEls[i].getAttribute(\"types\"),\r\n show = false;\r\n\r\n // If there are types\r\n if (types != null) {\r\n types = types.split(';');\r\n\r\n // Make sure at least one of the types we have available is in the list of types for this option\r\n for (var j = 0; j < types.length; j++) {\r\n var hasType = extensions.some(function(extension) {\r\n return extension.toLowerCase().startsWith(types[j].toLowerCase());\r\n });\r\n\r\n if (hasType) {\r\n // If the type is present, make sure the type we have selected is \"All Types\" or one of them as well\r\n show = ((fileTypes.length == 1) && (fileTypes[0] == \"all types\")) || fileTypes.some(function(fileType) {\r\n return fileType.startsWith(types[j].toLowerCase());\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n else\r\n show = true;\r\n\r\n // Keep track of how many options are shown\r\n if (show) {\r\n optionEls[i].show();\r\n shown++;\r\n }\r\n else\r\n optionEls[i].hide();\r\n }\r\n\r\n // If no options are available, hide the container\r\n if (shown == 0)\r\n optionsEl.hide();\r\n else\r\n optionsEl.show();\r\n },\r\n\r\n loadRequestDataList: function() {\r\n var contEl = $(\"searchRequestData\");\r\n if (!contEl)\r\n return;\r\n\r\n var data = Array.from(Librarian.search.requestDataList);\r\n for (var i = 0, length = data.length; i < length; i++) {\r\n var requestContEl = new Element(\"div\", { \"class\": \"pure-g-r search-request-container\" }).injectInside(contEl);\r\n new Element(\"div\", { \"class\": \"pure-u-1-3 search-request-name\", \"text\": data[i] }).injectInside(requestContEl);\r\n var requestInputContEl = new Element(\"div\", { \"class\": \"pure-u-2-3\" }).injectInside(requestContEl);\r\n\r\n new Element(\"input[type=text]\", {\r\n \"class\": \"search-request-value\",\r\n \"spellcheck\": \"true\"\r\n }).injectInside(requestInputContEl);\r\n }\r\n },\r\n\r\n getSelectedFileTypes: function() {\r\n var fileTypes = [];\r\n\r\n // Build the list of selected file types\r\n $$(\".search-file-type\").each(function(el) {\r\n // Don't check this element if it's hidden\r\n if (!el.isVisible())\r\n return;\r\n\r\n var fileType = Librarian.Utils.getSelectedValue(el);\r\n if (fileType == null)\r\n return;\r\n\r\n fileType = fileType.toLowerCase();\r\n if ((fileType.length > 0) && !fileTypes.contains(fileType))\r\n fileTypes.push(fileType);\r\n });\r\n\r\n return fileTypes;\r\n },\r\n\r\n getSelectedSubType: function() {\r\n var subTypeEls = $$(\"[name=subType]\"),\r\n check = function(type) {\r\n for (var j = Librarian.Search.Panel.searchFor.length; j--;) {\r\n if (Librarian.Search.Panel.searchFor[j].name == type)\r\n return Librarian.Search.Panel.searchFor[j];\r\n }\r\n return false;\r\n },\r\n type;\r\n if (subTypeEls.length > 0) {\r\n for (var i = subTypeEls.length; i--;) {\r\n var targetEl = subTypeEls[i];\r\n var value;\r\n\r\n if (targetEl.get(\"tag\") == \"select\") {\r\n value = Librarian.Utils.getElementValue(targetEl);\r\n } else {\r\n if (targetEl.checked) {\r\n value = targetEl.value; \r\n }\r\n }\r\n\r\n if (value) {\r\n type = check(value);\r\n }\r\n\r\n if (type) {\r\n return type;\r\n } \r\n }\r\n }\r\n else {\r\n // New style of search html uses tabs with className\r\n var itemEl = $$(\".subTypeWrapper.selected\")[0];\r\n if (itemEl) {\r\n itemEl = itemEl.getChildren()[0];\r\n if (itemEl) {\r\n var retType = Librarian.Utils.getElementValue(itemEl);\r\n if (retType) {\r\n type = check(retType);\r\n if (type)\r\n return type;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n\r\n onSearchForChanged: function(itemEl) {\r\n if (!itemEl)\r\n return;\r\n\r\n var fileTypeEl = $(\"searchFileTypes\"),\r\n selectedType = Librarian.Utils.getElementValue(itemEl, true);\r\n\r\n // Go through each of the \"Search for\" options to find the one we want\r\n for (var i = Librarian.Search.Panel.searchFor.length; i--;) {\r\n if (selectedType == Librarian.Search.Panel.searchFor[i].name) {\r\n // Show or hide file types as needed\r\n if (fileTypeEl) {\r\n if (Librarian.Search.Panel.searchFor[i].showFileTypes !== false) {\r\n this.loadFileTypeList();\r\n fileTypeEl.show();\r\n }\r\n else\r\n fileTypeEl.hide();\r\n }\r\n\r\n // Get this \"Search for\" entry's return types\r\n var returnTypes = Librarian.Search.Panel.searchFor[i].returnType.types;\r\n if (returnTypes) {\r\n var returnTypesEl = $(\"searchReturnType\");\r\n if (!returnTypesEl)\r\n break;\r\n\r\n returnTypesEl.options.length = 0;\r\n returnTypesEl.selectedIndex = 0;\r\n\r\n // Add each of the return types to the dropdown list\r\n for (var j = 0, typeLength = Librarian.Search.Panel.returnTypes.length; j < typeLength; j++) {\r\n if (!returnTypes.contains(Librarian.Search.Panel.returnTypes[j].getOptionType()))\r\n continue;\r\n if (Librarian.Search.Panel.returnTypes[j].enabled === false)\r\n continue;\r\n if ((typeof Librarian.Search.Panel.returnTypes[j].enabled == \"function\") && !Librarian.Search.Panel.returnTypes[j].enabled())\r\n continue;\r\n\r\n var optionName = Librarian.Search.Panel.getResultsOptionName(Librarian.Search.Panel.returnTypes[j].name),\r\n optionEl = new Element(\"option\", {\r\n \"text\": optionName,\r\n \"value\": Librarian.Search.Panel.returnTypes[j].getOptionType().toLowerCase(),\r\n \"id\": \"searchReturn\" + Librarian.Search.Panel.returnTypes[j].getOptionType().replaceAll(' ', '')\r\n });\r\n if (Librarian.Search.Panel.returnTypes[j].select === true)\r\n optionEl.set(\"selected\", true);\r\n optionEl.set(\"attribType\", Librarian.Search.Panel.returnTypes[j].attribType);\r\n\r\n returnTypesEl.appendChild(optionEl);\r\n }\r\n\r\n var parentEl = returnTypesEl.getParent();\r\n if (parentEl)\r\n parentEl[returnTypesEl.options.length == 1 ? \"hide\" : \"show\"]();\r\n\r\n // Load the correct search options\r\n this.onReturnTypeChanged(Librarian.Search.Panel.searchFor[i].showFileSubOptions);\r\n }\r\n break;\r\n }\r\n }\r\n },\r\n\r\n onSearchWithinAllClicked: function() {\r\n var checkEl = $(\"searchWithinAll\");\r\n if (!checkEl)\r\n return;\r\n\r\n var searchWithinEl = $(\"searchWithinText\");\r\n if (searchWithinEl)\r\n searchWithinEl.set(\"disabled\", checkEl.checked);\r\n\r\n searchWithinEl = $(\"searchWithinButton\");\r\n if (searchWithinEl) {\r\n searchWithinEl[(checkEl.checked ? \"add\" : \"remove\") + \"Class\"](\"disabled\");\r\n searchWithinEl.set(\"disabled\", checkEl.checked);\r\n }\r\n },\r\n\r\n onSearchWithinClicked: function() {\r\n var searchWithinEl = $(\"searchWithinText\");\r\n if (!searchWithinEl || searchWithinEl.disabled)\r\n return;\r\n var searchWithinIDEl = $(\"searchWithinID\");\r\n if (!searchWithinIDEl)\r\n return;\r\n\r\n var catType = Librarian.catType.file;\r\n if (this.selectedOptionType.contains(\"Group\"))\r\n catType = Librarian.catType.globalFavorite;\r\n\r\n this.closeCatSelectWindow();\r\n this.catSelectWindow = new Librarian.CategorySelectWindow({\r\n catType: catType,\r\n selectedCategories: Librarian.Utils.getElementValue(searchWithinEl),\r\n selectedCategoryIDs: Librarian.Utils.getElementValue(searchWithinIDEl),\r\n onCloseComplete: function() {\r\n Librarian.Utils.setElementValue(searchWithinEl, this.catSelectWindow.options.selectedCategories);\r\n Librarian.Utils.setElementValue(searchWithinIDEl, this.catSelectWindow.options.selectedCategoryIDs);\r\n this.catSelectWindow = null;\r\n }.bind(this)\r\n });\r\n this.catSelectWindow.show();\r\n },\r\n\r\n closeCatSelectWindow: function() {\r\n if (this.catSelectWindow) {\r\n this.catSelectWindow.close();\r\n this.catSelectWindow = null;\r\n }\r\n },\r\n\r\n onAttributesLoaded: function(json, contEl) {\r\n if (!json || !json.data || (json.data.length == 0) || !contEl)\r\n return;\r\n\r\n var metaList = json.data;\r\n for (var i = 0, length = metaList.length; i < length; i++) {\r\n if (!metaList[i].searchable)\r\n continue;\r\n\r\n var metaName = metaList[i].name.replaceAll(' ', ''),\r\n metaContEl = new Element(\"div\", { \"class\": \"pure-g-r search-meta-container\" }).injectInside(contEl),\r\n type = metaList[i].contentType || \"\",\r\n id = (metaName + \"Options-\" + type).toCapitalCase(),\r\n metaNameClass = \"search-meta-name\";\r\n new Element(\"div\", { \"class\": \"pure-u-1-3\", \"html\": \"\" + metaList[i].name + \"\" }).injectInside(metaContEl);\r\n var metaInputContEl = new Element(\"div\", { \"class\": \"pure-u-2-3\" }).injectInside(metaContEl);\r\n\r\n var metaValueClass = \"search-meta-value\";\r\n if (metaList[i].dropdown) {\r\n var selectEl = new Element(\"select\", {\r\n \"id\": id,\r\n \"class\": metaValueClass,\r\n \"multiple\": \"multiple\",\r\n \"contentType\": type\r\n }).injectInside(metaInputContEl);\r\n\r\n // Load the values into the selects\r\n Librarian.Utils.getAttributeDropdownValues(metaList[i].id, metaList[i].name, this.onAttributeValuesLoaded.bind(selectEl));\r\n }\r\n else if (metaList[i].categorized) {\r\n new Element(\"input[type=text]\", {\r\n \"id\": id,\r\n \"class\": metaValueClass + \" search-meta-categorized\",\r\n \"readonly\": \"readonly\",\r\n \"contentType\": type\r\n }).injectInside(metaInputContEl);\r\n var buttonEl = new Element(\"span\", {\r\n \"id\": id + \"Button\",\r\n \"class\": \"search-meta-categorized-button pointer\",\r\n \"title\": Librarian.Lang.getString(\"search_meta_select_categories\")\r\n }).injectInside(metaInputContEl);\r\n\r\n buttonEl.addOnClick(this.onMetaCategorySelectClicked.pass([metaList[i], id]));\r\n }\r\n else if (metaList[i].datatype == Librarian.attributeDataType.bool) {\r\n var selectEl = new Element(\"select\", {\r\n \"id\": id,\r\n \"class\": metaValueClass,\r\n \"contentType\": type\r\n }).injectInside(metaInputContEl);\r\n Librarian.Utils.fillSelect(selectEl, ['', \"true\", \"false\"], true);\r\n }\r\n else if (metaList[i].datatype == Librarian.attributeDataType.datetime) {\r\n new Element(\"input[type=text]\", {\r\n \"id\": id,\r\n \"class\": metaValueClass + \" search-meta-date \" + (metaName + \"Date\"),\r\n \"contentType\": type\r\n }).injectInside(metaInputContEl);\r\n new Element(\"span\", {\r\n \"id\": id + \"DateIcon\",\r\n \"class\": \"pointer ico-search-date search-meta-date-icon\",\r\n \"contentType\": type\r\n }).injectInside(metaInputContEl);\r\n\r\n this.datePickers[metaName] = Librarian.Utils.setUpDatePicker(metaName + \"Date\", id, id + \"DateIcon\", this.options.id, this.closeDatePickers.bind(this), this.defaultDateOptions);\r\n }\r\n else {\r\n new Element(\"input[type=text]\", {\r\n \"id\": id,\r\n \"class\": metaValueClass,\r\n \"spellcheck\": \"true\",\r\n \"contentType\": type\r\n }).injectInside(metaInputContEl);\r\n }\r\n }\r\n\r\n this.onReturnTypeChanged();\r\n contEl.fireEvent(\"attributesLoaded\", json);\r\n },\r\n\r\n onAttributeValuesLoaded: function(json, attribName) {\r\n if (!json || (json.length == 0))\r\n return;\r\n\r\n this.options.add(new Option('', ''));\r\n\r\n for (var i = 0, length = json.length; i < length; i++)\r\n this.options.add(new Option(json[i], json[i]));\r\n\r\n // Select the default value \r\n if (Librarian.search.defaultAttributeValues) {\r\n var defaults = Librarian.search.defaultAttributeValues;\r\n if (defaults[attribName])\r\n Librarian.Utils.setElementValue(this, defaults[attribName]);\r\n }\r\n },\r\n\r\n onMetaCategorySelectClicked: function(meta, inputId) {\r\n var inputEl = $(inputId);\r\n if (!inputEl)\r\n return;\r\n\r\n // Load window with categories in tree view for selection\r\n var metaWindow = new Librarian.Window.MetaTreeWindow({\r\n attributeId: meta.id,\r\n selectedData: JSON.parse(inputEl.get(\"selectedData\") || \"[]\"),\r\n checkChildren: Librarian.search.includeCategorizedMetaChildren && Librarian.search.checkCategorizedMetaChildren,\r\n onSubmit: function(selected) {\r\n var inputEl = $(inputId);\r\n if (!inputEl)\r\n return;\r\n\r\n var names = selected.map(function(item) {\r\n return item.name;\r\n });\r\n\r\n // Save the full list\r\n inputEl.set(\"selectedData\", JSON.stringify(selected));\r\n\r\n Librarian.Utils.setElementValue(inputEl, names.join(\"; \"));\r\n }\r\n });\r\n metaWindow.show();\r\n },\r\n\r\n loadSelectedCategoryName: function() {\r\n var searchWithinEl = $(\"searchWithinText\");\r\n if (!searchWithinEl)\r\n return;\r\n var searchWithinIDEl = $(\"searchWithinID\");\r\n if (!searchWithinIDEl)\r\n return;\r\n\r\n var selected = null,\r\n tree;\r\n if (typeof Library.getTreeByType == \"function\") {\r\n var catType = Librarian.catType.file;\r\n if (this.selectedOptionType.contains(\"Group\"))\r\n catType = Librarian.catType.globalFavorite;\r\n tree = Library.getTreeByType(catType);\r\n }\r\n else\r\n tree = treeView;\r\n if (tree)\r\n selected = tree.getSelected();\r\n\r\n if (selected && (selected.data.contenttype == Librarian.contentType.file))\r\n selected = selected.getParent();\r\n\r\n // Load in the currently selected category's name from the tree, if there is one\r\n var name = '',\r\n id = '';\r\n if (selected) {\r\n name = selected.name;\r\n if (selected.data)\r\n id = selected.data.catid;\r\n }\r\n\r\n Librarian.Utils.setElementValue(searchWithinEl, name);\r\n Librarian.Utils.setElementValue(searchWithinIDEl, id);\r\n },\r\n\r\n onSearchFileTypeAddClicked: function(e) {\r\n var evt = new Event(e),\r\n buttonEl = $(evt.target);\r\n if (!buttonEl || buttonEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n // Get the first file type\r\n var typeEl = $$(\".search-file-type\")[0];\r\n if (!typeEl)\r\n return;\r\n\r\n // Clone it\r\n var newTypeEl = typeEl.clone();\r\n newTypeEl.removeClass(\"left\");\r\n newTypeEl.selectedIndex = 0;\r\n newTypeEl.addEvent(\"change\", this.loadSearchOptions);\r\n\r\n // Add it to the end of the list of file types\r\n var parentEl = typeEl.getParent();\r\n if (parentEl) {\r\n parentEl = parentEl.getParent() || parentEl;\r\n parentEl.appendChild(newTypeEl);\r\n }\r\n\r\n // Re-enable the \"Remove\" button\r\n buttonEl = $(\"searchFileTypeRemoveButton\");\r\n if (buttonEl)\r\n buttonEl.removeClass(\"disabled\");\r\n },\r\n\r\n onSearchFileTypeRemoveClicked: function(e) {\r\n var evt = new Event(e),\r\n buttonEl = $(evt.target);\r\n if (!buttonEl || buttonEl.hasClass(\"disabled\"))\r\n return;\r\n\r\n // If there are 2 file types, there will only be one left so we should disable the remove button\r\n var typeEls = $$(\".search-file-type\");\r\n if (typeEls.length <= 2)\r\n buttonEl.addClass(\"disabled\");\r\n\r\n // Get the last term and destroy it\r\n var typeEl = typeEls[typeEls.length - 1];\r\n typeEl.destroy();\r\n\r\n // Reload the search options so that the destroyed file type doesn't show options now that it's gone\r\n this.loadSearchOptions();\r\n },\r\n\r\n onFileTypesLoaded: function(json) {\r\n if (!json || (json.length == 0))\r\n return;\r\n\r\n this.fileTypes = [];\r\n for (var i = 0, length = json.length; i < length; i++) {\r\n var data = json[i];\r\n // Don't display undefined types, slides, or pages\r\n if ((data.FileSubType == Librarian.subType.undefined) || (data.FileSubType == Librarian.subType.slide) || (data.FileSubType == Librarian.subType.page))\r\n continue;\r\n\r\n this.fileTypes.push({\r\n ext: data.FileTypeExtension,\r\n subType: data.FileSubType\r\n });\r\n }\r\n\r\n // Sort by extension\r\n this.fileTypes.sort(function(a, b) {\r\n if (a.ext < b.ext)\r\n return -1;\r\n if (a.ext > b.ext)\r\n return 1;\r\n return 0;\r\n });\r\n\r\n // Add a blank option to make file types optional\r\n this.fileTypes = [{ ext: \"All Types\", subType: null }].append(this.fileTypes);\r\n this.loadFileTypeList();\r\n },\r\n\r\n loadFileTypeList: function() {\r\n var extensions = this.getFileTypeExtensions();\r\n\r\n $$(\".search-file-type\").each(function(el) {\r\n // Save the selected value to restore later\r\n var selectedValue = Librarian.Utils.getSelectedValue(el);\r\n el.options.length = 0;\r\n\r\n Librarian.Utils.fillSelect(el, extensions);\r\n Librarian.Utils.setSelectValue(el, selectedValue);\r\n });\r\n },\r\n\r\n getFileTypeExtensions: function() {\r\n var subTypes = null,\r\n searchFor = this.getSelectedSubType();\r\n // If there is a \"Search For\" list, get the list of sub types it represents\r\n if (searchFor)\r\n subTypes = searchFor.subTypes;\r\n\r\n if (!this.fileTypes)\r\n return [];\r\n\r\n // Filter out the items with the correct sub type (and leave the default empty one in there too)\r\n var extensions = this.fileTypes.filter(function(item) {\r\n return (subTypes == null) || (subTypes.contains(item.subType)) || (item.ext == \"All Types\");\r\n // Then pull out just their extensions\r\n }).map(function(item) {\r\n return item.ext;\r\n });\r\n\r\n return extensions;\r\n },\r\n\r\n clearSearch: function () {\r\n var options = this.options,\r\n self = this;\r\n\r\n MUI.updateContent({\r\n 'element': this.panelEl,\r\n 'content': options.content,\r\n 'method': options.method,\r\n 'data': options.data,\r\n 'url': options.contentURL,\r\n 'onContentLoaded': function() {\r\n self.loaded = false;\r\n self.onShow();\r\n self.panelWrapperEl.show();\r\n },\r\n 'require': {\r\n js: options.require.js,\r\n onload: options.require.onload\r\n }\r\n });\r\n },\r\n\r\n submit: function() {\r\n // If there's no search, we can't continue.\r\n if (!Librarian.Search) {\r\n Librarian.Utils.error(Librarian.Lang.getString(\"search_unavailable\"));\r\n return;\r\n }\r\n\r\n // Build the search object\r\n var searched = true,\r\n search = new Librarian.Search();\r\n\r\n // Load in term (obeying selected search options)\r\n var termEl = $$(\".search-term\")[0],\r\n defaultValue = Librarian.Lang.getString(\"search_advanced_empty\"),\r\n term = (Librarian.Utils.getElementValue(termEl) || '').trim(),\r\n searchData = {};\r\n\r\n if (term !== defaultValue)\r\n searchData[Librarian.Lang.getString(\"search_term\")] = term;\r\n else if (Librarian.search.allowEmptySearchTerm) {\r\n searchData[Librarian.Lang.getString(\"search_term\")] = \"\";\r\n }\r\n\r\n var searchMethod = null,\r\n operator = \"Contains\",\r\n itemEl = $(\"searchTermMethod\"),\r\n selectedEl = null;\r\n if (itemEl) {\r\n if (itemEl.get(\"tag\") == \"select\") {\r\n selectedEl = itemEl.getElement(\":selected\");\r\n } else {\r\n selectedEl = itemEl.getElement(\".searchTermRule.selected\");\r\n }\r\n\r\n if (selectedEl) {\r\n // Get the text for the selected item\r\n var methodName = selectedEl.get(\"data-method\") || selectedEl.get('text'),\r\n // Split on space and convert all values to proper capital case\r\n values = methodName.split(' ').invoke(\"toCapitalCase\");\r\n\r\n searchMethod = this.searchMatchRules[methodName];\r\n\r\n // Add the rest of the data to the seach data\r\n searchData[Librarian.Lang.getString(\"match\")] = values.join(' ');\r\n }\r\n }\r\n\r\n itemEl = $(\"searchReturnType\");\r\n var outputType = Librarian.search.defaultOutputType,\r\n returnType = null,\r\n // Load in file sub type\r\n subType = this.getSelectedSubType(),\r\n attribType = null,\r\n optionType = null;\r\n\r\n if (itemEl) {\r\n var optionEl = $(Librarian.Utils.getSelectedItem(itemEl));\r\n if (optionEl) {\r\n returnType = optionEl.get(\"text\");\r\n attribType = optionEl.get(\"attribType\");\r\n optionType = optionEl.value;\r\n\r\n var type = optionType.toCapitalCase();\r\n if ((optionType == \"content\")) {\r\n outputType = Librarian.Search.outputTypes.ALLCONTENT;\r\n } else if ((optionType == \"files\") || (optionType == \"presentations\"))\r\n outputType = Librarian.Search.outputTypes.FILES;\r\n else if ((optionType == \"slides\") || (optionType == \"pages\") || (returnType == \"Return Group Content\"))\r\n outputType = Librarian.Search.outputTypes.SLIDES;\r\n else\r\n outputType = Librarian.Search.outputTypes.GROUPS;\r\n\r\n if (returnType == \"Return Group Content\")\r\n type = \"Group Content\";\r\n\r\n // Set the \"Return Results by\" header\r\n searchData[Librarian.Lang.getString(\"search_returnby\")] = (subType ? subType.name + \" > \" : '') + type;\r\n }\r\n }\r\n\r\n var fileFlags = [],\r\n slideFlags = [],\r\n groupFlags = [];\r\n\r\n // Keep track of whether to use file and slide keywords\r\n var includeFileKeyword = false,\r\n includeSlideKeyword = false,\r\n includeGroupKeyword = false;\r\n\r\n for (var i = 0, length = Librarian.Search.Panel.returnTypes.length; i < length; i++) {\r\n var id = \"searchReturn\" + Librarian.Search.Panel.returnTypes[i].getOptionType() + \"Options\";\r\n itemEl = $(id);\r\n if (itemEl && itemEl.isVisible()) {\r\n var optionEls = itemEl.getElements(\".search-option\");\r\n for (var j = 0, optionLength = optionEls.length; j < optionLength; j++) {\r\n if (!optionEls[j].isVisible())\r\n continue;\r\n\r\n var optionEl = optionEls[j].getChildren(\"label > input\")[0];\r\n if (!optionEl || !optionEl.checked)\r\n continue;\r\n\r\n var optionParentEl = optionEl.getParent(),\r\n value = null,\r\n type = -1;\r\n if (optionParentEl)\r\n value = optionParentEl.get(\"text\").trim();\r\n\r\n var slideValue = (optionEl.getAttribute(\"slideValue\") || '').trim();\r\n if (slideValue.length > 0) {\r\n if (!slideFlags.contains(slideValue)) {\r\n slideFlags.push(slideValue);\r\n type = Librarian.Search.outputTypes.SLIDES;\r\n }\r\n }\r\n\r\n var fileValue = (optionEl.getAttribute(\"fileValue\") || '').trim();\r\n if (fileValue.length > 0) {\r\n if (!fileFlags.contains(fileValue)) {\r\n fileFlags.push(fileValue);\r\n type = Librarian.Search.outputTypes.FILES;\r\n }\r\n }\r\n\r\n var groupValue = (optionEl.getAttribute(\"groupValue\") || '').trim();\r\n if (groupValue.length > 0) {\r\n if (!groupFlags.contains(groupValue)) {\r\n groupFlags.push(groupValue);\r\n type = Librarian.Search.outputTypes.GROUPS;\r\n }\r\n }\r\n\r\n \r\n var searchType = (optionEl.getAttribute(\"searchType\") || '').trim();\r\n if (searchType.length > 0) {\r\n if (searchType == \"slideKW\") {\r\n if (!includeSlideKeyword)\r\n type = Librarian.Search.outputTypes.SLIDES;\r\n\r\n includeSlideKeyword = true;\r\n }\r\n else if (searchType == \"fileKW\") {\r\n if (!includeFileKeyword)\r\n type = Librarian.Search.outputTypes.FILES;\r\n\r\n includeFileKeyword = true;\r\n }\r\n else if (searchType == \"groupKW\") {\r\n if (!includeGroupKeyword)\r\n type = Librarian.Search.outputTypes.GROUPS;\r\n\r\n includeGroupKeyword = true;\r\n }\r\n else if (searchType == \"contentKW\") {\r\n type = Librarian.Search.outputTypes.ALLCONTENT;\r\n\r\n includeFileKeyword = true;\r\n includeGroupKeyword = true;\r\n }\r\n }\r\n\r\n if (outputType == Librarian.Search.outputTypes.ALLCONTENT) {\r\n type = Librarian.Search.outputTypes.ALLCONTENT;\r\n }\r\n\r\n // If we added something and we have a valid value\r\n if ((value != null) && (value.length > 0)) {\r\n var dataName = Librarian.Lang.getArgString(\"search_options\", [Librarian.Search.Panel.returnTypes[i].name]);\r\n\r\n // Check if we already have data on this option\r\n // If not add it, if so, append it\r\n if ((typeof searchData[dataName] == \"undefined\") || (searchData[dataName] == null))\r\n searchData[dataName] = { value: value, type: type };\r\n else\r\n searchData[dataName].value = searchData[dataName].value + \", \" + value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Only search for everything if nothing is checked\r\n var useAllFlagsOnEmpty = false;\r\n if ((fileFlags.length == 0) && (slideFlags.length == 0) && (groupFlags.length == 0) && !includeSlideKeyword && !includeFileKeyword && !includeGroupKeyword)\r\n useAllFlagsOnEmpty = includeSlideKeyword = includeFileKeyword = includeGroupKeyword = Librarian.search.searchAllFlagsIfAllOptionsChecked;\r\n\r\n // Sum the file flag values, if there are any, or use the default value\r\n if (fileFlags.length == 0)\r\n fileFlags = useAllFlagsOnEmpty ? -1 : 0;\r\n else {\r\n var value = 0;\r\n for (var i = fileFlags.length; i--;)\r\n value += fileFlags[i].toInt();\r\n fileFlags = value;\r\n }\r\n\r\n // Sum the slide flag values, if there are any, or use the default value\r\n if (slideFlags.length == 0)\r\n slideFlags = useAllFlagsOnEmpty ? -1 : 0;\r\n else {\r\n var value = 0;\r\n for (var i = slideFlags.length; i--;)\r\n value += slideFlags[i].toInt();\r\n slideFlags = value;\r\n }\r\n\r\n // Sum the group flag values, if there are any, or use the default value\r\n if (groupFlags.length == 0)\r\n groupFlags = useAllFlagsOnEmpty ? -1 : 0;\r\n else {\r\n var value = 0;\r\n for (var i = groupFlags.length; i--;)\r\n value += groupFlags[i].toInt();\r\n groupFlags = value;\r\n }\r\n\r\n // Don't search for group stuff unless we're searching for group stuff\r\n if (![\"groups\", \"content\"].contains(optionType) ) {\r\n includeGroupKeyword = false;\r\n groupFlags = 0;\r\n }\r\n\r\n // If we have a term and it's not the default, add it to the search XML\r\n if (((term.length >= 0) && (term != defaultValue))) {\r\n var originalTerm = term;\r\n if ((searchMethod == \"AND\") || (searchMethod == \"OR\"))\r\n term = Librarian.Search.prepValue(term, null, searchMethod);\r\n else if ((searchMethod == \"EXACT\") && !term.isQuoted())\r\n term = '\"' + term + '\"';\r\n\r\n var addOriginalTerms = function(func, flags, conjunction, outputType) {\r\n if ((searchMethod != \"EXACT\") && !originalTerm.isQuoted()) {\r\n // Add each word as its own node\r\n var quotedTerms = originalTerm.safeSplit('\"'),\r\n terms = [],\r\n success = true;\r\n for (var i = 0, length = quotedTerms.length; i < length; i++) {\r\n if (quotedTerms[i].isQuoted())\r\n terms.push(quotedTerms[i].replaceAll('\"', ''));\r\n else\r\n terms = terms.concat(quotedTerms[i].split(' '));\r\n }\r\n for (var i = 0, length = terms.length; i < length; i++) {\r\n var value = terms[i].trim();\r\n if (value.length == 0)\r\n continue;\r\n success = success && func(value, conjunction, operator, flags, \"OR\", null, null, outputType);\r\n }\r\n return success;\r\n }\r\n else\r\n Librarian.search.containsWholeWord = true;\r\n return func(originalTerm, null, operator, flags, \"OR\");\r\n };\r\n\r\n // If there are other terms after description, add those too\r\n if (fileFlags != 0) {\r\n if (outputType == Librarian.Search.outputTypes.ALLCONTENT) {\r\n searched = searched && addOriginalTerms(search.addFileTerm, fileFlags, searchMethod, Librarian.Search.outputTypes.FILES);\r\n searched = searched && addOriginalTerms(search.addFileTerm, fileFlags, searchMethod, Librarian.Search.outputTypes.SLIDES);\r\n } else {\r\n searched = searched && addOriginalTerms(search.addFileTerm, fileFlags, searchMethod);\r\n }\r\n }\r\n if (slideFlags != 0) {\r\n if (outputType == Librarian.Search.outputTypes.ALLCONTENT) {\r\n searched = searched && addOriginalTerms(search.addTextTerm, slideFlags, searchMethod, Librarian.Search.outputTypes.FILES);\r\n searched = searched && addOriginalTerms(search.addTextTerm, slideFlags, searchMethod, Librarian.Search.outputTypes.GROUPS);\r\n searched = searched && addOriginalTerms(search.addTextTerm, slideFlags, searchMethod, Librarian.Search.outputTypes.SLIDES);\r\n } else {\r\n searched = searched && addOriginalTerms(search.addTextTerm, slideFlags, searchMethod);\r\n }\r\n\r\n }\r\n if (groupFlags != 0) {\r\n if (outputType == Librarian.Search.outputTypes.ALLCONTENT) {\r\n searched = searched && addOriginalTerms(search.addGroupTerm, groupFlags, searchMethod, Librarian.Search.outputTypes.GROUPS);\r\n searched = searched && addOriginalTerms(search.addGroupTerm, groupFlags, searchMethod, Librarian.Search.outputTypes.SLIDES);\r\n } else {\r\n searched = searched && addOriginalTerms(search.addGroupTerm, groupFlags, searchMethod);\r\n }\r\n }\r\n\r\n if (includeSlideKeyword) {\r\n if (outputType == Librarian.Search.outputTypes.ALLCONTENT) {\r\n searched = searched && search.addSlideKeyword(term, null, operator, null, \"OR\", null, Librarian.Search.outputTypes.FILES);\r\n searched = searched && search.addSlideKeyword(term, null, operator, null, \"OR\", null, Librarian.Search.outputTypes.GROUPS);\r\n searched = searched && search.addSlideKeyword(term, null, operator, null, \"OR\", null, Librarian.Search.outputTypes.SLIDES);\r\n } else {\r\n searched = searched && search.addSlideKeyword(term, null, operator, null, \"OR\");\r\n }\r\n \r\n }\r\n if (includeFileKeyword) {\r\n if (outputType == Librarian.Search.outputTypes.ALLCONTENT) {\r\n searched = searched && search.addFileKeyword(term, null, operator, null, \"OR\", null, Librarian.Search.outputTypes.FILES);\r\n searched = searched && search.addFileKeyword(term, null, operator, null, \"OR\", null, Librarian.Search.outputTypes.SLIDES);\r\n } else {\r\n searched = searched && search.addFileKeyword(term, null, operator, null, \"OR\");\r\n }\r\n }\r\n if (includeGroupKeyword) {\r\n if (outputType == Librarian.Search.outputTypes.ALLCONTENT) {\r\n searched = searched && search.addGroupKeyword(term, null, operator, null, \"OR\", null, Librarian.Search.outputTypes.GROUPS);\r\n searched = searched && search.addGroupKeyword(term, null, operator, null, \"OR\", null, Librarian.Search.outputTypes.SLIDES);\r\n } else {\r\n searched = searched && search.addGroupKeyword(term, null, operator, null, \"OR\");\r\n }\r\n }\r\n }\r\n else if (Librarian.search.allowEmptySearchTerm) {\r\n if (fileFlags != 0)\r\n searched = searched && search.addFileTerm(\"\", searchMethod, Librarian.search.defaultEmptyValueOperator, fileFlags, \"OR\");\r\n if (slideFlags != 0)\r\n searched = searched && search.addTextTerm(\"\", null, Librarian.search.defaultEmptyValueOperator, slideFlags, \"OR\");\r\n if (groupFlags != 0)\r\n searched = searched && search.addGroupTerm(\"\", searchMethod, Librarian.search.defaultEmptyValueOperator, fileFlags, \"OR\");\r\n }\r\n\r\n // Load in attributes\r\n function addMetaValues(type, func, catFunc, outputType) {\r\n var metaContEl = $(\"search\" + type + \"MetaLists\");\r\n if (metaContEl) {\r\n var hasSearched = true,\r\n attrNameEls = metaContEl.getChildren(\".search-meta-container .search-meta-name\"),\r\n attrValueEls = metaContEl.getChildren(\".search-meta-container .search-meta-value\");\r\n\r\n var conjunction = null;\r\n if (Librarian.search.attributeConjunction)\r\n conjunction = Librarian.search.attributeConjunction;\r\n else if ((searchMethod == \"OR\") || (searchMethod == \"AND\"))\r\n conjunction = searchMethod;\r\n\r\n for (var i = 0, attrLength = attrNameEls.length; i < attrLength; i++) {\r\n var name = (Librarian.Utils.getElementValue(attrNameEls[i]) || '').trim(),\r\n categorized = false,\r\n value;\r\n\r\n if (attrValueEls[i].hasClass(\"search-meta-categorized\")) {\r\n categorized = true;\r\n\r\n var selectedCats = JSON.parse($(attrValueEls[i]).get(\"selectedData\") || \"[]\");\r\n value = selectedCats.map(function(item) {\r\n return { name: item.name, catid: item.data.attribcatid };\r\n });\r\n }\r\n else\r\n value = (Librarian.Utils.getElementValue(attrValueEls[i]) || '');\r\n\r\n if (typeof value == \"string\")\r\n value = value.trim();\r\n\r\n if ((name.length > 0) && (value.length > 0)) {\r\n var values;\r\n if (typeOf(value) == \"array\")\r\n values = value;\r\n else if (attrValueEls[i].tagName == \"INPUT\")\r\n values = value.split(';');\r\n else\r\n values = [value];\r\n\r\n var usedTerms = [];\r\n for (var j = 0, valLength = values.length; j < valLength; j++) {\r\n var val = values[j];\r\n if (val != null)\r\n val = val.toString();\r\n val = (val || '').trim();\r\n if (val.length == 0)\r\n continue;\r\n\r\n if (categorized) {\r\n hasSearched = hasSearched && catFunc(values[j].catid, values[j].name, name, conjunction, operator, \"AND\", null, outputType);\r\n usedTerms.push(values[j].name);\r\n }\r\n else {\r\n hasSearched = hasSearched && func(val, conjunction, operator, name, \"AND\", null, outputType);\r\n usedTerms.push(val);\r\n }\r\n }\r\n\r\n if (usedTerms.length > 0)\r\n searchData[name] = usedTerms.join(\", \");\r\n }\r\n }\r\n\r\n return hasSearched;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n if (attribType == \"groups\")\r\n searched = searched && addMetaValues(\"Groups\", search.addGroupAttribute, search.addCategorizedGroupAttribute);\r\n else if (attribType == \"files\")\r\n searched = searched && addMetaValues(\"Files\", search.addFileAttribute, search.addCategorizedFileAttribute);\r\n else if (attribType == \"slides\")\r\n searched = searched && addMetaValues(\"Slides\", search.addSlideAttribute, search.addCategorizedSlideAttribute);\r\n else if (attribType == \"content\") {\r\n searched = searched && addMetaValues(\"Content\", search.addGroupAttribute, search.addCategorizedGroupAttribute, Librarian.Search.outputTypes.GROUPS);\r\n searched = searched && addMetaValues(\"Content\", search.addFileAttribute, search.addCategorizedFileAttribute, Librarian.Search.outputTypes.FILES);\r\n\r\n var addSlideMetaValues = function(value, conjunction, operator, attributeValue, filterConjunction, createNewFilter, outputType) {\r\n var filterEl = search.addFileAttributeEx(value, conjunction, operator, attributeValue, \"OR\", true, null, outputType);\r\n return search.addGroupAttributeEx(value, conjunction, operator, attributeValue, \"OR\", false, filterEl, outputType) != null;\r\n }\r\n\r\n var addSlideCatMetaValues = function(catId, value, name, conjunction, operator, filterConjunction, createNewFilter, outputType) {\r\n var filterEl = search.addCategorizedFileAttributeEx(catId, value, name, conjunction, operator, \"OR\", true, null, outputType);\r\n return search.addCategorizedGroupAttributeEx(catId, value, name, conjunction, operator, \"OR\", false, filterEl, outputType) != null;\r\n\r\n }\r\n searched = searched && addMetaValues(\"Content\", addSlideMetaValues, addSlideCatMetaValues, Librarian.Search.outputTypes.SLIDES);\r\n }\r\n\r\n itemEl = $(\"searchRequestData\");\r\n if (itemEl) {\r\n var requestNameEls = itemEl.getChildren(\".search-request-container .search-request-name\"),\r\n requestValueEls = itemEl.getChildren(\".search-request-container .search-request-value\");\r\n\r\n var conjunction = null;\r\n if ((searchMethod == \"OR\") || (searchMethod == \"AND\"))\r\n conjunction = searchMethod;\r\n\r\n for (var i = 0, requestLength = requestNameEls.length; i < requestLength; i++) {\r\n var name = (Librarian.Utils.getElementValue(requestNameEls[i]) || '').trim(),\r\n value = (Librarian.Utils.getElementValue(requestValueEls[i]) || '').trim();\r\n\r\n if ((name.length > 0) && (value.length > 0)) {\r\n searched = searched && search.addRequestTerm(value, conjunction, operator, name.replaceAll(' ', ''), \"AND\");\r\n\r\n searchData[name] = value;\r\n }\r\n }\r\n }\r\n\r\n // Load in selected \"Search Within\" categories, if there are any and they aren't the root\r\n itemEl = $(\"searchWithinAll\");\r\n if ((!itemEl || !itemEl.checked) && outputType !== Librarian.Search.outputTypes.ALLCONTENT) {\r\n var catIDs = [],\r\n catNames = [];\r\n\r\n itemEl = $(\"searchWithinID\");\r\n if (itemEl)\r\n catIDs = (Librarian.Utils.getElementValue(itemEl) || '').trim().split(';');\r\n\r\n itemEl = $(\"searchWithinText\");\r\n if (itemEl)\r\n catNames = (Librarian.Utils.getElementValue(itemEl) || '').trim().split(';');\r\n\r\n if (catIDs && catNames && (catIDs.length == catNames.length)) {\r\n var dataName = Librarian.Lang.getString(\"search_within_cats\"),\r\n catType = Librarian.catType.file;\r\n\r\n if (this.selectedOptionType.contains(\"Group\"))\r\n catType = Librarian.catType.globalFavorite;\r\n\r\n for (var i = 0, length = catIDs.length; i < length; i++) {\r\n if (catIDs[i].trim() == '0')\r\n continue;\r\n\r\n searched = searched && search.addCategory(catIDs[i].trim(), false, catType, null, null, false, null, catNames[i]);\r\n\r\n // Add the category name to the list of searched categories\r\n if ((typeof searchData[dataName] == \"undefined\") || (searchData[dataName] == null))\r\n searchData[dataName] = catNames[i].trim();\r\n else\r\n searchData[dataName] = searchData[dataName] + \", \" + catNames[i].trim();\r\n }\r\n }\r\n }\r\n else if ((returnType == \"Return Group Content\") && Librarian.specialCategories && Librarian.specialCategories.GlobalFavorites)\r\n searched = searched && search.addCategory(Librarian.specialCategories.GlobalFavorites.CatId, false, Librarian.catType.globalFavorite);\r\n\r\n if (Librarian.guestInfo) {\r\n // Limit search to content available to guest\r\n var contactId = Librarian.guestInfo.ContactId.toString() || '',\r\n contactType = Librarian.guestInfo.ContactType.toString() || '',\r\n eventId = null;\r\n\r\n // Limit search to content for this event, if there is one\r\n if (Librarian.eventInfo)\r\n eventId = Librarian.eventInfo.EventId.toString() || '';\r\n\r\n searched = searched && search.addContent(eventId, contactId, contactType, \"OR\");\r\n }\r\n\r\n search.deleteEmptyFilters();\r\n\r\n var oldOnBefore = $empty;\r\n // Save the existing function, is there is one\r\n if (typeof search.onBeforeXMLGeneration == \"function\")\r\n oldOnBefore = search.onBeforeXMLGeneration;\r\n\r\n search.onBeforeXMLGeneration = function() {\r\n var filterEls = search.xmlDoc.getElementsByTagName(\"filter\");\r\n for (var i = filterEls.length; i--;) {\r\n // Load in file types (if they are shown)\r\n var extensions = 0;\r\n itemEl = $(\"searchFileTypes\");\r\n if (itemEl && itemEl.isVisible()) {\r\n var fileTypeEls = $$(\".search-file-type\");\r\n for (var j = 0, length = fileTypeEls.length; j < length; j++) {\r\n var type = (Librarian.Utils.getSelectedValue(fileTypeEls[j]) || '').trim();\r\n // Make sure a valid extension was submitted\r\n if ((type.length > 0) && (type != \"All Types\")) {\r\n searched = searched && search.addFileType(\"extension\", type, false, \"OR\", null, false, filterEls[i]);\r\n extensions++;\r\n }\r\n }\r\n }\r\n\r\n // Only add the SubType if we're not already looking for specific extensions\r\n if (extensions == 0) {\r\n if (subType) {\r\n var types = subType.types || [];\r\n for (var j = 0, length = types.length; j < length; j++) {\r\n var type = types[j].trim();\r\n if (type.length > 0)\r\n searched = searched && search.addFileType(\"subType\", type, false, \"OR\", null, false, filterEls[i]);\r\n }\r\n }\r\n }\r\n\r\n // Load in selected last modified dates\r\n var date = (Librarian.Utils.getElementValue($(\"minMod_text\")) || '').trim();\r\n if (date.length > 0) {\r\n // Add the start date\r\n searchData[Librarian.Lang.getString(\"search_dates\")] = date;\r\n\r\n if (!date.contains(':'))\r\n date = date + \" 00:00:00\";\r\n searched = searched && search.addMinModifiedDate(date, null, filterEls[i]);\r\n }\r\n\r\n date = (Librarian.Utils.getElementValue($(\"maxMod_text\")) || '').trim();\r\n if (date.length > 0) {\r\n // Add the end date\r\n var dataName = Librarian.Lang.getString(\"search_dates\");\r\n if ((typeof searchData[dataName] == \"undefined\") || (searchData[dataName] == null))\r\n searchData[dataName] = date;\r\n else\r\n searchData[dataName] = Librarian.Lang.getArgString(\"search_daterange\", [searchData[dataName], date]);\r\n\r\n if (!date.contains(':'))\r\n date = date + \" 23:59:59\";\r\n searched = searched && search.addMaxModifiedDate(date, null, filterEls[i]);\r\n }\r\n }\r\n\r\n // Restore the old function or set it to the empty function\r\n this.onBeforeXMLGeneration = oldOnBefore;\r\n oldOnBefore();\r\n };\r\n\r\n var maxResults = Librarian.search.maxResults;\r\n // Use the ListView handler, if it's enabled\r\n if (Librarian.listView.enabled && Librarian.ListView != null && (typeof Librarian.ListView.prepSearchGrid == \"function\"))\r\n maxResults = Librarian.ListView.prepSearchGrid(search, outputType);\r\n else if (tileList) {\r\n search.options.loadComplete = tileList.searchLoadComplete;\r\n\r\n // Show the \"Searching...\" label\r\n tileList.reset();\r\n tileList.wrapper.appendChild(document.createTextNode(Librarian.Lang.getString(\"searching\")));\r\n }\r\n\r\n var viewName = null;\r\n if (outputType === Librarian.Search.outputTypes.ALLCONTENT) {\r\n viewName = \"Search\";\r\n }\r\n else if ((typeOf(Librarian.search.viewNameByType) == \"array\") && (Librarian.search.viewNameByType.length > outputType))\r\n viewName = Librarian.search.viewNameByType[outputType];\r\n\r\n // Set the max results, output type, and view name\r\n searched = searched && search.addResults(null, maxResults, outputType, null, null, viewName, returnType);\r\n\r\n if (searched) {\r\n // Store this as the last search so we can use pagination\r\n Librarian.lastSearch = search;\r\n\r\n // Reset the hash\r\n Librarian.Utils.changeHash('');\r\n\r\n // Execute the search\r\n search.search();\r\n\r\n // Don't call the function if it doesn't exist\r\n if (typeof Library.prepSearchPage == \"function\")\r\n Library.prepSearchPage('', searchData, null, false);\r\n }\r\n\r\n Librarian.search.containsWholeWord = false;\r\n },\r\n\r\n useLastSearchOptions: function() {\r\n if (!Librarian.lastSearch)\r\n return;\r\n\r\n this.useSearchOptions(Librarian.lastSearch);\r\n },\r\n\r\n useSearchOptions: function(search) {\r\n if (!search)\r\n return;\r\n\r\n // Load the used terms into the term box\r\n var termEl = this.contentEl.getElement(\".search-term\");\r\n if (termEl) {\r\n var terms = (search.getSearchTerms() || '').split(';'),\r\n uniqueTerms = [];\r\n\r\n // Remove all duplicates to make sure we process this correctly\r\n for (var i = 0, len = terms.length; i < len; i++) {\r\n var term = (terms[i] || '').trim();\r\n if (term.length == 0)\r\n continue;\r\n\r\n if (!uniqueTerms.contains(term))\r\n uniqueTerms.push(term);\r\n }\r\n\r\n var term = null;\r\n // Find the first term with a space, if there is one\r\n // This tries to find the original value that was searched, before it was pre-processed\r\n for (var i = 0, len = uniqueTerms.length; i < len; i++) {\r\n if (uniqueTerms[i].contains(' ')) {\r\n term = uniqueTerms[i];\r\n break;\r\n }\r\n }\r\n\r\n // If no term with a space was found then join all unique terms with a space because that is probably what was searched for\r\n if (!term)\r\n term = uniqueTerms.join(' ');\r\n\r\n // If there isn't a value set, reset it to the default\r\n if ((term || '').length == 0)\r\n term = Librarian.Lang.getString(\"search_advanced_empty\");\r\n\r\n // Set the calculated value\r\n Librarian.Utils.setElementValue(termEl, term);\r\n }\r\n\r\n // Set `searchFor` because even though it doesn't exist in QuickSearch, some quick searches use Advanced Search\r\n // Find and get the type, if it doesn't exist than select \"All Files\"\r\n var fileTypeEl = search.xmlDoc.getElementsByTagName(\"fileType\")[0],\r\n fileType = '';\r\n if (fileTypeEl)\r\n fileType = (fileTypeEl.getAttribute(\"subType\") || '').trim();\r\n\r\n if (fileType.length == 0)\r\n fileType = \"All Files\";\r\n\r\n // Find the radio element that represents this sub type and click it\r\n var typeRadioEl = this.contentEl.getElement(\".search-radio [name=subType][value=\" + fileType + ']');\r\n if (typeRadioEl && !typeRadioEl.checked)\r\n typeRadioEl.click();\r\n\r\n // Set the correct return type based on the set output type\r\n var selectEl = this.contentEl.getElement(\"#searchReturnType\"),\r\n outputType = (search.getOutputType() || '-1').trim().toInt();\r\n if (selectEl) {\r\n switch (outputType) {\r\n case Librarian.Search.outputTypes.SLIDES:\r\n // If we are returning group content select the \"Group Content\" dropdown option\r\n // even though the output type is slides\r\n var returnType = search.getReturnType() || '';\r\n if (returnType.contains(\"Group Content\"))\r\n Librarian.Utils.setSelectValue(selectEl, \"groups\", function(optionEl) {\r\n return (Librarian.Utils.getElementValue(optionEl) || '').contains(\"Group Content\");\r\n });\r\n else {\r\n if (Librarian.Utils.setSelectValue(selectEl, \"slides\") < 0)\r\n Librarian.Utils.setSelectValue(selectEl, \"pages\");\r\n }\r\n break;\r\n case Librarian.Search.outputTypes.GROUPS:\r\n Librarian.Utils.setSelectValue(selectEl, \"groups\");\r\n break;\r\n default:\r\n if (Librarian.Utils.setSelectValue(selectEl, \"files\") < 0)\r\n Librarian.Utils.setSelectValue(selectEl, \"presentations\");\r\n }\r\n // Update the UI to reflect that the return type may have changed\r\n this.onReturnTypeChanged();\r\n }\r\n\r\n // Build the flag values for each type from the searched options so we know what to check\r\n var flagFieldEls = search.xmlDoc.selectNodes(\"//*[@searchFields] | //*[@textTypes]\"),\r\n fileFlags = 0, groupFlags = 0, slideFlags = 0;\r\n for (var i = 0, length = flagFieldEls.length; i < length; i++) {\r\n var flagFieldEl = flagFieldEls[i];\r\n if (!flagFieldEl)\r\n continue;\r\n\r\n var searchField = (flagFieldEl.getAttribute(\"searchFields\") || '0').trim().toInt(),\r\n textType = (flagFieldEl.getAttribute(\"textTypes\") || '0').trim().toInt();\r\n\r\n slideFlags |= textType;\r\n if (flagFieldEl.tagName == \"fileTerm\")\r\n fileFlags |= searchField;\r\n else\r\n groupFlags |= searchField;\r\n }\r\n\r\n // Go through each option element and get the flag attribute from it\r\n var optionEls = this.contentEl.getElements(\".search-option input[type=checkbox]\"),\r\n visible = 0;\r\n for (var i = 0, length = optionEls.length; i < length; i++) {\r\n var optionEl = optionEls[i];\r\n if (!optionEl || !optionEl.isVisible()) {\r\n if (!optionEl.isVisible() && optionEl.checked)\r\n optionEl.checked = false;\r\n continue;\r\n }\r\n visible++;\r\n\r\n var fileValue = (optionEl.getAttribute(\"fileValue\") || '0').trim().toInt(),\r\n groupValue = (optionEl.getAttribute(\"groupValue\") || '0').trim().toInt(),\r\n slideValue = (optionEl.getAttribute(\"slideValue\") || '0').trim().toInt(),\r\n searchType = (optionEl.getAttribute(\"searchType\") || '').trim();\r\n\r\n var check = ((fileValue > 0) && ((fileFlags & fileValue) == fileValue)) ||\r\n ((groupValue > 0) && ((groupFlags & groupValue) == groupValue)) ||\r\n ((slideValue > 0) && ((slideFlags & slideValue) == slideValue));\r\n\r\n // If there is no flag value, try to get the searchType to see if it there is a keyword\r\n if (!check && (searchType.length > 0)) {\r\n switch (searchType) {\r\n case \"fileKW\":\r\n check = search.xmlDoc.selectNodes(\"//fileKeyword/text()\").length > 0;\r\n break;\r\n case \"slideKW\":\r\n check = search.xmlDoc.selectNodes(\"//slideKeyword/text()\").length > 0;\r\n break;\r\n case \"groupKW\":\r\n check = search.xmlDoc.selectNodes(\"//groupKeyword/text()\").length > 0;\r\n break;\r\n case \"eventGroupKW\":\r\n check = search.xmlDoc.selectNodes(\"//eventGroupKeyword/text()\").length > 0;\r\n break;\r\n }\r\n }\r\n\r\n // When selecting a checkbox, call .click on it to trigger the sub-check auto-selection logic\r\n if (check != optionEl.checked)\r\n optionEl.click();\r\n }\r\n\r\n // If we don't show all the boxes as checked when we search all flags, uncheck all the boxes if they are all checked\r\n var checked = optionEls.filter(function(el) { return el.checked; }).length;\r\n if (Librarian.search.searchAllFlagsIfAllOptionsChecked && (visible == checked))\r\n optionEls.forEach(function(el) { el.checked = false; });\r\n\r\n var itemName;\r\n switch (outputType) {\r\n case Librarian.Search.outputTypes.SLIDES:\r\n itemName = \"slide\";\r\n break;\r\n case Librarian.Search.outputTypes.GROUPS:\r\n itemName = \"group\";\r\n break;\r\n default:\r\n itemName = \"file\";\r\n }\r\n\r\n // Get all of the attributes and their values out of the XML\r\n // Have to handle mutli-select attributes so group everything here into Name-ValueList pairs\r\n var attributeEls = search.xmlDoc.selectNodes(\"//\" + itemName + \"Attribute | //\" + itemName + \"CategorizedAttribute\"),\r\n attribValues = {},\r\n catAttribValues = {};\r\n for (var i = 0, length = attributeEls.length; i < length; i++) {\r\n var attributeEl = attributeEls[i];\r\n if (!attributeEl)\r\n continue;\r\n\r\n var attribName = (attributeEl.getAttribute(\"name\") || '').trim().replace(' ', '');\r\n if (attribName.length == 0)\r\n continue;\r\n\r\n // Handle categorized attributes differently - pull more information and save it in an object\r\n if (attributeEl.tagName.endsWith(\"CategorizedAttribute\")) {\r\n if (!catAttribValues[attribName])\r\n catAttribValues[attribName] = [];\r\n\r\n var catId = attributeEl.getAttribute(\"catId\"),\r\n value = attributeEl.getAttribute(\"value\");\r\n catAttribValues[attribName].push({\r\n name: value,\r\n data: {\r\n attribcatid: catId\r\n }\r\n });\r\n }\r\n else {\r\n if (!attribValues[attribName])\r\n attribValues[attribName] = [];\r\n attribValues[attribName].push(Librarian.Utils.getXMLNodeText(attributeEl));\r\n }\r\n }\r\n\r\n // Set the value of each attribute search option\r\n var metaContEl = this.contentEl.getElement(\"#search\" + itemName.toCapitalCase() + \"sMetaLists\") || this.contentEl,\r\n attribValueEls = metaContEl.getElements(\"[id$=options]\");\r\n for (var i = 0, length = attribValueEls.length; i < length; i++) {\r\n var attribValueEl = attribValueEls[i];\r\n if (!attribValueEl)\r\n continue;\r\n\r\n var attribName = attribValueEl.id.substring(0, attribValueEl.id.length - \"options\".length),\r\n values = attribValues[attribName];\r\n if (attribValueEl.tagName == \"SELECT\") {\r\n if (values && (values.length > 0))\r\n Librarian.Utils.setSelectValue(attribValueEl, values);\r\n else\r\n attribValueEl.getElements(\"option\").each(function(el) { el.selected = false });\r\n }\r\n else {\r\n if (values && (values.length > 0)) {\r\n for (var i = values.length; i--;)\r\n Librarian.Utils.setElementValue(attribValueEl, values[i]);\r\n }\r\n else\r\n Librarian.Utils.setElementValue(attribValueEl, '');\r\n }\r\n }\r\n\r\n // Set the value of each categorized attribute search option\r\n for (var attribName in catAttribValues) {\r\n if (!catAttribValues.hasOwnProperty(attribName))\r\n continue;\r\n\r\n var attribValueEl = metaContEl.getElement('#' + (attribName.replace(' ', '') + \"Options\").toCapitalCase());\r\n if (!attribValueEl)\r\n continue;\r\n\r\n var values = catAttribValues[attribName],\r\n // Generate the list of values to show in the box by gathering selected names\r\n valueNames = values.map(function(item) {\r\n return item.name;\r\n });\r\n\r\n // Set the display names and the full data on the text box\r\n Librarian.Utils.setElementValue(attribValueEl, valueNames.join(\"; \"));\r\n attribValueEl.set(\"selectedData\", JSON.stringify(values));\r\n }\r\n\r\n // Load the date values back into their respective text boxes\r\n var dateEl = search.xmlDoc.getElementsByTagName(\"dateModified\")[0];\r\n if (dateEl) {\r\n // Remove the time portion of the value since we're searching on days, not exact times\r\n var stripTime = function (date) {\r\n return date.split(' ')[0];\r\n },\r\n min = stripTime((dateEl.getAttribute(\"min\") || '').trim()),\r\n max = stripTime((dateEl.getAttribute(\"max\") || '').trim());\r\n\r\n if (min.length > 0)\r\n Librarian.Utils.setElementValue(this.contentEl.getElement(\"#minMod_text\"), min);\r\n if (max.length > 0)\r\n Librarian.Utils.setElementValue(this.contentEl.getElement(\"#maxMod_text\"), max);\r\n }\r\n\r\n // Gather the data for the categories that were searched on\r\n var categoryEls = search.xmlDoc.getElementsByTagName(\"category\"),\r\n catIds = [],\r\n catNames = [];\r\n for (var i = 0, length = categoryEls.length; i < length; i++) {\r\n var categoryEl = categoryEls[i];\r\n if (!categoryEl)\r\n continue;\r\n\r\n var catId = (categoryEl.getAttribute(\"catId\") || '').trim(),\r\n catName = (categoryEl.getAttribute(\"catName\") || '').trim(),\r\n exclude = (categoryEl.getAttribute(\"exclude\") || '').trim();\r\n\r\n // TODO: Skip excluded items because we don't have a way of setting them as \"excluded\" in the UI yet\r\n if (exclude == \"true\")\r\n continue;\r\n\r\n if (catId.length > 0)\r\n catIds.push(catId);\r\n if (catName.length > 0)\r\n catNames.push(catName);\r\n }\r\n\r\n // If any categories were found, set the searched category boxes (both displayed and hidden data) to the values that were searched on\r\n if ((catIds.length > 0) && (catIds.length == catNames.length)) {\r\n Librarian.Utils.setElementValue(this.contentEl.getElement(\"#searchWithinText\"), catNames.join(';'));\r\n Librarian.Utils.setElementValue(this.contentEl.getElement(\"#searchWithinID\"), catIds.join(';'));\r\n }\r\n },\r\n\r\n doSearchTerm: function(searchTerm) {\r\n Library.loadTabByName(\"search\") || Library.loadTabByName(\"advancedsearch\");\r\n\r\n var termEl = $$(\".search-term\")[0];\r\n\r\n Librarian.Utils.setElementValue(termEl, searchTerm);\r\n this.submit();\r\n }\r\n});\r\n\r\nLibrarian.Search.Panel.extend({\r\n searchFor: [\r\n {\r\n name: \"Presentations\",\r\n types: [\"Presentation\"],\r\n subTypes: [Librarian.subType.presentation],\r\n showFileTypes: false,\r\n returnType: { types: [\"Presentations\", \"Slides\", \"Groups\"] }\r\n },\r\n {\r\n name: \"Documents\",\r\n types: [\"Document\"],\r\n subTypes: [Librarian.subType.document],\r\n returnType: { types: [\"Files\", \"Pages\", \"Groups\"] }\r\n },\r\n {\r\n name: \"Media\",\r\n types: [\"Media\", \"Sound\", \"Image\", \"Video\", \"Movie\"],\r\n subTypes: [Librarian.subType.image, Librarian.subType.media, Librarian.subType.movie, Librarian.subType.sound],\r\n returnType: { types: [\"Files\"] },\r\n showFileSubOptions: false\r\n },\r\n {\r\n name: \"All Files\",\r\n returnType: { types: [\"Files\", \"Pages\", \"Groups\"] }\r\n },\r\n {\r\n name: \"Globals Only\",\r\n returnType: { types: [\"Slides\", \"Groups\"] }\r\n }\r\n ],\r\n\r\n returnTypes: [\r\n {\r\n name: \"Presentations\",\r\n attribType: \"files\",\r\n getOptionType: function() {\r\n return this.name;\r\n },\r\n enabled: function() {\r\n return Librarian.Search.Panel.canSearchFiles();\r\n }\r\n },\r\n {\r\n name: \"Files\",\r\n attribType: \"files\",\r\n getOptionType: function() {\r\n return this.name;\r\n },\r\n enabled: function() {\r\n return Librarian.Search.Panel.canSearchFiles();\r\n }\r\n },\r\n {\r\n name: \"Slides\",\r\n attribType: \"slides\",\r\n getOptionType: function() {\r\n return this.name;\r\n },\r\n enabled: function() {\r\n return Librarian.Search.Panel.canSearchSlides();\r\n }\r\n },\r\n {\r\n name: \"Pages\",\r\n attribType: \"slides\",\r\n getOptionType: function() {\r\n return this.name;\r\n },\r\n enabled: function() {\r\n return Librarian.Search.Panel.canSearchSlides();\r\n }\r\n },\r\n {\r\n name: \"Groups\",\r\n attribType: \"groups\",\r\n getOptionType: function() {\r\n return this.name;\r\n },\r\n enabled: function() {\r\n return Librarian.Search.Panel.canSearchGroups();\r\n }\r\n },\r\n {\r\n name: \"Group Content\",\r\n attribType: \"groups\",\r\n getOptionType: function() {\r\n return \"Groups\";\r\n },\r\n enabled: function() {\r\n return Librarian.Search.Panel.canSearchGroupContent();\r\n }\r\n },\r\n {\r\n name: \"Content\",\r\n attribType: \"content\",\r\n getOptionType: function() {\r\n return this.name;\r\n },\r\n enabled: function() {\r\n return Librarian.Search.Panel.canSearchFiles();\r\n }\r\n }\r\n ],\r\n\r\n canSearchFiles: function() {\r\n return true;\r\n },\r\n\r\n canSearchSlides: function() {\r\n return true;\r\n },\r\n\r\n canSearchGroups: function() {\r\n return true;\r\n },\r\n\r\n canSearchGroupContent: function() {\r\n return false;\r\n },\r\n\r\n getResultsOptionName: function(name) {\r\n return Librarian.Lang.getArgString(\"search_return_name\", name);\r\n }\r\n});","Librarian.Search.Window = new Class({\r\n Extends: Librarian.Window,\r\n Implements: Librarian.Search.Container,\r\n Binds: [\"minimize\"],\r\n\r\n options: {\r\n id: \"searchWindow\",\r\n height: 600,\r\n width: 810,\r\n padding: {\r\n right: 0\r\n }\r\n },\r\n\r\n initialize: function(options) {\r\n this.setOptions(options);\r\n this.options.contentURL = Librarian.path.getLibraryPath() + \"search.html\";\r\n\r\n // Set the title on init so that we can use the localization\r\n this.options.title = Librarian.Lang.getString(\"search_advanced\");\r\n\r\n this.parent(this.options);\r\n },\r\n\r\n onWindowLoaded: function() {\r\n this.parent();\r\n\r\n this.onSearchLoaded({\r\n id: this.options.id,\r\n onSearch: this.minimize\r\n });\r\n\r\n var itemEl = $(\"searchGo\");\r\n if (itemEl) {\r\n itemEl.addOnClick(this.doSearch);\r\n itemEl.id = this.options.id + \"_go\";\r\n }\r\n\r\n itemEl = $(\"searchSize\");\r\n if (itemEl) {\r\n this.options.width = itemEl.width.value.toInt();\r\n this.options.height = itemEl.height.value.toInt();\r\n\r\n // Then resize the window\r\n this.resize({\r\n width: this.options.width,\r\n height: this.options.height,\r\n centered: false\r\n });\r\n\r\n itemEl = $(\"searchWrapper\");\r\n if (itemEl) {\r\n itemEl.style.height = (this.options.height - 65) + \"px\";\r\n\r\n if (Browser.ie7)\r\n itemEl.style.width = (this.options.width - 15) + \"px\";\r\n }\r\n\r\n if (Browser.ie7 && this.contentEl)\r\n this.contentEl.style.width = (this.options.width - 15) + \"px\";\r\n }\r\n\r\n itemEl = $(\"searchCancel\");\r\n if (itemEl) {\r\n itemEl.addOnClick(this.close);\r\n itemEl.id = this.options.id + \"_cancel\";\r\n }\r\n\r\n itemEl = null;\r\n },\r\n\r\n onClose: function() {\r\n this.parent();\r\n\r\n this.closeDatePickers();\r\n\r\n if (this.confirm)\r\n this.confirm.close();\r\n }\r\n});\r\n","(function(){\r\nvar elasticQueryContentType = {\r\n all: -1,\r\n file: 1,\r\n slide: 2,\r\n group: 4\r\n};\r\n\r\nvar elasticQuerySortField = {\r\n _score: 0,\r\n name: 1,\r\n lastModDate: 2,\r\n recordDate: 3,\r\n avgRating: 4,\r\n importDate: 5\r\n};\r\n\r\nvar elasticQuerySearchQueryType = {\r\n term: 0,\r\n wildcard: 1,\r\n match: 2,\r\n fuzzy: 3,\r\n matchPhrase: 4,\r\n queryString: 5\r\n};\r\n\r\nvar elasticSearchQuery = {\r\n queryContentType: elasticQueryContentType.file,\r\n searchTerms: null,\r\n filters: null,\r\n exclusionFilters: null,\r\n options: null\r\n};\r\n\r\nvar elasticSearchOperator = {\r\n or: 0,\r\n and: 1\r\n};\r\n\r\nvar elasticQueryAnalyzer = {\r\n standard_english: 0,\r\n word_delimiter: 1,\r\n word_delimiter_with_stemming: 2,\r\n keyword: 3,\r\n keyword_lower: 4,\r\n standard: 5,\r\n synonyms: 6\r\n};\r\n\r\nvar elasticSuggestionTypes = {\r\n all: -1,\r\n none: 0,\r\n term: 1,\r\n phrase: 2\r\n};\r\n\r\n\r\nvar elasticSearchQueryValue = {\r\n // Highlights are returned for query values\r\n value: null,\r\n\r\n queryType: elasticQuerySearchQueryType.term,\r\n\r\n // You can affect the score for this value via boosting\r\n boost: null,\r\n\r\n // Fuzzy search options\r\n fuzziness: null,\r\n prefixLength: null,\r\n\r\n // match_phrase and query_string option\r\n slop: null,\r\n\r\n operator: elasticSearchOperator.or,\r\n\r\n analyzer: elasticQueryAnalyzer.standard_english,\r\n\r\n suggestionType: elasticSuggestionTypes.none\r\n};\r\n\r\nvar elasticSearchAttribute ={\r\n name: null,\r\n values: null\r\n};\r\n\r\nvar elasticSearchQuerySearchTerm = {\r\n name: [],\r\n title: [],\r\n description: [],\r\n text: [],\r\n notes: [],\r\n fileKeywords: [],\r\n slideKeywords: [],\r\n fileAttributes: {},\r\n slideAttributes: {}\r\n};\r\n\r\n\r\nvar searchResults = {\r\n took: 0,\r\n maxScore: 0,\r\n timedOut: false,\r\n total: 0,\r\n hits: []\r\n};\r\n\r\nLibrarian.ElasticSearch = new Class({\r\n Extends: Librarian.Request.JSON,\r\n Implements: Options,\r\n\r\n options: {\r\n method: \"POST\",\r\n loadComplete: null, /*(json, text)*/\r\n onFailure: Librarian.Utils.onFailure,\r\n beforeLoadComplete: null,\r\n elasticQueryContentType: elasticQueryContentType.file,\r\n elasticSearchQueryOptions: {\r\n // pagination\r\n from: 0,\r\n size: Librarian.search.maxResults,\r\n\r\n // include highlights for text hits\r\n highlights: true,\r\n\r\n preTag: \"\",\r\n postTag: \"\",\r\n\r\n // sorting\r\n // sortField: Librarian.elasticSearch.defaultSortType,\r\n // sortDescending: true,\r\n\r\n // attributes to return\r\n attributes: Librarian.elasticSearch.attributes,\r\n\r\n // accurate scoring\r\n dfsQueryThenFetch: true,\r\n \r\n // tuning best fields\r\n disMax: true,\r\n\t\t\t\r\n\t\t\t// include filter aggregations\r\n aggregates: Librarian.elasticSearch.aggregates,\r\n\r\n // include content statistics\r\n stats: Librarian.elasticSearch.stats\r\n }\r\n },\r\n\r\n searchOptions: null,\r\n\r\n initialize: function(options) {\r\n if ((typeof options == \"undefined\") || (options == null))\r\n options = {};\r\n\r\n this.setOptions(options);\r\n\r\n Librarian.ElasticSearch.loadSearchPreference();\r\n\r\n this.options.url = Librarian.path.getSearchUrl(\"esquery\") + \"&out=cjson&in=cjson\";\r\n this.options.onSuccess = this.loadComplete;\r\n this.options.onException = options.onException;\r\n this.options.elasticSearchQueryOptions.sortField = Librarian.ElasticSearch.searchPreference.sortField || Librarian.ElasticSearch.sortField;\r\n this.options.elasticSearchQueryOptions.sortDescending = Librarian.ElasticSearch.searchPreference.sortDescending ||Librarian.ElasticSearch.sortDescending;\r\n this.options.elasticSearchQueryOptions.sortAttributeName = Librarian.ElasticSearch.searchPreference.sortAttributeName || Librarian.ElasticSearch.attributeSortName;\r\n\r\n this.searchOptions = Object.clone(elasticSearchQuery);\r\n this.searchOptions.options = Object.clone(this.options.elasticSearchQueryOptions);\r\n this.searchOptions.queryContentType = this.options.elasticQueryContentType;\r\n\r\n this.parent(this.options);\r\n },\r\n\r\n destroy: function() {\r\n this.cancel();\r\n this.clean();\r\n this.searchOptions = Object.clone(elasticSearchQuery);\r\n },\r\n\r\n clean: function() {\r\n this.response = null;\r\n\r\n this.xhr = null;\r\n\r\n this.xhr = new Browser.Request();\r\n },\r\n\r\n loadComplete: function (json) {\r\n if (typeof this.options.beforeLoadComplete == \"function\") {\r\n this.options.beforeLoadComplete(json);\r\n }\r\n\r\n if (typeof this.options.loadComplete == \"function\") {\r\n this.options.loadComplete.call(this, json);\r\n } \r\n },\r\n\r\n // Return an empty set if there is an error\r\n onFailure: function() {\r\n if (typeof this.options.loadComplete == \"function\")\r\n this.options.loadComplete(Object.clone(searchResults));\r\n },\r\n\r\n search: function () {\r\n var searchOptions = Object.clone(this.searchOptions);\r\n \r\n if (instanceOf(searchOptions.searchTerms, Librarian.ElasticSearch.ElasticSearchQuerySearchTerms)) {\r\n searchOptions.searchTerms = searchOptions.searchTerms.members;\r\n }\r\n\r\n if (instanceOf(searchOptions.filters, Librarian.ElasticSearch.ElasticSearchQueryFilter)) {\r\n searchOptions.filters = searchOptions.filters.members;\r\n }\r\n\r\n if (instanceOf(searchOptions.exclusionFilters, Librarian.ElasticSearch.ElasticSearchQueryFilter)) {\r\n searchOptions.exclusionFilters = searchOptions.exclusionFilters.members;\r\n }\r\n\r\n searchOptions = JSON.stringify(searchOptions);\r\n\r\n if (typeof Base64 != \"undefined\")\r\n searchOptions = Base64.encode(searchOptions);\r\n\r\n this.options.data = searchOptions;\r\n this.send();\r\n\r\n if (this.options.afterRequestSend != null) {\r\n this.options.afterRequestSend(this);\r\n }\r\n },\r\n\r\n goToPage: function(pageNumber) {\r\n this.searchOptions.options.from = pageNumber * this.options.elasticSearchQueryOptions.size;\r\n\r\n this.search();\r\n }\r\n})\r\n.extend({\r\n queryAnalyzer: elasticQueryAnalyzer,\r\n searchResults: searchResults,\r\n searchQueryType: elasticQuerySearchQueryType,\r\n queryContentType: elasticQueryContentType,\r\n querySortField: elasticQuerySortField,\r\n searchOperator: elasticSearchOperator,\r\n suggestionTypes: elasticSuggestionTypes,\r\n sortField: Librarian.elasticSearch.defaultSortType,\r\n sortDescending: true,\r\n attributeSort: 7,\r\n searchPreference: null,\r\n loadSearchPreference: function () {\r\n if (Librarian.ElasticSearch.searchPreference == null) {\r\n var searchPreference = Cookie.read(\"searchPreferences\");\r\n\r\n if (searchPreference) {\r\n Librarian.ElasticSearch.searchPreference = JSON.parse(searchPreference);\r\n }\r\n else {\r\n Librarian.ElasticSearch.searchPreference = {};\r\n }\r\n }\r\n },\r\n setSearchPreference: function (pref) {\r\n Librarian.ElasticSearch.searchPreference = Object.merge({}, Librarian.ElasticSearch.searchPreference, pref);\r\n\r\n Cookie.write(\"searchPreferences\", JSON.stringify(Librarian.ElasticSearch.searchPreference));\r\n },\r\n getInstance: function () {\r\n var es = new Librarian.ElasticSearch({\r\n loadComplete: function (result) {\r\n Librarian.SearchResult.prepSearchPage(result, this.searchOptions);\r\n },\r\n beforeLoadComplete: function () {\r\n // Load the search tab\r\n Library.loadTabByName(\"search\") || Library.loadTabByName(\"advancedsearch\");\r\n }\r\n });\r\n\r\n return es;\r\n }\r\n});\r\n\r\n\r\nvar ElasticSearchQuerySearchTerms = Librarian.ElasticSearch.ElasticSearchQuerySearchTerms = new Class({\r\n members: null,\r\n\r\n allSearchTerms: [],\r\n\r\n initialize: function() {\r\n this.members = Object.clone(elasticSearchQuerySearchTerm);\r\n },\r\n\r\n setValue: function(property, value, queryType, options) {\r\n if (this.members.hasOwnProperty(property)) {\r\n if (queryType === elasticQuerySearchQueryType.wildcard) {\r\n value = \"*\" + value + \"*\";\r\n }\r\n\r\n var esValue = ElasticSearchQuerySearchTerms.toEsValue(value, queryType, options);\r\n this.members[property].push(esValue);\r\n this.addSearchTerm(value, queryType);\r\n\r\n return esValue;\r\n }\r\n },\r\n\r\n setAttribute: function(property, name, value, queryType, options) {\r\n if (this.members.hasOwnProperty(property)) {\r\n var esValue = ElasticSearchQuerySearchTerms.toEsValue(value, queryType, options);\r\n this.members[property][name] = (this.members[property][name] || []).concat(esValue);\r\n this.addSearchTerm(value, queryType);\r\n\r\n return esValue;\r\n }\r\n },\r\n\r\n set: function (property, value, queryType, options) {\r\n var self = this;\r\n switch(property) {\r\n case \"fileAttributes\":\r\n case \"slideAttributes\":\r\n Object.each(value, function(item, key) {\r\n self.setAttribute(property, key, item, queryType, options);\r\n });\r\n break;\r\n default:\r\n this.setValue(property, value, queryType, options);\r\n }\r\n },\r\n\r\n addSearchTerm: function(value, queryType) {\r\n var terms = ElasticSearchQuerySearchTerms.splitSearchTerms(value);\r\n var self = this;\r\n\r\n Array.each(terms, function (term) {\r\n if (queryType === elasticQuerySearchQueryType.wildcard) {\r\n term = term.replace(/\\*/g, \"\");\r\n }\r\n\r\n if (!self.allSearchTerms.contains(term)) {\r\n self.allSearchTerms.push(term);\r\n }\r\n });\r\n }\r\n})\r\n.extend({\r\n searchQueryValue: elasticSearchQueryValue,\r\n\r\n splitSearchTerms: function(value) {\r\n return value.split(\" \");\r\n },\r\n\r\n toEsValue: function(value, queryType, options) {\r\n options = options || {};\r\n var esValue = Object.merge({}, elasticSearchQueryValue, {\r\n value: value,\r\n queryType: queryType,\r\n boost: options.boost,\r\n fuzziness: options.fuzziness,\r\n prefixLength: options.prefixLength,\r\n slop: options.slop,\r\n operator: elasticSearchOperator[options.operator],\r\n analyzer: elasticQueryAnalyzer[options.analyzer],\r\n suggestionType: elasticSuggestionTypes[options.suggestionType]\r\n });\r\n\r\n return esValue;\r\n },\r\n\r\n getAllSearchTerms: function (query) {\r\n var allSearchTerms = [];\r\n\r\n Object.each(query, function(queryValue) {\r\n Array.each(queryValue, function (value) {\r\n var terms = ElasticSearchQuerySearchTerms.splitSearchTerms(value.value);\r\n\r\n Array.each(terms, function (term) {\r\n if (!allSearchTerms.contains(term)) {\r\n if (value.queryType === elasticQuerySearchQueryType.wildcard) {\r\n term = term.replace(/\\*/g, \"\");\r\n }\r\n allSearchTerms.push(term);\r\n }\r\n });\r\n });\r\n\r\n });\r\n\r\n return allSearchTerms;\r\n }\r\n});\r\n\r\nvar elasticSearchAutoComplete = {\r\n prefix: null,\r\n size: 5,\r\n skipDuplicates: true,\r\n fuzziness: 1,\r\n field: Librarian.elasticSearch.searchFieldType,\r\n contentTypes: elasticQueryContentType.file\r\n}\r\n\r\nvar elasticSearchAutoCompleteResults = {\r\n took: 0,\r\n timedOut: false,\r\n prefix: null,\r\n suggestions: []\r\n }\r\n\r\n\r\nLibrarian.ElasticSearch.Suggest = new Class({\r\n Extends: Librarian.Request.JSON,\r\n Implements: Options,\r\n\r\n options: {\r\n method: \"POST\",\r\n loadComplete: null, /*(json, text)*/\r\n onFailure: Librarian.Utils.onFailure\r\n },\r\n\r\n autoCompleteOptions: null,\r\n\r\n initialize: function (options) {\r\n if ((typeof options == \"undefined\") || (options == null))\r\n options = {};\r\n\r\n this.setOptions(options);\r\n\r\n this.options.url = Librarian.path.getSearchUrl(\"essugg\") + \"&out=cjson&in=cjson\";\r\n this.options.onSuccess = this.loadComplete;\r\n this.options.onException = options.onException;\r\n\r\n\r\n this.parent(this.options);\r\n },\r\n\r\n destroy: function () {\r\n this.cancel();\r\n this.clean();\r\n },\r\n\r\n clean: function () {\r\n this.response = null;\r\n\r\n this.xhr = null;\r\n\r\n this.xhr = new Browser.Request();\r\n },\r\n\r\n loadComplete: function (json) {\r\n if (typeof this.options.loadComplete == \"function\")\r\n this.options.loadComplete(json);\r\n },\r\n\r\n // Return an empty set if there is an error\r\n onFailure: function () {\r\n if (typeof this.options.loadComplete == \"function\")\r\n this.options.loadComplete(Object.clone(elasticSearchAutoCompleteResults));\r\n },\r\n\r\n suggest: function (text, options) {\r\n var body = Object.clone(options) || {};\r\n body.text = text.toLowerCase();\r\n\r\n if (body.suggestionType != null) {\r\n body.suggestionType = Librarian.ElasticSearch.suggestionTypes[body.suggestionType];\r\n }\r\n \r\n var suggestOptions = JSON.stringify(body);\r\n\r\n if (typeof Base64 != \"undefined\")\r\n suggestOptions = Base64.encode(suggestOptions);\r\n\r\n this.options.data = suggestOptions;\r\n this.send();\r\n }\r\n});\r\n\r\nLibrarian.ElasticSearch.Autocomplete = new Class({\r\n Extends: Librarian.Request.JSON,\r\n Implements: Options,\r\n\r\n options: {\r\n method: \"POST\",\r\n loadComplete: null, /*(json, text)*/\r\n onFailure: Librarian.Utils.onFailure,\r\n elasticSearchAutoComplete: Object.clone(elasticSearchAutoComplete)\r\n },\r\n\r\n autoCompleteOptions: null,\r\n\r\n initialize: function (options) {\r\n if ((typeof options == \"undefined\") || (options == null))\r\n options = {};\r\n\r\n this.setOptions(options);\r\n\r\n this.options.url = Librarian.path.getSearchUrl(\"esauto\") + \"&out=cjson&in=cjson\";\r\n this.options.onSuccess = this.loadComplete;\r\n this.options.onException = options.onException;\r\n\r\n this.autoCompleteOptions = Object.clone(this.options.elasticSearchAutoComplete);\r\n\r\n this.parent(this.options);\r\n },\r\n\r\n destroy: function () {\r\n this.cancel();\r\n this.clean();\r\n this.autoCompleteOptions = Object.clone(this.options.elasticSearchAutoComplete);\r\n },\r\n\r\n clean: function () {\r\n this.response = null;\r\n\r\n this.xhr = null;\r\n\r\n this.xhr = new Browser.Request();\r\n },\r\n\r\n loadComplete: function (json) {\r\n if (typeof this.options.loadComplete == \"function\")\r\n this.options.loadComplete(json);\r\n },\r\n\r\n // Return an empty set if there is an error\r\n onFailure: function () {\r\n if (typeof this.options.loadComplete == \"function\")\r\n this.options.loadComplete(Object.clone(elasticSearchAutoCompleteResults));\r\n },\r\n\r\n search: function () {\r\n var autoCompleteOptions = JSON.stringify(this.autoCompleteOptions);\r\n\r\n if (typeof Base64 != \"undefined\")\r\n autoCompleteOptions = Base64.encode(autoCompleteOptions);\r\n\r\n this.options.data = autoCompleteOptions;\r\n this.send();\r\n }\r\n})\r\n.extend({\r\n searchAutoCompleteResults: elasticSearchAutoCompleteResults,\r\n createAutoCompleteElement: function (searchEl) {\r\n searchEl.set(\"type\", \"search\");\r\n searchEl.addClass(\"elastic-search-box\");\r\n searchEl.set(\"autocomplete\", \"off\");\r\n\r\n var searchContEl = searchEl.getParent();\r\n searchContEl.addClass(\"autocomplete\").set(\"tabindex\", -1);\r\n\r\n var autoCompleteId = \"search-autocomplete-items-\" + (new Date()).getTime();\r\n var autoCompleteEl = new Element(\"div\", {\r\n \"class\": \"autocomplete-items\",\r\n \"id\": autoCompleteId\r\n });\r\n\r\n searchEl.grab(autoCompleteEl, \"after\");\r\n\r\n searchEl.addEvent(\"focus\", function() {\r\n autoCompleteEl.show();\r\n Library.searchAutoComplete(searchEl);\r\n });\r\n\r\n searchContEl.addEvent(\"focusout\", function(e) {\r\n var focusedEl = e.event.relatedTarget;\r\n var hasFocus = searchContEl.hasChild(focusedEl) || focusedEl == searchContEl;\r\n\r\n if (!hasFocus)\r\n autoCompleteEl.hide();\r\n });\r\n\r\n var setItemActive = function(direction) {\r\n var activeEl = autoCompleteEl.getElement(\".autocomplete-active\");\r\n var nextActiveEl;\r\n\r\n if (activeEl) {\r\n if (direction === \"up\") {\r\n nextActiveEl = activeEl.getPrevious();\r\n } else {\r\n nextActiveEl = activeEl.getNext();\r\n }\r\n\r\n } else {\r\n nextActiveEl = autoCompleteEl.getFirst();\r\n }\r\n\r\n if (nextActiveEl != null) {\r\n autoCompleteEl.getChildren().removeClass(\"autocomplete-active\");\r\n nextActiveEl.addClass(\"autocomplete-active\");\r\n }\r\n }\r\n\r\n searchEl.addEvent(\"keyup\", function (e) {\r\n if (e.key == \"enter\") {\r\n var activeEl = autoCompleteEl.getElement(\".autocomplete-active\");\r\n\r\n if (activeEl != null) {\r\n e.stop();\r\n e.event.stopImmediatePropagation();\r\n activeEl.fireEvent(\"click\");\r\n }\r\n\r\n autoCompleteEl.hide();\r\n searchEl.blur();\r\n }\r\n else if (e.key === \"up\") {\r\n setItemActive(\"up\");\r\n }\r\n else if (e.key === \"down\") {\r\n setItemActive(\"down\");\r\n }\r\n });\r\n\r\n /*\r\n\r\n searchEl.addEvent(\"click\", function (e) {\r\n e.stop();\r\n });*/\r\n\r\n searchEl.addEvent(\"input\", function () {\r\n autoCompleteEl.show();\r\n Library.searchAutoComplete(searchEl);\r\n });\r\n\r\n },\r\n getInstance: function(searchEl) {\r\n if (Librarian.elasticSearch.autoComplete) {\r\n var autoComplete = new Librarian.ElasticSearch.Autocomplete({\r\n loadComplete: function(results) {\r\n results = results || Librarian.ElasticSearch.Autocomplete.searchAutoCompleteResults;\r\n var dataListEl = searchEl.getNext(\".autocomplete-items\");\r\n\r\n if (dataListEl) {\r\n dataListEl.empty();\r\n\r\n Array.each(results.suggestions,\r\n function(suggestion) {\r\n if (Librarian.elasticSearch.searchFieldType == 1)\r\n var name = suggestion.title;\r\n else \r\n var name = suggestion.name;;\r\n\r\n var optionEl = new Element(\"div\",\r\n {\r\n \"text\": name,\r\n \"class\": \"autocomplete-item\"\r\n });\r\n\r\n optionEl.addEvent(\"click\",\r\n function(e) {\r\n var es = Librarian.ElasticSearch.getInstance(),\r\n libraryFilters = Librarian.elasticSearch.filters;\r\n\r\n var filters = new Librarian.ElasticSearch.ElasticSearchQueryFilter();\r\n filters.setContent(suggestion.contentId, suggestion.contentType);\r\n\r\n if (libraryFilters != {}) {\r\n for (var key in libraryFilters) {\r\n var property = key.toString();\r\n if (typeOf(libraryFilters[key]) == \"object\") {\r\n var attributes = libraryFilters[key];\r\n for (var attribKey in attributes) {\r\n filters\r\n .setAttribute(property,\r\n attribKey.toString(),\r\n attributes[attribKey]);\r\n }\r\n } else {\r\n filters.setAttribute(property, key.toString(), libraryFilters[key]);\r\n }\r\n }\r\n }\r\n\r\n es.searchOptions.filters = filters;\r\n\r\n Librarian.search.lastQuery = es.searchOptions;\r\n es.search();\r\n\r\n dataListEl.empty();\r\n\r\n var searchInputEl = searchEl;\r\n if (searchInputEl) {\r\n searchInputEl.set(\"value\", suggestion.title);\r\n }\r\n });\r\n\r\n dataListEl.grab(optionEl);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n return autoComplete;\r\n }\r\n});\r\n\r\nvar elasticSearchQueryFilter = {\r\n lastModDate: null,\r\n recordDate: null,\r\n categoryIds: null,\r\n categoryPaths: null,\r\n parentContentType: null,\r\n fileTypes: null,\r\n fileSubTypes: null,\r\n fileExtensions: null,\r\n fileKeywords: null,\r\n fileAttributes: null,\r\n slideKeywords: null,\r\n slideAttributes: null,\r\n content: null\r\n //parentContentType: elasticQueryContentType.file TODO fix search on slides not working and add this back\r\n};\r\n\r\nvar searchDate = {\r\n minDate: null,\r\n maxDate: null\r\n};\r\n\r\nvar esContent = {\r\n contentId: -1,\r\n contentType: Librarian.contentType.file\r\n}\r\n\r\nvar esAttribute = {\r\n name: null,\r\n values: null\r\n}\r\n\r\nLibrarian.ElasticSearch.ElasticSearchQueryFilter = new Class({\r\n members: null,\r\n\r\n initialize: function (data) {\r\n this.members = Object.clone(elasticSearchQueryFilter);\r\n var self = this;\r\n\r\n Object.each(data, function(value, key) {\r\n self.set(key, value);\r\n });\r\n },\r\n\r\n setDate: function(property, minDate, maxDate) {\r\n if (this.members.hasOwnProperty(property)) {\r\n var dateValue = Object.clone(searchDate);\r\n\r\n if ((minDate || \"\").trim().length !== 0) {\r\n dateValue.minDate = Librarian.Utils.extractDateFromString(minDate);\r\n }\r\n\r\n if ((maxDate || \"\").trim().length !== 0) {\r\n dateValue.maxDate = Librarian.Utils.extractDateFromString(maxDate);\r\n }\r\n\r\n this.members[property] = dateValue;\r\n\r\n return dateValue;\r\n }\r\n },\r\n\r\n setContent: function(contentId, contentType) {\r\n var content = Object.clone(esContent);\r\n content.contentId = contentId;\r\n content.contentType = contentType;\r\n\r\n this.members[\"content\"] = content;\r\n\r\n return content;\r\n },\r\n\r\n\r\n setAttribute: function (property, name, value) {\r\n if (this.members.hasOwnProperty(property)) {\r\n var attribute = Object.clone(esAttribute);\r\n attribute.name = name;\r\n\r\n if (Librarian.elasticSearch.filterOperator != null) {\r\n attribute.operator = Librarian.elasticSearch.filterOperator;\r\n }\r\n\r\n if (value.hasOwnProperty(\"minDate\") || value.hasOwnProperty(\"maxDate\")) {\r\n if (value.minDate != null && value.minDate != \"\") {\r\n attribute.minValue = new Date(value.minDate).format('%Y-%m-%dT%H:%M:%S');\r\n }\r\n if (value.maxDate != null && value.maxDate != \"\") {\r\n attribute.maxValue = new Date(value.maxDate).format('%Y-%m-%dT23:59:59');\r\n } \r\n }\r\n else if (value.isCategorized) {\r\n attribute.isCategorized = value.isCategorized;\r\n attribute.catIds = value.catIds;\r\n }\r\n else {\r\n attribute.values = Array.from(value);\r\n }\r\n\r\n this.members[property] = (this.members[property] || []).concat(attribute);\r\n\r\n return attribute;\r\n }\r\n },\r\n\r\n attributeExists: function (property, name) {\r\n var currentVal = this.members[property];\r\n\r\n if (currentVal != null) {\r\n return this.members[property].some(function(attribute) {\r\n return attribute.name == name;\r\n });\r\n }\r\n\r\n return false;\r\n },\r\n\r\n setValue: function(property, value, merge) {\r\n if (this.members.hasOwnProperty(property)) {\r\n value = Array.from(value);\r\n\r\n if (merge) {\r\n this.members[property] = (this.members[property] || []).concat(value);\r\n }\r\n else {\r\n this.members[property] = value;\r\n }\r\n }\r\n },\r\n\r\n setCategoryPaths: function() {\r\n\r\n },\r\n\r\n set: function (property, value, preventOverride) {\r\n var self = this;\r\n var currentVal = this.members[property];\r\n\r\n if (preventOverride && currentVal != null && ![\"fileAttributes\", \"slideAttributes\"].contains(property)) {\r\n return;\r\n }\r\n\r\n switch(property) {\r\n case \"lastModDate\":\r\n case \"recordDate\":\r\n this.setDate(property, value.minDate, value.maxDate);\r\n break;\r\n case \"content\":\r\n this.setContent(property, value.contentId, value.contentType);\r\n break;\r\n case \"fileAttributes\":\r\n case \"slideAttributes\":\r\n Object.each(value, function (item, key) {\r\n if (!preventOverride || !self.attributeExists(property, key)) {\r\n self.setAttribute(property, key, item);\r\n }\r\n });\r\n break;\r\n case \"parentContentType\":\r\n this.members[property] = value;\r\n break;\r\n default:\r\n this.setValue(property, value);\r\n break;\r\n }\r\n }\r\n\r\n});\r\n})();","Librarian.SearchOptions = new Class({\r\n Extends: MUI.Panel,\r\n\r\n Binds: [\r\n \"loadSearchOptions\", \"fetchSearchOptions\", \"fetchDefaultSearchOptions\", \"onSubmit\",\r\n \"onInputChanged\", \"buildQuery\", \"search\", \"renderFilters\", \"resetFilters\", \"doSearchTerm\",\r\n \"onLoaded\", \"renderBucketFilter\"\r\n ],\r\n\r\n Implements: Options,\r\n\r\n options: {\r\n id: \"searchOptionsPanel\",\r\n resizable: false,\r\n width: 260,\r\n sourceName: Librarian.elasticSearch.sourceName\r\n },\r\n\r\n\r\n className: \"search-options\",\r\n searchOptions: null,\r\n loaded: false,\r\n filtersLoaded: false,\r\n bucketsLoaded: false,\r\n searchFileAttributesLoaded: false,\r\n searchOptionsLoaded: false,\r\n\r\n template: Handlebars.compile(\"\\\r\n
\\\r\n
\\\r\n
\\\r\n \\\r\n \\\r\n
\\\r\n
\\\r\n Search Logic: \\\r\n \\\r\n \\\r\n \\\r\n \\\r\n
\\\r\n
\\\r\n
\\\r\n
Reset Filters
\\\r\n
\\\r\n
\\\r\n
\\\r\n \"),\r\n\r\n formEl: null,\r\n filterEls: [],\r\n\r\n initialize: function(options) {\r\n var self = this;\r\n this.setOptions(options);\r\n\r\n this.parent(this.options);\r\n\r\n this.hide();\r\n\r\n this.addEvent(\"filtersLoaded\", function () {\r\n self.filtersLoaded = true;\r\n self.onLoaded();\r\n });\r\n this.addEvent(\"bucketsLoaded\", function () {\r\n self.bucketsLoaded = true;\r\n self.onLoaded();\r\n });\r\n this.addEvent(\"aggregatesLoaded\", self.onAggregatesLoaded);\r\n\r\n Librarian.ElasticSearch.loadSearchPreference();\r\n\r\n //this.fetchDefaultSearchOptions();\r\n this.fetchSearchOptions();\r\n this.fetchSearchFileAttributes();\r\n this.fetchSearchSlideAttributes();\r\n this.fetchSearchGroupAttributes();\r\n },\r\n\r\n onLoaded: function() {\r\n if (this.filtersLoaded && this.bucketsLoaded) {\r\n var value = this.contentTypeFilter.inputClass.get()[0];\r\n var queryContentType = value.queryContentType;\r\n this.toggleAttributeFilters(queryContentType);\r\n\r\n this.loaded = true;\r\n this.fireEvent(\"loaded\");\r\n }\r\n },\r\n\r\n onAggregatesLoaded: function () {\r\n var self = this;\r\n\r\n Array.each(self.aggregates, function(aggregate) {\r\n Array.each(self.filters, function(filter) {\r\n if (!filter.options.exclude && ((filter.options.attributeName === aggregate.name) || (filter.options.name === aggregate.name))) {\r\n filter.fireEvent(\"renderAggregates\", aggregate);\r\n }\r\n });\r\n });\r\n },\r\n\r\n onOptionsLoaded: function () {\r\n var self = this;\r\n if (this.searchOptionsLoaded && this.searchFileAttributesLoaded\r\n && this.searchGroupAttributesLoaded && this.searchSlideAttributesLoaded) {\r\n var filters = [];\r\n\r\n Array.each(this.searchOptions.filters, function (filter) {\r\n if (filter.attributeName == \"searchAttributes\") {\r\n if (Librarian.elasticSearch.attributeFilters) {\r\n var attributeFilters = [];\r\n\r\n if (filter.name == \"fileAttributes\") {\r\n attributeFilters = self.searchFileAttributes;\r\n } else if (filter.name == \"groupAttributes\") {\r\n attributeFilters = self.searchGroupAttributes;\r\n } else if (filter.name == \"slideAttributes\") {\r\n attributeFilters = self.searchSlideAttributes;\r\n }\r\n\r\n attributeFilters = attributeFilters.map(function (option) {\r\n return Object.merge({}, filter, option);\r\n });\r\n filters = filters.concat(attributeFilters);\r\n }\r\n } else {\r\n filters.push(filter);\r\n }\r\n });\r\n\r\n this.searchOptions.filters = filters;\r\n\r\n this.render();\r\n }\r\n },\r\n\r\n isDefaultSearchOption: function () {\r\n return this.sourceName === this.options.sourceName;\r\n },\r\n\r\n loadSearchOptions: function (json) {\r\n this.resetOptions();\r\n\r\n this.searchOptions = JSON.parse(json.trim());\r\n Librarian.SearchOptions.searchOptions = this.searchOptions;\r\n this.searchOptionsLoaded = true;\r\n this.onOptionsLoaded();\r\n },\r\n\r\n fetchSearchOptions: function (sourceName) {\r\n this.sourceName = sourceName = sourceName || this.options.sourceName;\r\n var self = this;\r\n Librarian.Utils.getSlideText({ filename: sourceName }, function (searchOptions) {\r\n self.loadSearchOptions(searchOptions.Text.replace(\"\", \"\"));\r\n }, null, this.fetchDefaultSearchOptions);\r\n },\r\n\r\n fetchDefaultSearchOptions: function () {\r\n var self = this;\r\n\r\n var getSearchOptionsJson = new Request({\r\n method: \"get\",\r\n url: Librarian.path.getLayoutsPath() + \"core/search/searchoptions.json\",\r\n onSuccess: function (searchOptions) {\r\n self.loadSearchOptions(searchOptions);\r\n }\r\n });\r\n\r\n getSearchOptionsJson.send();\r\n },\r\n\r\n fetchSearchFileAttributes: function () {\r\n var self = this;\r\n\r\n var request = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getfatl\") + \"&all=0&includeValues=true&out=cjson\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: function (attributes) {\r\n self.fileAttributes = attributes;\r\n attributes = attributes.filter(function (attribute) {\r\n return attribute.searchable;\r\n });\r\n\r\n var attributeFilters = attributes.map(function (attribute) {\r\n return {\r\n \"name\": \"fileAttributes\",\r\n \"label\": attribute.name,\r\n \"attributeName\": attribute.name,\r\n \"attributeDef\": attribute\r\n }\r\n });\r\n self.searchFileAttributes = attributeFilters;\r\n self.searchFileAttributesLoaded = true;\r\n self.onOptionsLoaded();\r\n }.bind(this)\r\n });\r\n request.send();\r\n },\r\n\r\n fetchSearchGroupAttributes: function () {\r\n var self = this;\r\n\r\n var request = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getgatl\") + \"&all=0&includeValues=true&out=cjson\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: function (attributes) {\r\n self.groupAttributes = attributes;\r\n attributes = attributes.filter(function (attribute) {\r\n return attribute.searchable;\r\n });\r\n\r\n var attributeFilters = attributes.map(function (attribute) {\r\n return {\r\n \"name\": \"fileAttributes\",\r\n \"label\": attribute.name,\r\n \"attributeName\": attribute.name,\r\n \"attributeDef\": attribute\r\n }\r\n });\r\n self.searchGroupAttributes = attributeFilters;\r\n self.searchGroupAttributesLoaded = true;\r\n self.onOptionsLoaded();\r\n }.bind(this)\r\n });\r\n request.send();\r\n },\r\n\r\n fetchSearchSlideAttributes: function () {\r\n var self = this;\r\n\r\n var request = new Librarian.Request.JSON({\r\n url: Librarian.path.getMethodUrl(\"getsatl\") + \"&all=0&includeValues=true&out=cjson\",\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: function (attributes) {\r\n self.slideAttributes = attributes;\r\n attributes = attributes.filter(function (attribute) {\r\n return attribute.searchable;\r\n });\r\n\r\n var attributeFilters = attributes.map(function (attribute) {\r\n return {\r\n \"name\": \"slideAttributes\",\r\n \"label\": attribute.name,\r\n \"attributeName\": attribute.name,\r\n \"attributeDef\": attribute\r\n }\r\n });\r\n self.searchSlideAttributes = attributeFilters;\r\n self.searchSlideAttributesLoaded = true;\r\n self.onOptionsLoaded();\r\n }.bind(this)\r\n });\r\n request.send();\r\n\r\n },\r\n\r\n render: function () {\r\n var self = this;\r\n var contEl = this.contentEl;\r\n\r\n contEl.empty();\r\n contEl.set(\"html\", this.template({\r\n \"class\": this.className\r\n }));\r\n\r\n var searchEl = contEl.getElement(\".\" + this.className + \"-search-input-ico\");\r\n searchEl.addEvent(\"click\", function (e) {\r\n self.search();\r\n });\r\n\r\n var searchBoxEl = this.contentEl.getElement(\".\" + this.className + \"-search-input\");\r\n Librarian.ElasticSearch.Autocomplete.createAutoCompleteElement(searchBoxEl);\r\n searchBoxEl.addEvent(\"keyup\", function (e) {\r\n if (e.key == \"enter\") {\r\n self.search();\r\n }\r\n });\r\n\r\n var resetEl = contEl.getElement(\".\" + this.className + \"-reset\");\r\n resetEl.addEvent(\"click\", this.resetFilters);\r\n\r\n this.elasticOperatorEl = contEl.getElement(\".\" + this.className + \"-elastic-operator\");\r\n\r\n var defaulOperator = Librarian.ElasticSearch.searchPreference.elasticOperator || Librarian.elasticSearch.defaultOperator;\r\n if (defaulOperator != null) {\r\n if (defaulOperator == \"and\") {\r\n var andEl = contEl.getElement(\"#\" + this.className + \"-elastic-operator-and\");\r\n andEl.setAttribute(\"checked\", true);\r\n }\r\n else if (defaulOperator == \"or\") {\r\n var orEl = contEl.getElement(\"#\" + this.className + \"-elastic-operator-or\");\r\n orEl.setAttribute(\"checked\", true); \r\n }\r\n }\r\n\r\n var operatorOptionsEl = this.elasticOperatorEl.getElements(\"input[type=radio][name=elasticOperator\");\r\n operatorOptionsEl.addEvent(\"change\", function (e) {\r\n var operator = self.elasticOperatorEl.toQueryString().parseQueryString();\r\n Librarian.ElasticSearch.setSearchPreference(operator);\r\n self.search();\r\n });\r\n\r\n this.renderFilters();\r\n this.renderBucketFilter();\r\n },\r\n\r\n reset: function () {\r\n var searchBox = this.contentEl.getElement(\".\" + this.className + \"-search-input\");\r\n searchBox.set(\"value\", \"\");\r\n\r\n this.resetFilters(false);\r\n },\r\n\r\n resetOptions: function () {\r\n this.loaded = false;\r\n this.filtersLoaded = false;\r\n this.bucketsLoaded = false;\r\n },\r\n\r\n resetFilters: function (doSearchAfter) {\r\n if (doSearchAfter == undefined) {\r\n doSearchAfter = true;\r\n }\r\n\r\n this.resetOptions();\r\n this.renderFilters();\r\n this.renderBucketFilter();\r\n\r\n if (doSearchAfter) {\r\n this.search();\r\n }\r\n },\r\n\r\n renderFilters: function () {\r\n var self = this;\r\n var contEl = this.contentEl;\r\n var filterOptions = this.searchOptions.filters;\r\n var filterEl = contEl.getElement(\".\" + this.className + \"-filters\");\r\n\r\n this.filters = [];\r\n filterEl.empty();\r\n var filtersToLoad = filterOptions.length;\r\n\r\n var onFilterLoaded = function () {\r\n filtersToLoad--;\r\n\r\n if (filtersToLoad == 0) {\r\n self.fireEvent(\"filtersLoaded\");\r\n }\r\n }\r\n\r\n Array.each(filterOptions, function (filter, index) {\r\n filter.class = self.className;\r\n filter.id = self.className + \"-\" + filter.name + \"-\" + (new Date()).getTime() + \"-\" + index;\r\n\r\n var contEl = filterEl;\r\n\r\n var filterObj;\r\n if (filter.name == \"searchTerms\") {\r\n filter.fileAttributes = self.fileAttributes;\r\n filter.slideAttributes = self.slideAttributes;\r\n filterObj = new Librarian.SearchOptions.Terms(filter);\r\n self.terms = filterObj;\r\n } else {\r\n filterObj = new Librarian.SearchOptions.Filter(filter, self);\r\n self.filters.push(filterObj);\r\n\r\n if (filter.name == \"contentTypes\") {\r\n self.contentTypeFilter = filterObj;\r\n }\r\n }\r\n\r\n var inputEl = filterObj.contEl;\r\n filterObj.addEvent(\"change\", self.onInputChanged);\r\n\r\n if (filterObj.loaded) {\r\n onFilterLoaded();\r\n } else {\r\n filterObj.addEvent(\"load\", onFilterLoaded);\r\n }\r\n\r\n contEl.grab(inputEl);\r\n });\r\n },\r\n\r\n renderBucketFilter: function () {\r\n var self = this;\r\n if (Librarian.SearchOptions.searchOptions != null && Librarian.SearchOptions.searchOptions.groups != null) {\r\n var bucketFiltersEl = $(\"search-result-category-filter\");\r\n if (bucketFiltersEl) {\r\n bucketFiltersEl.empty();\r\n\r\n var inputEl = new Element(\"div\", {\r\n \"class\": this.className + \"-category-filters\"\r\n });\r\n\r\n var options = Librarian.SearchOptions.searchOptions.groups.map(function (group) {\r\n return {\r\n \"name\": group.label,\r\n \"value\": group.label,\r\n \"selected\": group.selected\r\n }\r\n });\r\n\r\n var filter = {\r\n \"name\": \"searchBucket\",\r\n \"options\": options,\r\n \"optionType\": \"radio\",\r\n \"class\": this.className,\r\n \"id\": this.className + \"-bucket\",\r\n \"container\": inputEl\r\n };\r\n\r\n var filterObj = this.bucketFilter = new Librarian.SearchOptions.OptionsFilter(filter);\r\n filterObj.addEvent(\"change\", this.onInputChanged);\r\n filterObj.addEvent(\"load\", function () {\r\n self.fireEvent(\"bucketsLoaded\");\r\n });\r\n\r\n inputEl.grab(filterObj.render());\r\n bucketFiltersEl.grab(inputEl);\r\n } else {\r\n this.addEvent(\"searchPageLoaded\", this.renderBucketFilter);\r\n }\r\n } else {\r\n this.fireEvent(\"bucketsLoaded\");\r\n }\r\n },\r\n\r\n buildQuery: function (searchOptions, extraFilters) {\r\n var value = this.getSearchTerm();\r\n\r\n searchOptions.searchTerms = new Librarian.ElasticSearch.ElasticSearchQuerySearchTerms();\r\n searchOptions.filters = new Librarian.ElasticSearch.ElasticSearchQueryFilter();\r\n searchOptions.exclusionFilters = new Librarian.ElasticSearch.ElasticSearchQueryFilter();\r\n\r\n var options = this.parseSearchQuery(value);\r\n value = options.term;\r\n var libraryFilters = Librarian.elasticSearch.filters;\r\n\r\n searchOptions.searchTerms.query = value;\r\n // Get Search Terms\r\n if (this.terms != null) {\r\n this.terms.get(searchOptions.searchTerms, value, options);\r\n }\r\n\r\n // Get Filters\r\n if (this.filters != null) {\r\n Array.each(this.filters, function (filter) {\r\n filter.get(searchOptions);\r\n });\r\n }\r\n\r\n Object.each(libraryFilters, function (value, key) {\r\n searchOptions.filters.set(key, value, true);\r\n });\r\n\r\n Object.each(extraFilters, function (value, key) {\r\n searchOptions.filters.set(key, value, true);\r\n });\r\n },\r\n\r\n getSearchTerm: function () {\r\n var searchBox = this.contentEl.getElement(\".\" + this.className + \"-search-input\");\r\n\r\n return searchBox.get(\"value\").trim();\r\n },\r\n\r\n onInputChanged: function (filter) {\r\n if (filter.options != null && filter.options.name == \"contentTypes\") {\r\n var value = filter.inputClass.get()[0];\r\n var queryContentType = value.queryContentType;\r\n\r\n this.toggleAttributeFilters(queryContentType);\r\n }\r\n\r\n this.search();\r\n },\r\n\r\n toggleAttributeFilters: function (queryContentType) {\r\n var enabledFilters = [];\r\n var attribFilters = [\"fileAttributes\", \"slideAttributes\"];\r\n\r\n Array.each(this.filters, function (filter) {\r\n if (attribFilters.contains(filter.options.name) && filter.options.hasOwnProperty(\"queryContentType\")) {\r\n if (((filter.options.queryContentType & queryContentType) !== 0) && !enabledFilters.contains(filter.options.attributeName)) {\r\n enabledFilters.push(filter.options.attributeName);\r\n filter.enable();\r\n } else {\r\n filter.disable();\r\n }\r\n }\r\n });\r\n },\r\n\r\n parseSearchQuery: function (searchTerm) {\r\n var options = {\r\n term: searchTerm\r\n };\r\n\r\n var elasticOperator = this.elasticOperatorEl.toQueryString().parseQueryString();\r\n if (elasticOperator[\"elasticOperator\"] == \"and\") {\r\n options.operator = elasticOperator[\"elasticOperator\"];\r\n } \r\n\r\n /*\r\n else {\r\n var andRegex = /(?:(and|or) )*(\\w+)/gmi;\r\n var match, previousMatch;\r\n\r\n var ands = [];\r\n var ors = [];\r\n\r\n while ((match = andRegex.exec(searchTerm)) != null) {\r\n var operator = match[1].toLowerCase();\r\n var wordTerm = match[2];\r\n\r\n if (operator == \"and\") {\r\n \r\n }\r\n else if (operator == \"or\") {\r\n\r\n } else {\r\n \r\n }\r\n\r\n previousMatch = match;\r\n\r\n }\r\n }*/\r\n\r\n return options;\r\n\r\n },\r\n\r\n isGroupedResults: function () {\r\n if (this.bucketFilter == null) {\r\n return false;\r\n\r\n }\r\n\r\n var selectedBuckets = this.bucketFilter.get();\r\n\r\n return selectedBuckets.contains(Librarian.elasticSearch.allGroupsFilterName);\r\n },\r\n\r\n search: function (extraFilters) {\r\n var self = this;\r\n if (this.loaded) {\r\n var value = this.getSearchTerm();\r\n\r\n if ((value || \"\").trim().length > 0) {\r\n var currentHash = Librarian.Utils.getHash().parseQueryString() || {};\r\n if (!currentHash.hasOwnProperty(\"page\")) {\r\n currentHash.page = \"search\";\r\n }\r\n currentHash[\"q\"] = encodeURIComponent(value);\r\n var hashString = (new Hash(currentHash).toQueryString());\r\n Librarian.Utils.changeHash(hashString);\r\n }\r\n\r\n // Suggestions and search\r\n var doSuggest = Librarian.SearchOptions.searchOptions.suggester != null\r\n && Librarian.SearchOptions.searchOptions.suggester.enabled;\r\n var requestCount = doSuggest ? 1 : 0;\r\n var groupResults = [];\r\n var searchResults = null;\r\n var suggestions = null;\r\n var currentSearchOptions = null;\r\n var onComplete = function (results, group, searchOptions, suggestionResult) {\r\n if (group != null) {\r\n groupResults[group.index].results = results;\r\n groupResults[group.index].searchOptions = searchOptions;\r\n }\r\n\r\n if (results != null) {\r\n searchResults = results;\r\n }\r\n\r\n if (suggestionResult != null) {\r\n suggestions = suggestionResult;\r\n }\r\n\r\n if (searchOptions != null) {\r\n currentSearchOptions = searchOptions;\r\n }\r\n\r\n requestCount--;\r\n\r\n if (requestCount === 0) {\r\n var searchResult = groupResults.length > 1 ? groupResults : searchResults;\r\n Librarian.SearchResult.prepSearchPage(searchResult, currentSearchOptions, suggestions);\r\n if (Librarian.elasticSearch.aggregates && searchResults.aggregations)\r\n self.aggregates = searchResults.aggregations;\r\n self.fireEvent(\"aggregatesLoaded\");\r\n }\r\n\r\n }\r\n\r\n var suggestionEs = function (text) {\r\n var es = new Librarian.ElasticSearch.Suggest({\r\n loadComplete: function (results) {\r\n onComplete(null, null, this.searchOptions, results);\r\n }\r\n });\r\n\r\n es.suggest(text, Librarian.SearchOptions.searchOptions.suggester);\r\n };\r\n\r\n var isGroupedResults = this.isGroupedResults();\r\n var searchEs = function (group) {\r\n var es = new Librarian.ElasticSearch({\r\n loadComplete: function (results) {\r\n onComplete(results, group, this.searchOptions);\r\n },\r\n beforeLoadComplete: function () {\r\n // Load the search tab\r\n Library.loadTabByName(\"search\") || Library.loadTabByName(\"advancedsearch\");\r\n },\r\n elasticSearchQueryOptions: {\r\n size: isGroupedResults ? Librarian.SearchResult.groupResultCount : Librarian.search.maxResults\r\n }\r\n });\r\n\r\n self.buildQuery(es.searchOptions, extraFilters);\r\n\r\n var continueSearch = true;\r\n if (group != null) {\r\n if (Library.customGroupSearchFilter != null) {\r\n continueSearch = Library.customGroupSearchFilter(es.searchOptions, group);\r\n } else {\r\n Librarian.SearchOptions.Filter.buildFilter(es.searchOptions, { type: \"custom\" }, group.customFilter);\r\n }\r\n }\r\n\r\n Librarian.search.lastQuery = es.searchOptions;\r\n\r\n if (continueSearch) {\r\n es.search();\r\n }\r\n else {\r\n onComplete(null, group, es.searchOptions);\r\n }\r\n \r\n }\r\n\r\n if (Librarian.SearchOptions.searchOptions.groups != null) {\r\n var selectedBuckets = this.bucketFilter.get();\r\n var buckets = Librarian.SearchOptions.searchOptions.groups;\r\n var selectAll = selectedBuckets.contains(Librarian.elasticSearch.allGroupsFilterName);\r\n\r\n if (selectedBuckets.length > 0) {\r\n buckets = Librarian.SearchOptions.searchOptions.groups.filter(function (group) {\r\n if (selectAll) {\r\n if (group.label != Librarian.elasticSearch.allGroupsFilterName && !Librarian.elasticSearch.excludeGroupsFilter.contains(group.label)) {\r\n return true;\r\n }\r\n } else {\r\n if (selectedBuckets.contains(group.label)) {\r\n return true;\r\n }\r\n } \r\n });\r\n }\r\n requestCount += buckets.length;\r\n Array.each(buckets, function (group, index) {\r\n group.index = index;\r\n groupResults.push(group);\r\n\r\n searchEs(group);\r\n });\r\n } else {\r\n requestCount += 1;\r\n searchEs();\r\n }\r\n\r\n // Get suggestions\r\n if (doSuggest) {\r\n suggestionEs(value);\r\n }\r\n } else {\r\n this.addEvent(\"loaded:once\", function () {\r\n self.search();\r\n });\r\n } \r\n },\r\n\r\n\r\n loadSelectedCategoryName: function() {\r\n // IM HERE JUST FOR COMPATABILITY. I DO NOTHING.\r\n },\r\n\r\n closeCatSelectWindow: function() {\r\n // IM HERE JUST FOR COMPATABILITY. I DO NOTHING.\r\n },\r\n\r\n doSearchTerm: function (searchTerm, filters) {\r\n var self = this;\r\n\r\n if (this.loaded) {\r\n var searchBox = this.contentEl.getElement(\".\" + this.className + \"-search-input\");\r\n searchBox.set(\"value\", searchTerm);\r\n\r\n this.search(filters);\r\n } else {\r\n this.addEvent(\"loaded:once\", function() {\r\n self.doSearchTerm(searchTerm, filters);\r\n });\r\n }\r\n },\r\n\r\n useLastSearchOptions: function() {\r\n if (Librarian.search.lastQuery != null) {\r\n var searchBox = this.contentEl.getElement(\".\" + this.className + \"-search-input\");\r\n searchBox.set(\"value\", Librarian.search.lastQuery.searchTerm);\r\n }\r\n },\r\n\r\n hide: function() {\r\n this.parent();\r\n\r\n var searchPageEl = $(\"search-result-page\");\r\n if (searchPageEl) {\r\n searchPageEl.hide();\r\n }\r\n },\r\n\r\n set: function(name, value) {\r\n\r\n }\r\n});\r\n\r\n\r\nLibrarian.SearchOptions.Filter = new Class({\r\n Implements: [Options, Events],\r\n Binds: [\"onInputChanged\", \"onLoadAttributeDef\", \"render\", \"get\"],\r\n\r\n options: {\r\n label: \"\",\r\n name: \"\",\r\n displayed: \"\",\r\n \"default\": \"\",\r\n accordion: true,\r\n startOpen: false,\r\n attributeName: \"\",\r\n container: null,\r\n exclude: false\r\n },\r\n\r\n className: \"search-options-filter\",\r\n value: {},\r\n loaded: false,\r\n\r\n template: Handlebars.compile(\"\\\r\n
\\\r\n
\\\r\n \\\r\n \\\r\n
\\\r\n
\\\r\n
\"),\r\n\r\n initialize: function(options, parent) {\r\n this.setOptions(options);\r\n this.parent = parent;\r\n\r\n var cleanLabel = this.options.label;\r\n if (cleanLabel) {\r\n cleanLabel = cleanLabel.replaceAll(\" \", \"_\");\r\n }\r\n else {\r\n cleanLabel = this.options.name.replaceAll(\" \", \"_\");\r\n }\r\n\r\n this.options.id = this.options.id || this.className + \"-\" + this.options.name + \"-cont-\" + (new Date().getTime()) + cleanLabel;\r\n\r\n this.initContainer();\r\n this.load();\r\n\r\n this.addEvent(\"renderAggregates\", this.renderAggregates);\r\n },\r\n\r\n load: function() {\r\n if (this.options.attributeName.length > 0) {\r\n this.loadAttributeDef();\r\n }\r\n else if (this.options.name === \"fileTypes\") {\r\n this.loadFileTypes();\r\n }\r\n else if (this.options.name === \"contentTypes\") {\r\n this.loadContentTypes();\r\n }\r\n else if (this.options.name === \"fileSubTypes\") {\r\n this.loadContentTypes();\r\n }\r\n else {\r\n this.render();\r\n }\r\n },\r\n\r\n initContainer: function () {\r\n if (this.options.container != null) {\r\n this.contEl = this.options.container;\r\n this.bodyEl = this.contEl;\r\n\r\n this.contEl.empty();\r\n } else {\r\n if (this.contEl == null) { \r\n this.contEl = new Element(\"div\", {\r\n \"class\": this.className + \"-cont\", \r\n \"id\": this.options.id\r\n });\r\n } else {\r\n this.contEl.empty();\r\n }\r\n\r\n var html = this.template({\r\n \"class\": this.className,\r\n \"label\": this.options.label\r\n });\r\n\r\n this.contEl.set(\"html\", html);\r\n this.headerEl = this.contEl.getElement(\".\" + this.className + \"-header\");\r\n this.bodyEl = this.contEl.getElement(\".\" + this.className + \"-body\");\r\n this.countEl = this.contEl.getElement(\".\" + this.className + \"-count\");\r\n\r\n if (this.options.accordion !== false) {\r\n this.accordion = new Librarian.Accordion(this.headerEl, this.bodyEl, { startOpen: this.options.startOpen });\r\n }\r\n }\r\n },\r\n\r\n render: function () {\r\n var self = this;\r\n var filter = this.options;\r\n this.inputClass = null;\r\n\r\n if (filter.tree) {\r\n switch (filter.treeType) {\r\n case \"categorizedAttribute\":\r\n this.inputClass = new Librarian.SearchOptions.CategorizedAttributeTreeFilter(filter);\r\n break;\r\n case \"categories\":\r\n this.inputClass = new Librarian.SearchOptions.CategoryTreeFilter(filter);\r\n break;\r\n }\r\n } else if (filter.options) {\r\n this.inputClass = new Librarian.SearchOptions.OptionsFilter(filter);\r\n\r\n } else if (filter.type == \"date\") {\r\n this.inputClass = new Librarian.SearchOptions.DateFilter(filter);\r\n } else {\r\n this.inputClass = new Librarian.SearchOptions.TextFilter(filter);\r\n }\r\n\r\n if (this.inputClass != null) {\r\n this.inputClass.addEvent(\"load\", function () {\r\n self.loaded = true;\r\n self.fireEvent(\"load\");\r\n });\r\n\r\n var inputEl = this.inputClass.render();\r\n this.inputClass.addEvent(\"change\", this.onInputChanged);\r\n this.bodyEl.grab(inputEl);\r\n\r\n if (filter.displayed === false) {\r\n this.contEl.hide();\r\n }\r\n }\r\n\r\n return this.inputClass;\r\n },\r\n\r\n onInputChanged: function() {\r\n this.fireEvent(\"change\", this);\r\n },\r\n\r\n get: function (searchOption) {\r\n if (this.options.disabled) {\r\n return;\r\n }\r\n\r\n var value = this.inputClass.get();\r\n\r\n Librarian.SearchOptions.Filter.buildFilter(searchOption, this.options, value, this.options.exclude);\r\n },\r\n\r\n renderAggregates: function (aggregate) {\r\n this.updateCount(aggregate);\r\n this.inputClass.fireEvent(\"aggregateCount\", aggregate);\r\n },\r\n\r\n updateCount: function (aggregate) {\r\n if (this.countEl) {\r\n var count = \"(\" + aggregate.total + \")\";\r\n if (aggregate.total > 10000) {\r\n count = \"(10k+)\";\r\n }\r\n this.countEl.set(\"text\", aggregate.total > 0 ? count : \"\");\r\n }\r\n },\r\n\r\n set: function(value) {\r\n this.inputClass.set(value);\r\n },\r\n\r\n reset: function() {\r\n this.inputClass.reset();\r\n this.onInputChanged();\r\n },\r\n\r\n destroy: function() {\r\n this.inputClass.destroy();\r\n },\r\n\r\n disable: function() {\r\n this.options.displayed = false;\r\n this.options.disabled = true;\r\n\r\n this.contEl.hide();\r\n },\r\n\r\n enable: function() {\r\n this.options.displayed = true;\r\n this.options.disabled = false;\r\n\r\n this.contEl.show();\r\n },\r\n\r\n loadAttributeDef: function() {\r\n var filter = this.options;\r\n\r\n if (filter.attributeDef != null) {\r\n this.onLoadAttributeDef(filter.attributeDef);\r\n } \r\n else {\r\n var getAttributeDefinition = new Librarian.Request.JSON({\r\n method: \"get\",\r\n url: Librarian.path.getMethodUrl(\"getat\") + \"&out=cjson&atname=\" + filter.attributeName,\r\n onSuccess: this.onLoadAttributeDef\r\n });\r\n\r\n getAttributeDefinition.send();\r\n }\r\n },\r\n\r\n onLoadAttributeDef: function(attribDef) {\r\n if (!attribDef)\r\n attribDef = {};\r\n\r\n var filter = this.options;\r\n\r\n filter.attributeDef = attribDef;\r\n if (attribDef.dropdown) {\r\n if (!Librarian.admin.dynamicDropdownAttributes.contains(this.options.label)) {\r\n filter.options = attribDef.dropdownValues.map(function (option) {\r\n return {\r\n \"name\": option.value,\r\n \"value\": option.value\r\n }\r\n });\r\n }\r\n } else if (attribDef.categorized) {\r\n filter.tree = true;\r\n filter.treeType = \"categorizedAttribute\";\r\n }\r\n else if (attribDef.dataType == Librarian.attributeDataType.datetime) {\r\n filter.type = \"date\";\r\n filter.isRange = true;\r\n\r\n }\r\n else {\r\n if (attribDef.dataType == Librarian.attributeDataType.bool) {\r\n filter.isMultiValued = true;\r\n filter.options = [\r\n {\r\n \"name\": \"All\",\r\n \"value\": \"\",\r\n \"selected\": true\r\n },\r\n {\r\n \"name\": \"True\",\r\n \"value\": \"true,True\"\r\n },\r\n {\r\n \"name\": \"False\",\r\n \"value\": \"false,False\"\r\n }\r\n ];\r\n filter.optionType = \"radio\";\r\n }\r\n }\r\n\r\n this.render();\r\n },\r\n\r\n loadContentTypes: function () {\r\n var self = this;\r\n var filter = this.options;\r\n\r\n filter.options = filter.options.map(function(option) {\r\n var type = Librarian.SearchOptions.Filter.typeFilters[option];\r\n type.name = Librarian.Lang.getString(type.name);\r\n type.value = option;\r\n\r\n return type;\r\n });\r\n\r\n this.render();\r\n },\r\n\r\n loadFileTypes: function () {\r\n var self = this;\r\n\r\n Librarian.Utils.getFileTypes(function (fileTypes) {\r\n var options = fileTypes.map(function (fileType) {\r\n return {\r\n \"name\": fileType.FileTypeExtension,\r\n \"value\": fileType.FileTypeId\r\n }\r\n });\r\n\r\n filter.options = options;\r\n\r\n self.render();\r\n });\r\n },\r\n\r\n loadFileSubTypes: function() {\r\n var options = [];\r\n\r\n Object.each(Librarian.subType, function (value, key) {\r\n options.push({\r\n \"name\": key,\r\n \"value\": value\r\n });\r\n });\r\n\r\n filter.options = options;\r\n this.render();\r\n }\r\n})\r\n.extend({\r\n buildFilter: function (searchOption, filter, value, exclude) {\r\n var self = this;\r\n value = filter.value || value;\r\n\r\n if ((typeOf(value) == \"array\" || typeOf(value) == \"string\") && value.length == 0) {\r\n return;\r\n }\r\n\r\n var inclusionFilterOption = searchOption.filters;\r\n var exclusionFilterOption = searchOption.exclusionFilters;\r\n var filterOption = exclude ? exclusionFilterOption : inclusionFilterOption;\r\n\r\n if (filter.type == \"custom\") {\r\n var values = Array.from(value);\r\n\r\n Array.each(values, function (value) {\r\n var customFilters = value.filters;\r\n var customExclusionFilters = value.exclusionFilters;\r\n var queryContentType = value.queryContentType;\r\n\r\n if (customFilters != null) {\r\n Object.each(customFilters, function (customFilter, key) {\r\n filterOption.set(key, customFilter);\r\n });\r\n }\r\n\r\n if (customExclusionFilters != null) {\r\n Object.each(customExclusionFilters, function (customFilter, key) {\r\n exclusionFilterOption.set(key, customFilter);\r\n });\r\n }\r\n\r\n if (queryContentType != null) {\r\n searchOption.queryContentType = queryContentType;\r\n }\r\n });\r\n }\r\n else if (filter.attributeName != null && filter.attributeName.trim().length > 0) {\r\n var attribVal = {};\r\n\r\n //Temporary fix to ensure dynamic dropdown queries are not case sensitive\r\n if (Librarian.admin.dynamicDropdownAttributes.contains(filter.attributeName)) {\r\n if (typeOf(value) == \"array\") {\r\n var formattedValues = [];\r\n Array.each(value, function (item) {\r\n item = item.capitalize();\r\n item = item.trim();\r\n formattedValues.push(item);\r\n });\r\n attribVal[filter.attributeName] = formattedValues;\r\n } else {\r\n attribVal[filter.attributeName] = value.substr(0, 1).toUpperCase() + value.substr(1);\r\n }\r\n } \r\n else if (filter.treeType == \"categorizedAttribute\") {\r\n attribVal[filter.attributeName] = {\r\n isCategorized: true,\r\n catIds: value\r\n }\r\n }\r\n else {\r\n attribVal[filter.attributeName] = value;\r\n }\r\n\r\n filterOption.set(filter.name, attribVal);\r\n } else {\r\n filterOption.set(filter.name, value);\r\n }\r\n },\r\n\r\n typeFilters: {\r\n \"all\": {\r\n name: \"view_bar_all\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.file | Librarian.ElasticSearch.queryContentType.group,\r\n }\r\n },\r\n \"presentations\": {\r\n name: \"view_bar_presentations\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.file,\r\n filters: {\r\n fileSubTypes: [Librarian.subType.presentation]\r\n }\r\n }\r\n },\r\n \"slides\": {\r\n name: \"view_bar_slides\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.slide,\r\n filters: {\r\n fileSubTypes: [Librarian.subType.presentation],\r\n parentContentType: Librarian.ElasticSearch.queryContentType.file\r\n }\r\n }\r\n },\r\n \"groups\": {\r\n name: \"view_bar_groups\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.group\r\n }\r\n },\r\n \"groupSlides\": {\r\n name: \"view_bar_group_slides\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.slide,\r\n filters: {\r\n parentContentType: Librarian.ElasticSearch.queryContentType.group\r\n }\r\n }\r\n },\r\n \"documents\": {\r\n name: \"view_bar_documents\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.file,\r\n filters: {\r\n fileSubTypes: [Librarian.subType.document]\r\n }\r\n }\r\n },\r\n \"pages\": {\r\n name: \"view_bar_pages\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.slide,\r\n filters: {\r\n fileSubTypes: [Librarian.subType.document],\r\n parentContentType: Librarian.ElasticSearch.queryContentType.file\r\n }\r\n }\r\n },\r\n \"media\": {\r\n name: \"view_bar_media\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.file,\r\n filters: {\r\n fileSubTypes: [Librarian.subType.media, Librarian.subType.image, Librarian.subType.movie, Librarian.subType.sound]\r\n }\r\n }\r\n },\r\n \"images\": {\r\n name: \"view_bar_images\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.file,\r\n filters: {\r\n fileSubTypes: [Librarian.subType.image]\r\n }\r\n }\r\n },\r\n \"movies\": {\r\n name: \"view_bar_movies\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.file,\r\n filters: {\r\n fileSubTypes: [Librarian.subType.movie]\r\n }\r\n }\r\n },\r\n \"audio\": {\r\n name: \"view_bar_audio\",\r\n customFilter: {\r\n queryContentType: Librarian.ElasticSearch.queryContentType.file,\r\n filters: {\r\n fileSubTypes: [Librarian.subType.sound]\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\r\nLibrarian.SearchOptions.Terms = new Class({\r\n Extends: Librarian.SearchOptions.Filter,\r\n \r\n render: function () {\r\n var self = this;\r\n var filter = this.options;\r\n var fileAttributes = filter.fileAttributes || [];\r\n var slideAttributes = filter.slideAttributes || [];\r\n\r\n\r\n var termContext = [];\r\n var options = [];\r\n Array.each(Librarian.SearchOptions.searchOptions.terms, function (term) {\r\n if (!termContext.contains(term.context)) {\r\n var level2Options = [];\r\n\r\n if (term.context == \"fileAttributes\") {\r\n if (term.attributes != null) {\r\n level2Options = term.attributes.map(function (attribute) {\r\n attribute.value = \"fileAttributes\";\r\n attribute.name = attribute.attributeName;\r\n\r\n return attribute;\r\n });\r\n } else {\r\n level2Options = fileAttributes.map(function (attribute) {\r\n var additionalInfo = (term.overrides || {})[attribute.name];\r\n return Object.merge({\r\n \"name\": attribute.name,\r\n \"value\": \"fileAttributes\",\r\n \"attributeName\": attribute.name,\r\n \"selected\": true\r\n }, additionalInfo);\r\n });\r\n }\r\n }\r\n\r\n if (term.context == \"slideAttributes\") {\r\n if (term.attributes != null) {\r\n level2Options = term.attributes.map(function(attribute) {\r\n attribute.value = \"slideAttributes\";\r\n attribute.name = attribute.attributeName;\r\n\r\n return attribute;\r\n });\r\n } else {\r\n level2Options = slideAttributes.map(function (attribute) {\r\n var additionalInfo = term.overrides || {};\r\n return Object.merge({\r\n \"name\": attribute.name,\r\n \"value\": \"slideAttributes\",\r\n \"attributeName\": attribute.name,\r\n \"selected\": true\r\n }, additionalInfo);\r\n });\r\n }\r\n\r\n }\r\n\r\n options.push({\r\n \"name\": term.label,\r\n \"value\": term.context,\r\n \"selected\": term.selected,\r\n \"displayed\": term.displayed,\r\n \"level2Options\": level2Options\r\n });\r\n }\r\n\r\n termContext.push(term.context);\r\n });\r\n filter.options = options;\r\n\r\n this.inputClass = new Librarian.SearchOptions.OptionsFilter(filter);\r\n this.inputClass.addEvent(\"change\", this.onInputChanged);\r\n this.inputClass.addEvent(\"load\", function () {\r\n self.loaded = true;\r\n self.fireEvent(\"load\");\r\n });\r\n\r\n\r\n var inputEl = this.inputClass.render();\r\n this.bodyEl.grab(inputEl);\r\n },\r\n\r\n get: function (searchOptions, value, options) {\r\n options = options || {};\r\n var selectedEls = this.inputClass.inputEl.getElements(\"input:checked\");\r\n var values = {};\r\n var self = this;\r\n\r\n selectedEls.each(function (selectedEl) {\r\n if (selectedEl.get(\"disabled\")) {\r\n return;\r\n }\r\n\r\n var optionInfo = selectedEl.retrieve(\"optionInfo\");\r\n var inputValue = selectedEl.get(\"value\").trim();\r\n\r\n if (values[inputValue] == null) {\r\n values[inputValue] = [];\r\n }\r\n\r\n values[inputValue].push(optionInfo);\r\n });\r\n\r\n Array.each(Librarian.SearchOptions.searchOptions.terms, function (term) {\r\n if (values.hasOwnProperty(term.context)) {\r\n Array.each(values[term.context], function (termInfo) {\r\n term = Object.merge({}, term, termInfo);\r\n\r\n var queryType = Librarian.ElasticSearch.searchQueryType[term.queryType];\r\n\r\n var isWrappedinQuotes = /^\"(.+)\"$/;\r\n var searchTerm = isWrappedinQuotes.exec(value);\r\n var termValue = value;\r\n\r\n if (searchTerm != null) {\r\n if (term.queryType === \"queryString\") {\r\n termValue = self.getQuotedTerm(termValue);\r\n options.term = termValue;\r\n }\r\n else {\r\n termValue = searchTerm[1];\r\n options.term = searchTerm[1];\r\n options.exactPhrase = true;\r\n }\r\n }\r\n\r\n if (options.exactPhrase) {\r\n if (queryType !== Librarian.ElasticSearch.searchQueryType.term) {\r\n queryType = Librarian.ElasticSearch.searchQueryType.matchPhrase; \r\n\r\n if (term.hasOwnProperty(\"slop\")) {\r\n delete term.slop;\r\n }\r\n\r\n if (Librarian.elasticSearch.allowMatchPhraseStopWords) {\r\n term.analyzer = \"standard\";\r\n }\r\n }\r\n }\r\n\r\n if ([\"fileAttributes\", \"slideAttributes\"].contains(term.context)) {\r\n if ((term.attributeName || \"\").trim().length === 0) {\r\n return;\r\n }\r\n\r\n termValue = {};\r\n termValue[term.attributeName] = value;\r\n }\r\n\r\n if (options.exactPhrase == true && term.analyzer == \"word_delimiter_with_stemming\")\r\n term.analyzer = \"word_delimiter\";\r\n\r\n if (options.operator) {\r\n term.operator = options.operator;\r\n }\r\n\r\n searchOptions.set(term.context, termValue, queryType, term);\r\n });\r\n }\r\n });\r\n },\r\n\r\n getQuotedTerm: function (searchTerm) {\r\n var quoteRegEx = /(\".*?\")/gm;\r\n\r\n return searchTerm.replace(quoteRegEx, \"+$1\");\r\n }\r\n});\r\n\r\n\r\nLibrarian.SearchOptions.OptionsFilter = new Class({\r\n Implements: [Options, Events],\r\n Binds: [\"onInputChanged\", \"renderOptions\"],\r\n\r\n options: {\r\n label: \"\",\r\n name: \"\",\r\n displayed: \"\",\r\n \"default\": \"\",\r\n accordion: true,\r\n startOpen: false,\r\n attributeName: \"\",\r\n optionType: \"checkbox\",\r\n level2Options: null\r\n },\r\n\r\n className: \"search-options-input\",\r\n\r\n template: Handlebars.compile(\"\\\r\n \\\r\n \\\r\n \"),\r\n\r\n initialize: function (options) {\r\n this.setOptions(options);\r\n\r\n this.addEvent(\"aggregateCount\", this.aggregateCount);\r\n },\r\n\r\n aggregateCount: function (aggregate) {\r\n var self = this;\r\n var filter = this.options;\r\n\r\n if (aggregate.name !== filter.attributeName && aggregate.name !== filter.name)\r\n return;\r\n\r\n this.resetCount();\r\n\r\n Array.each(aggregate.buckets, function(bucket) {\r\n var option = filter.options.find(function (option, index) {\r\n return option.name.toLowerCase() == bucket.key.toLowerCase();\r\n });\r\n if (option) {\r\n option.count = bucket.value;\r\n self.updateCount(option);\r\n }\r\n });\r\n },\r\n\r\n render: function () {\r\n var filter = this.options;\r\n var self = this;\r\n var options = filter.options;\r\n var contEl = this.inputEl = new Element(\"div\", {\r\n \"class\": this.className + filter.optionType\r\n });\r\n\r\n Array.each(options, function (option, index) {\r\n var optionEl = self.renderOptions(filter, option, index);\r\n\r\n if (option.level2Options != null && option.level2Options.length > 0) {\r\n var triggerEl = new Element(\"span\", {\r\n \"class\": self.className + \"-level2-trigger\"\r\n });\r\n var levelOptionEl = new Element(\"div\", {\r\n \"class\": self.className + filter.optionType + \" nested-option\"\r\n });\r\n\r\n Array.each(option.level2Options, function (level2Option, index) {\r\n if (!option.selected) {\r\n level2Option.disabled = true;\r\n }\r\n\r\n var optionEl = self.renderOptions(filter, level2Option, index);\r\n levelOptionEl.grab(optionEl);\r\n });\r\n\r\n optionEl.getElement(\"input\").addEvent(\"change\", function () {\r\n var level2OptionsEl = levelOptionEl.getElements(\"input\");\r\n if (!this.get(\"checked\")) {\r\n level2OptionsEl.set(\"disabled\", true);\r\n } else {\r\n level2OptionsEl.set(\"disabled\", false);\r\n }\r\n });\r\n\r\n optionEl.grab(triggerEl);\r\n optionEl.grab(levelOptionEl);\r\n\r\n new Librarian.Accordion(triggerEl, levelOptionEl, { startOpen: false });\r\n }\r\n\r\n if (option.displayed === false)\r\n optionEl.hide();\r\n\r\n filter.options[index].id = optionEl.id;\r\n contEl.grab(optionEl);\r\n });\r\n\r\n var inputEls = contEl.getElements(\"input,select,textarea\");\r\n inputEls.addEvent(\"change\", this.onInputChanged);\r\n\r\n this.fireEvent(\"load\");\r\n\r\n return contEl;\r\n },\r\n\r\n renderOptions: function (filter, option, index) {\r\n var isSelected = option.selected,\r\n id = option.id || this.className + \"-\" + filter.name + \"-\" + (new Date().getTime()) + \"-\" + index,\r\n optionValue = option.value == undefined ? option.name : option.value;\r\n\r\n if (option.selected == null && filter.default === optionValue) {\r\n isSelected = true;\r\n }\r\n\r\n var html = this.template({\r\n \"id\": id,\r\n \"name\": filter.name,\r\n \"label\": option.name,\r\n \"selected\": isSelected,\r\n \"type\": filter.optionType,\r\n \"value\": optionValue,\r\n \"disabled\": option.disabled,\r\n \"countClass\": this.className + \"-count\"\r\n });\r\n\r\n var optionEl = new Element(\"div\", {\r\n \"id\": id,\r\n \"class\": this.className + \"-\" + filter.optionType + \"-option\",\r\n \"html\": html\r\n });\r\n\r\n var inputEl = optionEl.getElement(\"input\");\r\n\r\n inputEl.store(\"optionInfo\", option);\r\n\r\n return optionEl;\r\n },\r\n\r\n onInputChanged: function() {\r\n this.fireEvent(\"change\", this.get());\r\n },\r\n\r\n get: function () {\r\n var filter = this.options;\r\n var selectedEls = this.inputEl.getElements(\"input:checked\");\r\n var values = [];\r\n\r\n selectedEls.each(function (selectedEl) {\r\n var optionInfo = selectedEl.retrieve(\"optionInfo\");\r\n var inputValue = selectedEl.get(\"value\").trim();\r\n\r\n if (optionInfo.customFilter != null) {\r\n values.push(optionInfo.customFilter);\r\n } else if (inputValue.length > 0) {\r\n if (typeOf(inputValue) == \"string\" && filter.isMultiValued) {\r\n values = values.concat(inputValue.split(\",\"));\r\n } else {\r\n values.push(inputValue);\r\n }\r\n }\r\n });\r\n\r\n return values;\r\n },\r\n\r\n updateCount: function(option) {\r\n var optionEl = this.inputEl.getElement('span[id=' + option.id + '-count]');\r\n if (optionEl) {\r\n var count = \"(\" + option.count + \")\";\r\n if (option.count > 10000) {\r\n count = \"(10k+)\";\r\n }\r\n optionEl.set(\"text\", option.count > 0 ? count : \"\");\r\n }\r\n },\r\n\r\n resetCount: function () {\r\n var filter = this.options,\r\n self = this,\r\n options = filter.options;\r\n\r\n Array.each(options, function(option) {\r\n var countEl = self.inputEl.getElement('span[id=' + option.id + '-count]');\r\n countEl.empty();\r\n });\r\n },\r\n\r\n set: function() {\r\n \r\n },\r\n\r\n reset: function() {\r\n \r\n }\r\n});\r\n\r\nLibrarian.SearchOptions.TextFilter = new Class({\r\n Implements: [Options, Events],\r\n Binds: [\"onInputChanged\", \"search\"],\r\n\r\n options: {\r\n label: \"\",\r\n name: \"\",\r\n displayed: \"\",\r\n \"default\": \"\",\r\n accordion: true,\r\n startOpen: false,\r\n attributeName: \"\"\r\n },\r\n\r\n className: \"search-options-input\",\r\n\r\n template: Handlebars.compile(\"\"),\r\n\r\n initialize: function (options) {\r\n this.setOptions(options);\r\n },\r\n\r\n render: function () {\r\n var self = this;\r\n\r\n var html = this.template({\r\n \"class\": this.className,\r\n \"name\": this.options.name,\r\n \"id\": this.options.id\r\n });\r\n\r\n var contEl = new Element(\"div\", {\r\n \"class\": this.className + \"-text\",\r\n \"html\": html\r\n });\r\n\r\n this.inputEl = contEl.getElement(\"input\");\r\n\r\n if (this.options.default != null) {\r\n this.inputEl.set(\"value\", this.options.default);\r\n }\r\n\r\n this.inputEl.addEvent(\"keyup\", function (e) {\r\n if (e.key == \"enter\") {\r\n self.onInputChanged();\r\n }\r\n });\r\n\r\n this.fireEvent(\"load\");\r\n\r\n return contEl;\r\n },\r\n\r\n onInputChanged: function () {\r\n this.fireEvent(\"change\", this.get());\r\n },\r\n\r\n get: function () { \r\n var value = this.inputEl.get(\"value\");\r\n\r\n if (value.contains(',')) {\r\n const valuesArray = value.split(',');\r\n return valuesArray;\r\n } else {\r\n return value;\r\n }\r\n },\r\n\r\n set: function () {\r\n\r\n },\r\n\r\n reset: function () {\r\n\r\n }\r\n});\r\n\r\nLibrarian.SearchOptions.DateFilter = new Class({\r\n Implements: [Options, Events],\r\n Binds: [\"onInputChanged\"],\r\n\r\n options: {\r\n label: \"\",\r\n name: \"\",\r\n displayed: \"\",\r\n \"default\": \"\",\r\n accordion: true,\r\n startOpen: false,\r\n attributeName: \"\",\r\n isRange: false\r\n },\r\n\r\n className: \"search-options-input\",\r\n\r\n dateTemplate: Handlebars.compile(\"\\\r\n \\\r\n \"),\r\n\r\n dateRangeTemplate: Handlebars.compile(\"\\\r\n
\\\r\n \\\r\n
\\\r\n \\\r\n \\\r\n
\\\r\n
\\\r\n
\\\r\n \\\r\n
\\\r\n \\\r\n \\\r\n
\\\r\n
\"),\r\n\r\n initialize: function (options) {\r\n this.setOptions(options);\r\n },\r\n\r\n render: function () {\r\n var filter = this.options,\r\n self = this;\r\n\r\n var contEl = this.inputEl = new Element(\"div\");\r\n\r\n if (filter.isRange) {\r\n contEl.addClass(this.className + \"-date-range\");\r\n contEl.set(\"html\", this.dateRangeTemplate({\r\n \"class\": this.className,\r\n \"name\": filter.name,\r\n \"id\": filter.id\r\n }));\r\n\r\n } else {\r\n contEl.addClass(this.className + \"-date\");\r\n contEl.set(\"html\", this.dateTemplate({\r\n \"class\": this.className,\r\n \"name\": filter.name,\r\n \"id\": filter.id\r\n }));\r\n }\r\n\r\n var dateInputsEl = contEl.getElements(\"input\");\r\n dateInputsEl.each(function (inputEl) {\r\n var iconEl = inputEl.getNext(\".\" + self.className + \"-calendar\");\r\n\r\n Librarian.Utils.setUpDatePicker2(inputEl, iconEl);\r\n });\r\n\r\n dateInputsEl.addEvent(\"focusout\", this.onInputChanged);\r\n dateInputsEl.addEvent(\"keyup\", function (e) {\r\n if (e.key == \"enter\") {\r\n self.onInputChanged();\r\n }\r\n });\r\n\r\n if (this.options.default != null) {\r\n //this.inputEl.set(\"value\", this.options.default);\r\n }\r\n\r\n this.fireEvent(\"load\");\r\n return contEl;\r\n },\r\n\r\n onInputChanged: function () {\r\n this.fireEvent(\"change\", this.get());\r\n },\r\n\r\n get: function () {\r\n if (this.options.isRange) {\r\n var minVal = this.inputEl.getElement(\"input.date-from\").get(\"value\");\r\n var maxVal = this.inputEl.getElement(\"input.date-to\").get(\"value\");\r\n\r\n return {\r\n minDate: minVal,\r\n maxDate: maxVal\r\n }\r\n\r\n } else {\r\n return this.inputEl.getElement(\"input\").get(\"value\");\r\n }\r\n },\r\n\r\n set: function () {\r\n\r\n },\r\n\r\n reset: function () {\r\n\r\n }\r\n});\r\n\r\nLibrarian.SearchOptions.CategorizedAttributeTreeFilter = new Class({\r\n Implements: [Options, Events],\r\n Binds: [\"onInputChanged\"],\r\n\r\n options: {\r\n label: \"\",\r\n name: \"\",\r\n displayed: \"\",\r\n \"default\": \"\",\r\n accordion: true,\r\n startOpen: false,\r\n attributeName: \"\"\r\n },\r\n\r\n className: \"search-options-input\",\r\n\r\n initialize: function (options) {\r\n this.setOptions(options);\r\n\r\n this.addEvent(\"aggregateCount\", this.aggregateCount);\r\n },\r\n\r\n aggregateCount: function (aggregate) {\r\n this.aggregate = aggregate;\r\n var self = this;\r\n var filter = this.options;\r\n\r\n if (aggregate.name == filter.attributeName)\r\n this.recursivelySetCount();\r\n },\r\n\r\n render: function () {\r\n var self = this;\r\n var filter = this.options;\r\n var attribDef = filter.attributeDef;\r\n\r\n var contEl = new Element(\"div\", {\r\n \"class\": this.className + \"-categorized-attribute\"\r\n });\r\n\r\n var catAttrTree = this.tree = new Mif.Tree({\r\n container: contEl,\r\n forest: true,\r\n json: [],\r\n types: {\r\n folder: {\r\n openIcon: \"mif-tree-open-icon\",\r\n closeIcon: \"mif-tree-close-icon\"\r\n }\r\n }\r\n });\r\n catAttrTree.initCheckbox();\r\n catAttrTree.addEvent(\"switch\", function (node, checked) {\r\n self.recursivelySetState(node, checked);\r\n self.onInputChanged();\r\n });\r\n\r\n catAttrTree.addEvent(\"updateNode\", function() {\r\n self.recursivelySetCount();\r\n });\r\n\r\n var getAttributeTree = new Librarian.Request.JSON({\r\n method: \"get\",\r\n url: Librarian.path.getMethodUrl(\"getatcat\") + \"&out=mtree&recursive=true&pcid=0&atid=\" + attribDef.id,\r\n onFailure: Librarian.Utils.onFailure,\r\n onSuccess: function (data) {\r\n catAttrTree.load({\r\n json: data\r\n });\r\n self.fireEvent(\"load\");\r\n }\r\n });\r\n getAttributeTree.send();\r\n\r\n filter.tree = catAttrTree;\r\n\r\n return contEl;\r\n },\r\n\r\n recursivelySetCount: function (node) {\r\n var self = this,\r\n aggregate = self.aggregate,\r\n node = node || this.options.tree.root;\r\n\r\n var setCountEl = function (node, count) {\r\n var nodeWrapper = node.getDOM(\"wrapper\");\r\n var countSpan = new Element(\"span\", {\r\n \"class\": \"mif-tree-node-count\",\r\n \"text\": \"(\" + count.value + \")\"\r\n });\r\n nodeWrapper.adopt(countSpan);\r\n };\r\n\r\n node.recursive(function () {\r\n var currNode = this;\r\n var nodeWrapper = currNode.getDOM(\"wrapper\");\r\n var countEl = nodeWrapper.getElement(\".mif-tree-node-count\");\r\n\r\n if (countEl)\r\n countEl.destroy();\r\n\r\n if (currNode.type == \"folder\") {\r\n var obj = aggregate.buckets.find(function (bucket) {\r\n return parseInt(bucket.key) == currNode.data.attribcatid;\r\n });\r\n if (obj) {\r\n setCountEl(currNode, obj);\r\n }\r\n }\r\n\r\n if (currNode.name.length >= 1 && currNode.getChildren().length >= 1 && currNode !== node) {\r\n self.recursivelySetCount(currNode);\r\n }\r\n });\r\n },\r\n\r\n recursivelySetState: function (node, checked) {\r\n var self = this;\r\n node.recursive(function () {\r\n var state = checked ? \"checked\" : \"unchecked\";\r\n if (this.state.checked !== state) {\r\n this.setCheckboxState(checked ? \"checked\" : \"unchecked\");\r\n }\r\n });\r\n },\r\n\r\n onInputChanged: function() {\r\n this.fireEvent(\"change\", this.get());\r\n },\r\n\r\n get: function() {\r\n var values = [];\r\n var checkedItems = this.tree.getChecked();\r\n\r\n Array.each(checkedItems, function (item) {\r\n values.push(item.data.attribcatid);\r\n });\r\n\r\n return values;\r\n }\r\n\r\n});\r\n\r\nLibrarian.SearchOptions.CategoryTreeFilter = new Class({\r\n Implements: [Options, Events],\r\n\r\n Binds: [\"onInputChanged\", \"onNodeChecked\", \"onTreeNodeLoaded\"],\r\n\r\n options: {\r\n label: \"\",\r\n name: \"\",\r\n displayed: \"\",\r\n \"default\": \"\",\r\n accordion: true,\r\n startOpen: false,\r\n attributeName: \"\",\r\n rootCatId: 0,\r\n selectedCategories: null,\r\n catType: Librarian.catType.file,\r\n useCatId: false\r\n },\r\n\r\n className: \"search-options-input\",\r\n include: null,\r\n exclude: null,\r\n aggregate: null,\r\n\r\n initialize: function (options) {\r\n options.type = \"custom\";\r\n\r\n this.setOptions(options);\r\n this.include = [];\r\n this.exclude = [];\r\n\r\n this.addEvent(\"aggregateCount\", this.aggregateCount);\r\n },\r\n\r\n aggregateCount: function (aggregate) {\r\n this.aggregate = aggregate;\r\n var self = this;\r\n var filter = this.options;\r\n\r\n if (aggregate.name !== filter.name)\r\n return;\r\n\r\n this.recursivelySetCount();\r\n },\r\n\r\n render: function () {\r\n var filter = this.options;\r\n var self = this;\r\n\r\n if (!this.contEl) {\r\n this.contEl = new Element(\"div\", {\r\n \"class\": this.className + \"-categories\"\r\n });\r\n }\r\n else {\r\n this.contEl.empty();\r\n }\r\n\r\n var catTree = this.tree = new Librarian.TreeView({\r\n container: this.contEl,\r\n checkBoxes: true,\r\n hideTypes: [\"file\"],\r\n catType: this.options.catType,\r\n cookieStorage: false,\r\n method: \"getcc\",\r\n contentView: Librarian.tileList.contentViewName,\r\n rootCat: this.options.rootCatId\r\n });\r\n\r\n catTree.addEvent(\"switch\", function (node, checked) {\r\n self.recursivelySetState(node, checked);\r\n self.onNodeChecked(node, checked);\r\n self.fireEvent(\"change\", self.get());\r\n });\r\n\r\n catTree.addEvent(\"load\", function () {\r\n self.fireEvent(\"load\");\r\n });\r\n\r\n catTree.addEvent(\"loadNode\", function () {\r\n if (self.aggregate)\r\n self.recursivelySetCount();\r\n });\r\n\r\n //catTree.addEvent(\"loadChildren\", this.onTreeNodeLoaded);\r\n catTree.addEvent(\"loadChildren\", function (node) {\r\n if (node) {\r\n self.recursivelySetState(node, node.state.checked == \"checked\");\r\n self.onTreeNodeLoaded(node);\r\n }\r\n });\r\n\r\n filter.tree = catTree;\r\n\r\n catTree.load();\r\n return this.contEl;\r\n },\r\n\r\n onTreeNodeLoaded: function (parent) {\r\n var self = this;\r\n if (!parent || (this.options.selectedCategories == null))\r\n return;\r\n\r\n var selected = this.options.selectedCategories.split(';');\r\n var selectedIds = this.options.selectedCategoryIds || [];\r\n\r\n if (selected.contains(parent.name) || selectedIds.contains(parent.data.catId)) {\r\n parent.setCheckboxState(\"checked\");\r\n self.onNodeChecked(parent, parent.state.checked == \"checked\");\r\n }\r\n\r\n var children = parent.getChildren();\r\n for (var i = 0; i < children.length; i++) {\r\n if (selected.contains(children[i].name) || selectedIds.contains(children[i].data.catId)) {\r\n children[i].setCheckboxState(\"checked\");\r\n self.onNodeChecked(children[i], children[i].state.checked == \"checked\");\r\n }\r\n }\r\n },\r\n\r\n onInputChanged: function () {\r\n this.fireEvent(\"change\", this.get());\r\n },\r\n\r\n onNodeChecked: function (node, checked) {\r\n var value = this.getValue(node);\r\n\r\n if (checked) {\r\n // If deliberately unchecked before and re-added, remove from exclusion\r\n if (this.exclude.contains(value)) {\r\n this.exclude.erase(value);\r\n }\r\n // If deliberately checked add to inclusion\r\n else {\r\n this.include.push(value);\r\n }\r\n } else {\r\n // If deliberately checked before and removed. remove from exclusion\r\n if (this.include.contains(value)) {\r\n this.include.erase(value);\r\n }\r\n // If deliberately unchecked add to exclusion\r\n else {\r\n this.exclude.push(value);\r\n }\r\n }\r\n },\r\n\r\n recursivelySetCount: function (node) {\r\n var self = this,\r\n aggregate = self.aggregate,\r\n node = node || this.options.tree.root;\r\n \r\n var setCountEl = function (node, count) {\r\n var nodeWrapper = node.getDOM(\"wrapper\");\r\n var countSpan = new Element(\"span\", {\r\n \"class\": \"mif-tree-node-count\",\r\n \"text\": \"(\" + count.value + \")\"\r\n });\r\n nodeWrapper.adopt(countSpan);\r\n };\r\n\r\n node.recursive(function () {\r\n var currNode = this;\r\n var nodeWrapper = currNode.getDOM(\"wrapper\");\r\n var countEl = nodeWrapper.getElement(\".mif-tree-node-count\");\r\n\r\n if (countEl)\r\n countEl.destroy();\r\n\r\n if (currNode.type == \"folder\") {\r\n var obj = aggregate.buckets.find(function(bucket) {\r\n return bucket.key == currNode.id;\r\n });\r\n if (obj) {\r\n setCountEl(currNode, obj);\r\n }\r\n }\r\n\r\n if (currNode.id > 0 && currNode.getChildren().length >= 1 && currNode !== node && currNode.state.open) {\r\n self.recursivelySetCount(currNode);\r\n }\r\n });\r\n },\r\n\r\n recursivelySetState: function (node, checked) {\r\n var self = this;\r\n node.recursive(function () {\r\n var state = checked ? \"checked\" : \"unchecked\";\r\n if (this.state.checked !== state) {\r\n this.setCheckboxState(checked ? \"checked\" : \"unchecked\");\r\n\r\n // Remove since recursrively checking is just for visual flair\r\n var value = self.getValue(this);\r\n self.exclude.erase(value);\r\n self.include.erase(value);\r\n }\r\n });\r\n },\r\n\r\n getValue: function (item) {\r\n var name = this.options.name;\r\n // Use property name in cases when name is being modified on end user side\r\n if (item.property && (item.property.name != item.name))\r\n item.name = item.property.name;\r\n\r\n if (name === \"categoryPaths\") {\r\n if (this.options.useCatId) {\r\n if (item.data.catid > 0) {\r\n return \"*/\" + item.data.catid + \"/*\";\r\n }\r\n return item.data.catid + \"/*\";\r\n } else {\r\n return this.tree.getPath(item) + \"/*\";\r\n }\r\n\r\n } else {\r\n return item.data.catid;\r\n }\r\n },\r\n\r\n get: function () {\r\n var name = this.options.name;\r\n var value = {\r\n filters: {},\r\n exclusionFilters: {}\r\n };\r\n\r\n if (this.include.length > 0) {\r\n value.filters[name] = this.include;\r\n }\r\n\r\n if (this.exclude.length > 0) {\r\n value.exclusionFilters[name] = this.exclude;\r\n }\r\n\r\n return value;\r\n },\r\n\r\n set: function () {\r\n\r\n }\r\n\r\n});","Librarian.SearchResultItem = new Class({\r\n Extends: Librarian.CartDraggable,\r\n Implements: [Options],\r\n Binds: [\"render\", \"previewItem\", \"openItem\", \"handleCartCheck\"],\r\n className: \"search-result\",\r\n\r\n options: {\r\n maxHighlights: 2,\r\n view: -1,\r\n parent: null,\r\n showMoreCount: 5\r\n },\r\n\r\n resultHtml: \"\\\r\n
\\\r\n
\\\r\n \\\r\n \\\r\n {{#if isThumbnailView}}{{/if}} \\\r\n
\\\r\n
\\\r\n
{{name}} {{#if isSlide}} | Page: {{slideNumber}}{{/if}} \\\r\n {{#unless isThumbnailView}}{{/unless}} \\\r\n
\\\r\n
\\\r\n File Description: {{desc}} \\\r\n
\\\r\n File Location: \\{{path}} \\\r\n {{#if hasOtherPaths}} \\\r\n \\\r\n ({{pathCount}} more...) \\\r\n \\\r\n {{/if}} \\\r\n \\\r\n | \\\r\n Last Modified: {{lastModDate}} \\\r\n
\\\r\n Other Locations: \\\r\n {{#each otherPaths}}\\\r\n {{this}} \\\r\n \\\r\n {{/each}} \\\r\n
\\\r\n
\\\r\n {{#if showStats}} \\\r\n
\\\r\n Previews: \\\r\n {{previews}} \\\r\n | \\\r\n Downloads: \\\r\n {{downloads}} \\\r\n | \\\r\n Shares: \\\r\n {{shares}} \\\r\n
\\\r\n {{/if}} \\\r\n
\\\r\n {{#drawAvgRatingStars avgRating}}{{/drawAvgRatingStars}} \\\r\n Rating: {{avgRating}} \\\r\n - {{ratingCount}} \\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n \",\r\n\r\n lastQuery: null,\r\n hoverMenu: null,\r\n\r\n initialize: function (options, parent) {\r\n this.setOptions(options);\r\n this.lastQuery = parent.lastQuery;\r\n this.hoverMenu = parent.hoverMenu;\r\n this.itemClassName = this.className;\r\n this.tokenizedQuery = parent.data.tokenizedQuery;\r\n\r\n Handlebars.registerHelper(\"drawAvgRatingStars\", this.drawAvgRatingStars);\r\n this.resultTemplate = Handlebars.compile(this.resultHtml);\r\n },\r\n\r\n drawAvgRatingStars: function (rating) {\r\n var html = [];\r\n // Cap the rating to max ratings\r\n rating = Math.min(rating, Librarian.preview.ratingMaxStars);\r\n var fullStars = Math.floor(rating),\r\n halfStars = Math.ceil(rating) - fullStars,\r\n emptyStars = Librarian.preview.ratingMaxStars - fullStars - halfStars;\r\n\r\n for (var i = fullStars; i--;)\r\n html.push(\"\");\r\n\r\n for (var i = halfStars; i--;)\r\n html.push(\"\");\r\n\r\n for (var i = emptyStars; i--;)\r\n html.push(\"\");\r\n\r\n return new Handlebars.SafeString(html.join(''));\r\n },\r\n\r\n getCompatibleContentInfo: function (contentInfo) {\r\n var libContentInfo = Object.toLowerKeys(contentInfo);\r\n libContentInfo.contentname = contentInfo.name;\r\n\r\n if (contentInfo.parentContentType == Librarian.contentType.file) {\r\n libContentInfo.fileid = contentInfo.parentContentId;\r\n }\r\n\r\n if (libContentInfo.slidenumber == -1) {\r\n libContentInfo.slidenumber = 0;\r\n }\r\n Object.merge(libContentInfo, Librarian.Utils.getFromContent(libContentInfo));\r\n Librarian.Utils.prepareItemData(libContentInfo);\r\n\r\n return libContentInfo;\r\n },\r\n\r\n render: function () {\r\n var contentInfo = this.options.data;\r\n var stats = contentInfo.statsInfo || [];\r\n var index = this.options.index;\r\n var self = this;\r\n var resultEl = this.resultEl = new Element(\"div\", {\r\n \"class\": this.className + \"-item-cont\"\r\n });\r\n\r\n if (this.isFeatured(contentInfo))\r\n resultEl.addClass(\"featured\");\r\n\r\n var highlights = this.getHighlights(contentInfo.highlights);\r\n\r\n var missingText = [];\r\n if (this.lastQuery) {\r\n var missing = this.getMissing(this.lastQuery, highlights);\r\n missingText = missing.map(function (term) {\r\n return \"\" + term + \"\";\r\n });\r\n }\r\n\r\n var extension = Librarian.Utils.getExtension(contentInfo.name);\r\n if (extension.trim().length == 0) {\r\n if (contentInfo.contentType == Librarian.contentType.globalFavorite) {\r\n extension = \"vpres\";\r\n }\r\n }\r\n\r\n var thumbnail;\r\n var thumbnailClass = \"\";\r\n\r\n if (this.options.view === Librarian.SearchResult.views.thumbnail) {\r\n if (extension == \"wiz\") {\r\n thumbnail = Librarian.path.getFileTypeIconsPath(\"v2\") + \"Wizard_Thumbnail.png\";\r\n }\r\n else {\r\n thumbnail = Librarian.Utils.getThumbnailUrl(\"sm\", {\r\n thumbnailid: contentInfo.thumbnailId,\r\n ext: extension\r\n });\r\n }\r\n } else {\r\n thumbnail = Librarian.Utils.getFileTypeIcon(extension);\r\n thumbnailClass = this.className + \"-file-type-icon\";\r\n }\r\n\r\n var allPaths = contentInfo.categories.map(function(info) {\r\n return info.catPath;\r\n });\r\n\r\n var resultHtml = this.resultTemplate({\r\n \"class\": this.className,\r\n \"thumbnailClass\": thumbnailClass,\r\n \"name\": contentInfo.attributes[Librarian.elasticSearch.resultNameOverridemeta] || contentInfo.name,\r\n \"desc\": contentInfo.description || \"No description available\",\r\n \"path\": allPaths.shift(),\r\n \"pathCount\": allPaths.length,\r\n \"hasOtherPaths\": allPaths.length > 0,\r\n \"otherPaths\": allPaths,\r\n \"size\": contentInfo.fileSize + \" KB\",\r\n \"avgRating\": parseFloat(contentInfo.avgRating.toFixed(1)),\r\n \"ratingCount\": contentInfo.ratingCount + \" \" + Librarian.Lang.getPluralString(\"review\", contentInfo.ratingCount),\r\n \"lastModDate\": Librarian.Utils.getDateValue(contentInfo.lastModDate),\r\n \"recordDate\": Librarian.Utils.getDateValue(contentInfo.recordDate),\r\n \"missing\": missingText.join(\", \"),\r\n \"thumbnail\": thumbnail,\r\n \"slideNumber\": contentInfo.slideNumber,\r\n \"isSlide\": contentInfo.slideNumber > 0,\r\n \"flagLocation\": Librarian.Utils.getFlaggingLocation(Librarian.flagging.location),\r\n \"isThumbnailView\": this.options.view === Librarian.SearchResult.views.thumbnail,\r\n \"showStats\": Librarian.elasticSearch.stats && stats,\r\n \"previews\": stats.previews,\r\n \"downloads\": stats.downloads,\r\n \"shares\": stats.shares\r\n });\r\n\r\n resultEl.set(\"html\", resultHtml);\r\n\r\n var allowHighlights = this.isHighlightAllowed(contentInfo);\r\n if (allowHighlights && highlights.length) {\r\n var highlightsEl = resultEl.getElement(\".\" + this.className + \"-highlights\");\r\n highlightsEl.grab(this.renderHighlights(contentInfo, highlights, missing));\r\n\r\n var missingEl = resultEl.getElement(\".\" + this.className + \"-missing\");\r\n missingEl.grab(this.renderMissing(highlights));\r\n }\r\n else {\r\n // Show the description instead\r\n var descriptionEl = resultEl.getElement(\".\" + this.className + \"-description\");\r\n Librarian.Utils.setElementValue(descriptionEl, contentInfo.description);\r\n }\r\n\r\n var previewTriggers = [\".\" + this.className + \"-name\", \".\" + this.className + \"-thumbnail\"];\r\n var nameEl = resultEl.getElements(previewTriggers.join(\",\"));\r\n if (nameEl) {\r\n if ((!contentInfo.slideid || contentInfo.slideid <= 0) && (Librarian.search.openFileLocation == true))\r\n nameEl.addEvent(\"click\", this.openItem);\r\n else \r\n nameEl.addEvent(\"click\", this.previewItem);\r\n }\r\n\r\n\r\n var cartStateEl = this.cartStateEl = resultEl.getElement(\".\" + this.className + \"-cart-state\");\r\n cartStateEl.addOnClick(function (e) {\r\n e.stop();\r\n self.handleCartCheck(); \r\n });\r\n this.updateCartState();\r\n\r\n var thumbnailEl = resultEl.getElement(\".\" + this.className + \"-thumbnail\");\r\n if (this.options.view === Librarian.SearchResult.views.thumbnail) {\r\n thumbnailEl.addEvent(\"mouseover\", function () {\r\n self.getContentInfo(contentInfo, function (info) {\r\n self.hoverMenu.index = index;\r\n\r\n var isCategory = true;\r\n if (info.contenttype == Librarian.contentType.slide || info.slideInfo)\r\n isCategory = false;\r\n\r\n var type;\r\n if (info.groupid > 0) {\r\n if (typeof info.eventcount == \"number\")\r\n type = Librarian.hoverMenuTypes.event;\r\n else\r\n type = Librarian.hoverMenuTypes.globalFavorite;\r\n }\r\n else if (info.presid > 0)\r\n type = Librarian.hoverMenuTypes.myFavorite;\r\n else if (info.eventid > 0)\r\n type = Librarian.hoverMenuTypes.event;\r\n else\r\n type = Librarian.hoverMenuTypes.file;\r\n\r\n self.hoverMenu.onMouseOver(thumbnailEl, isCategory, type, info, false, null);\r\n });\r\n });\r\n thumbnailEl.addEvent(\"mouseout\", function () {\r\n self.hoverMenu.onMouseOut();\r\n });\r\n\r\n this.initClickAndDrag(thumbnailEl);\r\n }\r\n\r\n var pathEl = resultEl.getElements(\".\" + this.className + \"-path\");\r\n if (pathEl) {\r\n pathEl.addEvent(\"click\", function (e) {\r\n var searchPageEl = $(\"search-result-page\");\r\n if (searchPageEl) {\r\n searchPageEl.hide();\r\n }\r\n\r\n // Get the path text and remove trailing slash if it exists\r\n var path = this.get(\"text\").replace(/\\/$/, \"\");\r\n\r\n Library.loadLibraryTab();\r\n Librarian.Utils.loadCategoryByPath(path);\r\n });\r\n }\r\n\r\n var reviewsEl = resultEl.getElement(\".\" + this.className + \"-review-count\");\r\n if (reviewsEl) {\r\n reviewsEl.addEvent(\"click\", function () {\r\n self.getContentInfo(contentInfo, function (info) {\r\n var viewRatingsWindow = new Librarian.ViewRatingsWindow({\r\n itemType: contentInfo.contentType == Librarian.contentType.slide ? \"slide\" : \"file\",\r\n itemData: info\r\n });\r\n viewRatingsWindow.show();\r\n });\r\n });\r\n }\r\n\r\n var morePathsTriggerEl = resultEl.getElement(\".\" + this.className + \"-more-paths-trigger\");\r\n if (morePathsTriggerEl) {\r\n morePathsTriggerEl.addEvent(\"click\", function () {\r\n morePathsTriggerEl.hide();\r\n var morePathsEl = resultEl.getElement(\".\" + self.className + \"-more-paths\");\r\n morePathsEl.show();\r\n });\r\n }\r\n\r\n var flagsEl = this.flags = resultEl.getElement(\".\" + this.className + \"-flags\");\r\n if (Librarian.flagging.enabled && Librarian.flagging.showOnTileList) {\r\n this.renderFlags(contentInfo);\r\n }\r\n\r\n\r\n return resultEl;\r\n\r\n },\r\n\r\n initClickAndDrag: function (thumbnailEl) {\r\n var imageEl = thumbnailEl.getElement(\".\" + this.className + \"-thumbnail-image\");\r\n\r\n imageEl.tileItem = this;\r\n\r\n imageEl.addEvent(\"mousedown\", this.onDragStart)\r\n .addEvent(\"touchstart\", this.onDragStart)\r\n .addEvent(\"mouseup\", this.onDragEnd)\r\n .addEvent(\"touchend\", this.onDragEnd)\r\n .addEvent(\"mouseout\", this.onDragItem)\r\n .addEvent(\"touchmove\", this.onDragItem);\r\n },\r\n\r\n updateCartState: function (show) {\r\n var libContentInfo = this.getCompatibleContentInfo(this.options.data);\r\n var isInCart = Librarian.userCart.isInCart(libContentInfo);\r\n if (show !== undefined) {\r\n isInCart = show;\r\n }\r\n\r\n if (isInCart) {\r\n this.cartStateEl.show();\r\n } else {\r\n this.cartStateEl.hide();\r\n }\r\n },\r\n\r\n renderHighlights: function (contentInfo, allHighlights, missing) {\r\n var self = this;\r\n var relevantHighlights = this.getRelevantHighlights(this.lastQuery, allHighlights, missing, this.options.maxHighlights);\r\n var highlights = relevantHighlights.relevantHighlights;\r\n var otherHighlights = relevantHighlights.otherHighlights;\r\n var highlightsEl = new Element(\"div\");\r\n\r\n Array.each(highlights, function (highlight, index) {\r\n var highlightEl = self.renderHighlight(highlight, contentInfo);\r\n\r\n highlightsEl.grab(highlightEl);\r\n\r\n if ((highlights.length - 1) !== index) {\r\n highlightEl.appendText(\"...\");\r\n }\r\n });\r\n\r\n if (otherHighlights != null && otherHighlights.length > 0) {\r\n highlightsEl.getLast().appendText(\"...\");\r\n\r\n var showAllEl = new Element(\"a\", {\r\n \"class\": \"show-more\",\r\n text: \"Show More\",\r\n href: \"javascript:void(0)\"\r\n });\r\n\r\n showAllEl.addEvent(\"click\", function () {\r\n // Show next 10 siblings\r\n var otherHighlights = this.getAllNext().slice(0, self.options.showMore);\r\n\r\n if (otherHighlights.length > 0) {\r\n new Elements(otherHighlights).show(\"inline\");\r\n otherHighlights.getLast().grab(this, \"after\");\r\n }\r\n\r\n otherHighlights = this.getAllNext().slice(0, self.options.showMore);\r\n if (otherHighlights.length === 0) {\r\n this.hide();\r\n }\r\n });\r\n\r\n highlightsEl.grab(showAllEl);\r\n\r\n Array.each(otherHighlights, function (highlight, index) {\r\n var highlightEl = self.renderHighlight(highlight, contentInfo);\r\n highlightEl.hide();\r\n\r\n highlightsEl.grab(highlightEl);\r\n\r\n if ((otherHighlights.length - 1) != index) {\r\n highlightEl.appendText(\"...\");\r\n }\r\n });\r\n }\r\n\r\n return highlightsEl;\r\n },\r\n\r\n renderHighlight: function (highlight, contentInfo) {\r\n var self = this;\r\n var highlightText = Librarian.Utils.escapeHtml(highlight.highlightText);\r\n highlightText = highlightText.replace(/<strong>/g, \"\").replace(/<\\/strong>/g, \"\");\r\n\r\n var highlightEl = new Element(\"span\", {\r\n \"html\": highlightText\r\n });\r\n\r\n var highlightTermsEl = highlightEl.getElements(\"strong\");\r\n highlightTermsEl.addEvent(\"click\", function () {\r\n var contentId = contentInfo.contentId;\r\n var contentType = contentInfo.contentType;\r\n var parentContentId = contentInfo.parentContentId;\r\n var parentContentType = parentContentId > 0 ? contentInfo.parentContentType : null;\r\n\r\n if (highlight.contentId > 0) {\r\n contentId = highlight.contentId;\r\n contentType = highlight.contentType;\r\n\r\n if (parentContentId < 0) {\r\n parentContentId = contentInfo.contentId;\r\n parentContentType = contentInfo.contentType;\r\n }\r\n }\r\n\r\n var contentDetails = {\r\n contentId: contentId,\r\n contentType: contentType,\r\n parentContentType: parentContentType,\r\n parentContentId: parentContentId,\r\n slideNumber: highlight.slideNumber || contentInfo.slideNumber,\r\n name: contentInfo.name,\r\n contentInfo: highlight.contentInfo\r\n };\r\n\r\n self.getContentInfo(contentDetails, function (info) {\r\n highlight.contentInfo = info;\r\n\r\n var startTime = (/^StartTime: (\\d+)/).exec(highlight.slideDescription);\r\n if (startTime != null) {\r\n info.starttime = parseInt(startTime[1]);\r\n }\r\n Librarian.PreviewWindow.openPreviewWindow(info);\r\n });\r\n });\r\n\r\n return highlightEl;\r\n },\r\n\r\n renderMissing: function (highlights) {\r\n var missingContEl = new Element(\"div\");\r\n var missing = this.getMissing(this.lastQuery, highlights);\r\n\r\n if (missing.length > 0) {\r\n missingContEl.set(\"text\", \"Missing: \");\r\n }\r\n\r\n Array.each(missing, function (term, index) {\r\n var missingEl = new Element(\"strike\", {\r\n text: term\r\n });\r\n\r\n missingContEl.grab(missingEl);\r\n\r\n if ((missing.length - 1) != index) {\r\n missingContEl.grab(new Element(\"span\", { text: \", \" }));\r\n }\r\n });\r\n\r\n return missingContEl;\r\n },\r\n\r\n getContentInfo: function (contentInfo, callback) {\r\n var self = this;\r\n\r\n if (contentInfo.contentInfo != null) {\r\n callback(contentInfo.contentInfo);\r\n } else {\r\n var url;\r\n switch (contentInfo.contentType) {\r\n case Librarian.contentType.file:\r\n url = Librarian.path.getMethodUrl(\"getfi\") + \"&fid=\" + contentInfo.contentId + \"&out=ljson&fvname=\" + Librarian.search.viewNameByType[Librarian.Search.outputTypes.FILES];\r\n break;\r\n case Librarian.contentType.slide:\r\n if (contentInfo.parentContentType == Librarian.contentType.globalFavorite)\r\n url = Librarian.path.getMethodUrl(\"getgslides\") + \"&gid=\" + contentInfo.parentContentId + \"&out=ljson&gvname=\" + Librarian.search.viewNameByType[Librarian.Search.outputTypes.GROUPS];\r\n else\r\n url = Librarian.path.getMethodUrl(\"getslides\") + \"&fname=\" + encodeURIComponent(contentInfo.name) + \"&out=ljson&fvname=\" + Librarian.search.viewNameByType[Librarian.Search.outputTypes.FILES];\r\n break;\r\n case Librarian.contentType.globalFavorite:\r\n url = Librarian.path.getMethodUrl(\"getcgi\") + \"&gid=\" + contentInfo.contentId + \"&out=ljson&gvname=\" + Librarian.search.viewNameByType[Librarian.Search.outputTypes.GROUPS];\r\n break;\r\n }\r\n\r\n\r\n\r\n if (url != null) {\r\n var request = new Librarian.Request.JSON({\r\n url: url,\r\n onSuccess: function (json) {\r\n if (contentInfo.contentType == Librarian.contentType.slide) {\r\n if (json.slides) {\r\n json.fileinfo.slideInfo = json.slides[contentInfo.slideNumber - 1]; \r\n json = json.fileinfo;\r\n json.slidenumber = contentInfo.slideNumber;\r\n }\r\n \r\n if (json.items) {\r\n json.groupinfo.slideInfo = json.items[contentInfo.slideNumber - 1];\r\n json = json.groupinfo;\r\n }\r\n\r\n \r\n }\r\n\r\n Librarian.Utils.prepareItemData(json);\r\n self.data = json;\r\n contentInfo.contentInfo = json;\r\n\r\n //Extra check for cases when slide number is not in the json\r\n if (contentInfo.slideNumber != json.slideNumber)\r\n contentInfo.contentInfo.slideNumber = contentInfo.slideNumber;\r\n\r\n if (callback != null) {\r\n callback(json);\r\n }\r\n }\r\n });\r\n request.send();\r\n }\r\n }\r\n },\r\n\r\n isHighlightAllowed: function(contentInfo) {\r\n var ext = Librarian.Utils.getExtensionFromData(contentInfo);\r\n\r\n if (Librarian.elasticSearch.disableHighlightExtensions.contains(ext))\r\n return false;\r\n\r\n return true;\r\n },\r\n\r\n getHighlights: function (searchHighlights) {\r\n var highlights = [];\r\n\r\n var addHighlight = function(highlight, key, parent) {\r\n if (typeOf(highlight) === \"array\") {\r\n Array.each(highlight, function(highlightItem) {\r\n addHighlight(highlightItem, key, parent);\r\n });\r\n }\r\n else if (typeOf(highlight) === \"object\") {\r\n Object.each(highlight, function(highlightVal, highlightKey) {\r\n // Don't include featured keywords in highlights\r\n if (highlightKey == Librarian.elasticSearch.featuredKeywordsName)\r\n return;\r\n\r\n if (key === \"attributes\") {\r\n addHighlight(highlightKey + \": \" + highlightVal, \"attributes\", parent);\r\n } else {\r\n addHighlight(highlightVal, highlightKey, highlight);\r\n }\r\n });\r\n }\r\n else {\r\n if ([\"text\", \"text.synonyms\", \"keywords\", \"description\", \"name\", \"notes\", \"attributes\"].contains(key)) {\r\n var highlightsInfo = typeOf(parent) === \"object\" ? Object.clone(parent) : {};\r\n highlightsInfo.highlightText = highlight;\r\n highlights.push(highlightsInfo);\r\n }\r\n }\r\n }\r\n\r\n Object.each(searchHighlights, addHighlight);\r\n\r\n return highlights;\r\n },\r\n\r\n isFeatured: function(contentInfo) {\r\n if (contentInfo.attributes && contentInfo.attributes[Librarian.elasticSearch.featuredFileMeta] == \"true\")\r\n return true;\r\n\r\n var highlights = contentInfo.highlights;\r\n if (!highlights)\r\n return false;\r\n\r\n var attributes = highlights.attributes;\r\n\r\n return attributes && attributes.hasOwnProperty(Librarian.elasticSearch.featuredKeywordsName);\r\n },\r\n\r\n getMissing: function (searchQuery, highlights) {\r\n var self = this;\r\n var allTerms = searchQuery.searchTerms != null ? searchQuery.searchTerms.allSearchTerms : [];\r\n var missing = [];\r\n\r\n var allHighlights = highlights.map(function (highlight) { return highlight.highlightText }).join(\"\").toLowerCase();\r\n allHighlights = allHighlights.replaceAll(\"\", \"\").replaceAll(\"\", \"\").toLowerCase();\r\n\r\n Array.each(allTerms, function (term) {\r\n if (term == null || term.length === 0) {\r\n return;\r\n }\r\n\r\n var queryTerm = Librarian.SearchResult.cleanUpSearchTerm(term);\r\n var tokenizedTerm = Librarian.SearchResult.cleanUpSearchTerm(self.tokenizedQuery[term]);\r\n\r\n if (!(allHighlights.contains(queryTerm) || allHighlights.contains(tokenizedTerm))) {\r\n missing.push(queryTerm);\r\n }\r\n });\r\n\r\n return missing;\r\n },\r\n\r\n getRelevantHighlights: function (searchQuery, highlights, missing, top) {\r\n if (highlights.length <= top) {\r\n return {\r\n relevantHighlights: highlights,\r\n otherHighlights: []\r\n }\r\n }\r\n\r\n var allTerms = searchQuery.searchTerms != null ? searchQuery.searchTerms.allSearchTerms : [];\r\n var foundTerms = allTerms.filter(function (term) {\r\n return !missing.contains(term);\r\n });\r\n var relevantHighlights = [];\r\n var unusedHighlights = Array.clone(highlights);\r\n\r\n for (var i = 0, len = highlights.length; i < len; i++) {\r\n var highlight = highlights[i].highlightText.toLowerCase();\r\n\r\n var foundCount = foundTerms.length;\r\n var isRelevant = false;\r\n\r\n while (foundCount--) {\r\n if (highlight.contains(foundTerms[foundCount].toLowerCase())) {\r\n foundTerms.splice(foundCount, 1);\r\n isRelevant = true;\r\n }\r\n }\r\n\r\n if (isRelevant) {\r\n relevantHighlights.push(highlights[i]);\r\n unusedHighlights[i] = null;\r\n }\r\n\r\n if (foundTerms.length === 0) {\r\n break;\r\n }\r\n\r\n if (relevantHighlights.length === top) {\r\n break;\r\n }\r\n }\r\n\r\n unusedHighlights = unusedHighlights.clean();\r\n\r\n if (relevantHighlights.length < top && unusedHighlights.length > 0) {\r\n var short = top - relevantHighlights.length;\r\n var shortHighlights = unusedHighlights.splice(0, Math.min(short, unusedHighlights.length));\r\n if (shortHighlights != null && shortHighlights.length > 0) {\r\n relevantHighlights = relevantHighlights.concat(shortHighlights);\r\n }\r\n\r\n }\r\n\r\n return {\r\n relevantHighlights: relevantHighlights,\r\n otherHighlights: unusedHighlights \r\n }\r\n },\r\n\r\n previewItem: function() {\r\n this.getContentInfo(this.options.data, function (info) {\r\n Librarian.PreviewWindow.openPreviewWindow(info);\r\n });\r\n },\r\n\r\n openItem: function() {\r\n var self = this;\r\n\r\n this.getContentInfo(this.options.data, function (info) {\r\n // Get tree info\r\n var tree = Library.getTreeByType(info.cattype, null, info.prestype);\r\n\r\n // If there is no tree, bail\r\n if (!tree)\r\n self.previewItem();\r\n Librarian.Utils.getPath(info, function(path) {\r\n if (path != null) {\r\n Librarian.Utils.selectTreeNodeByPath(tree, path);\r\n Library.loadLibraryTab();\r\n }\r\n // If the path wasn't found, fall back\r\n else {\r\n self.previewItem();\r\n }\r\n }.bind(this));\r\n });\r\n },\r\n\r\n onDrop: function(e) {\r\n this.handleCartCheck();\r\n },\r\n\r\n onItemClick: function (e) {\r\n e.stop();\r\n\r\n var data = this.data;\r\n\r\n // If this is a file, however\r\n if (data.fileid || data.groupid || data.presid) {\r\n // And the correct item id, based on its type\r\n if (data.fileid) {\r\n data.type = Librarian.catType.file;\r\n }\r\n if (data.groupid) {\r\n data.type = Librarian.catType.globalFavorite;\r\n }\r\n if (data.presid) {\r\n data.type = Librarian.catType.myFavorite;\r\n }\r\n }\r\n\r\n // Send favorite type if we're currently looking at a SlideShow type\r\n var tree = Library.getTreeByType(data.type, initializer.tab, data.prestype);\r\n\r\n // If there is no tree, bail\r\n if (!tree)\r\n return false;\r\n\r\n Librarian.Utils.getPath(this.data, function(path) {\r\n if (path != null)\r\n Library.loadLibraryTab();\r\n Librarian.Utils.selectTreeNodeByPath(tree, path);\r\n });\r\n },\r\n\r\n handleCartCheck: function () {\r\n if (!Librarian.userCart)\r\n return;\r\n\r\n var self = this;\r\n // If we have slide information then add the slide to the cart instead of the file\r\n if (this.data && this.data.slideInfo)\r\n this.data = this.data.slideInfo;\r\n\r\n var isInCart = Librarian.userCart.isInCart(this.data);\r\n var type;\r\n\r\n // Remove\r\n if (isInCart) {\r\n Librarian.userCart.removeFromCart(this.data, false, null, true, null, function () {\r\n type = Librarian.cartNotificationTypes.removed;\r\n self.updateCartState(false);\r\n\r\n }.bind(this));\r\n }\r\n // Add to cart\r\n else {\r\n var added = Librarian.userCart.addToCart(this.data, false, true);\r\n type = Librarian.cartNotificationTypes.added;\r\n this.updateCartState(true);\r\n }\r\n\r\n\r\n Librarian.Cart.onChange();\r\n Librarian.Utils.showCartNotification(this.data, type, true);\r\n },\r\n\r\n renderFlags: function(contentInfo) {\r\n if (this.flags)\r\n this.flags.empty();\r\n\r\n this.flags.show(\"inline-block\");\r\n var flagClasses = Librarian.Utils.getFlaggingClasses(contentInfo);\r\n for (var i = 0, len = flagClasses.length; i < len; i++) {\r\n var tooltip = null;\r\n var flagText = \"\";\r\n var hasExpired = null;\r\n if (flagClasses[i].contains(\"expired-flag\")) {\r\n hasExpired = true;\r\n flag = flagClasses[i];\r\n tooltip = Librarian.Lang.getString(\"expired_content\");\r\n flagText = Librarian.Lang.getString(\"expired_content_flag\");\r\n }\r\n if (flagClasses[i].contains(\"viewonly-flag\")) {\r\n tooltip = Librarian.Lang.getString(\"viewonly_content\");\r\n flagText = Librarian.Lang.getString(\"viewonly_content_flag\");\r\n }\r\n if (flagClasses[i].contains(\"nda-flag\")) {\r\n tooltip = Librarian.Lang.getString(\"nda_content_tooltip\");\r\n flagText = Librarian.Lang.getString(\"nda_content\");\r\n }\r\n\r\n var internalTooltip = function () {\r\n if (Librarian.Lang.getString(\"internal_flag_tooltip\") != \"internal_flag_tooltip\")\r\n return Librarian.Lang.getString(\"internal_flag_tooltip\");\r\n else\r\n return \"Internal Content\";\r\n }\r\n\r\n if (flagClasses[i].contains(\"internal-flag\")) {\r\n tooltip = internalTooltip();\r\n flagText = Librarian.Lang.getString(\"internal_content\");\r\n }\r\n if (flagClasses[i].contains(\"new-content-flag\")) {\r\n isInternal = true;\r\n tooltip = \"Recently Added Content\";\r\n flagText = Librarian.Lang.getString(\"new_content\");\r\n }\r\n\r\n new Element(\"span\", {\r\n \"class\": \"content-flag \" + flagClasses[i],\r\n \"title\": tooltip,\r\n text: flagText\r\n }).injectInside(this.flags);\r\n }\r\n },\r\n\r\n\r\n});\r\n\r\n\r\nLibrarian.SearchResult = new Class({\r\n Binds: [\"render\", \"renderSearchResult\", \"goToPage\", \"updateCartCheckBoxes\"],\r\n\r\n className: \"search-result\",\r\n Implements: Options,\r\n\r\n options: {\r\n maxHighlights: 2,\r\n pagesToDisplay: 10,\r\n containerEl: null,\r\n showPagination: true,\r\n showSort: true,\r\n view: -1\r\n },\r\n\r\n currentPage: 1,\r\n totalPages: 1,\r\n lastQuery: null,\r\n\r\n items: [],\r\n\r\n resultPageHtml: \"\\\r\n {{#if showHeader}} \\\r\n
\\\r\n {{name}} \\\r\n View All   > \\\r\n
\\\r\n {{/if}} \\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n {{#if showPagination}}
{{/if}}\\\r\n
\\\r\n \",\r\n\r\n pageInfoHtml: \"\\\r\n {{#if showPagination}} \\\r\n Page {{currentPage}} of {{totalPages}} ({{total}}) \\\r\n {{else}} \\\r\n {{total}} \\\r\n {{/if}} \\\r\n \",\r\n\r\n sortHtml: \"\\\r\n Sort By \\\r\n \\\r\n \",\r\n\r\n paginationHtml: \"\\\r\n
\\\r\n \\\r\n Search result pages \\\r\n \\\r\n
\\\r\n
\\\r\n Previous \\\r\n {{#drawPageNumbers pageInfo}}{{/drawPageNumbers}} \\\r\n Next \\\r\n
\\\r\n \",\r\n\r\n typeFilterHtml: \"\\\r\n \\\r\n \",\r\n\r\n bucketHtml: \"\\\r\n
{{label}}
\\\r\n
\\\r\n \",\r\n\r\n resultTemplate: null,\r\n\r\n initialize: function (options) {\r\n this.setOptions(options);\r\n\r\n Handlebars.registerHelper(\"drawPageNumbers\", this.drawPageNumbers);\r\n Handlebars.registerHelper(\"getLangString\", Librarian.Lang.getString);\r\n Handlebars.registerHelper(\"objEach\", function (context, options) {\r\n var ret = \"\";\r\n\r\n Object.each(context, function (val, key) {\r\n val.id = key;\r\n ret = ret + options.fn(val);\r\n });\r\n\r\n return ret;\r\n });\r\n\r\n this.resultPageHtml = Handlebars.compile(this.resultPageHtml);\r\n this.emptyResultPageHtml = Librarian.SearchResult.emptyResultPageHtml;\r\n this.pageInfoTemplate = Handlebars.compile(this.pageInfoHtml);\r\n this.paginationTemplate = Handlebars.compile(this.paginationHtml);\r\n this.typeFilterTemplate = Handlebars.compile(this.typeFilterHtml);\r\n this.bucketTemplate = Handlebars.compile(this.bucketHtml);\r\n this.sortTemplate = Handlebars.compile(this.sortHtml);\r\n },\r\n\r\n initHoverMenu: function () {\r\n this.destroyHoverMenu();\r\n\r\n this.hoverMenu = new Librarian.HoverMenu({\r\n menuContainer: \"tileListWrapper_tileMenu\",\r\n dropDownContainer: \"tileMenuDropDown\",\r\n dropDownListContainer: \"tileMenuList\",\r\n dropDownTrigger: \"cogDropDown\",\r\n menuIdPrefix: \"tileListWrapper_tileMenu\",\r\n isInCart: false\r\n }, Library.getTileListMenuItems(), Library.getTileListDropDownItems(), this);\r\n },\r\n\r\n destroyHoverMenu: function () {\r\n if (this.hoverMenu) {\r\n this.hoverMenu.destroy();\r\n this.hoverMenu = null;\r\n }\r\n },\r\n\r\n drawPageNumbers: function() {\r\n var pagesToDisplay = this.pagesToDisplay;\r\n var currentPage = this.currentPage;\r\n var totalPages = this.totalPages;\r\n\r\n var setNumber = Math.floor(currentPage / pagesToDisplay);\r\n var initialNumber = setNumber * pagesToDisplay;\r\n var finalNumber = Math.min((initialNumber + pagesToDisplay), totalPages);\r\n\r\n var html = [];\r\n for (var i = Math.max(initialNumber, 1); i <= finalNumber; i++) {\r\n var pageNumberEl = new Element(\"span\", {\r\n \"class\": this.class + \"-page-number\",\r\n \"text\": i\r\n });\r\n\r\n if (i === currentPage) {\r\n pageNumberEl.addClass(\"current-page\");\r\n }\r\n\r\n html.push(pageNumberEl.outerHTML);\r\n }\r\n\r\n return new Handlebars.SafeString(html.join(''));\r\n },\r\n\r\n render: function (data) {\r\n if (this.options.view == Librarian.SearchResult.views.thumbnail) {\r\n this.initHoverMenu();\r\n }\r\n else {\r\n this.destroyHoverMenu();\r\n }\r\n\r\n var self = this;\r\n\r\n var pageHtml = this.resultPageHtml({\r\n \"class\": this.className,\r\n \"showHeader\": this.options.name != null,\r\n \"name\": this.options.name,\r\n \"showPagination\": this.options.showPagination\r\n });\r\n\r\n if (this.contEl == null) {\r\n this.contEl = new Element(\"div\", {\r\n \"class\": this.className + \"-cont\",\r\n \"html\": pageHtml\r\n });\r\n } else {\r\n this.contEl.empty();\r\n this.contEl.removeClass(\"thumbnail-view\");\r\n this.contEl.set(\"html\", pageHtml);\r\n }\r\n\r\n switch (this.options.view) {\r\n case Librarian.SearchResult.views.thumbnail:\r\n this.contEl.addClass(\"thumbnail-view\");\r\n break;\r\n }\r\n\r\n if (data != null) {\r\n this.data = data;\r\n this.items = [];\r\n\r\n if (this.lastQuery != null) {\r\n var from = this.lastQuery.options.from;\r\n this.currentPage = from / Librarian.search.maxResults + 1;\r\n }\r\n\r\n this.total = data.total;\r\n this.totalPages = Math.ceil(data.total / Librarian.search.maxResults);\r\n\r\n var resultContEl = this.contEl.getElement(\".\" + this.className + \"-items-cont\");\r\n var pageInfoContEl = this.contEl.getElement(\".\" + this.className + \"-page-info-cont\");\r\n var paginationContEl = this.contEl.getElement(\".\" + this.className + \"-pagination-cont\");\r\n var wrapperEl = this.contEl.getElement(\".\" + this.className);\r\n var viewAllEl = this.contEl.getElement(\".\" + this.className + \"-bucket-view-all\");\r\n var sortContEl = this.contEl.getElement(\".\" + this.className + \"-sort-cont\");\r\n\r\n if (this.options.name != null) {\r\n this.contEl.addClass(this.className + \"-bucket\");\r\n wrapperEl.addClass(this.className + \"-bucket-results\");\r\n }\r\n\r\n if (viewAllEl != null) {\r\n viewAllEl.addEvent(\"click\", function() {\r\n var name = self.options.name;\r\n var categoryFiltersEl = $(\"search-result-category-filter\");\r\n categoryFiltersEl.getElements(\"input\").set(\"checked\", false);\r\n var bucketEl = categoryFiltersEl.getElement(\"input[value=\" + name + \"]\");\r\n bucketEl.click();\r\n\r\n });\r\n }\r\n\r\n if (data.hits.length > 0) {\r\n Array.each(data.hits, function (contentInfo, index) {\r\n var result = new Librarian.SearchResultItem({\r\n data: contentInfo,\r\n index: index,\r\n view: self.options.view,\r\n maxHiglights: self.options.maxHiglights\r\n }, self);\r\n self.items.push(result);\r\n\r\n var resultEl = result.render();\r\n resultContEl.grab(resultEl);\r\n });\r\n\r\n if (paginationContEl != null) {\r\n var paginationEl = this.renderPagination();\r\n paginationContEl.grab(paginationEl);\r\n }\r\n\r\n var pageInfoEl = this.renderPageInfo();\r\n pageInfoContEl.grab(pageInfoEl);\r\n\r\n if (this.options.showSort) {\r\n var sortEl = this.renderSort();\r\n sortContEl.grab(sortEl);\r\n }\r\n }\r\n else {\r\n resultContEl.set(\"html\", this.emptyResultPageHtml({\r\n \"class\": this.className\r\n }));\r\n }\r\n }\r\n\r\n return this.contEl;\r\n },\r\n\r\n renderPageInfo: function() {\r\n var pageInfoHtml = this.pageInfoTemplate({\r\n currentPage: this.currentPage,\r\n totalPages: this.totalPages,\r\n total: (this.total >= 10000 ? \"10000+\" : this.total) + \" \" + Librarian.Lang.getPluralString(\"es_total_result\", this.total),\r\n pagesToDisplay: this.options.pagesToDisplay,\r\n \"class\": this.className,\r\n showPagination: this.options.showPagination\r\n });\r\n\r\n\r\n var pageInfoEl = new Element(\"div\", {\r\n \"class\": this.className + \"page-info\",\r\n \"html\": pageInfoHtml\r\n });\r\n\r\n return pageInfoEl;\r\n },\r\n\r\n renderPagination: function() {\r\n var self = this;\r\n var paginationHtml = this.paginationTemplate({\r\n currentPage: this.currentPage,\r\n totalPages: this.totalPages,\r\n pagesToDisplay: this.options.pagesToDisplay,\r\n \"class\": this.className\r\n });\r\n\r\n\r\n var paginationEl = new Element(\"div\", {\r\n \"class\": this.className + \"pagination\",\r\n \"html\": paginationHtml\r\n });\r\n\r\n var pagesEl = paginationEl.getElements(\".\" + this.className + \"-page-number\");\r\n pagesEl.addEvent(\"click\", function(e) {\r\n var targetEl = e.target;\r\n var pageNumber = parseInt(targetEl.textContent);\r\n self.goToPage(pageNumber);\r\n });\r\n\r\n var previousButtonIconEl = paginationEl.getElement(\".\" + this.className + \"-to-previous\");\r\n var previousButtonEl = paginationEl.getElement(\".\" + this.className + \"-previous\");\r\n if (this.currentPage === 1) {\r\n previousButtonIconEl.addClass(\"disabled\");\r\n previousButtonEl.addClass(\"disabled\");\r\n } else {\r\n previousButtonIconEl.addEvent(\"click\", function(e) {\r\n self.goToPage(self.currentPage - 1);\r\n });\r\n previousButtonEl.addEvent(\"click\", function(e) {\r\n self.goToPage(self.currentPage - 1);\r\n });\r\n }\r\n\r\n var nextButtonIconEl = paginationEl.getElement(\".\" + this.className + \"-to-next\");\r\n var nextButtonEl = paginationEl.getElement(\".\" + this.className + \"-next\");\r\n if (this.currentPage === this.totalPages) {\r\n nextButtonIconEl.addClass(\"disabled\");\r\n nextButtonEl.addClass(\"disabled\");\r\n } else {\r\n nextButtonIconEl.addEvent(\"click\", function(e) {\r\n self.goToPage(self.currentPage + 1);\r\n });\r\n nextButtonEl.addEvent(\"click\", function(e) {\r\n self.goToPage(self.currentPage + 1);\r\n });\r\n }\r\n\r\n return paginationEl;\r\n },\r\n\r\n renderSort: function () {\r\n var self = this;\r\n var sortBy = [];\r\n var defaultSort = Librarian.elasticSearch.defaultSortType;\r\n var attributeSort = null;\r\n if (this.lastQuery != null) {\r\n attributeSort = this.lastQuery.options.sortAttributeName;\r\n defaultSort = this.lastQuery.options.sortField;\r\n }\r\n Object.each(Librarian.ElasticSearch.querySortField, function (sortValue, key) {\r\n sortBy.push({\r\n \"label\": Librarian.Lang.getString(\"es_sort_\" + key),\r\n \"value\": sortValue,\r\n \"selected\": sortValue === defaultSort\r\n });\r\n });\r\n\r\n if (Librarian.elasticSearch.attributeSort) {\r\n Array.each(Librarian.elasticSearch.attributeSort, function (attr) {\r\n sortBy.push({\r\n \"label\": attr ,\r\n \"value\": Librarian.ElasticSearch.attributeSort,\r\n \"selected\": Librarian.ElasticSearch.attributeSort === defaultSort && attributeSort === attr\r\n });\r\n });\r\n }\r\n\r\n var sortHtml = this.sortTemplate({\r\n \"sort\": sortBy,\r\n \"class\": this.className\r\n });\r\n\r\n var sortEl = new Element(\"div\", {\r\n \"class\": this.className + \"-sort\",\r\n \"html\": sortHtml\r\n });\r\n\r\n var sortInputEl = sortEl.getElement(\".\" + this.className + \"-sort-input\");\r\n sortInputEl.addEvent(\"change\", function () {\r\n var sortField = parseInt(this.value);\r\n var sortDescending;\r\n \r\n switch(sortField) {\r\n case Librarian.ElasticSearch.querySortField.name:\r\n sortDescending = false;\r\n break;\r\n default:\r\n sortDescending = true;\r\n break;\r\n }\r\n \r\n Librarian.ElasticSearch.sortField = sortField;\r\n Librarian.ElasticSearch.sortDescending = sortDescending;\r\n\r\n var searchOptions = self.lastQuery;\r\n searchOptions.options.sortField = sortField;\r\n searchOptions.options.sortDescending = sortDescending;\r\n\r\n var sortPreference = {\r\n sortField: sortField,\r\n sortDescending: sortDescending,\r\n };\r\n\r\n if (Librarian.ElasticSearch.sortField == Librarian.ElasticSearch.attributeSort) {\r\n var selectedEl = this.getSelected();\r\n var label = selectedEl.get(\"text\")[0];\r\n Librarian.ElasticSearch.attributeSortName = label;\r\n searchOptions.options.sortAttributeName = label;\r\n sortPreference.sortAttributeName = label;\r\n }\r\n else {\r\n Librarian.ElasticSearch.attributeSortName = null;\r\n searchOptions.options.sortAttributeName = null;\r\n sortPreference.sortAttributeName = null;\r\n }\r\n\r\n Librarian.ElasticSearch.setSearchPreference(sortPreference);\r\n\r\n self.search(searchOptions);\r\n });\r\n\r\n return sortEl;\r\n },\r\n\r\n goToPage: function (pageNumber) {\r\n if (pageNumber === this.currentPage) {\r\n return;\r\n }\r\n\r\n var mainElement = $(\"mainPanel_pad\");\r\n mainElement.scrollTop = 0;\r\n\r\n var from = Librarian.search.maxResults * (pageNumber - 1);\r\n var searchOptions = this.lastQuery;\r\n searchOptions.options.from = from;\r\n\r\n this.search(searchOptions);\r\n },\r\n\r\n search: function (searchOptions) {\r\n var self = this;\r\n var es = new Librarian.ElasticSearch({\r\n loadComplete: function (results) {\r\n self.render(results);\r\n }\r\n });\r\n es.searchOptions = searchOptions;\r\n this.lastQuery = searchOptions;\r\n\r\n es.search();\r\n },\r\n\r\n renderTypeFilters: function () {\r\n var self = this;\r\n var types = Librarian.SearchOptions.typeFilters;\r\n\r\n var typeFilterHtml = this.typeFilterTemplate({\r\n \"types\": types,\r\n \"class\": this.className + \"-type-filter\"\r\n });\r\n\r\n var typeFilterEl = new Element(\"div\", {\r\n \"class\": this.className + \"-type-filter\",\r\n \"html\": typeFilterHtml\r\n });\r\n\r\n var searchOptions = this.lastQuery;\r\n var selectedTypeEl;\r\n if (searchOptions.typeFilter != null) {\r\n selectedTypeEl = typeFilterEl.getElement(\"#\" + searchOptions.typeFilter);\r\n } else {\r\n selectedTypeEl = typeFilterEl.getElement(\"#view_bar_all\");\r\n }\r\n\r\n if (selectedTypeEl) {\r\n selectedTypeEl.addClass(\"selected\");\r\n }\r\n\r\n var typesEl = typeFilterEl.getElements(\".\" + this.className + \"-type-filter-type\");\r\n typesEl.addEvent(\"click\", function(e) {\r\n var id = this.id;\r\n var typeInfo = Librarian.SearchResult.typeFilters[id];\r\n\r\n var searchOptions = self.lastQuery;\r\n searchOptions.typeFilter = id;\r\n searchOptions.queryContentType = typeInfo.elasticQueryContentType;\r\n\r\n searchOptions.filters = searchOptions.filters || new Librarian.ElasticSearch.ElasticSearchQueryFilter();\r\n searchOptions.filters.members.fileSubTypes = null;\r\n\r\n if (typeInfo.fileSubTypes != null) {\r\n searchOptions.filters.set(\"fileSubTypes\", typeInfo.fileSubTypes);\r\n }\r\n\r\n // Reset pagination\r\n searchOptions.options.from = 0;\r\n self.currentPage = 1;\r\n\r\n var es = new Librarian.ElasticSearch({\r\n loadComplete: function (result) {\r\n self.render(result);\r\n }\r\n });\r\n es.searchOptions = searchOptions;\r\n self.lastQuery = es.searchOptions;\r\n\r\n es.search();\r\n });\r\n\r\n return typeFilterEl;\r\n },\r\n\r\n getItem: function(index) {\r\n return this.items[index];\r\n },\r\n\r\n updateCartCheckBoxes: function() {\r\n Array.each(this.items, function(item) {\r\n item.updateCartState();\r\n });\r\n }\r\n})\r\n .extend({\r\n groupResultCount: 5,\r\n\r\n views: {\r\n \"thumbnail\": 1\r\n },\r\n\r\n resultPageHtml: Handlebars.compile(\"\\\r\n
\\\r\n
\\\r\n
\\\r\n Search Results \\\r\n
\\\r\n \\\r\n \\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n
\\\r\n \"),\r\n\r\n emptyResultPageHtml: Handlebars.compile(\"\\\r\n
No Results Found.
\\\r\n \"),\r\n\r\n suggestionsHtml: Handlebars.compile(\"\\\r\n
Did you mean \\\r\n {{#each suggestions}} \\\r\n {{#if @index }},{{/if}}\\\r\n {{this}} \\\r\n {{/each}} \\\r\n ?
\"),\r\n\r\n initSearchPage: function () {\r\n var searchPageEl = $(\"search-result-page\");\r\n if (searchPageEl) {\r\n searchPageEl.set(\"html\", Librarian.SearchResult.resultPageHtml({\r\n \"class\": \"search-result\",\r\n \"thumbnailView\": Librarian.SearchResult.views.thumbnail,\r\n \"isThumbnailView\": Librarian.elasticSearch.resultsView == Librarian.SearchResult.views.thumbnail\r\n }));\r\n\r\n var toggleView = $(\"search-result-view\");\r\n toggleView.addEvent(\"change\", function () {\r\n var activeView = Librarian.SearchResult.getActiveView();\r\n if (Librarian.SearchResult.resultViews != null) {\r\n Array.each(Librarian.SearchResult.resultViews, function (resultView) {\r\n resultView.options.view = activeView;\r\n resultView.render(resultView.data);\r\n });\r\n }\r\n });\r\n }\r\n\r\n //Setup help link if enabled\r\n var helpEl = $(\"search-result-help-cont\");\r\n if (helpEl && Librarian.search.displayHelp.enabled) {\r\n helpEl.set(\"html\", Librarian.search.displayHelp.html);\r\n var linkEl = $(\"search-help-link\");\r\n if (linkEl) {\r\n linkEl.addOnClick(function () {\r\n Librarian.PreviewWindow.openPreviewWindow({ filename: Librarian.search.displayHelp.fileName });\r\n });\r\n }\r\n }\r\n\r\n Librarian.searchPanel.fireEvent(\"searchPageLoaded\");\r\n },\r\n\r\n getActiveView: function () {\r\n var isThumbnailView = $(\"search-result-view\") && $(\"search-result-view\").get(\"checked\");\r\n\r\n return isThumbnailView ? parseInt($(\"search-result-view\").get(\"value\")) : -1;\r\n\r\n },\r\n\r\n getSuggestion: function (suggestions, searchOptions) {\r\n var allSuggestions = [];\r\n\r\n if (Librarian.SearchOptions.searchOptions && Librarian.SearchOptions.searchOptions.suggester) {\r\n var type = Librarian.SearchOptions.searchOptions.suggester.suggestionType;\r\n var currentSuggestion = null;\r\n if (type == \"phrase\" || type == \"all\") {\r\n var phraseSuggestion = this.getPhraseSuggestion(suggestions);\r\n if (phraseSuggestion != null) {\r\n currentSuggestion = phraseSuggestion;\r\n allSuggestions.push(phraseSuggestion);\r\n }\r\n }\r\n\r\n if (type == \"term\" || type == \"all\") {\r\n var termSuggestion = this.getTermSuggestion(suggestions, searchOptions);\r\n if (termSuggestion != null && currentSuggestion != termSuggestion) {\r\n allSuggestions.push(termSuggestion);\r\n }\r\n }\r\n }\r\n\r\n return allSuggestions;\r\n },\r\n\r\n findMaxSuggestion: function (suggestions) {\r\n var topSuggestion = {\r\n score: 0\r\n };\r\n\r\n Array.each(suggestions, function (suggestion) {\r\n if (suggestion.score > topSuggestion.score) {\r\n topSuggestion = suggestion;\r\n }\r\n });\r\n\r\n return topSuggestion;\r\n },\r\n\r\n getPhraseSuggestion: function (suggestions) {\r\n var self = this;\r\n var suggestion = {\r\n score: 0\r\n };\r\n\r\n if (suggestions != null) {\r\n if (suggestions.phrases.length > 0) {\r\n Array.each(suggestions.phrases, function (phrase) {\r\n var phraseSuggestion = self.findMaxSuggestion(phrase.phraseSuggestions);\r\n\r\n if (phraseSuggestion != null && phraseSuggestion.score > suggestion.score) {\r\n suggestion = phraseSuggestion;\r\n }\r\n });\r\n }\r\n }\r\n\r\n return suggestion.text;\r\n },\r\n\r\n getTermSuggestion: function (suggestions, searchOptions) {\r\n var suggestionText = null;\r\n\r\n if (suggestions != null && suggestions.terms != null && searchOptions.searchTerms) {\r\n var originalQuery = searchOptions.searchTerms.query.toLowerCase();\r\n var query = originalQuery;\r\n Array.each(suggestions.terms, function (term) {\r\n var termSuggestion = term.termSuggestions[0];\r\n\r\n if (termSuggestion != null) {\r\n query = query.replace(term.text, termSuggestion.text);\r\n }\r\n });\r\n\r\n if (originalQuery != query) {\r\n suggestionText = query;\r\n }\r\n }\r\n\r\n return suggestionText;\r\n },\r\n\r\n renderSuggestions: function (resultsEl, suggestions, searchOptions) {\r\n var allSuggestions = Librarian.SearchResult.getSuggestion(suggestions, searchOptions);\r\n\r\n if (allSuggestions != null && allSuggestions.length > 0) {\r\n var className = \"search-suggestion\";\r\n var suggestionEl = new Element(\"div\", {\r\n \"html\": Librarian.SearchResult.suggestionsHtml({\r\n \"class\": className,\r\n \"suggestions\": allSuggestions\r\n })\r\n });\r\n\r\n var suggestionTermEl = suggestionEl.getElement(\".\" + className + \"-term\");\r\n suggestionTermEl.addEvent(\"click\", function (e) {\r\n var value = this.text;\r\n Library.quickSearch(value);\r\n });\r\n\r\n resultsEl.grab(suggestionEl);\r\n }\r\n },\r\n\r\n prepSearchPage: function (results, searchOptions, suggestions) {\r\n Library.cleanSearchPage();\r\n var searchOptionsName = Librarian.Utils.getHashByName(\"searchOptions\");\r\n\r\n if (typeof searchOptionsName == \"string\") {\r\n if (Librarian.searchPanel.sourceName != searchOptionsName) {\r\n var loadCustomSearch = function () {\r\n Librarian.searchPanel.fetchSearchOptions(searchOptionsName);\r\n };\r\n\r\n if (Librarian.searchPanel.loaded) {\r\n loadCustomSearch();\r\n }\r\n else {\r\n Librarian.searchPanel.addEvent(\"loaded:once\", loadCustomSearch);\r\n }\r\n }\r\n }\r\n else {\r\n if (!Librarian.searchPanel.isDefaultSearchOption()) {\r\n Librarian.searchPanel.fetchSearchOptions();\r\n }\r\n }\r\n\r\n var resultsPageEl = $(\"search-result-page\");\r\n var resultsEl;\r\n if (resultsPageEl) {\r\n resultsEl = resultsPageEl.getElement(\".search-result-results\");\r\n resultsEl.empty();\r\n }\r\n\r\n var activeView = Librarian.SearchResult.getActiveView();\r\n Librarian.SearchResult.resultViews = [];\r\n\r\n var searchSuggestions = suggestions || (results != null ? results.suggestions : null);\r\n if (searchSuggestions != null) {\r\n Librarian.SearchResult.renderSuggestions(resultsEl, searchSuggestions, searchOptions);\r\n }\r\n\r\n if (typeOf(results) === \"array\") {\r\n var totalResults = 0;\r\n Array.each(results, function (result) {\r\n var searchResults = result.results || Librarian.ElasticSearch.searchResults;\r\n var searchOptions = result.searchOptions;\r\n\r\n if (searchResults.total > 0) {\r\n totalResults = totalResults + searchResults.total;\r\n var resultsView = new Librarian.SearchResult({\r\n name: result.label,\r\n showPagination: false,\r\n view: activeView,\r\n showSort: false\r\n });\r\n resultsView.lastQuery = searchOptions;\r\n Librarian.SearchResult.resultViews.push(resultsView);\r\n var resultsViewEl = resultsView.render(searchResults);\r\n resultsEl.grab(resultsViewEl);\r\n }\r\n });\r\n\r\n if (totalResults === 0) {\r\n var noResultsEl = new Element(\"div\", {\r\n \"html\": Librarian.SearchResult.emptyResultPageHtml({\r\n \"class\": \"search-result\"\r\n })\r\n });\r\n resultsEl.grab(noResultsEl);\r\n }\r\n } else {\r\n var resultsView = new Librarian.SearchResult({\r\n view: activeView\r\n });\r\n resultsView.lastQuery = searchOptions;\r\n Librarian.SearchResult.resultViews.push(resultsView);\r\n var resultsViewEl = resultsView.render(results);\r\n if (resultsEl && resultsViewEl)\r\n resultsEl.grab(resultsViewEl);\r\n }\r\n\r\n tileList.reset();\r\n $(\"pageheader\").hide();\r\n\r\n if (resultsPageEl)\r\n resultsPageEl.show();\r\n },\r\n\r\n cleanUpSearchTerm: function (term) {\r\n if (!term) {\r\n return term;\r\n }\r\n term = term.toLowerCase();\r\n term = term.replace(/[\"()+-”]/g, '');\r\n term = term.trim();\r\n\r\n return term;\r\n\r\n }\r\n});\r\n\r\n"]}