var SelectMasterSlave = new Class({
    Implements: [Events, Options],
	options: {
        "masterClass": "master",
        "slaveClass": "slave",
        "loadClass": "load",
        "blankText": "Seleziona"
    },
    initialize: function(group, words, options){
        if ($defined(group) && $defined(words)) {
            if (group.length > 0) {
                this.setOptions(options);
                for(var i = 0; i < group.length;i++) {
                    var item = group[i];
                    if (item.hasClass(this.options.masterClass)) this.masterEl = item;
                    if (item.hasClass(this.options.slaveClass)) this.slaveEl = item;
                    if (item.hasClass(this.options.loadClass)) this.loadEl = item;
                }
                this.words = words;
                this.initWords();
                this.initMaster();
                this.initSlave();
                this.initLoad();
            }
        }
    },
    initWords: function() {
        
    },
    initMaster: function() {
        this.masterEl.addEvent("change",function(ev){
            this.applyValue(this.masterEl.get("value"));
        }.bind(this));
    },
    initSlave: function() {
        this.slaveEl.addEvent("change",function(ev){
            if (this.slaveEl.get("value") == "" || !$defined(this.slaveEl.get("value"))) {
                this.masterEl.set("value","");
            }
        }.bind(this));
    },
    initLoad: function() {
        if($defined($(this.loadEl))) this.loadEl.dispose();
    },
    applyValue: function(value) {
        if (value != "" && $defined(this.words[value])){
            var arr = this.words[value];
            if (arr.length > 0) {
                this.slaveEl.empty();
                new Element("option",{"value":"","text":this.options.blankText}).inject(this.slaveEl);
                for (var i = 0; i<arr.length;i++) {
                    new Element("option",{"value":arr[i][0],"text":arr[i][1]}).inject(this.slaveEl);
                }
            }
        } else {
	        this.slaveEl.empty();
	        new Element("option",{"value":"","text":this.options.blankText}).inject(this.slaveEl);
        }
    }
});
