// input hint in the input field (e.g. gray text)
function InputHintInner(node, text, className) {
    var
        thisRef = this,
        boolChangeAutocomplete = false
    ;
    function init() {
        node = jQuery('#' + node);
        if (!className) { className = 'withInputHint'; }
        
        var lstnFocus = function(e){return thisRef.lstnFocus(e);},
            lstnBlur  = function(e){return thisRef.lstnBlur(e);};
        
        node.focus(lstnFocus);
        node.blur(lstnBlur);
        node.bind('disable',lstnFocus);
        node.bind('enable',lstnBlur);
        
        if (node.length > 0 && node.get(0).form) {
            jQuery(node.get(0).form).submit(
                function(e){return thisRef.lstnSubmit(e);}
            );
        }
        
        if (!node.attr('autocomplete')) {
            boolChangeAutocomplete = true;
        }
        
        thisRef.show();
    }
    this.getNode = function() {
        return node;
    };
    this.getText = function() {
        return text;
    };
    this.getClass = function() {
        return className;
    };
    this.show = function() {
        if (!node.hasClass(className) &&
            node.val() == '' &&
            !node.is(':focus') &&
            !node.is(':disabled') &&
            !node.is('[readonly]')
        ) {
            if (boolChangeAutocomplete) {
                node.attr('autocomplete', 'off');
            }
            node.addClass(className);
            node.val(text);
        }
    };
    this.hide = function() {
        if (node.hasClass(className)) {
            node.val('');
            node.removeClass(className);
            if (boolChangeAutocomplete) {
                node.attr('autocomplete', 'on');
            }
        }
    };
    
    init();
    return this;
}
InputHintInner.prototype = {
    lstnFocus: function(e) {  this.hide(); },
    lstnBlur: function(e) {   this.show(); },
    lstnSubmit: function(e) { this.hide(); }
};

