-$(function(){
- $('input.customer_autocomplete').each(function(i,real){
- var dummy = $('#' + real.id + '_name');
- $(dummy).autocomplete({
- source: function(req, rsp) {
+namespace('kivi', function(k){
+ "use strict";
+
+ k.CustomerVendorPicker = function($real, options) {
+ // short circuit in case someone double inits us
+ if ($real.data("customer_vendor_picker"))
+ return $real.data("customer_vendor_picker");
+
+ var KEY = {
+ ESCAPE: 27,
+ ENTER: 13,
+ TAB: 9,
+ LEFT: 37,
+ RIGHT: 39,
+ PAGE_UP: 33,
+ PAGE_DOWN: 34,
+ SHIFT: 16,
+ CTRL: 17,
+ ALT: 18,
+ };
+ var CLASSES = {
+ PICKED: 'customer-vendor-picker-picked',
+ UNDEFINED: 'customer-vendor-picker-undefined',
+ FAT_SET_ITEM: 'customer-vendor-picker-fat-set-item',
+ }
+ var o = $.extend({
+ limit: 20,
+ delay: 50,
+ fat_set_item: $real.hasClass(CLASSES.FAT_SET_ITEM),
+ }, options);
+ var STATES = {
+ PICKED: CLASSES.PICKED,
+ UNDEFINED: CLASSES.UNDEFINED
+ }
+ var real_id = $real.attr('id');
+ var $dummy = $('#' + real_id + '_name');
+ var $type = $('#' + real_id + '_type');
+ var $unit = $('#' + real_id + '_unit');
+ var state = STATES.PICKED;
+ var last_real = $real.val();
+ var last_dummy = $dummy.val();
+ var timer;
+
+ function ajax_data(term) {
+ var data = {
+ 'filter.all:substr:multi::ilike': term,
+ 'filter.obsolete': 0,
+ current: $real.val(),
+ type: $type.val(),
+ };
+
+ return data;
+ }
+
+ function set_item (item) {
+ if (item.id) {
+ $real.val(item.id);
+ // autocomplete ui has name, ajax items have description
+ $dummy.val(item.name ? item.name : item.description);
+ } else {
+ $real.val('');
+ $dummy.val('');
+ }
+ state = STATES.PICKED;
+ last_real = $real.val();
+ last_dummy = $dummy.val();
+ $real.trigger('change');
+
+ if (o.fat_set_item && item.id) {