window.EMPTYTEXT = true;

var EmptyTextStack = new function() {
    var elements = {};
    var elementConfig = {};
    var elementForms = {};
    
    var formIsSubmitted = function(e) {
        new Event(e).stop();
        var elements = this.retrieve('emptytext');
        if (elements.length) {
            for (var i = elements.length; i--;) {
                if (elements[i].get('value').trim() == elementConfig[elements[i].get('id')].text) {
                    elements[i].set('value', '');
                };
            };
        };
        this.removeEvent('submit', formIsSubmitted).submit();
    };
    
    var elementIsFocused = function(e) {
        var id = this.get('id');
        var value = this.get('value').trim();
        if (value == elementConfig[id].text) {
            this.set({
                value: '',
                styles: {
                    color: ''
                }
            });
        };
    };
    
    var elementIsBlured = function(e) {
        var id = this.get('id');
        var value = this.get('value').trim();
        if (!value.length) {
            this.set({
                value: elementConfig[id].text,
                styles: {
                    color: elementConfig[id].color
                }
            });
        }
    };
    
    this.addElement = function(id) {
        var element = $(id);
        var form = element.getParent('form');
        if (form) {
            if (!elementForms[form.uid]) {
                elementForms[form.uid] = form;
                form.addEvent('submit', formIsSubmitted);
                form.store('emptytext', []);
            }
            form.retrieve('emptytext').push(element);
        }
        var color = element.get('class').match(/empty-text-color-([^\s]+)/);
        if (color.length) {
            color = color[1];
        } else {
            color = '#cacaca';
        }
        var text = element.get('rel').trim();
        elementConfig[id] = {
            text: text,
            color: color
        };
        if (!element.get('value').trim().length) {
            element.set({
                value: text,
                styles: {
                    color: color
                }
            });
        };
        element.addEvents({
            focus: elementIsFocused,
            blur: elementIsBlured
        });
    };
    
    this.lookup = function() {
        window.addEvent('domready', function() {
            var elements = $$('.empty-text');
            for (var i = elements.length; i--;) {
                elements[i].set('id', 'el-' + elements[i].uid);
                EmptyTextStack.addElement('el-' + elements[i].uid);
            };
        });
    };
}
