(function ($, document, window, undefined){ var s2 = window.s2 = window.s2 || { } ; var data = s2.data = s2.data || { } ; var util = s2.util; data.local = util.clazz(Object, { construct: function (select){ this.select = select; } , lookup: function (){ var data = [] , self = this; this.select.find(":selected").each(function (){ data.push(self.item($(this))); } ); return data; } , query: function (params){ var data = [] , self = this; self.select.find("option").each(function (){ var option = $(this); if (self.matches(params, option)) { data.push(self.item($(this))); } } ); return data; } , matches: function (params, option){ if (params && params.term) { var text = option.text().toUpperCase(); if (text.indexOf(params.term.toUpperCase()) >= 0) { return true ; } else { return false ; } } return true ; } , item: function (option){ return { value: option.attr("value"), text: option.text(), element: option.get(0)} ; } } ); } )(jQuery, document, window);