		(function($){
		    $.extend($.fn, {
		        delayedObserver: function(callback, delay, options){
		            return this.each(function(){
		                var el = $(this);
		                var op = options || {};
		                el.data('oldval', el.val())
		                    .data('delay', delay || 0.5)
		                    .data('condition', op.condition || function() { return ($(this).data('oldval') == $(this).val()); })
		                    .data('callback', callback)
		                    [(op.event||'keyup')](function(){
		                        if (el.data('condition').apply(el)) {return}
		                        else {
		                            if (el.data('timer')) {clearTimeout(el.data('timer'));}
		                            el.data('timer', setTimeout(function(){el.data('callback').apply(el);}, el.data('delay') * 1000));
		                            el.data('oldval', el.val());
		                        }
		                    });
		            });
		        }
		    });
		})(jQuery);
