epic-s6ts
[kivitendo-erp.git] / js / kivi.QuickSearch.js
1 namespace('kivi', function(k){
2   'use strict';
3   k.QuickSearch = function($real, options) {
4     if ($real.data("quick_search"))
5       return $real.data("quick_search");
6
7     var KEY = {
8       ENTER:     13,
9     };
10     var o = $.extend({
11       limit: 20,
12       delay: 50,
13     }, options);
14
15     function send_query(action, term, id, success) {
16       var data = { module: o.module };
17       if (term !== undefined) data.term = term;
18       if (id   !== undefined) data.id   = id;
19       $.ajax($.extend(o, {
20         url:      'controller.pl?action=TopQuickSearch/' + action,
21         dataType: "json",
22         data:     data,
23         success:  success
24       }));
25     }
26
27     function submit_search(term) {
28       send_query('do_search', term, undefined, kivi.eval_json_result);
29     }
30
31     $real.autocomplete({
32       source: function(req, rsp) {
33         send_query('query_autocomplete', req.term, undefined, function (data){ rsp(data); });
34       },
35       select: function(event, ui) {
36         send_query('select_autocomplete', undefined, ui.item.id, kivi.eval_json_result);
37       },
38     });
39     $real.keypress(function(event){
40       if (event.which == KEY.ENTER) {
41         if ($real.val() !== '') {
42           submit_search($real.val());
43         }
44       }
45     });
46
47     $real.data('quick_search', {});
48   };
49 });
50
51 $(function(){
52   $('input[id^=top-quick-search]').each(function(_,e){
53     kivi.QuickSearch($(e), { module: $(e).attr('module') });
54   });
55 });