diff --git a/app/views/layouts/_javascript.html.erb b/app/views/layouts/_javascript.html.erb
index 60ce783..0afccf0 100644
--- a/app/views/layouts/_javascript.html.erb
+++ b/app/views/layouts/_javascript.html.erb
@@ -2,7 +2,7 @@
'jquery-2.1.1.min', 'jquery-migrate-1.2.1',
'jquery.noconflict.js', 'jquery.cycle.all.min.js', 'thickbox.js', 'lightbox', 'colorbox',
'jquery-ui-1.10.4/js/jquery-ui-1.10.4.min', 'jquery.scrollTo', 'jquery.form.js', 'jquery-validation/jquery.validate',
-'jquery.cookie', 'jquery.ba-bbq.min.js', 'reflection', 'jquery.tokeninput', 'jquery.typewatch',
+'jquery.cookie', 'jquery.ba-bbq.min.js', 'reflection', 'jquery.tokeninput', 'jquery.typewatch','jquery.textchange',
'add-and-join', 'report-abuse', 'catalog', 'manage-products', 'autogrow', 'select-or-die/_src/selectordie',
'jquery-timepicker-addon/dist/jquery-ui-timepicker-addon', 'application.js', 'rails.js', :cache => 'cache/application' %>
diff --git a/public/javascripts/jquery.textchange.js b/public/javascripts/jquery.textchange.js
new file mode 100644
index 0000000..66a07fc
--- /dev/null
+++ b/public/javascripts/jquery.textchange.js
@@ -0,0 +1,76 @@
+/*!
+ * jQuery TextChange Plugin
+ * http://www.zurb.com/playground/jquery-text-change-custom-event
+ *
+ * Copyright 2010, ZURB
+ * Released under the MIT License
+ */
+(function ($) {
+
+ $.event.special.textchange = {
+
+ setup: function (data, namespaces) {
+ $(this).data('lastValue', this.contentEditable === 'true' ? $(this).html() : $(this).val());
+ $(this).bind('keyup.textchange', $.event.special.textchange.handler);
+ $(this).bind('cut.textchange paste.textchange input.textchange', $.event.special.textchange.delayedHandler);
+ },
+
+ teardown: function (namespaces) {
+ $(this).unbind('.textchange');
+ },
+
+ handler: function (event) {
+ $.event.special.textchange.triggerIfChanged($(this));
+ },
+
+ delayedHandler: function (event) {
+ var element = $(this);
+ setTimeout(function () {
+ $.event.special.textchange.triggerIfChanged(element);
+ }, 25);
+ },
+
+ triggerIfChanged: function (element) {
+ var current = element[0].contentEditable === 'true' ? element.html() : element.val();
+ if (current !== element.data('lastValue')) {
+ element.trigger('textchange', [element.data('lastValue')]);
+ element.data('lastValue', current);
+ }
+ }
+ };
+
+ $.event.special.hastext = {
+
+ setup: function (data, namespaces) {
+ $(this).bind('textchange', $.event.special.hastext.handler);
+ },
+
+ teardown: function (namespaces) {
+ $(this).unbind('textchange', $.event.special.hastext.handler);
+ },
+
+ handler: function (event, lastValue) {
+ if ((lastValue === '') && lastValue !== $(this).val()) {
+ $(this).trigger('hastext');
+ }
+ }
+ };
+
+ $.event.special.notext = {
+
+ setup: function (data, namespaces) {
+ $(this).bind('textchange', $.event.special.notext.handler);
+ },
+
+ teardown: function (namespaces) {
+ $(this).unbind('textchange', $.event.special.notext.handler);
+ },
+
+ handler: function (event, lastValue) {
+ if ($(this).val() === '' && $(this).val() !== lastValue) {
+ $(this).trigger('notext');
+ }
+ }
+ };
+
+})(jQuery);
\ No newline at end of file
--
libgit2 0.21.2