var Hint = new Class({
    
    Implements: Options,
    options: {
        min: 1,
        delay: 300
    },
    
    initialize: function(field, options) {
        this.field = $(field), this.isReadyForHint = true;
        this.setOptions(options);
        this.field.addEvent('keydown', this.Events.onTimerStart.bindWithEvent(this));
         
    },
    
    Events: {
        
        onTimerStart: function(e) {
            e = new Event(e);
            if ( 'enter' == e.key && this.options['onPressEnter'] ) {
                this.options['onPressEnter'](this.field.get('value'));
                return;
            }
            if ( this.Timer ) $clear(this.Timer);
            this.Timer = this.Events.onKeyDown.delay(this.options.delay, this);
        },
        
        onKeyDown: function() {
            var value = this.field.get('value');
            if ( this.value == value ) return;
            this.value = value;
            
            if ( value.length<this.options.min ) {
                if ( this.isReadyForHint ) {
                    this.isReadyForHint = false;
                    if ( this.options['onMin'] ) this.options['onMin']('');
                }
            } else {
                this.isReadyForHint = true;
                if ( this.options['onHint'] ) this.options['onHint'](value);
            }
        }
        
    }
    
})
