/*! Copyright (c) 2014 Hidenari Nozaki and contributors | Licensed under the MIT license */
"use strict";!function(a,b){"undefined"!=typeof module&&module.exports?module.exports=b(require("angular")):"function"==typeof define&&define.amd?define(["angular"],b):b(a.angular)}(window,function(a){a.module("angucomplete-alt",[]).directive("angucompleteAlt",["$q","$parse","$http","$sce","$timeout","$templateCache",function(a,b,c,d,e,f){var g=40,h=39,i=38,j=37,k=27,l=13,m=9,n=3,o=524288,p=500,q=200,r="autocomplete-required",s="Searching...",t="No results found",u="/angucomplete-alt/index.html";return f.put(u,'
{{ result.title }}
{{result.description}}
'),{restrict:"EA",require:"^?form",scope:{selectedObject:"=",disableInput:"=",initialValue:"=",localData:"=",remoteUrlRequestFormatter:"=",remoteUrlRequestWithCredentials:"@",remoteUrlResponseFormatter:"=",remoteUrlErrorCallback:"=",remoteApiHandler:"=",id:"@",type:"@",placeholder:"@",remoteUrl:"@",remoteUrlDataField:"@",titleField:"@",descriptionField:"@",imageField:"@",inputClass:"@",pause:"@",searchFields:"@",minlength:"@",matchClass:"@",clearSelected:"@",overrideSuggestions:"@",fieldRequired:"@",fieldRequiredClass:"@",inputChanged:"=",autoMatch:"@",focusOut:"&",focusIn:"&",inputName:"@"},templateUrl:function(a,b){return b.templateUrl||u},link:function(b,f,u,v){function w(a){return a.which?a.which:a.keyCode}function x(a){"function"==typeof b.selectedObject?b.selectedObject(a):b.selectedObject=a,D(a?!0:!1)}function y(a){return function(c){return b[a]?b[a](c):c}}function z(a){x({originalObject:a}),b.clearSelected&&(b.searchStr=null),S()}function A(a){return b.titleField.split(",").map(function(b){return B(a,b)}).join(" ")}function B(a,b){var c,d;if(b){c=b.split("."),d=a;for(var e=0;e'+f[0]+""):a,d.trustAsHtml(e)):void 0}function D(a){b.notEmpty=a,ea=b.searchStr,b.fieldRequired&&v&&v.$setValidity(da,a)}function E(a){var c=w(a);if(c!==j&&c!==h)if(c===i||c===l)a.preventDefault();else if(c===g)a.preventDefault(),!b.showDropdown&&b.searchStr&&b.searchStr.length>=ba&&(T(),b.searching=!0,W(b.searchStr));else if(c===k)S(),b.$apply(function(){aa.val(b.searchStr)});else{if(0===ba&&!b.searchStr)return;b.searchStr&&""!==b.searchStr?b.searchStr.length>=ba&&(T(),ca&&e.cancel(ca),b.searching=!0,ca=e(function(){W(b.searchStr)},b.pause)):b.showDropdown=!1,ea&&ea!==b.searchStr&&!b.clearSelected&&b.$apply(function(){x()})}}function F(a){!b.overrideSuggestions||b.selectedObject&&b.selectedObject.originalObject===b.searchStr||(a&&a.preventDefault(),z(b.searchStr))}function G(a){var b=getComputedStyle(a);return a.offsetHeight+parseInt(b.marginTop,10)+parseInt(b.marginBottom,10)}function H(){return ga.getBoundingClientRect().top+parseInt(getComputedStyle(ga).maxHeight,10)}function I(){return f[0].querySelectorAll(".angucomplete-row")[b.currentIndex]}function J(){return I().getBoundingClientRect().top-(ga.getBoundingClientRect().top+parseInt(getComputedStyle(ga).paddingTop,10))}function K(a){ga.scrollTop=ga.scrollTop+a}function L(){var a=b.results[b.currentIndex];b.matchClass?aa.val(A(a.originalObject)):aa.val(a.title)}function M(a){var c=w(a),d=null,e=null;c===l&&b.results?(b.currentIndex>=0&&b.currentIndex=1?(b.$apply(function(){b.currentIndex--,L()}),ha&&(e=J(),0>e&&K(e-1))):0===b.currentIndex&&b.$apply(function(){b.currentIndex=-1,aa.val(b.searchStr)})):c===m&&(b.results&&b.results.length>0&&b.showDropdown?-1===b.currentIndex&&b.overrideSuggestions?F():(-1===b.currentIndex&&(b.currentIndex=0),b.selectResult(b.results[b.currentIndex]),b.$digest()):b.searchStr&&b.searchStr.length>0&&F())}function N(a){return function(c,d,e,f){d||e||f||(c=c.data),b.searching=!1,X(B($(c),b.remoteUrlDataField),a)}}function O(a,c,d,e){c||d||e||(c=a.status),0!==c&&(b.remoteUrlErrorCallback?b.remoteUrlErrorCallback(a,c,d,e):console&&console.error&&console.error("http error"))}function P(){fa&&fa.resolve()}function Q(d){var e={},f=b.remoteUrl+encodeURIComponent(d);b.remoteUrlRequestFormatter&&(e={params:b.remoteUrlRequestFormatter(d)},f=b.remoteUrl),b.remoteUrlRequestWithCredentials&&(e.withCredentials=!0),P(),fa=a.defer(),e.timeout=fa.promise,c.get(f,e).success(N(d)).error(O)}function R(c){P(),fa=a.defer(),b.remoteApiHandler(c,fa.promise).then(N(c))["catch"](O)}function S(){b.showDropdown=!1,b.results=[],ga&&(ga.scrollTop=0)}function T(){b.showDropdown=!0,b.currentIndex=-1,b.results=[]}function U(a){var c,d,e,f,g=b.searchFields.split(","),h=[];for(c=0;c=0;d&&(h[h.length]=b.localData[c])}b.searching=!1,X(h,a)}function V(a,c,d){if(d)for(var e in c)if(c[e].toLowerCase()===d.toLowerCase())return void b.selectResult(a)}function W(a){!a||a.length0)for(b.results=[],d=0;d0?b.searchStr=a:console&&console.error&&console.error("Tried to set initial value of angucomplete to",a,"which is an invalid value"),D(!0))}),b.$on("angucomplete-alt:clearInput",function(a,c){c&&c!==b.id||(b.searchStr=null,x(),D(!1),S())}),b.onFocusHandler=function(){b.focusIn&&b.focusIn(),0!==ba||b.searchStr&&0!==b.searchStr.length||(b.showDropdown=!0,Y())},b.hideResults=function(a){ia&&(ia===b.id+"_dropdown"||ia.indexOf("angucomplete")>=0)?ia=null:(Z=e(function(){S(),b.$apply(function(){b.searchStr&&b.searchStr.length>0&&aa.val(b.searchStr)})},q),P(),b.focusOut&&b.focusOut(),b.overrideSuggestions&&b.searchStr&&b.searchStr.length>0&&-1===b.currentIndex&&F())},b.resetHideResults=function(){Z&&e.cancel(Z)},b.hoverRow=function(a){b.currentIndex=a},b.selectResult=function(a){b.matchClass&&(a.title=A(a.originalObject),a.description=B(a.originalObject,b.descriptionField)),b.clearSelected?b.searchStr=null:b.searchStr=a.title,x(a),S()},b.inputChangeHandler=function(a){return a.length