(function(n){"use strict";var t=n.module("autoSuggestApp",[]).config(["$provide",function(n){n.decorator("$log",["$delegate","autoSuggestLogger",function(n,t){var r=n.error,u=n.log,i=function(n){return n?n:""};return n.error=function(n,u){n=i(n),u=i(u),t.autoSuggestError(n,u),r.apply(null,arguments)},n.log=function(n,r){n=i(n),r=i(r),t.autoSuggestLog(n,r),u.apply(null,arguments)},n}])}]);$(function(){var t=$("meta[name='ms.service']").first();if(t.length&&t.attr("content")==="office.com".toLowerCase()){var i=$("#srv_shellHeaderSearchForm"),r=$("#cli_shellHeaderSearchInput"),u=$(".shell-search-wrapper");if(!i.length&&!r.length&&!u.length)return;i.attr("ng-controller","autoSuggestController as main"),r.attr("ng-model","main.searchText").attr("ng-change","main.fireAutoSuggest()"),u.append("<input type='text' id='supSuggestionHider' ng-init=\"main.tenant = 'web'\" ng-model='main.tenant'/><auto-suggest search-input-box='#cli_shellHeaderSearchInput' search-submit='#srv_shellHeaderSearchForm' search-input-type='form' suggestions='main.suggestions' search-text='main.searchText' show-suggestions='main.showSuggestions'><\/auto-suggest>"),n.bootstrap($("[ng-controller='autoSuggestController as main']"),["autoSuggestApp"])}else n.bootstrap($("[ng-controller='autoSuggestController as main']"),["autoSuggestApp"])})})(angular),function(){"use strict";function n(){var n=function(n){return n?n:""},t=function(n,t,i){return{asCategory:n,asType:t,asMessage:i}},i=function(n){var u="AutoSuggest_Event",t=Object.keys(n),i,r;if(window.ClientSideLogging&&window.ClientSideLogging.addEventProperty&&window.ClientSideLogging.sendEvent&&t&&t.length!==0){for(i=0;i<t.length;i++)r=t[i],window.ClientSideLogging.addEventProperty(r,n[r]);window.ClientSideLogging.sendEvent(u)}};this.autoSuggestError=function(r,u){r=n(r),u=n(u);var f=t("error",r,u);i(f)},this.autoSuggestLog=function(r,u){r=n(r),u=n(u);var f=t("event",r,u);i(f)}}angular.module("autoSuggestApp").service("autoSuggestLogger",[n])}(),function(){"use strict";function n(n){var t="asDirective";return{restrict:"E",template:"<span id='supAutoSuggestAccessibleText' role='status' aria-live='polite'><\/span><div id='supAutoSuggestContainer' ng-show='showSuggestions' ng-cloak><ul class='supSuggestionList'><li ng-repeat='suggestion in suggestions' class='supSuggestionItem supSuggestionItemText' data-suggestionindex='{{ $index }}' data-suggestiontype='{{ suggestion.suggestionType }}'>{{ suggestion.completionText }}<\/li><\/ul><\/div>",scope:{searchText:"=",showSuggestions:"=",suggestions:"="},link:function(i,r,u){var e=-1,o=e,p="click",w=40,b=38,g=27,nt=13,tt=9,s="supSuggestionItemHighLight",it="#supAutoSuggestContainer",f=null,rt={button:!0,input:!0,form:!0},k=function(){i.showSuggestions=!1;return};u.searchInputBox&&u.searchSubmit&&u.searchInputType||(n.error(t,"encountered unexpeced condition, autosuggest elements not created correclty"),k());var a=u.searchInputBox,v=u.searchSubmit,d=u.searchInputType;rt[d]||(n.error(t,"encountered unexpeced condition, search submit type unknown"),k());var h=$(a),ut=$("#supAutoSuggestAccessibleText"),y=function(n){ut.text(n)},ft=function(n){var t=" result",i="s",r=" available, use up and down arrow keys to navigate.";n>0?y(n+t+(n===1?i:"")+r):y("")},et=function(n){$(".supSuggestionItem").removeClass(s),n.addClass(s),f=n,h.focus(),h.val(n.text())},ot=function(){$(".supSuggestionItem").removeClass(s),f=null,h.focus(),h.val(i.searchText)},l=function(){o=e,$(".supSuggestionItem").removeClass(s)},c=function(n){l(),n||(i.showSuggestions=!1,f=null),i.$digest()},st=function(){switch(d){case"form":$(v).submit();break;case"button":case"input":$(v).click()}},ht=function(n,t){return n===e?e:t===b?o===e?n:o-1:t===w?o===n?e:o+1:e};$("body").on("click keyup",function(n){var t=n.which;n.type===p&&($(n.target).attr("id")===v.replace("#","")||$(n.target).closest("form").find(it).length)?c(!0):(t===g||t===tt||n.type===p)&&c(!1)});$(a).blur(function(){occe.pushOntoExecutionStack(function(){$(document.activeElement).prop("tagName").toLowerCase()==="iframe"&&c(!1)},this)});r.on("click",function(n){n.stopPropagation()});r.on("click",".supSuggestionItemText",function(){h.val($(this).text()),$(".supSuggestionItem").removeClass(s),$(this).addClass(s),f=$(this),c(!0),st()});$(document).on("mouseenter",".supSuggestionItemText",function(){var n=$(this).text();y(n)});$(document).on("keydown",a,function(n){if(!i.showSuggestions){l();return}var t=i.suggestions?i.suggestions.length-1:-1;n.keyCode===w||n.keyCode===b?(n.preventDefault(),o=ht(t,n.keyCode),o===e?ot():et($(".supSuggestionItemText[data-suggestionindex='"+o+"']"))):n.keyCode!==nt?(l(),f=null):l()});i.$watchCollection("suggestions",function(n,t){if(n&&t){var i=n.length;i>0&&ft(i)}}),window.occe||(window.occe={}),window.occe.autoSuggest={getAutoSuggestTags:function(){var u=0,e=1,o="as",s="suggestionindex",h="suggestiontype",r={};return f?(r["ms.searchtype"]=o,r["ms.querylength"]=i.searchText.length,r["ms.aslinkpos"]=f.data(s),r["ms.asgroup"]=f.data(h),n.log(t,"search event fired with autosuggest: searchtype: '"+r["ms.searchtype"]+"', query length: '"+r["ms.querylength"]+"', link position: '"+r["ms.aslinkpos"]+"', group type: '"+r["ms.asgroup"]+"'"),f=null):(r["ms.asdisplayed"]=i.showSuggestions?e:u,n.log(t,"search event fired with auto suggest on or off: '"+r["ms.asdisplayed"]+"'")),c(!1),r}}}}}angular.module("autoSuggestApp").directive("autoSuggest",["$log",n])}(),function(){"use strict";function n(){function t(n){return{suggestionType:n.AutoSuggestionType,completionText:n.CompletionText,query:"",productCode:n.L1L3Pair.Product.Code,parentProductCode:n.L1L3Pair.Product.ParentCode,parentProductName:n.L1L3Pair.Product.ParentName,productName:n.L1L3Pair.Product.Name}}function i(n){return!n||!n.AutoSuggestionType?{completionText:"",query:"",suggestionType:"",productCode:"",productName:"",parentProductCode:"",parentProductName:""}:t(n)}return{newSuggestion:i}}angular.module("autoSuggestApp").factory("suggestionFactory",["$log",n])}(),function(){"use strict";function n(n,t,i,r){function o(t,i){return n.get(t,i)}function c(n,t,i){return{timeout:e.promise,params:{SearchTerm:n,Culture:t,Tenant:i,spellcheck:"true"}}}var s=8,u="asService",f=OOGlobal.AutoSuggestEndPoint,h={1:!1,2:!0,3:!0,4:!1},e=t.defer();o(f),this.getSuggestionList=function(n,e,l,a){function b(t){v=Date.now();var r=t.data?t.data:"no response body";return i.error(u,"autosuggest endpoint callback failed: text: '"+n+"', tenant: '"+e+"', locale: '"+l+"', responseBody: '"+r+"'', responseStatus: '"+t.status+"'', responseTime: '"+(v-p)),[]}function k(t){var b,o,c,f,y,w;if(v=Date.now(),i.log(u,"Endpoint response success time (ms): "+(v-p)),b=a||s,o=[],!t.data||!t.data.AutoSuggestions||!angular.isArray(t.data.AutoSuggestions))return i.log(u,"autosuggest returned 0 suggestions: text: '"+n+"', tenant: '"+e+"', locale: '"+l+"'"),o;for(c=t.data.AutoSuggestions,f=0;f<b&&f<c.length;)y=c[f],h[y.AutoSuggestionType]&&(w=r.newSuggestion(y),w.query=n,o.push(w)),f++;return o}var p=Date.now(),v=0,y,w;return!n||!e||!l||a<=0?(i.error(u,"getSuggestionList called with one or more bad arguments"),y=t.defer(),y.resolve([]),y.promise):(w=c(n,l,e),o(f,w).then(k,b))},this.cancelSuggestionServiceCall=function(){e.resolve("cancel request")}}angular.module("autoSuggestApp").service("autoSuggestService",["$http","$q","$log","suggestionFactory",n])}(),function(){"use strict";function n(n,t,i,r){function c(){if(!u.searchText||o){u.showSuggestions=!1;return}var f=Date.now(),t,c=900,l=r(function(){n.cancelSuggestionServiceCall(),u.showSuggestions=!1,o=!0,i.error(e,"Encountered autosuggest endpoint service timeouts/slow downs. Turning off autosuggest for this request")},c);n.getSuggestionList(u.searchText,h(),OOGlobal.Culture,s).then(function(n){r.cancel(l),!!n&&angular.isArray(n)&&n.length>0?(u.suggestions=n.sort(function(n,t){return t.suggestionType-n.suggestionType}),u.showSuggestions=!0):(u.suggestions=[],u.showSuggestions=!1),t=Date.now(),i.log(e,"Endpoint response and render time (ms): "+(t-f))})}var u=this,e="asController",o=!1,s,f,h;u.fireAutoSuggest=c,u.searchText,u.suggestions=[],u.showSuggestions=!1,u.tenant,s=8,h=function(){var n={web:"Office-Web",zol160:"Office-Outlook",zxl160:"Office-Excel",zwd160:"Office-Word",zpp160:"Office-PowerPoint"};return u.tenant?!f?(f=n[u.tenant.toLowerCase()],f||null):f:null}}angular.module("autoSuggestApp").controller("autoSuggestController",["autoSuggestService","$scope","$log","$timeout",n])}()