if (!DGN) var DGN = { };

DGN.Selector = Class.create({
    initialize: function(name) {
        this.options = $('selector_'+name+'_options');
        this.input = $('selector_'+name+'_input');
        this.options.controller = this;

        this.options.childElements().each(function(item) {
            item.observe('click',this.onOptionClick.bindAsEventListener());
            if(Prototype.Browser.IE) {
                item.observe('mouseover',function () {this.addClassName('hover');});
                item.observe('mouseout',function () {this.removeClassName('hover');});
            }
            if(this.input.value == item.collectTextNodes().toLowerCase().strip()) {
                item.addClassName('selected');
            }
            if(item.hasClassName('selected')) {
                this.select(item);
            }
        },this);
    },
    select: function(element){
        this.options.childElements().each(function(item) {
            if(item.hasClassName('selected')) {
                item.removeClassName('selected');
            }
        })
        if(!element) {
            this.input.value = '';
            return;
        }
        // cross-browser issue
        this.input.value = element.collectTextNodes().toLowerCase();
        element.addClassName('selected');
    },
    onOptionClick: function(e) {
        e.target.parentNode.controller.select(e.target);
    }
});